vi har nämnt variabler i denna Ansible serie och bara för att jogga dig lite. En variabel, precis som i många programmeringsspråk, är i huvudsak en nyckel som representerar ett värde.
vad utgör ett giltigt variabelnamn?
ett variabelnamn innehåller bokstäver, siffror, understreck eller en blandning av antingen 2 eller alla. Tänk dock på att ett variabelnamn alltid måste börja med en bokstav och inte bör innehålla mellanslag.
Låt oss ta en titt på några exempel på giltiga och oacceptabla variabelnamn:
exempel på giltiga variabelnamn:
football foot_ballfootball20 foot_ball20
exempel på icke-giltiga variabelnamn:
foot ball20 foot-ball
Låt oss diskutera variabla typer:
Playbook-variabler
Playbook-variabler är ganska enkla och enkla. För att definiera en variabel i en playbook, helt enkelt använda nyckelordet vars innan du skriver dina variabler med indrag.
för att komma åt värdet på variabeln, placera den mellan de dubbla lockiga hängslen som är inneslutna med citattecken.
här är ett enkelt playbook-exempel:
- hosts: all vars: greeting: Hello world! tasks: - name: Ansible Basic Variable Example debug: msg: "{{ greeting }}"
i ovanstående playbook ersätts hälsningsvariabeln med värdet Hello world! när playbook körs. Den playbook skriver helt enkelt meddelandet Hello world! när avrättades.
Dessutom kan du ha en lista eller en rad variabler som visas:
playbook nedan visar en variabel som heter kontinenter. Variabeln har 5 olika värden-kontinentnamn. Var och en av dessa värden kan enkelt nås med index 0 som den första variabeln.
exemplet på playbook nedan hämtar och visar Asien (Index 1).
variabellistan kan på liknande sätt struktureras som visas:
vars: Continents:
för att lista alla objekt i listan, använd with_items-modulen. Detta går igenom alla värden i matrisen.
en annan typ av Ansible variabel är ordboksvariabeln.
Ordboksvariabler stöds dessutom i playbook. För att definiera ordboksvariabeln anger du bara nyckelvärdesparet strax under ordboksvariabelns namn.
hosts: switch_f01vars: http_port: 8080 default_gateway: 10.200.50.1 vlans: id: 10 port: 2
i exemplet ovan är VLAN ordboksvariabeln medan id och port är nyckelvärdesparen.
för port_id, eftersom vi börjar värdet med text och inte variabeln, är citattecken inte nödvändiga för att omge de lockiga hängslen.
Specialvariabler
Ansible ger en lista över fördefinierade variabler som kan refereras i Jinja2 mallar och spelböcker men kan inte ändras eller definieras av användaren.
sammantaget kallas listan över Ansible fördefinierade variabler som Ansible facts och dessa samlas när en playbook körs.
för att få en lista över alla Ansible-variabler, använd Inställningsmodulen i kommandot Ansible ad-hoc som visas nedan:
# ansible -m setup hostname
detta visar utgången i JSON-format som visas:
# ansible -m setup localhost
från utgången kan vi se att några av exemplen på Ansible specialvariabler inkluderar:
det finns många andra Ansible specialvariabler dessa är bara några exempel.
dessa variabler kan användas i en Jinja2-mall som visas:
Lagervariabler
slutligen, på listan, har vi Ansible lagervariabler. En inventering är en fil i ini-format som innehåller alla värdar som ska hanteras av Ansible.
i varulager kan du tilldela en variabel till ett värdsystem och senare använda den i en playbook.
web_server_1 ansible_user=centos http_port=80web_server_2 ansible_user=ubuntu http_port=8080
ovanstående kan representeras i en playbook YAML-fil som visas:
--- web_servers: web_server_1: ansible_user=centos http_port=80web_server_2: ansible_user=ubuntu http_port=8080
om värdsystemen delar samma variabler kan du definiera en annan grupp i inventeringsfilen för att göra den mindre besvärlig och undvika onödig upprepning.
till exempel:
web_server_1 ansible_user=centos http_port=80web_server_2 ansible_user=centos http_port=80
ovanstående kan struktureras som:
web_server_1web_server_2ansible_user=centoshttp_port=80
och i playbook YAML-filen kommer detta att definieras som visas:
--- web_servers: hosts: web_server_1: web_server_2: vars: ansible_user=centos http_port=80
Ansible Facts
när du kör spelböcker är den första uppgiften som Ansible gör exekveringen av inställningsuppgiften. Jag är ganska säker på att du måste ha stött på utgången:
TASK: *********
Ansible fakta är ingenting annat än Systemegenskaper eller bitar av information om fjärrnoder som du har anslutit till. Denna information inkluderar systemarkitekturen, OS-versionen, BIOS-information, systemtid och datum, systemupptid, IP-adress och hårdvaruinformation för att bara nämna några.
för att få fakta om något system, använd bara installationsmodulen som visas i kommandot nedan:
# ansible -m setup hostname
till exempel:
# ansible -m setup database_server
detta skriver ut en stor uppsättning data i JSON-format som visas:
Ansible facts är praktiska för att hjälpa systemadministratörerna vilka operationer som ska utföras, till exempel beroende på operativsystem, kan de veta vilka programvarupaket som behöver installeras och hur de ska konfigureras etc.
anpassade fakta
visste du också att du kan skapa dina egna anpassade fakta som kan samlas in av Ansible? Jo, det kan du. Så hur går du tillväga? Låt oss växla och se hur.
det första steget är att skapa en / etc/ansible / fakta.d katalog på hanterad eller fjärrnod.
skapa en fil(er) med tillägget .fact
i den här katalogen. Den här filen kommer att returnera JSON-data när playbook körs på Ansible control node, vilket inkluderar de andra fakta som Ansible hämtar efter en playbook-körning.
här är ett exempel på en anpassad faktafil som heter date_time.faktum som hämtar datum och tid.
# mkdir -p /etc/ansible/facts.d# vim /etc/ansible/facts.d/date_time.fact
Lägg till följande rader i den.
#!/bin/bashDATE=`date`echo "{\"date\" : \"${DATE}\"}"
spara och avsluta filen.
tilldela nu exekveringsbehörigheterna:
# chmod +x /etc/ansible/facts.d/date_time.fact
nu skapade jag en playbook på Ansible control node som heter check_date.yml.
---- hosts: webservers tasks: - name: Get custom facts debug: msg: The custom fact is {{ansible_local.date_time}}
Lägg till faktafilen i variabeln ansible_local. Ansible_local lagrar alla anpassade fakta.
kör nu playbook och observera Ansible hämta information som sparats på faktumfilen:
# ansible_playbook check_date.yml
slutsats
detta leder oss till slutet av denna handledning om att arbeta med Ansible variabler och fakta.