Kuidas töötada muutumatute muutujate ja faktidega - 8. osa


Oleme maininud selles Ansible sarjas muutujaid ja lihtsalt selleks, et oma meelt veidi liigutada. Muutuja, nagu paljudes programmeerimiskeeltes, on sisuliselt võti, mis tähistab väärtust.

Mis moodustab kehtiva muutuja nime?

Muutuja nimi sisaldab tähti, numbreid, alakriipe või nende kahe või kõigi kombinatsiooni. Pidage siiski meeles, et muutuja nimi peab alati algama tähega ega tohiks sisaldada tühikuid.

Vaatame mõned näited kehtivatest ja vastuvõetamatutest muutujate nimedest:

football 
foot_ball
football20 
foot_ball20
foot ball
20 
foot-ball

Arutame muutujate tüüpe:

1. Playbooki muutujad

Playbooki muutujad on üsna lihtsad ja arusaadavad. Muutuja määratlemiseks mänguraamatus kasutage lihtsalt enne muutujate taandega kirjutamist märksõna vars.

Muutuja väärtusele pääsemiseks asetage see jutumärkidega ümbritsetud kahekordsete lokkis trakside vahele.

Siin on lihtne näitekirjanduse näide:

- hosts: all
  vars:
    greeting: Hello world! 

  tasks:
  - name: Ansible Basic Variable Example
    debug:
      msg: "{{ greeting }}"

Ülalolevas mänguraamatus on tervitusmuutuja asendatud väärtusega Hello world! kui mänguraamat on käivitatud. Mängukiri trükib lihtsalt sõnumi Tere maailm! kui hukatakse.

Lisaks võib teil olla loend või muutujate massiiv, nagu näidatud:

Allpool toodud mänguraamat näitab muutujat, mida nimetatakse mandriteks. Muutuja omab 5 erinevat väärtust - mandri nimed. Kõigile nendele väärtustele pääseb hõlpsasti juurde, kasutades esimese muutujana indeksit 0.

Allpool toodud näitekirjanduse näide otsib ja kuvab Aasia (indeks 1).

- hosts: all
  vars:
    continents:
      - Africa
      - Asia
      - South America
      - North America
      - Europe
      
  tasks:
  - name: Ansible List variable Example
    debug:
      msg: "{{ continents [1] }}"

Muutujate loendit saab sarnaselt struktureerida, nagu näidatud:

vars:
    Continents: [Africa, Asia, South America, North America, Europe]

Kõigi loendis olevate üksuste loetlemiseks kasutage moodulit with_items. See viib läbi kõik massiivi väärtused.

- hosts: all
  vars:
    continents: [Africa, Asia, South America, North America, Europe]

  tasks:
  - name: Ansible array variables example
    debug: 
      msg: "{{ item }}"
    with_items:
      - "{{ continents }}"

Teine Ansible muutuja tüüp on sõnastiku muutuja.

Sõnaraamatu muutujaid toetatakse lisaks raamatus. Sõnastiku muutuja määratlemiseks tuvastage lihtsalt sõnaraamatu muutuja nime all olev võtme-väärtuste paar.

hosts: switch_f01

vars:
   http_port: 8080
   default_gateway: 10.200.50.1
   vlans:
       id: 10
       port: 2

Ülaltoodud näites on sõnastikumuutuja vlans, võti-väärtus paarid on id ja port.

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’]  }}

Kuna väärtuse port_id jaoks alustame väärtust tekstiga, mitte muutujaga, ei ole lokkisulgude ümbritsemiseks jutumärgid vajalikud.

2. Erimuutujad

Ansible pakub loetelu eelnevalt määratletud muutujatest, millele saab viidata Jinja2 mallides ja esitusraamatutes, kuid mida kasutaja ei saa muuta ega määratleda.

Kombineeritult nimetatakse võimalike eelmääratletud muutujate loendit võimalikeks faktideks ja need kogutakse kokku, kui mänguraamat käivitatakse.

Kõigi Ansible muutujate loendi saamiseks kasutage häälestusmoodulit käsus Ansible ad-hoc, nagu allpool näidatud:

# ansible -m setup hostname

See kuvab väljundi JSON-vormingus, nagu näidatud:

