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

Dekonstruktion eines Ansible-Playbooks

Dieser Artikel beschreibt die verschiedenen Teile eines Ansible-Playbooks, beginnend mit einem sehr breiten Überblick darüber, was Ansible ist und wie Sie es verwenden können. Ansible ist eine Möglichkeit, eine leicht lesbare YAML-Syntax zu verwenden, um Playbooks zu schreiben, die Aufgaben für Sie automatisieren können. Diese Playbooks können sehr einfach bis sehr komplex sein und ein Playbook kann sogar in ein anderes eingebettet sein.

Installation von httpd mit einem Playbook

Nachdem Sie nun über dieses Grundwissen verfügen, schauen wir uns ein grundlegendes Playbook an, das den httpd installiert Paket. Ich habe eine Inventardatei mit zwei angegebenen Hosts und habe sie im Web abgelegt Gruppe:

[root@ansible test]# cat inventory
[web]
ansibleclient.usersys.redhat.com
ansibleclient2.usersys.redhat.com

Schauen wir uns das eigentliche Playbook an, um zu sehen, was es enthält:

[root@ansible test]# cat httpd.yml
---
- name: this playbook will install httpd
  hosts: web
  tasks:
    - name: this is the task to install httpd
      yum:
        name: httpd
        state: latest

Wenn Sie dies aufschlüsseln, sehen Sie, dass die erste Zeile im Playbook --- ist . Dadurch wissen Sie, dass dies der Anfang des Playbooks ist. Als nächstes gab ich dem Stück einen Namen. Dies ist nur ein einfaches Playbook mit nur einem Play, aber ein komplexeres Playbook kann mehrere Plays enthalten. Als Nächstes gebe ich die Hosts an, auf die ich abzielen möchte. In diesem Fall wähle ich das Web aus Gruppe, aber ich hätte auch ansibleclient.usersys.redhat.com angeben können oder ansibleclient2.usersys.redhat.com stattdessen, wenn ich nicht auf beide Systeme abzielen wollte. Die nächste Zeile teilt Ansible mit, dass Sie sich mit den Aufgaben befassen werden, die die eigentliche Arbeit erledigen. In diesem Fall hat mein Playbook nur eine Aufgabe, aber Sie können mehrere Aufgaben haben, wenn Sie möchten. Hier gebe ich an, dass ich den httpd installieren werde Paket. Die nächste Zeile sagt, dass ich das yum verwenden werde Modul. Ich sage ihm dann den Namen des Pakets, httpd , und dass ich möchte, dass die neueste Version installiert wird.

[ Leser mochten auch: Erste Schritte mit Ansible ]

Wenn ich die httpd.yml ausführe Playbook zweimal, bekomme ich das auf dem Terminal:

[root@ansible test]# ansible-playbook httpd.yml

PLAY [this playbook will install httpd] ************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]

TASK [this is the task to install httpd] ***********************************************************************************************************
changed: [ansibleclient2.usersys.redhat.com]
changed: [ansibleclient.usersys.redhat.com]

PLAY RECAP *****************************************************************************************************************************************
ansibleclient.usersys.redhat.com : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
ansibleclient2.usersys.redhat.com : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
[root@ansible test]# ansible-playbook httpd.yml

PLAY [this playbook will install httpd] ************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]

TASK [this is the task to install httpd] ***********************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]

PLAY RECAP *****************************************************************************************************************************************
ansibleclient.usersys.redhat.com : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
ansibleclient2.usersys.redhat.com : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

[root@ansible test]#

Beachten Sie, dass ich in beiden Fällen ein ok=2 erhalten habe , aber im zweiten Durchlauf des Playbooks wurde nichts geändert. Die neueste Version von httpd war zu diesem Zeitpunkt bereits installiert.

Um Informationen über die verschiedenen Module zu erhalten, die Sie in einem Playbook verwenden können, können Sie das ansible-doc verwenden Befehl. Zum Beispiel:

