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.