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