Hvordan bruke Ansible Register Module

Hvordan bruke Ansible Register Module
I Ansible kan du kjøre hvilken som helst Shell -kommando på dine Ansible -verter, vertene du vil konfigurere med Ansible. Disse skallkommandoene kan ha utganger. Som standard blir utgangen ignorert. Hvis du vil lagre utdataene i en variabel og bruke den senere, kan du bruke Ansible registrere modul. Denne artikkelen vil vise deg hvordan du bruker Ansible registrere Modul for å lagre kommandoproduksjonen i en variabel og få tilgang til den senere i Ansible Playbook.

Forutsetninger

Hvis du vil prøve eksemplene i denne artikkelen, må du:

1) Har Ansible installert på datamaskinen din.

2) La en Ubuntu -vert konfigurert for ansettbar automatisering.

Det er mange artikler om Linuxhint dedikert til å installere Ansible og konfigurere verter for Ansible Automation. Du kan sjekke ut disse artiklene om nødvendig.

Sette opp en prosjektkatalog

Før du går videre, kan du sette opp en ny Ansible Project Directory, bare for å holde ting litt organisert.

For å opprette prosjektkatalogen Register-Demo/ Og alle nødvendige underkataloger (i din nåværende arbeidskatalog), kjør følgende kommando:

$ mkdir -pv register -demo/playbooks

Når prosjektkatalogen er opprettet, navigerer du til prosjektkatalogen, som følger:

$ CD Register-Demo/

Lage en verter Lagerfil, som følger:

$ Nano -verter

Legg til verten IP eller DNS -navn på Ubuntu -verten din i inventarfilen (en vert per linje), som vist på skjermdumpen nedenfor.

Her har jeg lagt Ubuntu 20.04 LTS -vert VM3.Nodekite.com i Ubuntu20 gruppe.

Når du er ferdig, lagre filen ved å trykke på + X, etterfulgt av Y og .

Opprett en Ansible konfigurasjonsfil Ansible.CFG I prosjektkatalogen din, som følger:

$ Nano Ansible.CFG

Deretter skriver du inn følgende linjer i Ansible.CFG fil:

[standardverdier]
Inventory = verter
host_key_checking = falsk

Når du er ferdig, kan du lagre Ansible.CFG fil ved å trykke på + X, etterfulgt av Y og .

Prøv nå å pinge Ubuntu -verten din, som følger:

$ ansible ubuntu20 -u ansible -m ping

Som du kan se, min Ubuntu 20.04 Vert VM3.Nodekite.com er tilgjengelig.

Eksempel 1: Det grunnleggende

I dette eksemplet vil jeg vise deg noe av det grunnleggende i Ansible registrere modul. Jeg vil bruke Ansible til å generere et tilfeldig passord i Ubuntu 20.04 Vert ved hjelp av PWGEN Kommando, lagre passordet i en variabel ved hjelp av registrere modulen, og skriv ut passordet på skjermen.

Først må du lage den nye spillboken generere_pass.Yaml i Playbooks/ Katalog, som følger:

$ nano playbooks/generate_pass.Yaml

Skriv inn følgende linjer i generere_pass.Yaml fil:

- Verter: Ubuntu20
Bruker: Ansible
bli: sant
oppgaver:
- Navn: Forsikre deg om at PWGen er installert
apt:
Navn: PWGen
Stat: Nåværende
Update_cache: sant
- Navn: Generer passord
Shell: PWGen -n 1 -s 30
Register: MyPass
- Navn: Skriv ut det genererte passordet
Debug:
MSG: "Passordet er mypass"

Når du er ferdig, trykk + X, etterfulgt av Y og , For å redde generere_pass.Yaml fil.

Følgende linje ber Ansible om å kjøre spillboken generere_pass.Yaml på hver vert i Ubuntu20 gruppe. I mitt tilfelle blir spillboken kjørt på verten VM3.Nodekite.com.

I denne spillboken vil jeg definere tre oppgaver.

Den første oppgaven vil sette i gang at PWGEN Pakken er installert.

Den andre oppgaven vil generere et tilfeldig, 30-tegn passord ved å bruke PWGEN kommando. Jeg vil bruke registrere modul for å lagre det genererte passordet i mypass variabel.

Den tredje oppgaven vil skrive ut mypass variabel ved hjelp av Ansible feilsøking modul.

