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

So verwenden Sie Variablen im Ansible Playbook

Wenn Sie in Python, Java, C, C++ oder einer anderen Programmiersprache programmiert haben, dann sind Variablen nicht fremd. Genau wie in Programmiersprachen werden Variablen in Ansible verwendet, um einen Wert zu speichern.

In Ansible bieten Variablen die dringend benötigte Flexibilität in Playbooks, Vorlagen und Inventaren, wie wir später in diesem Tutorial sehen werden. Eingebaute Variablen können verwendet werden, um Systeminformationen wie Hostname, Systemarchitektur, Schnittstellen usw. bereitzustellen. Variablen können auch verwendet werden, um Zeichenfolgen zu ersetzen, und auch in Schleifen, um einen bestimmten Satz von Werten zu durchlaufen.

Ein gültiger Variablenname besteht aus den folgenden Zeichen

  • Briefe
  • Zahlen
  • Unterstriche
  • Eine Kombination aus zwei oder allen der oben genannten Punkte

Eine Variable SOLLTE IMMER MIT EINEM BUCHSTABEN BEGINNEN UND KEINE LEERZEICHEN ENTHALTEN.

Beispiele für akzeptable Variablennamen sind:

  •  Plattenspieler
  •  turn_table
  •  Plattenspieler01
  •  turntable_01

Die folgenden Namen gelten nicht als gültige Variablennamen

  •  Drehtisch
  •  Plattenspieler
  •  01Plattenspieler
  •  01

Sehen wir uns nun verschiedene Anwendungsfälle von Variablen in Ansible an

Variablen in Playbooks

Wie Sie wissen, ist ein Playbook eine Sammlung von Spielen oder Aufgaben, die auf einem Remote-System ausgeführt werden sollen. In Playbooks sind Variablen praktisch, um zu bestimmen, wie Aufgaben ausgeführt werden können. Das Zuweisen eines Werts zu einer Variablen in einem Playbook ist ziemlich einfach und unkompliziert.

Beginnen Sie mit dem Aufruf der vars Rufen Sie dann den Variablennamen auf, gefolgt vom Wert wie gezeigt.

---
 - hosts: all
   vars:
     salutations: Hello guys!
   tasks:
   - name: Ansible Variable Basic Usage
       debug:
       msg: "{{ salutations }}"

Im obigen Playbook lautet der Variablenname  Salutations und der Wert ist Hallo Welt! Wenn das Playbook ausgeführt wird, wird auf den Wert des Playbooks zugegriffen, indem die Variable wie oben gezeigt zwischen geschweiften Klammern platziert wird. Bei der Ausführung gibt das Playbook die Nachricht „Hallo Leute aus ’ auf dem Terminal.

Variablen mit Arrays

Sie können Arrays verwenden und sie Variablen zuweisen, wie in der folgenden Syntax gezeigt:

vars:

Arrayname:

– wert1

– wert2

Das folgende Playbook enthält beispielsweise ein Array mit 5 Studentennamen, die in einer Variablen namens students gespeichert sind. Sie können auf die Schülernamen durch Indexierung zugreifen (wie bei Arrays in jeder anderen Programmiersprache). Um beispielsweise den Namen „Arthur“ aus der Arrayliste abzurufen, verwenden Sie die Syntax „students“ [2] wie unten gezeigt.

- hosts: all
  vars:
    students:
      - Mark
      - Melisa
      - Arthur
      - Kevin
      - Lisa

  tasks:
  - name: Ansible List variable Example
    debug:
      msg: "{{ students[2] }}"

Variablen mit Wörterbüchern

In der Array-Liste können Sie jeden der Einträge weiter definieren, indem Sie ein Schlüssel-Wert-Paar verwenden, das eine so genannte Wörterbuchliste bildet. Die Syntax ist unten gezeigt

vars:

Arrayname:

Wörterbuchname1:

Wert1:Artikelwert1

Wert2:Artikelwert2

Wörterbuchname2:

Wert1:Artikelwert1

Wert2:Artikelwert2

Unter Verwendung unseres vorherigen Beispiels können wir unten Wörterbuchlisten haben

- hosts: all
  vars:
    students:
         - Mark: 
             city: Melbourne
             address: 0045-0987-8642
         - Angela: 
             city: Sydney
             address: 3456-7685-9087

Um auf das Wörterbuch zuzugreifen, fügen Sie einfach die Aufgabe unten hinzu

  tasks:
    - debug:
        var: students

Variablen in Inventardateien

Wenn Sie verschiedene Hostsysteme mit ähnlichen Attributen oder Werten haben, können Sie sogenannte Gruppenvariablen definieren. Diese werden verwendet, um die Attribute zuzuweisen, die allen Hosts gemeinsam sind.

Zum Beispiel:

