paint-brush
Ansible 101: Arbeiten mit Fakten und Vorlagenvon@cloudkungfu
972 Lesungen
972 Lesungen

Ansible 101: Arbeiten mit Fakten und Vorlagen

von cloud-kung-fu4m2024/01/30
Read on Terminal Reader

Zu lang; Lesen

Ansible nutzt Variablen, Fakten und Vorlagen, um anpassbare Automatisierungsworkflows zu erstellen. Variablen ermöglichen ein dynamisches Konfigurationsmanagement, Fakten liefern systemspezifische Informationen und Vorlagen generieren anpassbare Konfigurationsdateien. Dieser Ansatz stellt sicher, dass Playbooks in verschiedenen Umgebungen wiederverwendbar und flexibel sind.
featured image - Ansible 101: Arbeiten mit Fakten und Vorlagen
cloud-kung-fu HackerNoon profile picture
0-item

In Ansible sind Variablen und Fakten zusammen mit Vorlagen grundlegende Werkzeuge für die Erstellung flexibler Automatisierungsworkflows. Mithilfe von Variablen können Sie Ihre Konfigurationen dynamisch verwalten und ändern. Fakten sind eine spezielle Teilmenge von Variablen, die Ansible von den Remote-Systemen sammelt und kontextspezifische Informationen bereitstellt.


Vorlagen ermöglichen die Generierung von variablengesteuerten Konfigurationsdateien, sodass Ihre Playbooks an unterschiedliche Umgebungen und Szenarien anpassbar sind.


Diese Tools machen Playbooks wiederverwendbar und anpassbar, sodass Sie die harte Codierung von Werten vermeiden und eine Anpassung an verschiedene Umgebungen ermöglichen können.

Variablen und Fakten

Mithilfe von Variablen können Parameter geändert werden, ohne die Kernlogik des Playbooks zu ändern.

Wie Fakten, Variablen und Vorlagen zusammenarbeiten

  • Arten von Variablen:
    • Boolescher Wert: Wahre oder falsche Werte.

    • Liste: Eine geordnete Sammlung von Elementen.

    • Wörterbuch: Schlüssel-Wert-Paare für komplexe Datenstrukturen.

    • Registrierte Variablen: Erfasst die Ausgabe von Aufgaben zur späteren Verwendung in Ihrem Playbook.

    • Fakten: Automatisch erfasste Variablen, die Details zu den von Ihnen verwalteten Remote-Systemen liefern.


Hinweis: Vermeiden Sie Konflikte in Variablennamen, indem Sie die Klammernotation verwenden.


 - name: Print the distribution of the target hosts: all vars: curr_time: "{{ now() }}" tasks: - name: Distro Check ansible.builtin.debug: msg: "The target system is {{ ansible_facts['distribution'] }}. Timestamp: {{ curr_time }}"

Vorlagen und Dateien

Vorlagen in Ansible verwenden die Vorlagensprache Jinja2, um Dateien mithilfe von Variableninterpolation, Schleifen und Bedingungen dynamisch zu erstellen.


 - name: Write distro name hosts: all tasks: - name: Write distro name ansible.builtin.template: src: distro.j2 dest: /root/distro.txt mode: '644' # src: location of jinja2 template file # dest: location it will be copied to # permissions that will be granted to the file

Üben

Wir werden die Betriebssystemfamilie verwenden, um zu bestimmen, ob NGINX von Lighttpd installiert werden soll, und dann werden wir eine benutzerdefinierte Homepage auf dem Remote-Host bereitstellen, die NGINX enthält, alles ohne fest codierte Hostnamen.


  1. Klonen Sie das Repo.
 git clone https://github.com/perplexedyawdie/ansible-learn.git


2. Wechseln Sie in das Verzeichnis „facts-and-templates“.

 cd ansible-learn/facts-and-templates


3. Starten Sie die Umgebung mit Docker-Compose

 docker compose up -d --build


4. Stellen Sie eine SSH-Verbindung zum Ansible-Server her

 ssh -o StrictHostKeyChecking=no -o NoHostAuthenticationForLocalhost=yes root@localhost -p 2200 # password: test123

Variablen und Fakten

5. Erstellen Sie ein Playbook mit dem Namen server_setup.yaml . Hier richten wir NGINX und Lighttpd ein und geben dann den Namen der Distribution für jeden Remote-Host aus.


 - name: Install NGINX on Debian & Lighttpd on RedHat hosts: all vars: dev1: "Debian" dev2: "RedHat" tasks: - name: Install NGINX for Debian-based systems ansible.builtin.apt: name: nginx state: present when: ansible_facts['os_family'] == dev1 - name: Install Lighttpd for RedHat-based systems ansible.builtin.yum: name: lighttpd state: present when: ansible_facts['os_family'] == dev2 - name: Display the distribution ansible.builtin.debug: msg: "The server is running {{ ansible_facts['distribution'] }}"


6. Führen Sie ansible-lint.

 ansible-lint server_setup.yaml


7. Führen Sie das Playbook aus.

 ansible-playbook --key-file /root/.ssh/id_rsa_ansible -u root -i inventory.yaml server_setup.yaml


8. Bestätigen Sie, dass die Einrichtung erfolgreich war.

 ssh -i /root/.ssh/id_rsa_ansible root@server3 nginx -V ssh -i /root/.ssh/id_rsa_ansible root@server2 lighttpd -v ssh -i /root/.ssh/id_rsa_ansible root@server1 lighttpd -v

Vorlagen und Dateien

9. Erstellen Sie eine Jinja2-Vorlagendatei mit dem Namen index.html.j2


Es wird automatisch mit der Betriebssystemfamilie und -verteilung ausgefüllt.


 <html> <head> <title>Welcome to {{ ansible_facts['os_family'] }}</title> </head> <body> <h1>Server running on {{ ansible_facts['distribution'] }}</h1> </body> </html>


10. Erstellen Sie ein Playbook mit dem Namen custom_homepage.yaml.


Wir stellen die oben erstellte benutzerdefinierte Homepage auf NGINX bereit und starten dann den Server neu.


 - name: Deploy Custom Homepage and restart hosts: all vars: dev1: "Debian" dev2: "RedHat" tasks: - name: Create Homepage with Jinja2 Template for NGINX ansible.builtin.template: src: index.html.j2 dest: /var/www/html/index.html mode: '644' when: ansible_facts['os_family'] == dev1 notify: restart nginx handlers: - name: Restart NGINX listen: "restart nginx" ansible.builtin.service: name: nginx state: restarted when: ansible_facts['os_family'] == dev1


11. Lassen Sie den Linter laufen.

 ansible-lint custom_homepage.yaml


12. Führen Sie das Playbook aus.

 ansible-playbook --key-file /root/.ssh/id_rsa_ansible -u root -i inventory.yaml custom_homepage.yaml


13. Bestätigen Sie die Bereitstellung, indem Sie http://localhost:2203 in Ihrem Browser aufrufen.

Rekapitulieren

Toller Aufwand! 🙌 Wir haben gelernt, wie man Variablen und Fakten in einem Playbook verwendet und wie man mithilfe von Vorlagen dynamische Dateien erstellt. Als nächstes schauen wir uns die Modularisierung und Fehlerbehandlung an. Bis dahin, pass auf dich auf!