GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So übergeben Sie zusätzliche Variablen an ein Ansible-Playbook

Mit Ansible haben Benutzer die Flexibilität, externe Eingaben zu akzeptieren, während sie ihre Ansible-Playbooks ausführen, ohne den Inhalt des Ansible-Playbooks zu ändern. Dies kann über die Möglichkeit erfolgen, zusätzliche Variablen an ein Ansible-Playbook zu übergeben. Diese Funktion ist verfügbar, wenn Sie die Ansible CLI oder Ansible Tower verwenden.

Warum zusätzliche Variablen?

Warum sollte ich Variablen an ein Ansible-Playbook übergeben, wenn ich jede Variable und jeden Wert im Playbook oder in Variablendateien deklarieren kann? Dies war eine kürzlich gestellte Frage, die ich das letzte Mal erhalten habe, als ich das Konzept der Verwendung der Option „extra vars“ in Ansible erklärt habe.

Die Antwortlügen werden deutlich, wenn Sie auf Szenarien wie die folgenden stoßen:

  • Was werden Sie tun, wenn Sie den Wert einer Variablen ändern möchten? Playbook oder Variablendatei bearbeiten?
  • Was werden Sie tun, wenn Sie jedes Mal, wenn Sie das Ansible-Playbook ausführen, andere Werte für eine Variable verwenden möchten?
  • Was werden Sie tun, wenn Sie Werte für einige Variablen nur beim Ausführen des Playbooks verwenden möchten?

Auch wenn diese Fragen nur an der Oberfläche kratzen, wird klar:Wenn Sie nach Flexibilität suchen, ist Ansible das Extra variable Funktion ist die beste Antwort für die meisten dieser Lösungen. Die folgenden Anwendungsfälle erläutern, wie Sie zusätzliche Variablen verwenden können, um Ihre Ansible-Playbooks flexibler zu gestalten.

Hartcodierung von Hosts ist eine schlechte Idee

Sie erstellen beispielsweise ein Ansible-Playbook, das auf einer bestimmten Gruppe von Hosts ausgeführt wird, und legen diese Hosts auf eine Gruppe mit der Bezeichnung :webgroup fest. Wenn Sie Ihr Ansible-Playbook testen, aktivieren Sie es für die Produktionsnutzung.

Leider müssen das Betriebsteam oder die Ingenieure dieses Playbook auf einer anderen Gruppe von Hosts namens appgroup ausführen . Indem Sie den Namen der Hosts-Gruppe explizit im Ansible-Playbook fest kodieren, haben Sie dessen Flexibilität eingeschränkt und erfordern Änderungen im Ansible-Playbook selbst.

Was ist eine bessere Methode, um dieses Problem zu lösen?

Die Verwendung des Parameters --extra-vars und die Änderung des Ansible-Playbooks, um beim Deklarieren Ihrer Hosts eine Variable (z. B. Knoten) zu verwenden. Das folgende Beispiel veranschaulicht dies:

- hosts: "{{ nodes }}"
  vars_files:
    - vars/main.yml
  roles:
    - { role: geerlingguy.apache }

Um einen Wert an Knoten zu übergeben verwenden Sie die --extra-vars oder -e Option beim Ausführen des Ansible-Playbooks, wie unten gezeigt.

# ansible-playbook myplaybook.yaml --extra-vars "nodes=webgroup”

## Or

# ansible-playbook myplaybook.yaml --extra-vars "nodes=appgroup”

Dadurch wird verhindert, dass das Playbook versehentlich mit hartcodierten Hosts ausgeführt wird. Wenn das Ansible-Playbook die Hosts nicht angibt Während der Ausführung gibt Ansible einen Fehler aus und stoppt mit der Meldung Kein Wert für Knoten .

Steuerung Ihrer Variablen außerhalb von Ansible-Rollen

Ansible-Rollen sind eine Sammlung von Vorlagen, Dateien, Variablen, Modulen, Handlern und Aufgaben, die erstellt wurden, um die Wiederverwendung von Ansible-Code zu vereinfachen.

Innerhalb einer Ansible-Rollenverzeichnisstruktur haben Sie zwei Arten von Variablen in den folgenden Verzeichnissen:

  • defaults/main.yml - enthält Variablen für eine Rolle, die basierend auf der gewünschten Verwendung der Rolle angepasst werden können.
  • vars/main.yml - enthält Variablen für eine Rolle, die nicht geändert werden sollen.

* Da --extra-vars eine höhere Priorität als vars/main.yml hat, können Variablen mit dem Parameter --extra-vars geändert werden. Veränderbare Variablen sollten sich in defaults/main.yml befinden

Sie können die Variablenwerte mit --extra-vars festlegen .

Verwenden Sie beispielsweise einen anderen Port in einer Apache-Installation wie unten (vorausgesetzt, Variablen sind in defaults/main.yml definiert):

# ansible-playbook deploy-apache.yaml --extra-vars “apache_listen_port=8080”

Wenn Sie mehrere Werte übergeben müssen, versuchen Sie Folgendes:

# ansible-playbook deploy-apache.yaml --extra-vars “apache_listen_port=8080 apache_listen_port_ssl=443”

Wie übergebe ich Variablen, die Leerzeichen enthalten?

Sie müssen String-Werten mit Leerzeichen Anführungszeichen hinzufügen, um sie als zusätzliche Variablen zu übergeben:

# ansible-playbook deploy-apache.yaml --extra-vars "apache_ssl_protocol='All -SSLv2 -SSLv3'"

Abschluss

[ Brauchen Sie mehr zu Ansible? Nehmen Sie an einem kostenlosen technischen Überblickskurs von Red Hat teil. Ansible Essentials:Einfachheit in der Automatisierung Technischer Überblick. ]

Dies ist nur ein kleiner Einblick in die verschiedenen Optionen zum Übergeben von Variablen an ein Ansible-Playbook. Weitere Möglichkeiten zum Übergeben von Variablen an Ansible-Playbooks, z. B. die Verwendung von JSON und externen Variablendateien, finden Sie auf der Ansible-Dokumentationsseite.


Linux
  1. Dekonstruktion eines Ansible-Playbooks

  2. So erstellen Sie ein Ansible-Playbook

  3. So installieren Sie Softwarepakete mit einem Ansible-Playbook

  4. So übergeben Sie Umgebungsvariablen an Docker-Container

  5. Wie erstelle ich ein Ansible-Playbook, um Betriebssystemversionen der Remote-Hosts zu erhalten?

So verwenden Sie Handler in Ansible Playbook

So erstellen Sie Ansible-Rollen und verwenden sie im Playbook

So erstellen Sie Ansible Playbooks für die IT-Automatisierung

So definieren und verwenden Sie Handler in Ansible Playbooks

So erstellen und führen Sie eine Ansible Playbook-Datei aus

Wie man Ansible verwendet, um Vim zu konfigurieren