Difference between revisions of "Drift/Salt"

From Programvareverkstedet
Jump to navigation Jump to search
(added more details on how distributing folders work)
(Added section for information on common errors, and information on an hour that cumulatively has wasted probably a couple of hours of my life...)
Line 110: Line 110:
 
<code><nowiki>salt '*' state.highstate</nowiki></code><br>
 
<code><nowiki>salt '*' state.highstate</nowiki></code><br>
 
på salt-master.
 
på salt-master.
 +
 +
== Behandlig av errors og feilmeldinger som kan dukke opp ofte ==
 +
 +
Hvis du får feilen:<br>
 +
<code><nowiki>No matching sls found for 'sls_file_or_folder_name' in env 'base'</nowiki></code><br>
 +
Så har du sannsynligvis skrevet <code><nowiki>filnavn.sls</nowiki></code> (må være uten <code><nowiki>.sls</nowiki></code>), eller mappenavnet feil.
  
 
== Nyttige kommandoer og syntax ==
 
== Nyttige kommandoer og syntax ==

Revision as of 23:23, 20 September 2015

Salt er, som Drift/Puppet, et system for å distribuere filer og sørge for at maskiner har samme oppsett.

Sette opp ny salt minion

Installasjon

$ apt-get install salt-minion
$ ssh root@salt.pvv.ntnu.no
salt-master# salt-key -L
salt-master# salt-key -a hostname.pvv.ntnu.no
salt-master# salt '*' test.ping

Hvis alt har har gått bra, vil pingtesten gi true for maskinen din nå. Hvis ikke, kjør service salt-minion status som root på din nye minion for å få hint om hva som er galt. Konfigurasjonsfilen til salt ligger i /etc/salt/minion.

Et kjent problem er at dns-oppsettet vårt ikke lar salt-minion finne salt-masteren vår med standardinnstillingene. Løsningen på dette er å legge til master: lommel i /etc/salt/minion.

I tilfellet man endrer hostname på en minion, gjør følgende for å få det oppdatert i salt: Stop salt-minion på den berørte maskinen. Slett nøkkelen til maskinen fra salt-master ved å kjøre salt-key -d minion_id på salt-masteren. Slett /etc/salt/minion/minion_id. Start salt-minion service-en. Autoriser den nye nøkkelen med det nye navnet i salt-master.

Husk å legge nyoppsatte maskiner til i riktige grains (grupper).

Legge til nye filer

Salt sin autmagi fungerer best når filer ligger i /srv/salt/ på master. For å spesifisere hvilken fil det er man har lyst til å bruke i kommandoer refferer til dem med salt://path/in/srv/salt.

Distribuere mapper

Lag en overordnet mappe som inneholder både mappen du ønsker å distribuere og en sls-fil i salt-mappen: /srv/salt/overordnet_mappe. Der legger du mappen du ønsker å distribuere, og lager en fil du kaller for init.sls. Den formateres slik:

/path/til/der/du/vil/at/mappen/skal/ende/opp/på/minions
 file.recurse:
  - source: salt://overornet_mappe/mappen_du_vil_distribuere
#optional felter:
  - include_empty: True #sørger for at tomme undermapper kommer med 
  - dir_mode: 777 #må bruke dir_mode når man dister mapper, bruk mode: hvis du dister filer
  - user: brukernavn #hilken bruker skal mappen, undermapper og filer tilhøre
  - group: eall_s #default-gruppen er root. Skal mappen tilhøre noen andre bruk eall_s eksplisitt

For å så få distribuert mappen kjør følgende kommando: salt '*' state.sls overordnet_mappe

Grains

Salt kan bruke grains for å gjøre noe på en gruppe med maskiner. salt 'hostname*' grains.items viser alle grains hostname er med i. For eksempel kan man si salt -G 'os_familt:Debian' test.ping for å pinge maskiner som er basert på Debian.

For å legge en minion til en gruppe gjør følgende på minion-en:

Konfigurasjon

$ vim /etc/salt/grains

roles:
  - workstations
  - typing_machine

Når minions har blitt lagt til i roller er det viktig å huske på å synkronisere disse med masteren. Den letteste måten å gjøre det på er å kjøre salt '*' saltutil.sync_grains fra salt-masteren.

For å nå maskiner gjennom egendefinerte grains bruk salt -G 'attributt:verdi' kommando. Et eksempel er salt -G 'roles:workstation' test.ping.

States og håndheving

Salt oppererer med SLS filer (SaLt State) for å holde orden på reglene for distribusjon og hvordan disse skal håndheves. Legg SLS filene i /srv/salt/. En av de viktigste SLS filene er /srv/salt/top.sls da den spesifiserer hvilke SLS filer som skal anvendes på hvilke minions. (Alle sls-filene er på salt-master.)

For eksempel hvis vi har SLS filene:

/srv/salt/top.sls
/srv/salt/common/init.sls
/srv/salt/common/packages.sls
/srv/salt/sl_eksempel.sls

La så filene se slik ut:

#top.sls:
base:
  '*':
    - common
  'roles:desktop':
    - match: grain
    - sl_eksempel
#common/init.sls:
include:
  - common.packages
#common/packages.sls:
vim:
  pkg:
    - installed
grep:
  pkg:
    - installed
#sl_eksempel.sls:
sl:
  pkg:
    - installed

Hva filene sier:

  • top.sls sier at at alle maskiner skal få staten som er spesifisert i 'common'. Siden 'common' er en mappe og ikke en SLS fil vil det implisitt bety at staten som er gitt i common/init.sls brukes istedenfor.
    • Den sier også at alle maskiner som matcher grainen roles:desktop skal ha staten spesifisert i sl_eksempel.sls
  • common/init.sls starter med å ved includen si at alt som er i /srv/salt/common/packages også skal kjøres i tillegg til innholdet den har (som for dette eksempelet er ikke noe mer)
  • packages.sls sier at to pakker, vim og grep, skal være installert på alle maskiner som hører til staten.
  • sl_eksempel.sls sier at pakken sl skal være installert.

For at minionsene skal gå inn å sjekke hvilke states de skal ha, og anvende dem, kjør:
salt '*' state.highstate
på salt-master.

Behandlig av errors og feilmeldinger som kan dukke opp ofte

Hvis du får feilen:
No matching sls found for 'sls_file_or_folder_name' in env 'base'
Så har du sannsynligvis skrevet filnavn.sls (må være uten .sls), eller mappenavnet feil.

Nyttige kommandoer og syntax

Viktig om syntax:

  • All indentering er med mellomrom da tabs ser ut til å krasje, to ser ut til å være standard

Hvordan kopiere enkeltfiler ad-hoc fra salt-master til minions:
salt-cp "*" /path/to/file/on/salt/master /path/to/file/on/minions

Hvordan kjøre kode på minions:
salt "*" cmd.run "ps -e | grep salt"

For å kjøre på enkeltmaskiner istedenfor alle eller grains skriv inn navnet istedenfor "*". Eksempel:
salt maskinnavn.pvv.ntnu.no cmd.run "ps -e | grep salt"

For å sjekke om en pakke er installer og hvilken versjon den har:
salt "*" pkg.version "grep"

For å installere eller oppgradere en pakke:
salt maskinnavn.pvv.ntnu.no pkg.install sl

For å avinstallere en pakke:
salt maskinnavn.pvv.ntnu.no pkg.remove sl

For å se salt-pkg kommandoer:
salt maskinnavn.pvv.ntnu.no pkg. og spam tab.