Umgang mit Ansible-Variablen und Fakten – Teil 8

Wir haben Variablen in dieser Ansible-Serie erwähnt, um Sie ein wenig zu beruhigen. EIN VariableWie in vielen Programmiersprachen ist es im Wesentlichen ein Schlüssel, der einen Wert darstellt.

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.

Playbook-Variablen in Ansible
Playbook-Variablen in Ansible

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] }}"
Array von Variablen in Ansible
Array von Variablen in Ansible

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 }}"
Liste der möglichen Array-Variablen
Liste der möglichen Array-Variablen

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
Ansible Variablen auflisten
Ansible Variablen auflisten

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 Get System Facts
Ansible Get System Facts

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
Erstellen Sie Ansible Custom Facts
Erstellen Sie Ansible Custom Facts
Fazit

Dies bringt uns zum Ende dieses Tutorials über die Arbeit mit Ansible-Variablen und Fakten.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *