So verwenden Sie ansible benutzerdefinierte Fakten

So verwenden Sie ansible benutzerdefinierte Fakten
Fakten sind wie Variablen in Ansible. Ansible erzeugt viele Fakten, abhängig von dem Host, den er automatisiert. Wenn Sie benötigen, können Sie auch benutzerdefinierte Fakten/Variablen in Ansible definieren.

Sie können drei Arten von benutzerdefinierten Fakten in Ansible definieren.

1) Globale Fakten: Diese Fakten sind von jedem Host in Ihrer Bestandsdatei zugänglich.
2) Gruppenfakten: Diese Tatsachen sind nur von einem bestimmten Satz von Hosts oder einer Hostgruppe zugänglich.
3) Fakten aus Gastgeber: Diese Tatsachen sind nur von einem bestimmten Host zugänglich zugänglich.

In diesem Artikel werde ich Ihnen zeigen, wie Sie mit ansiblen Fakten arbeiten können. Also lasst uns anfangen.

Voraussetzungen:

Wenn Sie die Beispiele dieses Artikels ausprobieren möchten,

1) Sie müssen Ansible auf Ihrem Computer installiert haben.
2) Sie müssen mindestens 6 Linux -Hosts haben, die für die Ansible -Automatisierung konfiguriert sind.

Es gibt viele Artikel unter LinuxHint, die der Installation von Ansible und Konfigurieren von Hosts für Ansible Automation gewidmet sind. Sie können sie bei Bedarf überprüfen.

Einrichten eines Projektverzeichnisses:

Lassen Sie uns vor dem Start ein Projektverzeichnis erstellen, damit wir unsere Projektdateien organisieren können.

Ein Projektverzeichnis erstellen Custom-Facts/ in deinem HEIM Verzeichnis, führen Sie den folgenden Befehl aus:

$ mkdir -pv benutzerdefinierte Fakten/Playbooks, Host_vars, Group_vars

Navigieren Sie nun zur Custom-Facts/ Verzeichnis wie folgt:

$ CD Custom-Facts/

Erstellen Sie eine ansible Konfigurationsdatei Ansible.CFG In Ihrem Projektverzeichnis wie folgt:

$ nano ansible.CFG

Geben Sie die folgenden Zeilen ein Ansible.CFG Datei.

[Standardeinstellungen]
Inventory = Hosts
host_key_checking = false

Sobald Sie fertig sind, drücken Sie + X gefolgt von Y Und um die zu retten Ansible.CFG Konfigurationsdatei.

Erstellen Sie nun eine Ansible Inventory -Datei Gastgeber In Ihrem Projektverzeichnis wie folgt:

$ nano Gastgeber

Geben Sie die folgenden Zeilen in Ihre ein Gastgeber Inventardatei.

VM1.Nodekite.com
VM2.Nodekite.com
[Netz]
VM3.Nodekite.com
VM4.Nodekite.com
[Datenbank]
VM [5: 6].Nodekite.com

Sobald Sie fertig sind, drücken Sie + X gefolgt von Y Und um die zu retten Gastgeber Inventardatei.

Führen Sie den folgenden Befehl aus, um alle verfügbaren Hosts in Ihrer Bestandsdatei aufzulisten:

$ ANSIBLE ALL-LIST-HOSTS

Wie Sie sehen können, habe ich sechs Hosts in meiner Bestandsdatei.

Um die Hosts in der verfügbaren aufzulisten Netz Gruppe Ihrer Bestandsdatei, führen Sie den folgenden Befehl aus:

$ ansible Web-List-Hosts

Wie Sie sehen können, habe ich zwei Gastgeber (VM3.Nodekite.com Und VM4.Nodekite.com) im Netz Gruppe meiner Bestandsdatei.

Um die Hosts in der verfügbaren aufzulisten Datenbank Gruppe Ihrer Bestandsdatei, führen Sie den folgenden Befehl aus:

$ ansible Datenbank-List-Hosts

Wie Sie sehen können, habe ich zwei Gastgeber (VM5.Nodekite.com Und VM6.Nodekite.com) im Datenbank Gruppe meiner Bestandsdatei.

Arbeiten mit Ansible Global Fakten:

In diesem Abschnitt werde ich Ihnen zeigen, wie Sie ansible globale Fakten/Variablen in Ihrer Bestandsdatei definieren und von Ihren Ansible -Playbooks auf sie zugreifen können. Ich werde Ihnen auch zeigen, wie Sie globale Fakten/Variablen in einer separaten Datei definieren können.

Öffnen Sie zuerst die Gastgeber Inventardatei mit dem folgenden Befehl:

$ nano Gastgeber

Fügen Sie nun die markierten Linien in Ihre hinzu Gastgeber Inventardatei. Sobald Sie fertig sind, drücken Sie + X gefolgt von Y Und um die Datei zu speichern.

