Scanrail - Fotolia
Die YAML-Syntax von Ansible Playbooks zur Konfigurationsverwaltung
Ansible nutzt YAML zur Definition von Playbooks und gilt als eines der einfacheren Tools zur Konfigurationsverwaltung. So werden Playbooks erstellt.
Ansible gehört zu den einfachsten Tools zur Konfigurationsverwaltung. Die Ansible-Struktur kommt ohne Agents aus, während die Konfigurationen als sogenannte Playbooks in YAML geschrieben werden.
Statt auf Agents setzt Ansible auf SSH (Secure Socket Shell), während viele andere Tools Agents für die Kommunikation einsetzen. Am Anfang der Ansible-Nutzung steht das Anlegen eines Anwenderkontos sowohl auf dem Management-Node wie auch auf den mit Ansible verwalteten Nodes, um anschließend einen SSH-Schlüssel für dieses Nutzerkonto über den Management-Node zu erstellen. Im nächsten Schritt werden die SSH-Schlüsselpaare auf die verwalteten Nodes übertragen und die Ansible-Konfiguration ist fertig konfiguriert für die Verwaltung der Umgebung.
Die Ansible-Struktur zur Konfigurationsverwaltung
Mit Ansible werden die Konfigurationen für die verwalteten Nodes über sogenannte Playbooks definiert. Ein Playbook führt also auf den Nodes bestimmte Konfigurationsarbeiten durch. Module wiederum bieten diesen Playbooks die nötigen Konfigurationsaufgaben innerhalb der Ansible-Struktur. Module stellen also eine Abstraktionsschicht dar, über die Ansible sicherstellt, dass jede bestimmte Aufgabe auch auf unterschiedlichen Nodes in der gleichen Weise durchgeführt wird.
Das folgende Beispiel soll verdeutlichen, welche Aufgaben Module in der Ansible-Struktur übernehmen. Wir nehmen also an, ein Admin möchte einer Konfigurationsdatei eine Zeile hinzufügen. Auf einer Linux-Konsole würde man hierbei so etwas wie echo hello >> sometextfile verwenden. Ansible unterstützt aber unterschiedlichste Betriebssysteme, also wird dieses Vorgehen hier nicht zum Ziel führen.
Stattdessen stellt das Copy-Modul, das Dateien von einem lokalen auf ein entferntes System kopiert, sicher, dass Ansible die nötigen Änderungen an der Textdatei durchführt. Ganz unabhängig davon, welches Betriebssystem verwendet wird. Ansible bietet für diese und ähnliche Vorgänge standardmäßig hunderte unterschiedlichster Module, es können aber natürlich auch eigene geschrieben werden.
Auch das Erstellen eines Ansible Playbooks ist nicht besonders schwer. Allerdings wird hierfür YAML verwendet, eine Sprache, die anfällig für Syntax-Fehler ist, weil für die Objekte in einer Datei Texteinzüge mit Leerzeichen formatiert werden müssen. Das folgende Beispiel zeigt ein einfaches Ansible Playbook als YAML-Datei:
[student@workstation dev-vars-facts]$ cat playbook.yml
---
- name: Install fileserver packages
hosts: fileservers
tasks:
- name: Includes the variable
include_vars: package.yml
- name: Installs the package
include: install_package.yml
Dieses Playbook verweist auf unterschiedliche Orte, an dem externe Objekte definiert sind. Die Host-Definition stammt vom Inventory File. Anschließend werden die Konfigurationsaufgaben beschrieben, die ebenfalls externe Dateien benötigen. Die Datei package.yml enthält eine Liste an Variablen, während die Datei install_package.yml Definitionen der zu installierenden Pakete bietet.
Include-Funktionen erleichtern dabei das Aufrechterhalten konsistenter Konfigurationen über unterschiedliche Szenarien hinweg. Für einfache Aufgabendefinitionen wie in diesem Beispiel ist es natürlich nicht notwendig, mit vielen Include-Dateien zu arbeiten. In Enterprise-Umgebungen mit heterogenen IT-Systemen erleichtern diese Funktionen die Konfigurationsverwaltung aber enorm.
Dieses zweite Playbook weist abgesehen von den Host-Definitionen keine externen Abhängigkeiten auf und ist somit direkt bereit, die konfigurierte Aufgabe auszuführen:
[student@workstation imp-playbook]$ cat ftpserver.yml
---
- name: ftp server installed
hosts: servera.example.com
remote_user: devops
become: yes
become_method: sudo
become_user: root
tasks:
- block:
- name: latest vsftpd version installed
yum:
name: vsftpd
state: latest
- name: latest firewalld version installed
yum:
name: firewalld
state: latest
- block:
- name: firewalld permits ftp service
firewalld:
service: ftp
permanent: true
state: enabled
immediate: yes
- block:
- name: vsftpd enabled and running
service:
name: vsftpd
enabled: true
state: started
- name: firewalld enabled and running
service:
name: firewalld
enabled: true
state: started
...
Dieses Playbook besteht aus drei Code-Blöcken. Im ersten Block werden die vsftpd- und firewalld-Dienste gestartet. Der nächste Block schreibt die Konfiguration für firewalld, um eingehenden FTP-Traffic zu erlauben. Der letzte Block des Ansible Playbooks startet schließlich beide Services.
Sobald Ansible das Playbook generiert hat, kann es über den Befehl ansible-playbook gefolgt vom Namen des Playbooks gestartet werden. Die Instruktionen im Playbook erledigen dann die vorab definierte Konfigurationsarbeit.
Vor allem in sehr großen IT-Umgebungen kommt das Ansible-Management per Kommandozeile allerdings an seine Grenzen. Daher bietet Red Hat mit Ansible Tower auch eine weitaus stärker integrierte Konsole an. Ansible Tower kombiniert ein Dashboard und ein graphisches Inventarsystem mit rollenbasierter Zugriffskontrolle, Scheduling und einem Benachrichtigungsservice. Ansible Tower macht auch das Management der unterschiedlichsten Ansible-Einstellungen einfacher und bietet zudem eine Weboberfläche, über die sich der aktuelle Status der Ansible-Umgebung überprüfen lässt.
Folgen Sie SearchDataCenter.de auch auf Twitter, Google+, Xing und Facebook!