![Slik installerer og konfigurerer du pfSense 2.1.5 (brannmur/ruter) for ditt hjem-/kontornettverk](/f/a3485a4e8676580fee27781659d82c1f.png?width=100&height=100)
I dette Del 5 av Ansible Series, vil vi forklare hvordan du lager Ansible Plays og Lekebøker ved å bruke Ansible -moduler.
Ansible skip med frittstående skript kalt moduler som brukes i lekebøker for utførelse av spesialiserte oppgaver på eksterne noder.
Moduler komme godt med for å automatisere oppgaver som f.eks pakkehåndtering, arkivering og kopiering av filer for bare å nevne noen. De lar deg gjøre justeringer på konfigurasjonsfiler og administrere enheter som rutere, svitsjer, lastbalansere, brannmurer og en rekke andre enheter.
Målet med dette delemnet er å gi deg en oversikt over ulike oppgaver som kan utføres av Ansvarlige moduler:
Pakkehåndtering er en av de mest essensielle og hyppige oppgavene som utføres av systemadministratorer. Ansible leveres med moduler som hjelper deg med å utføre pakkehåndteringsoppgaver både i Rød hatt og Debian baserte systemer.
De er relativt enkle å gjette. Det er passende modul til APT -pakkehåndtering for Debian basert, den gamle yum modul til YUM pakkehåndtering og dnf -modul knyttet til nyere RHEL -distribusjoner.
Nedenfor er noen eksempler på hvordan modulene kan brukes i en lekebok:
- navn: installer Apache webserver -verter: webserveroppgaver: - navn: installer httpd dnf: navn: httpd State: siste.
- navn: installer Apache webserver -verter: databaser oppgaver: - navn: installer Apache webserver apt: navn: apache2 Tilstand: siste.
Tjenestemodulen lar systemadministratorer starte, stoppe, oppdatere, oppgradere og laste inn tjenester på systemet igjen.
- navn: Start tjenesten httpd, hvis ikke startet tjenesten: navn: httpd tilstand: startet.
- navn: Stopp tjeneste httpd tjeneste: navn: httpd tilstand: stoppet.
- navn: Start nettverkstjenesten på nytt for grensesnittet eth0 -tjeneste: navn: nettverkstilstand: omstartede args: enp2s0.
Som navnet antyder, kopierer modulen kopier av filer fra ett sted på den eksterne maskinen til et annet sted på den samme maskinen.
- navn: Kopier fil med eier og tillatelser kopi: src: /etc/files/tecmint.conf dest: /srv/tecmint.conf eier: tecmint group: tecmint mode: '0644'
Lekeboken kopierer konfigurasjonsfilen tecmint.conf fra /etc/files/ katalog til /srv/ katalog som tecmint bruker med 0644 tillatelser.
Tillatelser kan også representeres ved hjelp av symbolsk representasjon som vist på siste linje.
- navn: Kopier fil med eier og tillatelser kopi: src: /etc/files/tecmint.conf dest: /srv/tecmint.conf eier: tecmint group: tecmint mode: u = rw, g = r, o = r.
Tillatelsene i forrige eksempel kan representeres som vist på siste linje, Brukeren er tildelt lese og skrive tillatelser, tildeles gruppen skrivetillatelser, og resten av verden tildeles lesetillatelser.
De filmodul brukes til å utføre mange filoperasjoner, inkludert å lage filer og kataloger, tildele filtillatelser og sette symlinks.
- navn: Endre fil eierskap, gruppe og tillatelser fil: bane: /etc/tecmint.conf eier: tecmint group: tecmint mode: '0644'
Spillet ovenfor oppretter en fil som heter tecmint.conf i /etc kataloginnstillingstillatelser til 0644.
- navn: Fjern fil (slett fil) fil: bane: /etc/tecmint.conf tilstand: fraværende.
Dette fjerner eller sletter filen tecmint.conf.
- navn: opprett en katalog hvis den ikke finnes fil: bane: /etc /mydirectory State: katalogmodus: '0777'
Dette vil opprette en katalog i /etc kataloginnstillingstillatelser til 0777.
- navn: Slette rekursivt en katalogfil: bane: /etc/tecmint.conf tilstand: fraværende.
Spillet ovenfor sletter en katalog rekursivt.
De linjeinfil modulen er nyttig når du vil endre en enkelt linje i en fil. Den kan erstatte en eksisterende linje.
- navn: Sørg for at SELinux er satt til å håndheve modus lineinfile: path:/etc/selinux/config regexp: '^SELINUX =' line: SELINUX = deaktivert.
Stykket ovenfor setter SELINUX verdi til funksjonshemmet.
SELINUX = deaktivert.
- navn: Legg til en linje i en fil hvis filen ikke finnes, uten å passere regexp lineinfile: path: /etc /hosts line: 10.200.50.51 tecmint.com create: yes.
Dette legger til oppføringen 10.200.50.51tecmint.com til /etc/hosts fil.
An Arkiv modul brukes til å lage et komprimert arkiv med en eller flere filer. Det forutsetter at komprimeringskilden finnes på måldestinasjonen. Etter arkivering kan kildefilen senere slettes eller fjernes ved hjelp av setningen remove = True
.
- navn: Komprimer katalog/bane/til/tecmint_dir/inn /path/to/tecmint.tgz arkiv: bane: /path/to/tecmint_dir dest: /path/to/tecmint.tgz Dette komprimerer katalogen/path/to/tecmint_dir til /path/to/tecmint.tgz.
- navn: Komprimer vanlig fil/bane/til/tecmint til /path/to/foo.gz og fjern den arkiv: path:/path/to/tecmint dest: /path/to/tecmint.tgz remove: yes.
I avspillingen ovenfor, kildefilen /path/to/tecmint slettes etter at arkiveringen er fullført.
- navn: Lag et bz2 -arkiv med/path/to/tecmint -arkiv: path:/path/to/tecmint -format: bz2.
Dette oppretter en komprimert fil i bz2 format fra /path/to/tecmint fil.
Modulen administrerer git -kasser av programvarelager.
- git: repo: ' https://foosball.example.org/path/to/repo.git' dest: /srv /betalingsversjon: release-0.22.
En av de mest brukte modulene, kommando modul tar kommandoenavnet og senere etterfulgt av en liste med argumenter. Kommandoen sendes på samme måte som du ville skrive inn et Linux -skall.
- navn: Utføre en kommando ved hjelp av kommandomodulkommandoen: cat helloworld.txt.
- navn: Kontroller ekstern vertstid for oppetid: serveroppgaver: - navn: Utfør Uptime -kommandoen over kommandomodulregisteret: uptimeoutput -kommando: "uptime" - debug: var: uptimeoutput.stdout_lines.
Kommandomodulen henter oppetid for eksterne servere.
Som oftest, Ansible spillbøker brukes til å utføre oppgaver på administrerte verter uten å vise utdataene på kommandolinjen. Det er imidlertid tilfeller at du kan bli pålagt å fange utgangen eller resultatene. I denne delen går vi gjennom hvordan du kan fange utspillet fra en spillbok i en variabel og senere vise den.
Et ansvarsfullt register brukes til å fange oppgavens utdata og lagre den en variabel. Variabelen vil deretter inneholde oppgaven.
La oss for eksempel anta at du vil kontrollere diskbruken av administrerte noder i respektive rotkataloger ved hjelp av df -Th /
kommando. Du kommer til å bruke 'kommando'
modul for å definere kommandoen og 'registrere'
for å lagre std -utgangen i en variabel.
For å vise kommandoen, bruker du 'Feilsøk'
modul ved siden av stdout returverdi.
- verter: alle blir: ja oppgaver: - navn: Utfør /oppstartsbruk på Hosts -kommando: 'df -Th /' register: df - debug: var = df.stdout.
La oss kjøre lekeboken. I dette tilfellet har vi navngitt lekeboken vår check_disk_space.yml.
# ansible-playbook check_disk_space.yml.
Som du har sett, er utgangen alt sammen blandet og gjør det vanskelig å følge med.
For å justere utskriften og gjøre den lettere å lese, erstatt stdout returverdi med stdout_lines.
- verter: alle blir: ja oppgaver: - navn: Utfør /oppstartsbruk på Hosts -kommando: 'df -Th /' register: df - debug: var = df.stdout_lines.
Akkurat som i programmeringsspråk, betingede utsagn brukes når mer enn ett resultat er mulig. La oss se på noen av de ofte brukte betingede utsagnene i Ansible playbooks.
Noen ganger vil du kanskje utføre oppgaver på bestemte noder og ikke andre. De 'når'
betinget uttalelse er ganske enkel å bruke og implementere i en spillebok. Når du bruker 'når'
klausulen erklærer ganske enkelt tilstanden ved siden av klausulen som vist:
når: tilstand.
Når betingelsen er oppfylt, utføres oppgaven på det eksterne systemet.
La oss se på noen eksempler:
- verter: alle oppgaver: - navn: Installer Nginx på Debian apt: name = nginx state = present når: ansible_os_family == “Debian”
Stykket ovenfor installeres Nginx webserver på verter som driver Debian -familien til distroer.
Du kan også bruke ELLER
og OG
operatør ved siden av når den betingede uttalelsen.
- verter: alle oppgaver: - navn: Installer Nginx på Debian apt: name = nginx state = present når: ansible_os_family == “Debian” og ansible_distribution_version == “18.04”
Når du bruker OG
operatør, må begge utsagnene være tilfredse for at oppgaven skal kunne utføres.
Spillet ovenfor installerer Nginx på Noder som kjører en Debian -familie med operativsystem som er versjon 18.04. Dette er åpenbart Ubuntu 18.04.
Med ELLER
operatør, utføres oppgaven hvis noen av betingelsene er oppfylt.
- verter: alle oppgaver: - navn: Installer Nginx på Debian apt: name = nginx state = present når: ansible_os_family == “Debian” eller Ansible_os_family == “SUSE”
Spillet ovenfor installerer Nginx webservere på enten Debian eller SUSE -familien til OS eller begge.
MERK: Sørg alltid for å bruke det dobbelte likestillingstegnet ==
når du tester en tilstand.
Betingelser kan også brukes i en loop. Si for eksempel at du har en liste over flere pakker som må installeres på eksterne noder.
I spillboken nedenfor har vi en matrise kalt pakker som inneholder en liste over pakker som må installeres. Disse oppgavene vil bli utført etter hverandre hvis nødvendig klausulen er satt til ekte.
- navn: Installer programvarepakker verter: alle vars: pakker: • navn: nginx. nødvendig: True • navn: mysql. nødvendig: True • navn: apache. påkrevd: Falske oppgaver: • navn: Installer “{{item.name}}” på Debian. apt: name: “{{item.name}}” state: present When: item.required == True. loop: "{{packages}}"
Noen ganger mislykkes oppgaver når du kjører spillbøker. La oss anta at du kjører 5 oppgaver på 3 servere som vist i spillboken nedenfor. Hvis det oppstår en feil på oppgave 3 (Starter MySQL) på server 2, vil Ansible slutte å utføre de resterende oppgavene på server 2 og prøve å fullføre de gjenværende oppgavene på resten av serverne.
- navn: Installer programvarepakker verter: server1, server2, server3 oppgaver: - navn: Installer avhengigheter. << noen kode >> - navn: Installer MySQL -database. << noen kode >> - navn: Start MySQL. << noen kode >> - navn: Installer Nginx. << noen kode >> - navn: Start Nginx. << noen kode >>
Hvis du vil ha konsistens i utførelsen av spillboken, for eksempel stoppe kjøringen av en spillbok, hvis en av serverne mislykkes, legg til alternativet.
- navn: Installer programvarepakker verter: server1, server2, server3 any_errors_fatal: true oppgaver:
På denne måten, hvis en oppgave mislykkes på en server, vil Ansible stoppe utførelsen av hele spillboken på alle serverne og avslutte.
Hvis du vil at spillboka skal ignorere feilene og fortsette å utføre det gjenværende settet med oppgaver, bruker du ignore_errors: True alternativ.
- navn: Installer programvarepakker verter: server1, server2, server3 oppgaver: - navn: Installer avhengigheter. << noen kode >> ignore_errors: True
I denne delen ser vi på noen flere alternativer som er tilgjengelige når du kjører en spillbok.
La oss begynne med Kryss av modus eller Tørrløp alternativ. Alternativet for tørrkjøring eller sjekkmodus brukes når du kjører en spillbok for å sjekke om det oppstår feil og om det er noen endringer som vil bli gjort på de administrerte vertene. Det gjør imidlertid ingen endringer i de eksterne nodene.
For eksempel, for å tørke kjøre en spillbok som heter httpd.yml
som installerer og starter Apache webserver kjøring:
# ansible-playbook httpd.yml-sjekk.
Det andre alternativet vi må se på er -start-at-task
alternativ. Dette brukes når du angir navnet på oppgaven som lekeboken skal begynne eller starte med.
La oss ta et eksempel: Spillboken nedenfor beskriver to oppgaver: Den første avspillingen installerer Apache -webserveren og den andre installasjonen htop verktøy.
- navn: Installer httpd -verter: alle oppgaver: yum: navn: httpd -tilstand: Installert - navn: Installer htop yum: navn: htop -tilstand: startet.
Hvis du vil hoppe over å installere Apache webserver og i stedet installere htop utility run:
# ansible-playbook playbook.yml-start-at-task “Installer htop”
Til slutt kan du merke oppgavene eller spillene dine ved å legge til tagger alternativet til spillboken din som vist. Dette kommer godt med når du har en ganske stor spillbok og du vil kjøre spesifikke oppgaver fra hele spillboken.
- navn: Installer httpd tags: Installer og start verter: alle oppgaver: yum: navn: httpd -tilstand: Installert tagger: Installer • service: navn: httpd. tilstand: startet.
# ansible -playbook playbook.yml -tags "Installer"
For å utelate taggene, bruk -skip-tags
alternativer som vist.
# ansible-playbook playbook.yml --skip-tags "Install"
I dette emnet tok vi deg gjennom de ofte brukte modulene i Ansible, hvordan du henter stdout fra utførelsen av en spillbok for analyse, bruker betingelser i spillboken og hvordan du håndterer feil som kan oppstå når du kjører oppgaver. Til slutt tok vi igjen konfigurasjonen av spillbøker og hvordan du kan bruke flere alternativer for å bestemme hvilke oppgaver du skal kjøre hvis du ikke har tenkt å kjøre hele spillboken.