we hebben variabelen genoemd in deze Ansible serie en gewoon om je geest een beetje op te frissen. Een variabele is, net als in veel programmeertalen, in wezen een sleutel die een waarde vertegenwoordigt.
Wat is een geldige Variabele naam?
een variabelnaam bevat letters, cijfers, underscores of een combinatie van 2 of alle. Houd er echter rekening mee dat een variabele naam altijd met een letter moet beginnen en geen spaties mag bevatten.
laten we eens een kijkje nemen een paar voorbeelden van geldige en onaanvaardbare namen van variabelen:
voorbeelden van geldige namen van variabelen:
football foot_ballfootball20 foot_ball20
voorbeelden van niet-geldige Variabelnamen:
foot ball20 foot-ball
laten we de variabele types bespreken:
Playbook variabelen
Playbook variabelen zijn vrij eenvoudig en duidelijk. Om een variabele in een playbook te definiëren, gebruik je gewoon het trefwoord vars voordat je je variabelen met inspringen schrijft.
om toegang te krijgen tot de waarde van de variabele, plaats deze tussen de dubbele accolades omsloten met aanhalingstekens.
hier is een eenvoudig playbook voorbeeld:
- hosts: all vars: greeting: Hello world! tasks: - name: Ansible Basic Variable Example debug: msg: "{{ greeting }}"
in het bovenstaande playbook wordt de begroetingsvariabele vervangen door de waarde Hello world! als het draaiboek wordt uitgevoerd. De playbook drukt gewoon het bericht Hello world! wanneer geëxecuteerd.
Bovendien kunt u een lijst of een array van variabelen hebben zoals getoond:
het playbook hieronder toont een variabele genaamd continenten. De variabele bevat 5 verschillende waarden-continent namen. Elk van deze waarden kan gemakkelijk worden benaderd met behulp van index 0 als de eerste variabele.
het voorbeeld van de playbook hieronder haalt en toont Asia (Index 1).
de variabelenlijst kan ook worden gestructureerd zoals getoond:
vars: Continents:
gebruik de with_items module om alle items in de lijst weer te geven. Dit zal alle waarden in de array doorlopen.
een ander type Ansible variabele is de dictionary variabele.
Woordenboekvariabelen worden bovendien ondersteund in het draaiboek. Om de dictionary variabele te definiëren, identificeer je simpelweg het sleutel – waarde paar net onder de naam van de dictionary variabele.
hosts: switch_f01vars: http_port: 8080 default_gateway: 10.200.50.1 vlans: id: 10 port: 2
in het voorbeeld hierboven is vlans de dictionary variabele terwijl id en port de sleutel-waarde paren zijn.
voor port_id, omdat we de waarde starten met tekst en niet met de variabele, zijn aanhalingstekens niet nodig om de accolades te omringen.
speciale variabelen
Ansible biedt een lijst van vooraf gedefinieerde variabelen waarnaar kan worden verwezen in Jinja2-sjablonen en afspeelboeken, maar die niet door de gebruiker kunnen worden gewijzigd of gedefinieerd.
gezamenlijk wordt de lijst van Ansible vooraf gedefinieerde variabelen aangeduid als Ansible facts en deze worden verzameld wanneer een playbook wordt uitgevoerd.
om een lijst van alle Ansible variabelen te krijgen, gebruik je de setup module in het Ansible ad-hoc commando zoals hieronder getoond:
# ansible -m setup hostname
dit toont de uitvoer in JSON-formaat zoals getoond:
# ansible -m setup localhost
uit de output kunnen we zien dat enkele voorbeelden van Ansible special variabelen zijn:
er zijn vele andere Ansible special variabelen dit zijn slechts een paar voorbeelden.
deze variabelen kunnen worden gebruikt in een Jinja2-sjabloon, zoals getoond:
Inventarisvariabelen
tenslotte hebben we op de lijst een mogelijke inventarisvariabelen. Een inventaris is een bestand in INI-formaat dat alle hosts bevat die door Ansible moeten worden beheerd.
in inventarissen kunt u een variabele toewijzen aan een hostsysteem en deze later gebruiken in een draaiboek.
web_server_1 ansible_user=centos http_port=80web_server_2 ansible_user=ubuntu http_port=8080
het bovenstaande kan worden weergegeven in een playbook YAML-bestand zoals getoond:
--- web_servers: web_server_1: ansible_user=centos http_port=80web_server_2: ansible_user=ubuntu http_port=8080
als de hostsystemen dezelfde variabelen delen, kunt u een andere groep in het inventarisbestand definiëren om deze minder omslachtig te maken en onnodige herhaling te voorkomen.
bijvoorbeeld:
web_server_1 ansible_user=centos http_port=80web_server_2 ansible_user=centos http_port=80
het bovenstaande kan worden gestructureerd als:
web_server_1web_server_2ansible_user=centoshttp_port=80
en in het Playbook YAML-bestand wordt dit gedefinieerd zoals getoond:
--- web_servers: hosts: web_server_1: web_server_2: vars: ansible_user=centos http_port=80
Ansible Facts
bij het uitvoeren van playbooks is de eerste taak die Ansible doet het uitvoeren van de installatietaak. Ik ben er vrij zeker van dat je over de output moet zijn gekomen:
TASK: *********
mogelijke feiten zijn niets anders dan Systeemeigenschappen of stukjes informatie over externe knooppunten waarmee u verbinding hebt gemaakt. Deze informatie omvat de systeemarchitectuur, de OS-versie, BIOS-informatie, systeemtijd en-datum, uptime van het systeem, IP-adres en hardware-informatie om er maar een paar te noemen.
om de feiten over elk systeem te krijgen gebruik gewoon de setup module zoals getoond in het commando hieronder:
# ansible -m setup hostname
bijvoorbeeld::
# ansible -m setup database_server
dit print een grote set gegevens in JSON-formaat zoals getoond:
Ansible facts zijn handig om de systeembeheerders te helpen welke bewerkingen moeten worden uitgevoerd, bijvoorbeeld, afhankelijk van het besturingssysteem, zijn ze in staat om te weten welke softwarepakketten moeten worden geïnstalleerd, en hoe ze moeten worden geconfigureerd, enz.
aangepaste feiten
Wist u ook dat u uw eigen aangepaste feiten kunt maken die door Ansible kunnen worden verzameld? Ja, dat kun je wel. Hoe doe je dat? Laten we eens kijken hoe.
de eerste stap is het creëren van een/etc/ansible / facts.d map op het beheerde of externe knooppunt.
maak in deze map een bestand(en) aan met een .fact
extensie. Dit bestand (en) retourneert JSON gegevens wanneer de playbook wordt uitgevoerd op de Ansible control node, die is inclusief de andere feiten die Ansible haalt na een playbook run.
hier is een voorbeeld van een aangepast fact bestand genaamd date_time.feit dat haalt datum en tijd.
# mkdir -p /etc/ansible/facts.d# vim /etc/ansible/facts.d/date_time.fact
voeg de volgende regels toe:
#!/bin/bashDATE=`date`echo "{\"date\" : \"${DATE}\"}"
het bestand opslaan en afsluiten.
wijs nu de uitvoerrechten toe:
# chmod +x /etc/ansible/facts.d/date_time.fact
nu heb ik een playbook gemaakt op Ansible control node genaamd check_date.yml.
---- hosts: webservers tasks: - name: Get custom facts debug: msg: The custom fact is {{ansible_local.date_time}}
voeg het fact-bestand toe aan de ansible_local-variabele. De ansible_local slaat alle aangepaste feiten op.
Voer nu het playbook uit en observeer Ansible ophalen van informatie die is opgeslagen in het fact-bestand:
# ansible_playbook check_date.yml
conclusie
dit brengt ons bij het einde van deze handleiding over het werken met Ansible variabelen en feiten.