Kā strādāt ar iespējamajiem mainīgajiem un faktiem - 8. daļa
Mēs esam pieminējuši mainīgos šajā Ansible sērijā un tikai tāpēc, lai nedaudz pamudinātu domāt. Mainīgais, tāpat kā daudzās programmēšanas valodās, būtībā ir atslēga, kas attēlo vērtību.
Kas ir derīgs mainīgā nosaukums?
Mainīgā nosaukums ietver burtus, ciparus, pasvītrojumus vai abu vai visu to kombināciju. Tomēr ņemiet vērā, ka mainīgā nosaukumam vienmēr jāsākas ar burtu, un tajā nedrīkst būt atstarpes.
Apskatīsim dažus derīgu un nepieņemamu mainīgo nosaukumu piemērus:
football foot_ball football20 foot_ball20
foot ball 20 foot-ball
Apspriedīsim mainīgo veidus:
1. Spēļu grāmatas mainīgie
Playbook mainīgie ir diezgan vienkārši un vienkārši. Lai definētu mainīgo spēles grāmatā, vienkārši izmantojiet atslēgvārdu vars, pirms rakstāt mainīgos ar atkāpi.
Lai piekļūtu mainīgā vērtībai, novietojiet to starp dubultajām cirtainajām lencēm, kas pievienotas pēdiņām.
Šeit ir vienkāršs spēļu grāmatas piemērs:
- hosts: all vars: greeting: Hello world! tasks: - name: Ansible Basic Variable Example debug: msg: "{{ greeting }}"
Iepriekš minētajā grāmatā sveiciena mainīgo aizstāj vērtība Hello world! kad tiek palaista playbook. Spēļu grāmata vienkārši izdrukā ziņojumu Sveika pasaule! kad izpilda.
Turklāt jums var būt mainīgo saraksts vai masīvs, kā parādīts:
Zemāk esošajā spēļu grāmatā parādīts mainīgais, ko sauc par kontinentiem. Mainīgajam pieder 5 dažādas vērtības - kontinentu nosaukumi. Katrai no šīm vērtībām var viegli piekļūt, izmantojot indeksu 0 kā pirmo mainīgo.
Zemāk esošajā atskaņošanas grāmatas piemērā tiek izgūta un parādīta Āzija (1. indekss).
- hosts: all vars: continents: - Africa - Asia - South America - North America - Europe tasks: - name: Ansible List variable Example debug: msg: "{{ continents [1] }}"
Mainīgo sarakstu var līdzīgi strukturēt, kā parādīts:
vars: Continents: [Africa, Asia, South America, North America, Europe]
Lai uzskaitītu visus saraksta vienumus, izmantojiet moduli with_items. Tādējādi tiks aplūkotas visas masīva vērtības.
- hosts: all vars: continents: [Africa, Asia, South America, North America, Europe] tasks: - name: Ansible array variables example debug: msg: "{{ item }}" with_items: - "{{ continents }}"
Cits Ansible mainīgo veids ir vārdnīcas mainīgais.
Spēļu grāmatā papildus tiek atbalstīti vārdnīcas mainīgie. Lai definētu vārdnīcas mainīgo, vienkārši identificējiet atslēgas un vērtību pāri tieši zem vārdnīcas mainīgā nosaukuma.
hosts: switch_f01 vars: http_port: 8080 default_gateway: 10.200.50.1 vlans: id: 10 port: 2
Iepriekš minētajā piemērā vlans ir vārdnīcas mainīgais, bet ID un ports ir atslēgas vērtību pāri.
hosts: switch_f01 vars: http_port: 8080 default_gateway: vlans: id: 10 port: 20 tasks: name: Configure default gateway system_configs: default_gateway_ip: “{{ default_gateway }}“ name: Label port on vlan 10 vlan_config: vlan_id: “{{ vlans[‘id’] }}“ port_id: 1/1/ {{ vlans[‘port’] }}
Tā kā vērtību port_id sākam ar tekstu, nevis mainīgo, pēdiņas nav vajadzīgas, lai apņemtu cirtainās lencītes.
2. Īpašie mainīgie
Ansible sniedz sarakstu ar iepriekš definētiem mainīgajiem, uz kuriem var atsaukties Jinja2 veidnēs un atskaņošanas grāmatās, bet lietotājs tos nevar mainīt vai definēt.
Kopumā iepriekš definēto mainīgo lielumu saraksts tiek saukts par iespējamiem faktiem, un tie tiek apkopoti, kad tiek izpildīta spēles grāmata.
Lai iegūtu visu iespējamo mainīgo sarakstu, izmantojiet iestatīšanas moduli komandā Ansible ad-hoc, kā parādīts zemāk:
# ansible -m setup hostname
Tas parāda izvadi JSON formātā, kā parādīts:
# ansible -m setup localhost
No izejas mēs varam redzēt, ka daži no iespējamo īpašo mainīgo piemēriem ietver:
ansible_architecture ansible_bios_date ansible_bios_version ansible_date_time ansible_machine ansible_memefree_mb ansible_os_family ansible_selinux
Ir arī daudzi citi iespējamie īpašie mainīgie, tie ir tikai daži piemēri.
Šos mainīgos var izmantot Jinja2 veidnē, kā parādīts:
<html> <center> <h1> The hostname of this webserver is {{ ansible_hostname }}</h1> <h3> It is running on {{ ansible_os_family}}system </h3> </center> </html>
3. Inventāra mainīgie
Visbeidzot, sarakstā mums ir Ansible inventāra mainīgie. Inventārs ir fails INI formātā, kurā ir visi resursdatori, kurus pārvalda Ansible.
Krājumos mainīgajam var piešķirt resursdatora sistēmu un vēlāk to izmantot spēļu grāmatā.
[web_servers] web_server_1 ansible_user=centos http_port=80 web_server_2 ansible_user=ubuntu http_port=8080
Iepriekš minēto var attēlot playbook YAML failā, kā parādīts:
--- web_servers: web_server_1: ansible_user=centos http_port=80 web_server_2: ansible_user=ubuntu http_port=8080
Ja resursdatora sistēmām ir vienādi mainīgie, krājumu failā varat definēt citu grupu, lai padarītu to mazāk apgrūtinošu un izvairītos no nevajadzīgas atkārtošanās.
Piemēram:
[web_servers] web_server_1 ansible_user=centos http_port=80 web_server_2 ansible_user=centos http_port=80
Iepriekš minēto var strukturēt šādi:
[web_servers] web_server_1 web_server_2 [web_servers:vars] ansible_user=centos http_port=80
Playbook YAML failā tas tiks definēts, kā parādīts:
--- web_servers: hosts: web_server_1: web_server_2: vars: ansible_user=centos http_port=80
Iespējamie fakti
Palaidot playbooks, pirmais Ansible uzdevums ir iestatīšanas uzdevuma izpilde. Esmu diezgan pārliecināts, ka jums noteikti ir jāsaskaras ar rezultātu:
TASK: [Gathering facts] *********
Iespējamie fakti ir nekas cits kā sistēmas rekvizīti vai informācija par attāliem mezgliem, ar kuriem esat izveidojis savienojumu. Šī informācija ietver sistēmas arhitektūru, OS versiju, BIOS informāciju, sistēmas laiku un datumu, sistēmas darbības laiku, IP adresi un aparatūras informāciju, pieminot tikai dažus.
Lai iegūtu faktus par jebkuru sistēmu, vienkārši izmantojiet iestatīšanas moduli, kā parādīts zemāk esošajā komandā:
# ansible -m setup hostname
Piemēram:
# ansible -m setup database_server
Tādējādi tiek izdrukāts liels datu kopums JSON formātā, kā parādīts:
Iespējamie fakti ir noderīgi, lai palīdzētu sistēmas administratoriem veikt kādas darbības, piemēram, atkarībā no operētājsistēmas viņi var zināt, kuras programmatūras pakotnes ir jāinstalē un kā tās jākonfigurē utt.
Pielāgoti fakti
Vai jūs arī zinājāt, ka varat izveidot savus pielāgotos faktus, kurus var apkopot Ansible? Jā tu vari. Tātad, kā jūs to darāt? Pārslēdzīsim pārnesumus un redzēsim, kā.
Pirmais solis ir izveidot /etc/ansible/facts.d direktoriju pārvaldītajā vai attālajā mezglā.
Šajā direktorijā izveidojiet failu (-us) ar paplašinājumu .fact
. Šis (-ie) fails (-i) atgriezīs JSON datus, kad atskaņošanas grāmata tiks palaista vadības mezglā Ansible, ieskaitot visus citus faktus, kurus Ansible iegūst pēc atskaņošanas grāmatas palaišanas.
Šeit ir piemērs pielāgotam faktu failam ar nosaukumu date_time.fact, kas izgūst datumu un laiku.
# mkdir -p /etc/ansible/facts.d # vim /etc/ansible/facts.d/date_time.fact
Pievienojiet tajā šādas rindas.
#!/bin/bash DATE=`date` echo "{\"date\" : \"${DATE}\"}"
Saglabājiet un izejiet no faila.
Tagad piešķiriet izpildes atļaujas:
# chmod +x /etc/ansible/facts.d/date_time.fact
Tagad es izveidoju atskaņošanas grāmatu Ansible vadības mezglā ar nosaukumu check_date.yml.
--- - hosts: webservers tasks: - name: Get custom facts debug: msg: The custom fact is {{ansible_local.date_time}}
Pievienojiet faktu failu mainīgajam ansible_local. Vietne ansible_local saglabā visus pielāgotos faktus.
Tagad palaidiet atskaņošanas grāmatu un novērojiet faktu failā saglabāto iespējamo informācijas izgūšanu:
# ansible_playbook check_date.yml
Tas mūs noved pie šīs apmācības beigām par darbu ar iespējamajiem mainīgajiem un faktiem.