# ansible -m setup localhost

Väljundist näeme, et mõned näited võimalikest erimuutujatest hõlmavad järgmist:

ansible_architecture
ansible_bios_date
ansible_bios_version
ansible_date_time
ansible_machine
ansible_memefree_mb
ansible_os_family
ansible_selinux

On palju muid Ansible erimuutujaid. Need on vaid mõned näited.

Neid muutujaid saab kasutada Jinja2 mallis, nagu näidatud:

<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. Varude muutujad

Lõpuks on meil loendis Ansible inventuuri muutujad. Inventuur on INI-vormingus fail, mis sisaldab kõiki masinaid, mida Ansible haldab.

Varudes saate muutuja hosti süsteemile määrata ja seda hiljem mänguraamatus kasutada.

[web_servers]

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

Ülaltoodut saab esitada mänguraamatu YAML-failis, nagu näidatud:

---
   web_servers:
     web_server_1:
        ansible_user=centos
	   http_port=80

web_server_2:
        ansible_user=ubuntu
	   http_port=8080

Kui hostisüsteemid jagavad samu muutujaid, saate varude failis määratleda teise rühma, et muuta see vähem tülikaks ja vältida tarbetut kordamist.

Näiteks:

[web_servers]

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

Eeltoodut saab struktureerida järgmiselt:

[web_servers]
web_server_1
web_server_2


[web_servers:vars]
ansible_user=centos
http_port=80

Esitusraamatu YAML-failis määratletakse see järgmiselt:

---
   web_servers:
    
     hosts: 
       web_server_1:
	  web_server_2:

     vars: 
        ansible_user=centos
   http_port=80

Võimalikud faktid

Esitusraamatute käivitamisel on Ansible esimene ülesanne seadistamisülesande täitmine. Olen üsna kindel, et olete kindlasti väljundiga kokku puutunud:

TASK:  [Gathering facts] *********

Võimalikud faktid pole muud kui süsteemi atribuudid või teave kaugsõlmede kohta, millega olete ühendatud. See teave sisaldab süsteemi arhitektuuri, OS-i versiooni, BIOS-i teavet, süsteemi kellaaega ja kuupäeva, süsteemi tööaega, IP-aadressi ja riistvarateavet.

Mis tahes süsteemi kohta faktide saamiseks kasutage lihtsalt häälestusmoodulit, nagu on näidatud allolevas käsus:

# ansible -m setup hostname

Näiteks:

# ansible -m setup database_server

See prindib välja suure hulga andmeid JSON-vormingus, nagu näidatud:

Võimalikud faktid on abiks süsteemiadministraatoritele, milliseid toiminguid teha, näiteks sõltuvalt opsüsteemist saavad nad teada, millised tarkvarapaketid tuleb installida ja kuidas neid seadistada jne.

Kohandatud faktid

Kas teadsite ka, et saate luua oma kohandatud fakte, mida Ansible saab koguda? Jah, sa saad. Kuidas siis sellega edasi minna? Vahetame käike ja vaatame, kuidas.

Esimene samm on luua hallatavale või kaugsõlmele kataloog /etc/ansible/facts.d.

Selles kataloogis looge fail (id) laiendiga .fact . See (d) fail (ed) tagastab JSON-i andmed, kui esitusraamat käivitatakse juhtimissõlmes Ansible, mis hõlmab kõiki muid fakte, mille Ansible pärast esitusraamatu käitamist saab.

Siin on näide kohandatud faktifailist nimega date_time.fact, mis otsib kuupäeva ja kellaaja.

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

Lisage sellesse järgmised read.

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

Salvestage ja väljuge failist.

Nüüd määrake käivitamisõigused:

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

Nüüd lõin käsiraamatu Ansible juhtimissõlmes nimega check_date.yml.

---

- hosts: webservers

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

Lisage faktifail muutujale ansible_local. Ansible_local salvestab kõik kohandatud faktid.

Nüüd käivitage mänguraamat ja jälgige faktifaili salvestatud teavet Võimalik allalaaditav teave:

# ansible_playbook check_date.yml

Sellega jõuame selle Ansible muutujate ja faktidega töötamise õpetuse lõpuni.