''

Sie fügen globale Fakten in der hinzu All: Vars Abschnitt. Hier habe ich das hinzugefügt web_url Globale Tatsache.

Erstellen Sie nun ein neues Spielbuch print_global_fact.Yaml im Playbooks/ Verzeichnis wie folgt:

$ nano playbooks/print_global_fact.Yaml

Geben Sie dann die folgenden Zeilen in die print_global_fact.Yaml Datei.

- Hosts: Alles
Benutzer: Ansible
Aufgaben:
- Name: Drucken Sie den Wert der globalen Tatsache 'web_url' aus
debuggen:
msg: 'web url: web_url'

Der Zweck dieses Spielbuchs ist es, die zu drucken web_url Globale Tatsache.

Sobald Sie fertig sind, drücken Sie + X gefolgt von Y Und um die zu retten print_global_fact.Yaml Datei.

Jetzt leiten Sie die print_global_fact.Yaml Spielbuch wie folgt:

$ Ansible-Playbook Playbooks/print_global_fact.Yaml

Wie Sie sehen können, können alle Hosts in meiner Bestandsdatei auf die globale Tatsache zugreifen web_url.

Sie können auch globale Fakten in einer separaten Datei hinzufügen. Auf diese Weise können Sie die Inventardatei sauber halten. Mal sehen, wie es geht.

Lassen Sie uns zunächst die globalen Fakten aus dem entfernen Gastgeber Inventardatei.

$ nano Gastgeber

Entfernen Sie nun die markierten Zeilen aus der Bestandsdatei und drücken Sie + X, gefolgt von Y Und Um die Inventardatei zu speichern.

Erstellen Sie dann eine neue Datei alle im gruppe_vars/ Verzeichnis wie folgt:

$ nano Group_vars/all

Die globale Tatsache hinzuzufügen web_url, Geben Sie die folgende Zeile in die gruppe_vars/all Datei.

web_url: https: // www.LinuxHint.com

Sobald Sie fertig sind, drücken Sie + X gefolgt von Y Und um die zu retten gruppe_vars/all Datei.

Um zu überprüfen, ob Sie auf die globale Tatsache zugreifen können web_url, leiten Sie die print_global_fact.Yaml Playbook wieder wie folgt:

$ Ansible-Playbook Playbooks/print_global_fact.Yaml

Wie Sie sehen können, können alle Hosts in meiner Bestandsdatei auf die globale Tatsache zugreifen web_url.

Arbeiten mit Ansible -Gruppen -Fakten:

In diesem Abschnitt werde ich Ihnen zeigen, wie Sie ansible Gruppenfakten/Variablen in Ihrer Bestandsdatei definieren und von Ihren Ansible Playbooks auf sie zugreifen können. Ich werde Ihnen auch zeigen, wie Sie Gruppenfakten/Variablen in einer separaten Datei definieren können.

Öffnen Sie zuerst die Gastgeber Inventardatei mit dem folgenden Befehl:

$ nano Gastgeber

Wenn Sie eine Hostgruppe haben Gruppe 1, Dann fügen Sie Gruppenfakten/Variablen für diese Host -Gruppe in a hinzu Gruppe1: Vars Abschnitt Ihrer Bestandsdatei.

[Gruppe 1]

[Gruppe1: VARs]
variable1 = value1
variable2 = value2

Zum Beispiel die Gruppenfakten/Variablen hinzufügen Domain_name Und Database_backends für die Netz Hostgruppe können Sie die markierten Zeilen in Ihrer Bestandsdatei eingeben.

Sobald Sie fertig sind, drücken Sie + X gefolgt von Y Und Um die Inventardatei zu speichern.

Um zu drucken und zu testen, ob wir auf die Gruppenfakten zugreifen können, erstellen Sie ein neues Spielbuch print_group_facts.Yaml im Playbooks/ Verzeichnis wie folgt:

$ nano playbooks/print_group_facts.Yaml

Geben Sie die folgenden Zeilen in Ihre ein print_group_facts.Yaml Datei.

- Hosts: Web
Benutzer: Ansible
Aufgaben:
- Name: Gruppenfakten drucken
debuggen:
MSG: 'Domänenname: Domain_name Datenbank Backend: database_backend'

Sobald Sie fertig sind, drücken Sie + X gefolgt von Y Und um die zu retten print_group_facts.Yaml Datei.

Jetzt leiten Sie die print_group_facts.Yaml Spielbuch wie folgt:

$ Ansible-Playbook Playbooks/print_group_facts.Yaml

Wie Sie sehen können, die Gastgeber in der Netz Gruppe kann auf die zugreifen Domain_name Und Database_backend Gruppenfakten/Variablen.

