Vi har nevnt variabler i Denne Ansible-serien og bare for å jogge tankene dine litt. En variabel, akkurat som i mange programmeringsspråk, er i hovedsak en nøkkel som representerer en verdi.
Hva Utgjør Et Gyldig Variabelnavn?
et variabelnavn inneholder bokstaver, tall, understrek eller en blanding av enten 2 eller alle. Vær imidlertid oppmerksom på at et variabelnavn alltid må begynne med en bokstav og ikke skal inneholde mellomrom.
La oss ta en titt på noen eksempler på gyldige og uakseptable variabelnavn:
Gyldige Variabelnavn Eksempler:
football foot_ballfootball20 foot_ball20
Eksempler På Ikke-gyldige Variabelnavn:
foot ball20 foot-ball
La oss diskutere variabeltypene:
Playbook-Variabler
Playbook-variabler er ganske enkle og enkle. For å definere en variabel i en playbook, bare bruke søkeordet vars før du skriver variabler med innrykk.
for å få tilgang til verdien av variabelen, plasser den mellom de doble klammeparentesene som er vedlagt anførselstegn.
her er et enkelt playbook-eksempel:
- hosts: all vars: greeting: Hello world! tasks: - name: Ansible Basic Variable Example debug: msg: "{{ greeting }}"
i ovennevnte playbook er hilsen variabelen erstattet Av verdien Hei verden! når playbook er kjørt. Playbook skriver bare meldingen Hei, verden! når henrettet.
I Tillegg kan du ha en liste eller en rekke variabler som vist:
playbook nedenfor viser en variabel kalt kontinenter. Variabelen inneholder 5 forskjellige verdier-kontinentnavn. Hver av disse verdiene kan lett nås ved hjelp av indeks 0 som den første variabelen.
eksemplet på playbook nedenfor henter Og viser Asia (Indeks 1).
variabellisten kan på samme måte struktureres som vist:
vars: Continents:
for å liste alle elementene på listen, bruk with_items-modulen. Dette vil sløyfe gjennom alle verdiene i arrayet.
en annen Type Ansible variabel er ordbokvariabelen.
Ordbok variabler er i tillegg støttet i playbook. For å definere ordbokvariabelen, bare ident nøkkelverdiparet like under ordbokvariabelnavnet.
hosts: switch_f01vars: http_port: 8080 default_gateway: 10.200.50.1 vlans: id: 10 port: 2
i eksemplet ovenfor er vlan ordboksvariabelen mens id og port er nøkkelverdiparene.
for port_id, siden vi starter verdien med tekst og ikke variabelen, er anførselstegn ikke nødvendig for å omgjøre de krøllete båndene.
Spesielle Variabler
Ansible gir en liste over forhåndsdefinerte variabler som kan refereres Til I Jinja2 maler og playbooks, men kan ikke endres eller defineres av brukeren.
Samlet er listen Over ansible forhåndsdefinerte variabler referert til Som Ansible fakta, og disse samles når en playbook utføres.
for å få en liste over Alle Ansible-variablene, bruk oppsettmodulen i Ansible ad hoc-kommandoen som vist nedenfor:
# ansible -m setup hostname
dette viser utdataene I JSON-format som vist:
# ansible -m setup localhost
fra utgangen kan vi se at noen av eksemplene På Ansible special variables inkluderer:
Det er mange Andre Ansible special variables dette er bare noen få eksempler.
disse variablene kan brukes i En Jinja2-mal som vist:
Lagervariabler
Til slutt har vi Ansible lagervariabler på listen. En beholdning er en fil I INI-format som inneholder alle vertene som skal administreres Av Ansible.
i varelager kan du tilordne en variabel til et vertssystem og senere bruke den i en playbook.
web_server_1 ansible_user=centos http_port=80web_server_2 ansible_user=ubuntu http_port=8080
ovennevnte kan representeres i EN PLAYBOOK YAML-fil som vist:
--- web_servers: web_server_1: ansible_user=centos http_port=80web_server_2: ansible_user=ubuntu http_port=8080
hvis vertssystemene deler de samme variablene, kan du definere en annen gruppe i lagerfilen for å gjøre den mindre tungvint og unngå unødvendig repetisjon.
for eksempel:
web_server_1 ansible_user=centos http_port=80web_server_2 ansible_user=centos http_port=80
ovennevnte kan struktureres som:
web_server_1web_server_2ansible_user=centoshttp_port=80
OG i playbook YAML-filen vil dette bli definert som vist:
--- web_servers: hosts: web_server_1: web_server_2: vars: ansible_user=centos http_port=80
Ansible Fakta
når Du kjører playbooks, Er Den første oppgaven Som Ansible gjør, utførelsen av oppsettoppgaven. Jeg er ganske sikker på at du må ha kommet over utgangen:
TASK: *********
Ansible fakta er bare systemegenskaper eller deler av informasjon om eksterne noder som du har koblet til. Denne informasjonen inkluderer Systemarkitekturen, OS-versjonen, BIOS-informasjon, systemtid og dato, systemoppetid, IP-adresse OG maskinvareinformasjon for å nevne noen få.
for å få fakta om et system, bruk bare oppsettmodulen som vist i kommandoen nedenfor:
# ansible -m setup hostname
for eksempel:
# ansible -m setup database_server
dette skriver ut et stort sett med data I JSON-format som vist:
Ansible facts er nyttige for å hjelpe systemadministratorene hvilke operasjoner som skal utføres, for eksempel, avhengig av operativsystemet, kan de vite hvilke programvarepakker som skal installeres, og hvordan de skal konfigureres, etc.
Tilpassede Fakta
visste du også at Du kan lage dine egne tilpassede fakta som Kan samles av Ansible? Jo, det kan du. Så hvordan går du om det? La oss skifte gir og se hvordan.
det første trinnet er å lage en /etc/ansible / facts.d-katalogen på den administrerte eller eksterne noden.
opprett en fil(er) med en .fact
– utvidelse I denne katalogen. Denne filen(e) vil returnere JSON-data når playbook kjøres På Ansible control node, som inkluderer de andre fakta Som Ansible henter etter en playbook-kjøring.
her er et eksempel på en egendefinert faktafil kalt date_time.faktum som henter dato og klokkeslett.
# mkdir -p /etc/ansible/facts.d# vim /etc/ansible/facts.d/date_time.fact
Legg til følgende linjer i den.
#!/bin/bashDATE=`date`echo "{\"date\" : \"${DATE}\"}"
Lagre og avslutt filen.
tilordne nå kjøretillatelsene:
# chmod +x /etc/ansible/facts.d/date_time.fact
nå opprettet jeg en playbook på Ansible control node kalt check_date.yml.
---- hosts: webservers tasks: - name: Get custom facts debug: msg: The custom fact is {{ansible_local.date_time}}
Tilføy faktafilen til variabelen ansible_local. Den ansible_local lagrer alle de tilpassede fakta.
kjør nå playbook og observere Ansible hente informasjon lagret på faktafilen:
# ansible_playbook check_date.yml
Konklusjon
dette bringer oss til slutten av denne opplæringen om å jobbe Med Ansible variabler og fakta.