zmínili jsme proměnné v této Ansible série a jen trochu jog svou mysl. Proměnná, stejně jako v mnoha programovacích jazycích, je v podstatě klíčem, který představuje hodnotu.
co představuje platný název proměnné?
název proměnné obsahuje písmena, čísla, podtržítka nebo kombinaci 2 nebo všech. Mějte však na paměti, že název proměnné musí vždy začínat písmenem a neměl by obsahovat mezery.
Pojďme se podívat na několik příkladů platné a nepřijatelné proměnná jména:
Platný Název Proměnné Příklady:
football foot_ballfootball20 foot_ball20
Non-platný Název Proměnné Příklady:
foot ball20 foot-ball
Pojďme diskutovat o typy proměnných:
Playbook Proměnné
Playbook proměnné jsou poměrně jednoduché a přímočaré. Chcete-li definovat proměnnou v PlayBooku, jednoduše použijte klíčové slovo vars před zápisem proměnných s odsazením.
Chcete-li získat přístup k hodnotě proměnné, umístěte ji mezi dvojité složené závorky uzavřené uvozovkami.
Zde je jednoduchý příklad scénáře:
- hosts: all vars: greeting: Hello world! tasks: - name: Ansible Basic Variable Example debug: msg: "{{ greeting }}"
Ve výše uvedené učebnici, pozdrav proměnné je nahrazena hodnotou Hello world! když je spuštěna příručka. Playbook jednoduše vytiskne zprávu Hello world! když je popraven.
Navíc můžete mít seznam nebo pole proměnných, jak je uvedeno:
playbook níže ukazuje proměnná s názvem kontinentech. Proměnná obsahuje 5 různých hodnot-názvy kontinentů. Ke každé z těchto hodnot lze snadno přistupovat pomocí indexu 0 jako první proměnné.
příklad níže uvedené příručky načte a zobrazí Asii (Index 1).
proměnné seznam může být strukturován podobně jak je znázorněno:
vars: Continents:
Do seznamu všechny položky na seznamu, použijte with_items modul. Tím se projdou všechny hodnoty v poli.
dalším typem proměnné Ansible je proměnná slovníku.
slovník proměnné jsou navíc podporovány v playbook. Chcete-li definovat proměnnou slovníku, jednoduše identifikujte pár klíč-hodnota těsně pod názvem proměnné slovníku.
hosts: switch_f01vars: http_port: 8080 default_gateway: 10.200.50.1 vlans: id: 10 port: 2
ve výše uvedeném příkladu je VLAN proměnná slovníku, zatímco id a port jsou páry klíč-hodnota.
pro port_id, protože hodnotu začínáme textem a ne proměnnou, uvozovky nejsou nutné k obklopení složených závorek.
Speciální Proměnné
Ansible poskytuje seznam předdefinovaných proměnných, které mohou být odkazované v Jinja2 šablony a playbooks, ale nemohou být změněny nebo definované uživatelem.
Kolektivně, seznam Ansible předdefinované proměnné se označuje jako Ansible fakta a ty jsou shromažďovány, když scénář je popraven.
získat seznam všech Ansible proměnné, použijte nastavení modulu v Ansible ad-hoc příkaz, jak je uvedeno níže:
# ansible -m setup hostname
zobrazí se výstup v JSON formátu, jak je znázorněno:
# ansible -m setup localhost
Z výstupu, můžeme vidět, že některé z příkladů Ansible speciální proměnné patří:
Existuje mnoho dalších Ansible speciální proměnné tyto jsou jen některé příklady.
tyto proměnné lze použít v šabloně Jinja2, jak je znázorněno:
proměnné zásob
a konečně, v seznamu máme možné proměnné zásob. Inventář je soubor ve formátu INI, který obsahuje všechny hostitele, které má Ansible spravovat.
v inventářích můžete přiřadit proměnnou hostitelskému systému a později ji použít v příručce.
web_server_1 ansible_user=centos http_port=80web_server_2 ansible_user=ubuntu http_port=8080
výše uvedené lze znázornit v souboru PlayBook YAML, jak je znázorněno:
--- web_servers: web_server_1: ansible_user=centos http_port=80web_server_2: ansible_user=ubuntu http_port=8080
Pokud hostitelské systémy sdílejí stejné proměnné, můžete definovat další skupiny v seznamu souboru, aby se to méně těžkopádné a vyhnout se zbytečnému opakování.
například:
web_server_1 ansible_user=centos http_port=80web_server_2 ansible_user=centos http_port=80
výše uvedené mohou být strukturovány jako:
web_server_1web_server_2ansible_user=centoshttp_port=80
A v učebnici YAML souboru, to bude definován, jak je znázorněno:
--- web_servers: hosts: web_server_1: web_server_2: vars: ansible_user=centos http_port=80
Ansible Fakta
Když běží playbooks, první úkol, který Ansible dělá, je provedení nastavení úkolu. Jsem si docela jistý, že jste museli narazit na výstup:
TASK: *********
možná fakta nejsou nic jiného než Vlastnosti systému nebo informace o vzdálených uzlech, ke kterým jste se připojili. Tyto informace zahrnují architekturu systému, verzi operačního systému, informace o systému BIOS, systémový čas a datum, provozuschopnost systému, IP adresu a informace o hardwaru, abychom zmínili jen několik.
získat fakta o každém systému jednoduše použít instalační modul, jak je znázorněno na níže uvedený příkaz:
# ansible -m setup hostname
například:
# ansible -m setup database_server
To vytiskne velký soubor dat ve formátu JSON, jak je znázorněno:
Ansible fakta jsou užitečné v pomáhá správcům systému, které operace provádět, například, v závislosti na operačním systému, jsou schopni vědět, které balíčky softwaru musí být nainstalován, a jak mají být nastaveny, atd.
vlastní fakta
Věděli jste také, že si můžete vytvořit vlastní fakta, která mohou být shromážděna Ansible? Ano, můžeš. Tak jak se vám jít o tom? Pojďme řadit a uvidíme jak.
prvním krokem je vytvoření /etc / ansible / facts.d adresář na spravovaném nebo vzdáleném uzlu.
v tomto adresáři vytvořte soubor (y) s příponou .fact
. Tento soubor(y) vrátí JSON data, když je playbook spuštěn na ovládacím uzlu Ansible, který je včetně dalších skutečností, které Ansible načte po spuštění playbook.
zde je příklad vlastního souboru faktů s názvem date_time.skutečnost, že načte datum a čas.
# mkdir -p /etc/ansible/facts.d# vim /etc/ansible/facts.d/date_time.fact
přidejte do něj následující řádky.
#!/bin/bashDATE=`date`echo "{\"date\" : \"${DATE}\"}"
Uložte a ukončete soubor.
nyní přiřaďte oprávnění execute:
# chmod +x /etc/ansible/facts.d/date_time.fact
Nyní jsem vytvořil playbook na Ansible řídicím uzlu s názvem check_date.yml.
---- hosts: webservers tasks: - name: Get custom facts debug: msg: The custom fact is {{ansible_local.date_time}}
připojte soubor fact k proměnné ansible_local. Ansible_local ukládá všechna vlastní fakta.
spustit scénáře a sledovat, Ansible načítání informace uložené na skutečnost, soubor:
# ansible_playbook check_date.yml
Závěr
To nás přivádí ke konci tohoto tutoriálu na práci s Ansible proměnných a fakta.