Kjør lekeboken generere_pass.Yaml Bruke følgende kommando:

$ Ansible-Playbook Playbooks/Generate_pass.Yaml

Som du ser kjørte spillboken vellykket. Et passord er også generert.

Men hvorfor gjorde variabelen mypass Skriv ut så mange elementer?

Vel, variabelen mypass er et objekt som inneholder noen viktige egenskaper.

De viktigste egenskapene til hver av registrere Variabler er som følger:

CMD - Kommandoen som kjørte for å generere utgangen.

stdout - Utgangen fra kommandoen.

Stderr - Feilutgangen til kommandoen.

start - Datoen og klokkeslettet da kommandoen begynte å utføre.

slutt - Datoen og klokkeslettet da kommandoen var ferdig med utførelse.

Delta - Tiden det tar å kjøre kommandoen. Dette er forskjellen mellom slutt og start egenskaper.

stdout_lines - En matrise som inneholder hver utgangslinje i kommandoen. Samme som stdout, men stdout skiller linjene ved hjelp av en Newline (\ n) tegn i stedet for matriser.

stderr_lines - En matrise som inneholder hver feilutgangslinje for kommandoen. Samme som Stderr, men Stderr skiller linjene ved hjelp av Newlines (\ n) tegn i stedet for matriser.

Hvis du bare vil skrive ut/få tilgang til passordstrengen (som er veldig sannsynlig), kan du skrive ut/få tilgang til stdout eiendom til mypass Variabel i spillboken din, som merket i skjermdumpen nedenfor.

$ nano playbooks/generate_pass.Yaml

Når du er ferdig, kjører du spillboken generere_pass.Yaml en gang til. Bare passordstrengen vil bli skrevet ut, som du kan se på skjermdumpen nedenfor.

Som dekker det grunnleggende i Ansible registrere modul.

Eksempel 2: Butikkkataloginnhold

I dette eksemplet vil jeg vise deg hvordan du lagrer innholdet i en katalog i en variabel ved hjelp av Ansible registrere modul, samt hvordan du kan iterere over dem.

Først må du lage den nye spillboken get_dir_contents.Yaml i Playbooks/ katalog.

$ nano playbooks/get_dir_contents.Yaml

Deretter skriver du inn følgende linjer i get_dir_contents.Yaml Playbook:

- Verter: Ubuntu20
Bruker: Ansible
bli: sant
oppgaver:
- Navn: Liste opp alle filer og kataloger i /Hjem /Ansible
Shell: LS /Home /Ansible
Register: Dir_contents
- Navn: Utskriftskataloginnhold ved hjelp av løkker
Debug:
msg: "item"
loop: "dir_contents.stdout_lines "

Når du er ferdig, trykk + X, etterfulgt av Y og , For å redde generere_pass.Yaml fil.

I denne spillboken vil jeg definere to oppgaver.

Den første oppgaven viser alt innholdet i /Hjem/Ansible katalog og lagrer dem i dir_contents variabel.

Den andre oppgaven skriver ut dir_contents variabel.

Kjør get_dir_contents.Yaml Playbook, som følger.

$ Ansible-Playbook Playbooks/get_dir_contents.Yaml

Som du kan se, stdout_lines Eiendom lagret kataloginnholdet som en matrise. De stdout Eiendom er også lagret i kataloginnholdet. Disse egenskapene er atskilt med Newline (\ n) tegn. I dette eksemplet stdout_lines Eiendom er lett å jobbe med.

Neste, iterere over kataloginnholdet ved hjelp av en loop.

For å gjøre dette, åpne get_dir_contents.Yaml Playbook og endre den andre oppgaven, som merket i skjermdumpen nedenfor.

$ nano playbooks/get_dir_contents.Yaml

Her itererer jeg over dir_contents.stdout_lines matrise ved hjelp av en sløyfe og skrive ut array -elementene ved hjelp av Ansible feilsøking modul. I denne oppgaven, punkt Variabel er en løkkevariabel som brukes til å iterere over matriseelementene.

Kjør get_dir_contents.Yaml Playbook, som følger:

$ Ansible-Playbook Playbooks/get_dir_contents.Yaml

Som du kan se, innholdet i /Hjem/Ansible Katalogen skrives ut på skjermen.

Eksempel 3: Sikkerhetskopier katalogen