[root@ansible test]# ansible-doc yum
> YUM    (/usr/lib/python3.6/site-packages/ansible/modules/packaging/os/yum.py)
Installs, upgrade, downgrades, removes, and lists packages and groups with the `yum' package manager. This module only works on Python 2. If you require Python 3 support, see the [dnf] module.

  * This module is maintained by The Ansible Core Team
  * note: This module has a corresponding action plugin.
< output truncated >

Es ist schön, ein Playbook zu haben, das httpd installiert , aber um es flexibler zu gestalten, können Sie Variablen verwenden, anstatt das Paket als httpd fest zu codieren . Dazu könnten Sie ein Playbook wie dieses verwenden:

[root@ansible test]# cat httpd.yml
---
- name: this playbook will install {{ myrpm }}
  hosts: web
  vars:
    myrpm: httpd
  tasks:
    - name: this is the task to install {{ myrpm }}
      yum:
        name: "{{ myrpm }}"
        state: latest

Hier können Sie sehen, dass ich einen Abschnitt namens "vars" hinzugefügt und eine Variable myrpm deklariert habe mit dem Wert httpd . Dann kann ich diese myrpm verwenden Variable im Playbook und passe sie an das an, was ich installieren möchte. Da ich außerdem das zu installierende RPM mithilfe einer Variablen angegeben habe, kann ich überschreiben, was ich in das Playbook geschrieben habe, indem ich die Variable in der Befehlszeile mit -e spezifiziere :

[root@ansible test]# cat httpd.yml
---
- name: this playbook will install {{ myrpm }}
  hosts: web
  vars:
    myrpm: httpd
  tasks:
    - name: this is the task to install {{ myrpm }}
      yum:
        name: "{{ myrpm }}"
        state: latest
[root@ansible test]# ansible-playbook httpd.yml -e "myrpm=at"

PLAY [this playbook will install at] ***************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]

TASK [this is the task to install at] **************************************************************************************************************
changed: [ansibleclient2.usersys.redhat.com]
changed: [ansibleclient.usersys.redhat.com]

PLAY RECAP *****************************************************************************************************************************************
ansibleclient.usersys.redhat.com : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
ansibleclient2.usersys.redhat.com : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@ansible test]#

Eine andere Möglichkeit, die Aufgaben dynamischer zu gestalten, ist die Verwendung von Schleifen . In diesem Snippet können Sie sehen, dass ich rpms deklariert habe als Liste, um mailx zu haben und postfix . Um sie zu verwenden, verwende ich loop in meiner Aufgabe:

 vars:
    rpms:
      - mailx
      - postfix

  tasks:
    - name: this will install the rpms
      yum:
        name: "{{ item }}"
        state: installed
      loop: "{{ rpms }}"

Sie haben vielleicht bemerkt, dass bei der Wiedergabe dieser Stücke Fakten über die Gastgeber gesammelt werden:

TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]


Diese Fakten können als Variablen verwendet werden, wenn Sie das Spiel ausführen. Sie könnten zum Beispiel eine motd.yml haben Datei, die Inhalte wie folgt festlegt:

“This is the system {{ ansible_facts['fqdn'] }}.
This is a {{ ansible_facts['distribution'] }} version {{ ansible_facts['distribution_version'] }} system.”

Für jedes System, auf dem Sie dieses Playbook ausführen, werden der korrekte vollqualifizierte Domänenname (FQDN), die Betriebssystemverteilung und die Verteilungsversion festgelegt, auch ohne dass Sie diese Variablen manuell definieren.

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

Abschluss

Dies war eine kurze Einführung in das Aussehen von Ansible-Playbooks, was die verschiedenen Teile tun und wie Sie weitere Informationen zu den Modulen erhalten. Weitere Informationen finden Sie in der Ansible-Dokumentation.


Linux
  1. So erstellen Sie ein Ansible-Playbook

  2. Verwenden eines Ansible-Playbooks zum Verwalten von Workstation- und Server-Updates

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

  4. Konfigurieren Sie Ihren Chrony-Daemon mit einem Ansible-Playbook

  5. So installieren Sie Softwarepakete mit einem Ansible-Playbook

So verwenden Sie Handler in Ansible Playbook

So erstellen Sie Ansible-Rollen und verwenden sie im Playbook

Ansible Guide:Ansible Playbook für LEMP Stack erstellen

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

Erste Schritte mit Ansible Playbooks

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