Wéi mat Ansible Variabelen a Fakten ze schaffen - Deel 8
Mir hunn Variabelen an dëser Ansible Serie ernimmt a just fir Äert Geescht e bëssen ze joggen. Eng Variabel, grad wéi a ville Programméierungssproochen, ass wesentlech e Schlëssel deen e Wäert duerstellt.
Wat ass e gültege Variabelen Numm?
E Variabel Numm enthält Buschtawen, Zuelen, Ënnersträicher oder e Mix vun entweder 2 oder all vun hinnen. Denkt awer drun datt e verännerlechen Numm ëmmer mat engem Buschtaf muss ufänken a keng Plazen sollt enthalen.
Loosst eis e puer Beispiller vu gëlteg an inakzeptabel Variabel Nimm kucken:
football foot_ball football20 foot_ball20
foot ball 20 foot-ball
Loosst eis d'Variabel Typen diskutéieren:
1. Playbook Verännerlechen
Playbook Variablen sinn zimlech einfach an einfach. Fir eng Variabel an engem Spillbuch ze definéieren, benotzt einfach d'Schlësselwuert vars ier Dir Är Variablen mat Indentatioun schreift.
Fir Zougang zum Wäert vun der Variabel ze kréien, plazéiert se tëscht den duebele Curly Klameren, déi mat Zitatzeechen zougemaach sinn.
Hei ass en einfacht Spillbuch Beispill:
- hosts: all vars: greeting: Hello world! tasks: - name: Ansible Basic Variable Example debug: msg: "{{ greeting }}"
Am uewe genannte Spillbuch gëtt d'Begréissungsvariabel duerch de Wäert ersat Hallo Welt! wann d'Spillbuch leeft. D'Spillbuch dréckt einfach de Message Hallo Welt! wann ausgefouert.
Zousätzlech kënnt Dir eng Lëscht oder eng Array vu Variablen hunn wéi gewisen:
D'Spillbuch hei ënnen weist eng Variabel genannt Kontinenter. D'Variabel hält 5 verschidde Wäerter - Kontinentnimm. Jiddereng vun dëse Wäerter kënnen einfach zougänglech sinn mam Index 0 als éischt Variabel.
D'Beispill vum Spillbuch hei drënner retrieves a weist Asien (Index 1).
- hosts: all vars: continents: - Africa - Asia - South America - North America - Europe tasks: - name: Ansible List variable Example debug: msg: "{{ continents [1] }}"
D'Variabel Lëscht kann ähnlech strukturéiert ginn wéi gewisen:
vars: Continents: [Africa, Asia, South America, North America, Europe]
Fir all Elementer op der Lëscht ze lëschten, benotzt de with_items Modul. Dëst wäert duerch all d'Wäerter an der Array schloen.
- hosts: all vars: continents: [Africa, Asia, South America, North America, Europe] tasks: - name: Ansible array variables example debug: msg: "{{ item }}" with_items: - "{{ continents }}"
Eng aner Zort vun Ansible Variabel ass d'Wörterbuchvariabel.
Wierderbuch Variablen ginn zousätzlech am Spillbuch ënnerstëtzt. Fir d'Wörterbuchvariabel ze definéieren, identifizéieren einfach d'Schlësselwäertpaar just ënner dem Wierderbuch Variabelnumm.
hosts: switch_f01 vars: http_port: 8080 default_gateway: 10.200.50.1 vlans: id: 10 port: 2
Am Beispill hei uewen ass vlans d'Wörterbuchvariabel, während ID a Port d'Schlësselwäertpaar sinn.
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’] }}
Fir port_id, well mir de Wäert mam Text ufänken an net der Variabel, sinn Zitatzeechen net néideg fir d'Curly Klameren ëmzegoen.
2. Special Variablen
Ansible bitt eng Lëscht vu virdefinéierte Variablen déi an Jinja2 Templates a Playbooks referenzéiert kënne ginn, awer net vum Benotzer geännert oder definéiert kënne ginn.
Zesummen gëtt d'Lëscht vun Ansible virdefinéierte Variablen als Ansible Fakten bezeechent an dës gi gesammelt wann e Spillbuch ausgefouert gëtt.
Fir eng Lëscht vun all Ansible Variablen ze kréien, benotzt de Setup Modul am Ansible ad-hoc Kommando wéi hei ënnendrënner:
# ansible -m setup hostname
Dëst weist d'Ausgab am JSON Format wéi gewisen:
# ansible -m setup localhost
Vun der Ausgab kënne mir gesinn datt e puer vun de Beispiller vun Ansible Spezialvariablen enthalen:
ansible_architecture ansible_bios_date ansible_bios_version ansible_date_time ansible_machine ansible_memefree_mb ansible_os_family ansible_selinux
Et gi vill aner Ansible speziell Verännerlechen dëst sinn nëmmen e puer Beispiller.
Dës Variablen kënnen an engem Jinja2 Template benotzt ginn wéi gewisen:
<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. Stamminventar Variablen
Endlech, op der Lëscht, hu mir Ansible Inventarvariablen. En Inventar ass eng Datei am INI-Format deen all d'Host enthält déi vun Ansible geréiert ginn.
An Inventaire kënnt Dir eng Variabel un engem Hostsystem zouginn a spéider an engem Spillbuch benotzen.
[web_servers] web_server_1 ansible_user=centos http_port=80 web_server_2 ansible_user=ubuntu http_port=8080
Dat hei uewen kann an enger Playbook YAML Datei vertruede sinn wéi gewisen:
--- web_servers: web_server_1: ansible_user=centos http_port=80 web_server_2: ansible_user=ubuntu http_port=8080
Wann d'Hostsystemer déiselwecht Variabelen deelen, kënnt Dir eng aner Grupp an der Inventardatei definéieren fir et manner ëmständlech ze maachen an onnéideg Widderhuelung ze vermeiden.
Zum Beispill:
[web_servers] web_server_1 ansible_user=centos http_port=80 web_server_2 ansible_user=centos http_port=80
Dat hei uewen kann strukturéiert ginn wéi:
[web_servers] web_server_1 web_server_2 [web_servers:vars] ansible_user=centos http_port=80
An an der Playbook YAML Datei gëtt dëst definéiert wéi gewisen:
--- web_servers: hosts: web_server_1: web_server_2: vars: ansible_user=centos http_port=80
Ansible Fakten
Wann Dir Playbooks leeft, ass déi éischt Aufgab déi Ansible mécht d'Ausféierung vun der Setuptask. Ech si ganz sécher datt Dir op d'Ausgab muss kommen:
TASK: [Gathering facts] *********
Ansibel Fakten sinn näischt anescht wéi Systemeigenschaften oder Informatiounsstécker iwwer Fernknoten mat deenen Dir verbonne sidd. Dës Informatioun enthält d'Systemarchitektur, d'OS Versioun, BIOS Informatioun, System Zäit an Datum, System Uptime, IP Adress, an Hardware Informatioun fir nëmmen e puer ze nennen.
Fir d'Fakten iwwer all System ze kréien, benotzt einfach de Setup-Modul wéi am Kommando ënnendrënner:
# ansible -m setup hostname
Zum Beispill:
# ansible -m setup database_server
Dëst dréckt e grousse Set vun Daten am JSON Format aus wéi gewisen:
Ansible Fakten si praktesch fir de Systemadministratoren ze hëllefen wéi eng Operatiounen ausféieren, zum Beispill, ofhängeg vum Betribssystem, si fäeg ze wëssen wéi eng Software Packagen installéiert musse ginn, a wéi se konfiguréiert sinn, etc.
Benotzerdefinéiert Fakten
Wousst Dir och datt Dir Är eege personaliséiert Fakten erstellt, déi vun Ansible gesammelt kënne ginn? Jo du kanns. Also wéi gitt Dir doriwwer? Loosst eis Gears wiesselen a kucken wéi.
Den éischte Schrëtt ass e /etc/ansible/facts.d Verzeichnis op de verwalteten oder Remote Node ze kreéieren.
An dësem Verzeichnis erstellt e Fichier(en) mat enger .fact
Extensioun. Dës Datei(e) ginn JSON Daten zréck wann d'Playbook um Ansible Kontrollnode leeft, wat déi aner Fakten inklusiv ass, déi d'Ansible no engem Playbook Run zréckhëlt.
Hei ass e Beispill vun enger personaliséierter Faktdatei genannt date_time.fact, déi den Datum an d'Zäit zréckhëlt.
# mkdir -p /etc/ansible/facts.d # vim /etc/ansible/facts.d/date_time.fact
Füügt déi folgend Zeilen derbäi.
#!/bin/bash DATE=`date` echo "{\"date\" : \"${DATE}\"}"
Späichert a gitt d'Datei aus.
Gitt elo d'Ausféierungsrechter zou:
# chmod +x /etc/ansible/facts.d/date_time.fact
Elo hunn ech e Spillbuch op Ansible Kontrollnode mam Numm check_date.yml erstallt.
--- - hosts: webservers tasks: - name: Get custom facts debug: msg: The custom fact is {{ansible_local.date_time}}
Fügt d'Faktdatei an d'ansible_local Variabel. Den ansible_local späichert all personaliséiert Fakten.
Fuert elo d'Playbook an beobachtet Ansible Recuperatioun vun Informatioun, déi op der Faktdatei gespäichert ass:
# ansible_playbook check_date.yml
Dëst bréngt eis zum Enn vun dësem Tutorial iwwer d'Aarbecht mat Ansible Variablen a Fakten.