I dette eksemplet vil jeg vise deg hvordan du kan sikkerhetskopiere en katalog ved hjelp av Ansible registrere, fil, og kopiere moduler.

Først må du lage den nye spillboken Backup_home_dir.Yaml i Playbooks/ Katalog, som følger:

$ nano playbooks/backup_home_dir.Yaml

Deretter skriver du inn følgende linjer i Backup_home_dir.Yaml fil.

- Verter: Ubuntu20
Bruker: Ansible
bli: sant
oppgaver:
- Navn: Få hjemkatalog /hjemme /skivelig innhold
Shell: LS /Home /Ansible
Register: Dir_contents
- Navn: Opprett en ny katalog /TMP /Ansible
fil:
Sti: /TMP /Ansible
Tilstand: Katalog
- Navn: Backup Home Directory /Home /Ansible til /TMP /Ansible
kopiere:
src:/home/ansible/item
dest:/tmp/ansible/
Remote_src: True
loop: "dir_contents.stdout_lines

Når du er ferdig, trykk + X, etterfulgt av Y og , For å redde Backup_home_dir.Yaml fil.

I denne spillboken vil jeg definere tre oppgaver.

Den første oppgaven lagrer innholdet i /Hjem/Ansible Katalog (katalogen jeg skal sikkerhetskopiere) i dir_contents variabel ved hjelp av Ansible registrere modul.

Den andre oppgaven oppretter en ny katalog /TMP/Ansible Bruke Ansible fil modul. Dette er katalogen der sikkerhetskopien vil bli lagret.

Den tredje oppgaven sløyer seg gjennom dir_contents.stdout_lines matrise og bruker Ansible kopiere modul for å kopiere hver katalog til /TMP/Ansible/ katalog.

Kjør Backup_home_dir.Yaml Playbook, som følger:

$ Ansible-Playbook Playbooks/Backup_Home_Dir.Yaml

Som du kan se, på min Ubuntu 20.04 LTS -vert, sikkerhetskopien var vellykket.

Eksempel 4: Kjør eller hopp over oppgaver

I dette eksemplet vil jeg vise deg hvordan du skal kjøre eller hoppe over oppgaver, avhengig av variabelen du har registrert, ved å bruke registrere modul.

Først må du lage den nye spillboken register_conditions.Yaml i Playbooks/ Katalog som følger:

$ nano playbooks/register_conditions.Yaml

Deretter skriver du inn følgende linjer i register_conditions.Yaml fil.

- Verter: Ubuntu20
Bruker: Ansible
bli: sant
oppgaver:
- Navn: Listeskataloginnhold
Shell: LS/Home/Ansible/Test3
Register: Dir_contents
- Navn: Sjekk om katalogen er tom
Debug:
MSG: "Katalogen er tom.""
Når: dir_contents.stdout == ""

Når du er ferdig, trykk + X, etterfulgt av Y og , For å redde register_conditions.Yaml fil.

I denne spillboken har jeg definert to oppgaver.

Den første oppgaven lagrer innholdet i /Hjem/Ansible/Test3 katalog i dir_contents variabel.

Den andre oppgaven sjekker om dir_contents.stdout er en tom streng, eller om katalogen /Hjem/Ansible/Test3 er tom. Hvis katalogen er tom, er meldingen Katalogen er tom vil trykke.

Kjør register_conditions.Yaml Playbook, som følger:

$ Ansible-Playbook Playbooks/Register_Conditions.Yaml

Som du ser kjørte spillboken vellykket.

Siden katalogen /Hjem/Ansible/Test3 er tom, playbook trykket meldingen Katalogen er tom.

Deretter oppretter du en ny fil i /Hjem/Ansible/Test3 katalog.

$ touch test3/myfile

Siden /Hjem/Ansible/Test3 Katalogen er ikke lenger tom, oppgaven Sjekk om katalogen er tom blir hoppet over, som du kan se på skjermbildet nedenfor.

$ Ansible-Playbook Playbooks/Register_Conditions.Yaml

Konklusjon

Ansibelen registrere Modulen er veldig nyttig for serverautomatisering. Denne artikkelen viste deg det grunnleggende om registrere modul, inkludert eksempler på bruk av Ansible registrere Modul for kataloglagring og sikkerhetskopi, og for å kjøre katalogoppgaver.