Lassen Sie uns nun die Inventardatei aufräumen und sehen, wie Gruppenfakten/Variablen in einer separaten Datei hinzugefügt werden.

Öffnen Sie zuerst die Gastgeber Inventardatei wie folgt:

$ nano Fakten

Entfernen Sie die markierten Linien aus dem Gastgeber Inventardatei. Sobald Sie fertig sind, drücken Sie + X gefolgt von Y Und um die zu retten Gastgeber Inventardatei.

Wie wir Gruppenvariablen für die hinzufügen Netz Hostgruppe, eine neue Datei erstellen Netz (gleich wie der Gruppenname) in der gruppe_vars/ Verzeichnis wie folgt:

$ nano Group_vars/Web

Um die Gruppenfakten hinzuzufügen Domain_name Und Database_backend für die Netz Hostgruppe, fügen Sie die folgenden Zeilen in die hinzu gruppe_vars/web Datei.

Domain_Name: Web.LinuxHint.com
Database_backend: PGSQL

Sobald Sie fertig sind, drücken Sie + X gefolgt von Y Und um die zu retten gruppe_vars/web Datei.

Um zu überprüfen, ob die Hosts in der Netz Gruppe kann auf die Gruppenfakten zugreifen, die ausführen print_group_facts.Yaml Spielbuch wie folgt:

$ Ansible-Playbook Playbooks/print_group_facts.Yaml

Wie Sie sehen können, die Gastgeber in der Netz Gruppe kann auf die zugreifen Domain_name Und Database_backend Gruppenfakten/Variablen.

Arbeiten mit Ansible -Host -Fakten:

In diesem Abschnitt werde ich Ihnen zeigen, wie Sie Ansible -Host -Fakten/Variablen in Ihrer Bestandsdatei definieren und von Ihren Ansible Playbooks aus darauf zugreifen können. Ich werde Ihnen auch zeigen, wie Sie Host -Fakten/Variablen in einer separaten Datei definieren können.

Öffnen Sie zuerst die Gastgeber Inventardatei mit dem folgenden Befehl:

$ nano Gastgeber

Sie können Host -Fakten/Variablen nach dem DNS -Namen oder der IP -Adresse des Hosts in Ihrer Bestandsdatei wie folgt hinzufügen:

www.Domain1.com variable1 = value1 variable2 = value2
192.168.22.2 variable1 = value3 variable2 = value4

Zum Beispiel können Sie Host -Fakten/Variablen hinzufügen Domain_name Und Database_backend Für die Gastgeber VM3.Nodekite.com Und VM4.Nodekite.com, wie im Screenshot unten markiert.

Beachten Sie, dass der Wert der Domain_name Und Database_backend Fakten/Variablen sind für jeden Host unterschiedlich.

Sobald Sie fertig sind, drücken Sie die Host -Fakten/Variablen + X, gefolgt von Y Und um die zu retten Gastgeber Inventardatei.

Da ich dieselben Fakten/Variablen hinzugefügt habe wie im Beispiel für Gruppenfakten/Variablen, können wir die verwenden print_group_facts.Yaml Playbook, um die Zugänglichkeit dieser Fakten/Variablen zu testen.

Leiten Sie die print_group_facts.Yaml Spielbuch wie folgt:

$ Ansible-Playbook Playbooks/print_group_facts.Yaml

Wie Sie sehen können, sind die Host -Fakten/Variablen für ihren angegebenen Host zugänglich. Die Werte sind auch für jeden Host unterschiedlich.

Da sich jeder der Hosts in einer separaten Zeile in meiner Bestandsdatei befindet, könnte ich problemlos Host -Fakten/Variablen in meine Bestandsdatei hinzufügen. Wenn Sie jedoch Bereiche verwenden, um Hosts in Ihrer Bestandsdatei zu definieren, wie im folgenden Screenshot markiert, können Sie keine solchen Host -Fakten/Variablen hinzufügen.

Sie können Host -Fakten/Variablen in einer separaten Datei hinzufügen, genau wie Sie es für die globalen und Gruppenfakten/Variablen getan haben.

Fügen Sie Host -Fakten/Variablen für die hinzu VM5.Nodekite.com Host, eine neue Datei erstellen VM5.Nodekite.com (Wie der Name des Host -DNS) in der Host_vars/ Verzeichnis wie folgt:

$ nano host_vars/vm5.Nodekite.com

Sie können die Host -Fakten/Variablen hinzufügen db_port Und db_name Für den Gastgeber VM5.Nodekite.com mit den folgenden Zeilen.

DB_PORT: 3306
DB_NAME: Demo1

Sobald Sie fertig sind, drücken Sie + X gefolgt von Y Und um die zu retten VM5.Nodekite.com Datei.

Auf die gleiche Weise, um Host -Fakten/Variablen für den Host hinzuzufügen VM6.Nodekite.com, Erstellen Sie eine neue Datei VM6.Nodekite.com im Host_vars/ Verzeichnis wie folgt:

