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.