Nehmen wir an, wir haben 2 Webserver:webserver_1 und webserver_2 die beide Port 443 überwachen und deren NTP-Server us.pool.ntp.org ist. Die Inventardatei wird wie abgebildet angezeigt:

[web_servers]
webserver_1
webserver_2

[web_servers:vars]
http_port=443
ntp_server=us.pool.ntp.org

In der YAML-Playbook-Datei würde dies wie gezeigt dargestellt

   web_servers:
     hosts:
       web_server_1:
       web_server_2:
         
         vars:
           http_port=80
           ntp_server=us.pool.ntp.org

Der erste Abschnitt definiert die Remote-Hosts, die webserver_1 sind und Webserver_1 , während der zweite Abschnitt die gemeinsamen Attribute der beiden Server zusammenfasst. Dies ist eine sehr bequeme Methode zum Anwenden von Variablen, die mehreren Hostsystemen gemeinsam sind.

Host- und Gruppenvariablen

Obwohl Sie Variablen in der Inventardatei angeben können, rät die Standardpraxis davon ab, Variablen in der Inventardatei zu speichern. Hier kommen die Host- und Gruppenvariablendateien ins Spiel.

In einer Hostvariablendatei gilt die Variable nur für ein Hostsystem in der Bestandsdatei. Die Hostvariablendatei wird normalerweise in host_vars gespeichert Verzeichnis, das normalerweise in /etc/ansible/ angegeben ist Pfad.

Betrachten Sie die Inventardatei unten, in der wir 2 Server haben, die jeweils unterschiedliche NTP-Server verwenden

[web_servers]
webserver_1  ntp_server=uk.pool.ntp.org
webserver_2  ntp_server=de.pool.ntp.org

Anstatt die Variable ntp_server in der Bestandsdatei anzugeben, erstellen Sie zwei Hostvariablendateien im Verzeichnis host_vars, wobei der Dateiname mit jedem der Hostnamen der Hostsysteme übereinstimmt:

# vim /etc/ansible/host_vars/webserver_1
---
ntp_server=uk.pool.ntp.org

# vim /etc/ansible/host_vars/webserver_2
---
ntp_server=de.pool.ntp.org

Wenn die Hostsysteme dieselben Werte teilen, erstellen Sie eine Gruppenvariablendatei in den  group_vars Verzeichnis. Der Dateiname der Gruppenvariablen sollte mit der Gruppe der Hosts übereinstimmen

Betrachten Sie die Inventardatei unten

[web_servers]
webserver_1
webserver_2
[web_servers:vars]
ansible_user=root
ansible_port=22

Der zweite Abschnitt kann wie gezeigt als Datei im Verzeichnis group_vars definiert werden. Dies sollte sich im Verzeichnis /etc/ansible befinden. Denken Sie daran, dass der Name der Datei mit dem Gruppennamen identisch sein sollte.

# vim /etc/ansible/group_vars/web_servers
---
ansible_user=root
ansible_port=22

Hier sind die Variablen für alle Hosts der Gruppe mit dem Namen  web_servers zugänglich.

Spezielle Variablen im Ansible Playbook

Eine weitere Kategorie von Variablen sind spezielle Variablen. Dies sind integrierte Variablen, die nicht vom Benutzer festgelegt werden können und die Ansible immer überschreibt. Um eine Liste eindeutiger Systemvariablennamen zu erhalten, führen Sie den Befehl

aus

# ansible -m Hostname einrichten

Beispiele für solche speziellen Variablen sind:

  • ansible_all_ipv4_addresses
  • ansible_architecture ,
  • ansible_bios_version ,
  • ansible_os_family ,
  • ansible_distribution,

Dadurch wird eine Ausgabe im JSON-Format angezeigt

# ansible -m setup localhost

Aufgrund ihrer Flexibilität und Benutzerfreundlichkeit erfüllen Variablen sowohl in Playbooks als auch in Inventardateien einen wesentlichen Zweck. Sie vermeiden unnötige Wiederholungen und machen das Leben des Systemadministrators viel einfacher.

Lesen Sie auch: Verwendung von Schleifen in Ansible Playbook

Auch lesen :Verwendung von Ansible Vault zur Sicherung sensibler Daten


Linux
  1. Wie ich Ansible und Anacron für die Automatisierung verwende

  2. So verwenden Sie Ansible zum Einrichten der Systemüberwachung mit Prometheus

  3. So erstellen Sie ein Ansible-Playbook

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

  5. Wie verwende ich atomare Variablen in C?

So erstellen und verwenden Sie benutzerdefinierte Fakten in Ansible

So verwenden Sie Variablen in Shell-Skripten

So definieren und verwenden Sie Handler in Ansible Playbooks

So verwenden Sie die Jinja2-Vorlage in Ansible

Wie man Ansible verwendet, um Vim zu konfigurieren

So verwenden Sie Ansible zum Senden einer E-Mail mit Google Mail