Kako raditi s Ansible varijablama i činjenicama - 8. dio


Spomenuli smo varijable u ovoj Ansible seriji i samo da vam malo potresemo um. Varijabla, baš kao iu mnogim programskim jezicima, u suštini je ključ koji predstavlja vrijednost.

Šta čini valjano ime varijable?

Ime varijable uključuje slova, brojeve, donje crte ili kombinaciju 2 ili svih njih. Međutim, imajte na umu da ime varijable uvijek mora početi slovom i ne smije sadržavati razmake.

Pogledajmo nekoliko primjera valjanih i neprihvatljivih imena varijabli:

Primjeri valjanih imena varijable:

football 
foot_ball
football20 
foot_ball20

Primjeri nevažećih imena varijable:

foot ball
20 
foot-ball

Hajde da razgovaramo o tipovima varijabli:

1. Varijable Playbook

Varijable Playbook su prilično jednostavne i jednostavne. Da biste definirali varijablu u playbooku, jednostavno koristite ključnu riječ vars prije nego što unesete svoje varijable s uvlačenjem.

Da biste pristupili vrijednosti varijable, postavite je između dvostrukih vitičastih zagrada zatvorenih navodnicima.

Evo jednostavnog primjera priručnika:

- hosts: all
  vars:
    greeting: Hello world! 

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

U gornjem priručniku, varijabla greeting je zamijenjena vrijednošću Hello world! kada se playbook pokrene. Playbook jednostavno ispisuje poruku Zdravo svijete! kada se izvrši.

Dodatno, možete imati listu ili niz varijabli kao što je prikazano:

Priručnik ispod prikazuje varijablu pod nazivom kontinenti. Varijabla sadrži 5 različitih vrijednosti – imena kontinenata. Svakoj od ovih vrijednosti može se lako pristupiti korištenjem indeksa 0 kao prve varijable.

Primjer donjeg priručnika preuzima i prikazuje Aziju (Indeks 1).

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

Lista varijabli može se slično strukturirati kao što je prikazano:

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

Za popis svih stavki na listi, koristite modul with_items. Ovo će proći kroz sve vrijednosti u nizu.

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

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

Druga vrsta Ansible varijable je varijabla rječnik.

Varijable Rječnika su dodatno podržane u priručniku. Da biste definirali varijablu rječnika, jednostavno identificirajte par ključ-vrijednost odmah ispod imena varijable rječnika.

hosts: switch_f01

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

U gornjem primjeru, vlans je varijabla rječnika, dok su id i port parovi ključ/vrijednost.

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

Za port_id, budući da vrijednost počinjemo tekstom, a ne promjenljivom, navodnici nisu potrebni da okružuju vitičaste zagrade.

2. Posebne varijable

Ansible pruža listu unaprijed definiranih varijabli koje se mogu referencirati u Jinja2 predlošcima i priručnicima, ali ih korisnik ne može mijenjati ili definirati.

Kolektivno, lista predefiniranih varijabli Ansible-a se naziva Ansible činjenice i one se prikupljaju kada se izvrši priručnik.

Da dobijete listu svih Ansible varijabli, koristite setup modul u Ansible ad-hoc komandi kao što je prikazano ispod:

ansible -m setup hostname

Ovo prikazuje izlaz u JSON formatu kao što je prikazano:

ansible -m setup localhost

Iz izlaza možemo vidjeti da neki od primjera specijalnih varijabli Ansible uključuju:

ansible_architecture
ansible_bios_date
ansible_bios_version
ansible_date_time
ansible_machine
ansible_memefree_mb
ansible_os_family
ansible_selinux

Postoje mnoge druge Ansible posebne varijable, ovo su samo neki primjeri.

Ove varijable se mogu koristiti u predlošku Jinja2 kao što je prikazano:

<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. Varijable zaliha

Na kraju, na listi imamo Ansible varijable inventara. Inventar je datoteka u INI formatu koja sadrži sve hostove kojima Ansible upravlja.

U zalihama, možete dodijeliti varijablu host sistemu i kasnije je koristiti u playbook-u.

[web_servers]

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

Gore navedeno može biti predstavljeno u playbook YAML datoteci kao što je prikazano:

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

web_server_2:
        ansible_user=ubuntu
	   http_port=8080

Ako host sistemi dijele iste varijable, možete definirati drugu grupu u datoteci inventara kako biste je učinili manje glomaznom i izbjegli nepotrebno ponavljanje.

Na primjer:

[web_servers]

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

Gore navedeno može biti strukturirano kao:

[web_servers]
web_server_1
web_server_2


[web_servers:vars]
ansible_user=centos
http_port=80

A u playbook YAML datoteci, ovo će biti definirano kao što je prikazano:

---
   web_servers:
    
     hosts: 
       web_server_1:
	  web_server_2:

     vars: 
        ansible_user=centos
   http_port=80

Ansible Facts

Kada pokrećete playbooks, prvi zadatak koji Ansible radi je izvršavanje zadatka podešavanja. Prilično sam siguran da ste sigurno naišli na izlaz:

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

Ansible činjenice nisu ništa drugo do svojstva sistema ili dijelovi informacija o udaljenim čvorovima na koje ste se povezali. Ove informacije uključuju arhitekturu sistema, verziju OS-a, informacije o BIOS-u, sistemsko vrijeme i datum, vrijeme rada sistema, IP adresu i informacije o hardveru da spomenemo samo neke.

Da dobijete činjenice o bilo kojem sistemu jednostavno koristite setup modul kao što je prikazano u naredbi ispod:

ansible -m setup hostname

Na primjer:

ansible -m setup database_server

Ovo ispisuje veliki skup podataka u JSON formatu kao što je prikazano:

Ansible činjenice su zgodne za pomoć administratorima sistema koje operacije da izvrše, na primjer, u zavisnosti od operativnog sistema, oni su u stanju da znaju koje softverske pakete treba instalirati i kako ih treba konfigurirati, itd.

Custom Facts

Jeste li također znali da možete kreirati vlastite prilagođene činjenice koje Ansible može prikupiti? Da, možeš. Pa kako to radite? Promenimo brzine i vidimo kako.

Prvi korak je kreiranje /etc/ansible/facts.d direktorija na upravljanom ili udaljenom čvoru.

Unutar ovog direktorija kreirajte fajl(e) sa ekstenzijom .fact. Ova(e) datoteka(e) će vratiti JSON podatke kada se playbook pokrene na Ansible kontrolnom čvoru, što uključuje druge činjenice koje Ansible preuzima nakon pokretanja playbooka.

Evo primjera prilagođene datoteke činjenica pod nazivom date_time.fact koja dohvaća datum i vrijeme.

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

Dodajte sljedeće redove u njega.

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

Sačuvajte i izađite iz datoteke.

Sada dodijelite dozvole za izvršavanje:

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

Sada sam kreirao playbook na Ansible kontrolnom čvoru pod nazivom check_date.yml.

---

- hosts: webservers

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

Dodajte datoteku činjenica u varijablu ansible_local. ansible_local pohranjuje sve prilagođene činjenice.

Sada pokrenite playbook i promatrajte kako Ansible preuzima informacije sačuvane u datoteci činjenica:

ansible_playbook check_date.yml

Zaključak

Ovo nas dovodi do kraja ovog tutorijala o radu sa Ansible varijablama i činjenicama.