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


Spomenuli smo varijable u ovoj seriji Ansible i samo da vam malo džogiramo. Varijabla je, kao i u mnogim programskim jezicima, u osnovi ključ koji predstavlja vrijednost.

Što čini valjani naziv varijable?

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

Pogledajmo nekoliko primjera valjanih i neprihvatljivih naziva varijabli:

football 
foot_ball
football20 
foot_ball20
foot ball
20 
foot-ball

Razgovarajmo o vrstama varijabli:

1. Varijable Playbook

Varijable Playbooka prilično su jednostavne i jednostavne. Da biste definirali varijablu u priručniku, jednostavno upotrijebite ključnu riječ vars prije pisanja varijabli s uvlačenjem.

Da biste pristupili vrijednosti varijable, stavite je između dvostrukih kovrčavih zagrada zatvorenih navodnicima.

Evo jednostavnog primjera knjige za igranje:

- hosts: all
  vars:
    greeting: Hello world! 

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

U gornjoj priručniku, varijabla pozdrava zamijenjena je vrijednošću Hello world! kada se pokreće knjiga s igrama. Playbook jednostavno ispisuje poruku Hello world! kad se izvrši.

Uz to, možete imati popis ili niz varijabli kao što je prikazano:

Playbook u nastavku prikazuje varijablu koja se naziva kontinenti. Varijabla sadrži 5 različitih vrijednosti - imena kontinenata. Svakoj od ovih vrijednosti lako se može pristupiti pomoću indeksa 0 kao prve varijable.

Primjer donje knjige prikuplja 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] }}"

Popis varijabli može se slično strukturirati kako je prikazano:

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

Da biste popisali sve stavke na popisu, upotrijebite modul with_items. Ovo će petlju proći kroz sve vrijednosti u polju.

- 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 varijable Ansible je varijabla rječnika.

Varijable rječnika dodatno su podržane u priručniku. Da biste definirali rječničku varijablu, jednostavno identificirajte par ključ/vrijednost odmah ispod naziva 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 započinjemo tekstom, a ne varijablom, navodnici nisu potrebni za okruživanje kovrčavih zagrada.

2. Posebne varijable

Ansible nudi popis unaprijed definiranih varijabli na koje se može uputiti u predlošcima i playbookima Jinja2, ali ih korisnik ne može mijenjati ili definirati.

Kolektivno, popis unaprijed definiranih varijabli Ansible naziva se Ansible činjenicama i one se prikupljaju kada se izvrši playbook.

Da biste dobili popis svih varijabli Ansible, upotrijebite modul za postavljanje u ad-hoc naredbi Ansible kako je prikazano dolje:

# ansible -m setup hostname

Ovo prikazuje izlaz u JSON formatu kako je prikazano:

# ansible -m setup localhost

Iz rezultata možemo vidjeti da neki od primjera posebnih 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

Postoji mnogo drugih posebnih varijabli Ansible, ovo je samo nekoliko primjera.

Ove se varijable mogu koristiti u Jinja2 predlošku 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

I na kraju, na popisu imamo varijable zalihe Ansible. Inventar je datoteka u INI formatu koja sadrži sve hostove kojima treba upravljati Ansible.

U inventarima možete glavnom sustavu dodijeliti varijablu i kasnije je koristiti u knjizi za reprodukciju.

[web_servers]

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

Navedeno se može prikazati u YAML datoteci playbook-a 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 sustavi dijele iste varijable, u datoteci inventara možete definirati drugu skupinu 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

Navedeno se može strukturirati kao:

[web_servers]
web_server_1
web_server_2


[web_servers:vars]
ansible_user=centos
http_port=80

A u YAML datoteci playbook to će biti definirano kako je prikazano:

---
   web_servers:
    
     hosts: 
       web_server_1:
	  web_server_2:

     vars: 
        ansible_user=centos
   http_port=80

Odgovorne činjenice

Kada se pokreću playbooks, prvi zadatak koji Ansible radi je izvršavanje zadatka za postavljanje. Prilično sam siguran da ste sigurno naišli na rezultat:

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

Odgovorne činjenice nisu ništa drugo nego svojstva sustava ili podaci o udaljenim čvorovima s kojima ste se povezali. Ti podaci uključuju arhitekturu sustava, verziju OS-a, BIOS-ove, vrijeme i datum sustava, vrijeme rada sustava, IP adresu i podatke o hardveru da nabrojimo samo neke.

Da biste saznali činjenice o bilo kojem sustavu, jednostavno upotrijebite modul za postavljanje kako 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:

Odgovorne činjenice su korisne u pomaganju administratorima sustava koje operacije treba izvršiti, na primjer, ovisno o operativnom sustavu, oni mogu znati koji softverski paketi trebaju biti instalirani i kako ih treba konfigurirati itd.

Prilagođene činjenice

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

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

Unutar ovog direktorija stvorite datoteku (e) s nastavkom .fact . Ove će datoteke vratiti JSON podatke kada se playbook izvodi na kontrolnom čvoru Ansible, što uključuje i ostale činjenice koje Ansible dobiva nakon pokretanja playbook-a.

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

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

Dodajte u njega sljedeće redove.

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

Spremite i zatvorite datoteku.

Sada dodijelite dozvole za izvršavanje:

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

Sada sam stvorio knjigu priručnika na kontrolnom čvoru Ansible nazvanu check_date.yml.

---

- hosts: webservers

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

Datoteku činjenica dodajte varijabli ansible_local. Ansible_local pohranjuje sve prilagođene činjenice.

Sada pokrenite knjigu priručnika i promatrajte Ansible kako dohvaća podatke spremljene u datoteci činjenica:

# ansible_playbook check_date.yml

Ovo nas dovodi do kraja ovog vodiča o radu s varijablama i činjenicama Ansible.