Umgang mit Ansible-Variablen und Fakten – Teil 8
Was macht einen gültigen Variablennamen aus?
Ein Variablenname enthält Buchstaben, Zahlen, Unterstriche oder eine Mischung aus 2 oder allen. Beachten Sie jedoch, dass ein Variablenname immer mit einem Buchstaben beginnen muss und keine Leerzeichen enthalten darf.
Schauen wir uns einige Beispiele für gültige und inakzeptable Variablennamen an:
Beispiele für gültige Variablennamen:
football foot_ball football20 foot_ball20
Beispiele für ungültige Variablennamen:
foot ball 20 foot-ball
Lassen Sie uns die Variablentypen diskutieren:
1. Playbook-Variablen
Spielbuch Variablen sind recht einfach und unkompliziert. So definieren Sie eine Variable in a SpielbuchVerwenden Sie einfach das Schlüsselwort wessen bevor Sie Ihre Variablen mit Einzug schreiben.
Um auf den Wert der Variablen zuzugreifen, platzieren Sie ihn zwischen den doppelten geschweiften Klammern, die in Anführungszeichen gesetzt sind.
Hier ist ein einfaches Playbook-Beispiel:
- hosts: all vars: greeting: Hello world! tasks: - name: Ansible Basic Variable Example debug: msg: "{{ greeting }}"
Im obigen Spielbuch ist die Gruß Variable wird durch den Wert ersetzt Hallo Welt! wenn das Playbook ausgeführt wird. Das Playbook druckt einfach die Nachricht Hallo Welt! wenn ausgeführt.
Darüber hinaus können Sie eine Liste oder ein Array von Variablen wie folgt erstellen:
Das folgende Playbook zeigt eine Variable namens Kontinente. Die Variable enthält 5 verschiedene Werte – Kontinentnamen. Auf jeden dieser Werte kann einfach zugegriffen werden Index 0 als erste Variable.
Das folgende Beispiel des Playbooks wird abgerufen und angezeigt Asien (Index 1).
- hosts: all vars: continents: - Africa - Asia - South America - North America - Europe tasks: - name: Ansible List variable Example debug: msg: "{{ continents [1] }}"
Die Variablenliste kann ähnlich wie folgt aufgebaut sein:
vars: Continents: [Africa, Asia, South America, North America, Europe]
Verwenden Sie die Option, um alle Elemente in der Liste aufzulisten with_items Modul. Dadurch werden alle Werte im Array durchlaufen.
- hosts: all vars: continents: [Africa, Asia, South America, North America, Europe] tasks: - name: Ansible array variables example debug: msg: "{{ item }}" with_items: - "{{ continents }}"
Eine andere Art von Ansible-Variable ist die Wörterbuch Variable.
Wörterbuch Variablen werden im Playbook zusätzlich unterstützt. Um die Wörterbuchvariable zu definieren, identifizieren Sie einfach das Schlüssel-Wert-Paar direkt unter dem Namen der Wörterbuchvariablen.
hosts: switch_f01 vars: http_port: 8080 default_gateway: 10.200.50.1 vlans: id: 10 port: 2
Im obigen Beispiel vlans ist die Wörterbuchvariable während Ich würde und Hafen sind die Schlüssel-Wert-Paare.
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’] }}
Zum port_idDa wir den Wert mit Text und nicht mit der Variablen beginnen, sind keine Anführungszeichen erforderlich, um die geschweiften Klammern zu umgeben.
2. Spezielle Variablen
Ansible bietet eine Liste vordefinierter Variablen, auf die in Jinja2-Vorlagen und Playbooks verwiesen werden kann, die jedoch vom Benutzer nicht geändert oder definiert werden können.
Insgesamt wird die Liste der vordefinierten Ansible-Variablen als bezeichnet Ansible Fakten und diese werden gesammelt, wenn ein Spielbuch ausgeführt wird.
Verwenden Sie die Taste, um eine Liste aller Ansible-Variablen zu erhalten Konfiguration Modul im Ansible-Ad-hoc-Befehl wie unten gezeigt:
# ansible -m setup hostname
Dies zeigt die Ausgabe im JSON-Format wie folgt an:
# ansible -m setup localhost
Aus der Ausgabe können wir ersehen, dass einige Beispiele für spezielle Ansible-Variablen Folgendes umfassen:
ansible_architecture ansible_bios_date ansible_bios_version ansible_date_time ansible_machine ansible_memefree_mb ansible_os_family ansible_selinux
Es gibt viele andere spezielle Ansible-Variablen. Dies sind nur einige Beispiele.
Diese Variablen können in a verwendet werden Jinja2 Vorlage wie gezeigt:
The hostname of this webserver is {{ ansible_hostname }}
It is running on {{ ansible_os_family}}system
3. Inventarvariablen
Schließlich haben wir auf der Liste Ansible-Inventarvariablen. Ein Inventar ist eine Datei in DIES Format, das alle von Ansible zu verwaltenden Hosts enthält.
In Inventaren können Sie einem Hostsystem eine Variable zuweisen und diese später in einem Playbook verwenden.
[web_servers] web_server_1 ansible_user=centos http_port=80 web_server_2 ansible_user=ubuntu http_port=8080
Das Obige kann in einem Spielbuch dargestellt werden Yamla Datei wie gezeigt:
--- web_servers: web_server_1: ansible_user=centos http_port=80 web_server_2: ansible_user=ubuntu http_port=8080
Wenn die Hostsysteme dieselben Variablen verwenden, können Sie eine andere Gruppe in der Inventardatei definieren, um sie weniger umständlich zu machen und unnötige Wiederholungen zu vermeiden.
Beispielsweise:
[web_servers] web_server_1 ansible_user=centos http_port=80 web_server_2 ansible_user=centos http_port=80
Das Obige kann wie folgt strukturiert werden:
[web_servers] web_server_1 web_server_2 [web_servers:vars] ansible_user=centos http_port=80
Und im Spielbuch Yamla Datei, dies wird wie folgt definiert:
--- web_servers: hosts: web_server_1: web_server_2: vars: ansible_user=centos http_port=80
Ansible Fakten
Beim Ausführen von Playbooks ist die erste Aufgabe, die Ansible ausführt, die Ausführung der Setup-Aufgabe. Ich bin mir ziemlich sicher, dass Sie auf die Ausgabe gestoßen sein müssen:
TASK: [Gathering facts] *********
Ansible Fakten sind nichts anderes als Systemeigenschaften oder Informationen zu Remote-Knoten, mit denen Sie eine Verbindung hergestellt haben. Diese Informationen umfassen die Systemarchitektur, die Betriebssystemversion, BIOS-Informationen, Systemzeit und -datum, Systemverfügbarkeit, IP-Adresse und Hardwareinformationen, um nur einige zu nennen.
Um die Fakten über ein System zu erhalten, verwenden Sie einfach die Konfiguration Modul wie im folgenden Befehl gezeigt:
# ansible -m setup hostname
Beispielsweise:
# ansible -m setup database_server
Dadurch wird ein großer Datensatz ausgedruckt JSON Format wie gezeigt:
Ansible Fakten helfen den Systemadministratoren dabei, welche Vorgänge auszuführen sind. Beispielsweise können sie je nach Betriebssystem wissen, welche Softwarepakete installiert und wie sie konfiguriert werden müssen usw.
Benutzerdefinierte Fakten
Wussten Sie auch, dass Sie Ihre eigenen benutzerdefinierten Fakten erstellen können, die von Ansible erfasst werden können? Ja, du kannst. Wie gehen Sie vor? Lassen Sie uns den Gang wechseln und sehen, wie.
Der erste Schritt ist das Erstellen eines /etc/ansible/facts.d Verzeichnis auf dem verwalteten oder Remote-Knoten.
Erstellen Sie in diesem Verzeichnis eine Datei mit einem .fact
Erweiterung. Diese Datei (en) werden zurückgegeben JSON Daten, wenn das Playbook auf dem Ansible-Steuerknoten ausgeführt wird, einschließlich der anderen Fakten, die Ansible nach einem Playbook-Lauf abruft.
Hier ist ein Beispiel für eine benutzerdefinierte Faktendatei mit dem Namen date_time.fact das ruft Datum und Uhrzeit ab.
# mkdir -p /etc/ansible/facts.d # vim /etc/ansible/facts.d/date_time.fact
Fügen Sie die folgenden Zeilen hinzu.
#!/bin/bash DATE=`date` echo "{"date" : "${DATE}"}"
Speichern und beenden Sie die Datei.
Weisen Sie nun die Ausführungsberechtigungen zu:
# chmod +x /etc/ansible/facts.d/date_time.fact
Jetzt habe ich ein Playbook auf dem Ansible-Steuerknoten namens erstellt check_date.yml.
--- - hosts: webservers tasks: - name: Get custom facts debug: msg: The custom fact is {{ansible_local.date_time}}
Hängen Sie die Faktendatei an die ansible_local Variable. Das ansible_local speichert alle benutzerdefinierten Fakten.
Führen Sie nun das Playbook aus und beobachten Sie, wie Ansible Informationen abruft, die in der Faktendatei gespeichert sind:
# ansible_playbook check_date.yml
Fazit
Dies bringt uns zum Ende dieses Tutorials über die Arbeit mit Ansible-Variablen und Fakten.