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.