Sådan arbejder du med Ansible variabler og fakta – Del 8

vi har nævnt variabler i denne Ansible serie og bare for at jogge dit sind lidt. En variabel, ligesom i mange programmeringssprog, er i det væsentlige en nøgle, der repræsenterer en værdi.

hvad udgør et gyldigt Variabelnavn?

et variabelnavn indeholder bogstaver, tal, understregninger eller en blanding af enten 2 eller dem alle. Husk dog, at et variabelnavn altid skal begynde med et bogstav og ikke bør indeholde mellemrum.

lad os se et par eksempler på gyldige og uacceptable variabelnavne:

eksempler på gyldige variabelnavne:

football foot_ballfootball20 foot_ball20

eksempler på ikke-gyldige variabelnavne:

foot ball20 foot-ball

lad os diskutere variabeltyperne:

Playbook-variabler

Playbook-variabler er ret lette og ligetil. For at definere en variabel i en playbook skal du blot bruge nøgleordet vars, før du skriver dine variabler med indrykning.

for at få adgang til værdien af variablen skal du placere den mellem de dobbelte krøllede seler, der er vedlagt anførselstegn.

her er et simpelt playbook eksempel:

- hosts: all vars: greeting: Hello world! tasks: - name: Ansible Basic Variable Example debug: msg: "{{ greeting }}"

i ovenstående playbook erstattes hilsenvariablen med værdien Hej verden! når playbook køres. Playbook udskriver simpelthen beskeden Hej verden! når henrettet.

Playbook variabler i Ansible

derudover kan du have en liste eller en række variabler som vist:

playbook nedenfor viser en variabel kaldet kontinenter. Variablen indeholder 5 forskellige værdier-kontinentnavne. Hver af disse værdier kan let fås ved hjælp af indeks 0 som den første variabel.

eksemplet på playbook nedenfor henter og viser Asien (indeks 1).

Array af variabler i Ansible

variabellisten kan ligeledes struktureres som vist:

vars: Continents: 

hvis du vil liste alle elementerne på listen, skal du bruge modulet med_items. Dette vil løbe gennem alle værdierne i arrayet.

liste Ansible Array variabler

en anden type Ansible variabel er ordbogsvariablen.

ordbog variabler understøttes desuden i playbook. For at definere ordbogsvariablen skal du blot identificere nøgleværdiparret lige under ordbogsvariabelnavnet.

hosts: switch_f01vars: http_port: 8080 default_gateway: 10.200.50.1 vlans: id: 10 port: 2

i eksemplet ovenfor er VLAN ‘ er ordbogsvariablen, mens id og port er nøgleværdiparrene.

for port_id, da vi starter værdien med tekst og ikke variablen, er anførselstegn ikke nødvendige for at omringe de krøllede seler.

særlige variabler

Ansible indeholder en liste over foruddefinerede variabler, der kan refereres til i Jinja2 skabeloner og playbooks, men kan ikke ændres eller defineres af brugeren.

samlet betegnes listen over Ansible foruddefinerede variabler som Ansible fakta, og disse indsamles, når en playbook udføres.

for at få en liste over alle de Ansible variabler, brug opsætningsmodulet i kommandoen Ansible ad hoc som vist nedenfor:

# ansible -m setup hostname

dette viser output i JSON-format som vist:

# ansible -m setup localhost
liste Ansible variabler

fra output kan vi se, at nogle af eksemplerne på Ansible specialvariabler inkluderer:

der er mange andre Ansible specialvariabler disse er blot nogle få eksempler.

disse variabler kan bruges i en Jinja2-skabelon som vist:

Lagervariabler

endelig har vi på listen Ansible lagervariabler. En beholdning er en fil i ini-format, der indeholder alle værter, der skal administreres af Ansible.

i varebeholdninger kan du tildele en variabel til et værtssystem og senere bruge den i en playbook.

web_server_1 ansible_user=centos http_port=80web_server_2 ansible_user=ubuntu http_port=8080

ovenstående kan repræsenteres 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 værtssystemerne deler de samme variabler, kan du definere en anden gruppe i inventarfilen for at gøre den mindre besværlig og undgå unødvendig gentagelse.

for eksempel:

web_server_1 ansible_user=centos http_port=80web_server_2 ansible_user=centos http_port=80

ovenstående kan struktureres som:

web_server_1web_server_2ansible_user=centoshttp_port=80

og i playbook YAML-filen vil dette blive defineret som vist:

--- web_servers: hosts: web_server_1: web_server_2: vars: ansible_user=centos http_port=80

Ansible Facts

når du kører playbooks, er den første opgave, som Ansible udfører, udførelsen af opsætningsopgaven. Jeg er temmelig sikker på, at du skal have stødt på output:

TASK: *********

Ansible fakta er intet andet end Systemegenskaber eller stykker information om eksterne noder, som du har oprettet forbindelse til. Disse oplysninger inkluderer systemarkitekturen, OS-versionen, BIOS-oplysninger, systemtid og dato, system oppetid, IP-adresse og udstyrsoplysninger for blot at nævne nogle få.

for at få fakta om ethvert system skal du blot bruge opsætningsmodulet som vist i kommandoen nedenfor:

# ansible -m setup hostname

for eksempel:

# ansible -m setup database_server

dette udskriver et stort sæt data i JSON-format som vist:

Ansible Get system Facts

Ansible facts er nyttige til at hjælpe systemadministratorer, hvilke operationer der skal udføres, for eksempel afhængigt af operativsystemet, kan de vide, hvilke programpakker der skal installeres, og hvordan de skal konfigureres osv.

brugerdefinerede fakta

vidste du også, at du kan oprette dine egne brugerdefinerede fakta, der kan indsamles af Ansible? Jo, du kan. Så hvordan gør du det? Lad os skifte gear og se hvordan.

det første skridt er at skabe en /etc/ansible/fakta.d mappe på den administrerede eller eksterne node.

i denne mappe skal du oprette en fil(er) med en .fact udvidelse. Denne fil(er) returnerer JSON-data, når playbook køres på Ansible control node, som inkluderer de andre fakta, som Ansible henter efter en playbook-kørsel.

her er et eksempel på en brugerdefineret faktafil kaldet date_time.fakta, der henter dato og tid.

# mkdir -p /etc/ansible/facts.d# vim /etc/ansible/facts.d/date_time.fact

tilføj følgende linjer i den.

#!/bin/bashDATE=`date`echo "{\"date\" : \"${DATE}\"}"

Gem og afslut filen.

Tildel nu køretilladelserne:

# chmod +x /etc/ansible/facts.d/date_time.fact

nu oprettede jeg en playbook på Ansible control node kaldet check_date.yml.

---- hosts: webservers tasks: - name: Get custom facts debug: msg: The custom fact is {{ansible_local.date_time}}

Tilføj faktafilen til variablen ansible_local. Den ansible_local gemmer alle de brugerdefinerede fakta.

Kør nu playbook og observer Ansible hentning af oplysninger gemt på faktafilen:

# ansible_playbook check_date.yml
Opret Ansible brugerdefinerede fakta
konklusion

dette bringer os til slutningen af denne tutorial om at arbejde med Ansible variabler og fakta.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.

Previous post STEPHEN SCHVARTS-ond god komponist
Next post 7 måder Dine børn kan omgå Forældrekontrolprogrammer