Wie man mit Ansible Variablen und Fakten arbeitet – Teil 8

Wir haben Variablen in dieser Ansible-Serie erwähnt und nur um ein wenig zu joggen. Eine Variable ist, wie in vielen Programmiersprachen, im Wesentlichen ein Schlüssel, der einen Wert darstellt.

Was ist ein gültiger Variablenname?

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_ballfootball20 foot_ball20

Beispiele für ungültige Variablennamen:

foot ball20 foot-ball

Lassen Sie uns die Variablentypen diskutieren:

Playbook-Variablen

Playbook-Variablen sind recht einfach und unkompliziert. Um eine Variable in einem Playbook zu definieren, verwenden Sie einfach das Schlüsselwort vars , bevor Sie Ihre Variablen mit Einrückung schreiben.

Um auf den Wert der Variablen zuzugreifen, platzieren Sie ihn zwischen den doppelten geschweiften Klammern in Anführungszeichen.

Hier ist ein einfaches Playbook-Beispiel:

- hosts: all vars: greeting: Hello world! tasks: - name: Ansible Basic Variable Example debug: msg: "{{ greeting }}"

Im obigen Playbook wird die Begrüßungsvariable durch den Wert Hello world! wenn das Playbook ausgeführt wird. Das Playbook druckt einfach die Nachricht Hello world! wenn ausgeführt.

Playbook-Variablen in Ansible

Zusätzlich können Sie eine Liste oder ein Array von Variablen haben, wie gezeigt:

Das Playbook unten zeigt eine Variable namens continents . Die Variable enthält 5 verschiedene Werte – Kontinentnamen. Auf jeden dieser Werte kann leicht zugegriffen werden, indem Index 0 als erste Variable verwendet wird.

Das Beispiel des Playbooks unten ruft Asien ab und zeigt es an (Index 1).

Array von Variablen in Ansible

Die Variablenliste kann ähnlich wie gezeigt strukturiert werden:

vars: Continents: 

Um alle Elemente in der Liste aufzulisten, verwenden Sie das Modul with_items. Dadurch werden alle Werte im Array durchlaufen.

Liste Ansible Array-Variablen

Ein anderer Typ von Ansible-Variablen ist die Wörterbuchvariable.

Wörterbuchvariablen werden zusätzlich im Playbook 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_f01vars: http_port: 8080 default_gateway: 10.200.50.1 vlans: id: 10 port: 2

Im obigen Beispiel ist vlans die Wörterbuchvariable, während id und port die Schlüssel-Wert-Paare sind.

Da wir für port_id den Wert mit Text und nicht mit der Variablen beginnen, sind keine Anführungszeichen erforderlich, um die geschweiften Klammern zu umgeben.

Spezielle Variablen

Ansible stellt eine Liste vordefinierter Variablen bereit, auf die in Jinja2-Vorlagen und Playbooks verwiesen werden kann, die jedoch vom Benutzer nicht geändert oder definiert werden können.

Zusammenfassend wird die Liste der Ansible-vordefinierten Variablen als Ansible Facts bezeichnet und diese werden gesammelt, wenn ein Playbook ausgeführt wird.

Um eine Liste aller Ansible Variablen zu erhalten, verwenden Sie das setup Modul im Ansible Ad-hoc Befehl wie unten gezeigt:

# ansible -m setup hostname

Dies zeigt die Ausgabe im JSON-Format wie gezeigt an:

# ansible -m setup localhost
Liste Ansible Variablen

Aus der Ausgabe können wir sehen, dass einige der Beispiele für Ansible spezielle Variablen sind:

Es gibt viele andere Ansible spezielle Variablen Dies sind nur einige Beispiele.

Diese Variablen können in einer Jinja2-Vorlage wie folgt verwendet werden:

Inventarvariablen

Schließlich haben wir auf der Liste Ansible Inventarvariablen. Ein Inventar ist eine Datei im INI-Format, die alle Hosts enthält, die von Ansible verwaltet werden sollen.

In Inventories können Sie einem Hostsystem eine Variable zuweisen und diese später in einem Playbook verwenden.

web_server_1 ansible_user=centos http_port=80web_server_2 ansible_user=ubuntu http_port=8080

Das Obige kann wie gezeigt in einer Playbook-YAML-Datei dargestellt werden:

--- web_servers: web_server_1: ansible_user=centos http_port=80web_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 gestalten und unnötige Wiederholungen zu vermeiden.

Zum Beispiel:

web_server_1 ansible_user=centos http_port=80web_server_2 ansible_user=centos http_port=80

Das Obige kann wie folgt strukturiert werden:

web_server_1web_server_2ansible_user=centoshttp_port=80

Und in der Playbook-YAML-Datei wird dies wie folgt definiert:

--- web_servers: hosts: web_server_1: web_server_2: vars: ansible_user=centos http_port=80

Ansible Facts

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: *********

Ansible-Fakten sind nichts anderes als Systemeigenschaften oder Informationen zu Remote-Knoten, mit denen Sie eine Verbindung hergestellt haben. Zu diesen Informationen gehören die Systemarchitektur, die Betriebssystemversion, BIOS-Informationen, Systemzeit und -datum, Systemverfügbarkeit, IP-Adresse und Hardwareinformationen, um nur einige zu nennen.

Um die Fakten über jedes System zu erhalten, verwenden Sie einfach das Setup-Modul, wie im folgenden Befehl gezeigt:

# ansible -m setup hostname

Zum Beispiel:

# ansible -m setup database_server

Dies druckt einen großen Datensatz im JSON-Format aus, wie gezeigt:

Ansible Get System Facts

Ansible Facts sind praktisch, um den Systemadministratoren zu helfen, welche Vorgänge ausgeführt werden müssen, z. B. abhängig vom Betriebssystem, welche Softwarepakete installiert werden müssen und wie sie konfiguriert werden sollen usw.

Benutzerdefinierte Fakten

Wussten Sie auch, dass Sie Ihre eigenen benutzerdefinierten Fakten erstellen können, die von Ansible erfasst werden können? Ja, das kannst du. Also, wie gehst du vor? Lassen Sie uns die Gänge wechseln und sehen, wie.

Der erste Schritt besteht darin, eine /etc/ansible/facts zu erstellen.d Verzeichnis auf dem verwalteten oder entfernten Knoten.

Erstellen Sie in diesem Verzeichnis eine Datei(en) mit der Erweiterung .fact. Diese Datei (en) geben JSON-Daten zurück, 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 Fact-Datei namens date_time.tatsache, dass Datum und Uhrzeit abruft.

# mkdir -p /etc/ansible/facts.d# vim /etc/ansible/facts.d/date_time.fact

Fügen Sie die folgenden Zeilen hinzu.

#!/bin/bashDATE=`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 einem Ansible-Steuerknoten namens check_date erstellt.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 Variable ansible_local an. Das ansible_local speichert alle benutzerdefinierten Fakten.

Führen Sie nun das Playbook aus und beobachten Sie, wie Ansible Informationen abruft, die in der Fact-Datei gespeichert sind:

# ansible_playbook check_date.yml
Erstellen Sie Ansible Custom Facts
Fazit

Dies bringt uns zum Ende dieses Tutorials zum Arbeiten mit Ansible Variablen und Fakten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Previous post STEPHEN SCHWARTZ – BÖSER GUTER KOMPONIST
Next post 7 Möglichkeiten, wie Ihre Kinder die Kindersicherungssoftware umgehen könnten