Drift/Salt: Difference between revisions
(Added section for information on common errors, and information on an hour that cumulatively has wasted probably a couple of hours of my life...) |
(Improved the initial configuration-part to be more contemporary, and added some information on how to configure the salt-minion to regulairly poll for updates from the master) |
||
Line 4: | Line 4: | ||
=== Installasjon === | === Installasjon === | ||
<pre>$ apt-get install salt-minion | <pre> | ||
$ ssh root@salt.pvv.ntnu.no | ny-minion$ apt-get install salt-minion | ||
ny-minion$ rediger /etc/salt/minion og legg til: "master: lommel.pvv.ntnu.no" | |||
ny-minion$ service salt-minion restart | |||
ny-minion$ ssh root@salt.pvv.ntnu.no | |||
salt-master# salt-key -L | salt-master# salt-key -L | ||
salt-master# salt-key -a hostname.pvv.ntnu.no | salt-master# salt-key -a hostname.pvv.ntnu.no | ||
salt-master# salt | salt-master# salt hostname.pvv.ntnu.no state.sls minion_configuration | ||
</pre> | </pre> | ||
Line 110: | Line 113: | ||
<code><nowiki>salt '*' state.highstate</nowiki></code><br> | <code><nowiki>salt '*' state.highstate</nowiki></code><br> | ||
på salt-master. | på salt-master. | ||
=== Sørg for at Salt-minion er kjørende og at den jevnlig poller om nye ting fra master === | |||
Lag en mappe <code><nowiki>/srv/salt/minion_configuration</nowiki></code> som inneholder en <code><nowiki>init.sls</nowiki></code> fil og en <code><nowiki>minion</nowiki></code> fil. La <code><nowiki>init.sls</nowiki></code> se slik ut: | |||
<pre> | |||
salt-minion: # sier at det er salt-minion servicen vi påvirker | |||
service: | |||
# sier at den skal være kjørende: | |||
- running | |||
- enable: True | |||
# sier at servicen skal restartes om man merker en endring i den oppgitte filen: | |||
- watch: | |||
- file /etc/salt/minion | |||
/etc/salt/minion: #sier at denne filen skal speile den oppgitte fra master | |||
file.managed: | |||
# filen som skal kopieres over til minionen | |||
- source salt://minion_configuration/minion | |||
# bruker, gruppe, og premissions for filen når den ender opp på minionen: | |||
- user: root | |||
- group: root | |||
- mode: 644 | |||
# sier at filen er et jinjatemplate, og at variablene i templatet skal byttes ut | |||
# med verdiene gitt for dem i context-seksjonen: | |||
- template: jinja | |||
- context: | |||
saltmaster: lommel.pvv.ntnu.no | |||
timer: 4 | |||
</pre> | |||
Kopier så inn en minion-fil til <code><nowiki>/srv/salt/minion_configuration/minion</nowiki></code>, og legg til disse linjene: | |||
<pre> | |||
#sett inn under "#master: salt" eller istedenfor det som måtte stå på på linjen som begynner med "master:" | |||
master: {{saltmaster}} | |||
#sier at highstate skal schedules til å kjøre hver 'timer' time: | |||
schedule: | |||
highstate: | |||
function: state.highstate | |||
hours: {{ timer }} | |||
</pre> | |||
== Behandlig av errors og feilmeldinger som kan dukke opp ofte == | == Behandlig av errors og feilmeldinger som kan dukke opp ofte == |
Revision as of 11:40, 21 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
ny-minion$ apt-get install salt-minion ny-minion$ rediger /etc/salt/minion og legg til: "master: lommel.pvv.ntnu.no" ny-minion$ service salt-minion restart ny-minion$ ssh root@salt.pvv.ntnu.no salt-master# salt-key -L salt-master# salt-key -a hostname.pvv.ntnu.no salt-master# salt hostname.pvv.ntnu.no state.sls minion_configuration
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 icommon/init.sls
brukes istedenfor.- Den sier også at alle maskiner som matcher grainen
roles:desktop
skal ha staten spesifisert isl_eksempel.sls
- Den sier også at alle maskiner som matcher grainen
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.
Sørg for at Salt-minion er kjørende og at den jevnlig poller om nye ting fra master
Lag en mappe /srv/salt/minion_configuration
som inneholder en init.sls
fil og en minion
fil. La init.sls
se slik ut:
salt-minion: # sier at det er salt-minion servicen vi påvirker service: # sier at den skal være kjørende: - running - enable: True # sier at servicen skal restartes om man merker en endring i den oppgitte filen: - watch: - file /etc/salt/minion /etc/salt/minion: #sier at denne filen skal speile den oppgitte fra master file.managed: # filen som skal kopieres over til minionen - source salt://minion_configuration/minion # bruker, gruppe, og premissions for filen når den ender opp på minionen: - user: root - group: root - mode: 644 # sier at filen er et jinjatemplate, og at variablene i templatet skal byttes ut # med verdiene gitt for dem i context-seksjonen: - template: jinja - context: saltmaster: lommel.pvv.ntnu.no timer: 4
Kopier så inn en minion-fil til /srv/salt/minion_configuration/minion
, og legg til disse linjene:
#sett inn under "#master: salt" eller istedenfor det som måtte stå på på linjen som begynner med "master:" master: {{saltmaster}} #sier at highstate skal schedules til å kjøre hver 'timer' time: schedule: highstate: function: state.highstate hours: {{ timer }}
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.