$ nano host_vars/vm6.Nodekite.com

Sie können die Host -Fakten/Variablen hinzufügen db_port Und db_name Für den Gastgeber VM6.Nodekite.com mit den folgenden Zeilen.

DB_PORT: 8877
db_name: app1

Sobald Sie fertig sind, drücken Sie + X gefolgt von Y Und um die zu retten VM6.Nodekite.com Datei.

Um zu drucken und zu testen, ob wir auf die Host -Fakten/Variablen zugreifen können, erstellen Sie ein neues Spielbuch print_host_facts.Yaml im Playbooks/ Verzeichnis wie folgt:

$ nano playbooks/print_host_facts.Yaml

Geben Sie nun die folgenden Zeilen in die print_host_facts.Yaml Datei.

- Hosts: Datenbank
Benutzer: Ansible
Aufgaben:
- Name: Fakten für Hostdrucken drucken
debuggen:
MSG: 'Datenbankname: db_name Datenbankport: db_port'

Sobald Sie fertig sind, drücken Sie + X gefolgt von Y Und um die zu retten print_host_facts.Yaml Datei.

Um zu überprüfen, ob der Host VM5.Nodekite.com Und VM6.Nodekite.com kann auf die Host -Fakten/Variablen zugreifen, die ausführen, die ausführen print_host_facts.Yaml Spielbuch wie folgt:

$ Ansible-Playbook Playbooks/print_host_facts.Yaml

Wie Sie sehen können, die Gastgeber VM5.Nodekite.com Und VM6.Nodekite.com kann auf die zugreifen db_name Und db_port Host -Fakten/Variablen.

Alles zusammenfügen: Ansible Fakten Vorrang

In diesem Abschnitt werde ich über eine ansible Fakt/variable Vorrang. Also lasst uns anfangen.

Bevor wir anfangen, lassen Sie uns die Bestandsdatei aufräumen.

Öffne das Gastgeber Inventardatei mit dem folgenden Befehl:

$ nano Gastgeber

Entfernen Sie den markierten Abschnitt aus der Bestandsdatei.

So sollte Ihre Inventardatei diesen Punkt betrachten.

Fügen Sie nun die markierte Zeile in Ihre Bestandsdatei hinzu. Diese Zeilen fügen die globalen Fakten/Variablen hinzu fact_scope Und Hafen.

Fügen Sie dann die markierten Zeilen in Ihre Bestandsdatei hinzu. Diese Zeilen fügen die hinzu fact_scope Und Hafen Fakten/Variablen für die Hosts in der Datenbank Gruppe.

Schließlich fügen Sie die hinzu fact_scope Und Hafen Host -Fakten/Variablen für die VM3.Nodekite.com Und VM4.Nodekite.com Hosts, wie im Screenshot unten markiert.

Sobald Sie fertig sind, drücken Sie + X gefolgt von Y Und Um die Inventardatei zu speichern.

Um den Wert der globalen, Gruppen- und Host -Fakten/Variablen zu drucken, erstellen Sie ein neues Spielbuch fakte_precendence.Yaml im Playbooks/ Verzeichnis wie folgt:

$ nano playbooks/fact_precedence.Yaml

Geben Sie die folgenden Zeilen in die ein fact_precedenz.Yaml Datei.

- Hosts: Alles
Benutzer: Ansible
Aufgaben:
- Name: Drucken Sie alle Fakten aus
debuggen:
msg: 'fact scope: fakte_scope port: port'

Sobald Sie fertig sind, drücken Sie + X gefolgt von Y Und um die zu retten fact_precedenz.Yaml Datei.

Führen Sie die Global-, Group- und Host -Fakten/Variablen aus fact_precedenz.Yaml Spielbuch wie folgt:

$ Ansible-Playbook Playbooks/fact_precedence.Yaml

Wie Sie sehen können, werden die Global-, Group- und Host -Fakten/Variablen gedruckt.

Beachten Sie, dass die Gruppenfakten/Variablen die globalen Fakten/Variablen ersetzt haben (1). Beachten Sie auch, dass die Host -Fakten/Variablen sowohl die Gruppe als auch die globalen Fakten/Variablen ersetzt haben (2).

Die Tatsache/variable Vorrang vorsiblen ist wie folgt:

Host -Fakt> Gruppenfakt> Globale Tatsache

Abschluss:

Nach dem Lesen dieses Artikels sollten Sie in der Lage sein, mit Ansible Global-, Group- und Host -Fakten/Variablen bequem zusammenarbeiten zu können. Erinnern Sie sich an die Ansible Custom -Tatsache, die vorrangig ist. Es wird Ihnen helfen, Ihre Ansible Playbooks leichter zu debuggen.