© BIRTHPIX/Shutterstock.com
Eigene Module für Ansible aufsetzen

Funktionsvielfalt vergrößern


Ansible von Red Hat hat sich in den letzten Jahren zu einem beliebten Konfigurationswerkzeug gemausert und spielt eine wichtige Rolle bei DevOps und Cloud-Computing. Der reiche Fundus an eingebauten Modulen begründet die umfangreiche Funktionalität. Dieser Artikel zeigt, wie Sie selbst Module aufsetzen können, um diese Funktionsvielfalt weiter zu vergrößern. Dabei kommt Python zu Einsatz.

Ob Provisioner, Fernkonfigurationswerkzeug oder Tool für Infrastructure as Code: Ansible [1] aus dem Portfolio von Red Hat zählt mittlerweile zu den beliebtesten Lösungen für die automatisierte Steuerung von physischen und virtuellen Serverlandschaften sowie für das Aufspielen von Applikationen. Die Open-Source-Software ist ausgereift (aktuelle Version 2.8) und verfolgt für die Konfiguration hauptsächlich von Linux-Servern, gegenüber anderen deklarativen Lösungen („was“ soll erreicht werden) wie Puppet und Chef, einen alternativen imperativen Ansatz („wie“ soll etwas erreicht werden). Ansible kommt ohne einen Agenten auf Zielmaschinen aus, wobei das unkomplizierte SSH-Protokoll als Zugang dient. Ansible wird auf breiter Front beim Cloud-Computing verwendet und dort unter anderem zur Bestückung von Maschinen-Images eingesetzt, hat aber auch in vielen DevOps-Toolchains einen festen Platz. Die Bedeutung der Software lässt sich daran ablesen, dass unter den abgefragten Themengebieten des Linux Professional Institute (LPI) für das Zertifikat 701 „DevOps Tools Engineer“ Ansible noch vor Docker liegt [2].

In einem früheren Artikel [3] ging es darum, wie Sie mit dem Einsatz von Rollen (Roles) ein komplexes Multi-Tier-Set-up mit Load Balancer, redundanten Web-Frontends und Datenbank-Backend für die Kernkomponente Ansible Engine (der auf CLI-Werkzeugen basierte Provisioner [4] wird im Gegensatz zu der Enterprise-Variante Ansible Tower so bezeichnet) aufsetzen können. Dabei wurde das Zusammenspiel von Maschineninventar (Inventory), Ablaufplan (Playbook) und den eingebauten Modulen vorgestellt. Diesmal möchte ich speziell das Thema der Module weiter vertiefen. Insbesondere geht es darum, wie Sie selbst solch eine Komponente für einen beliebigen Anwendungszweck aufsetzen und verwenden können.

Ansible-Module

Die mitgelieferten Module sind der Kern von Ansible. Mittlerweile ist die Zahl der offiziell eingebundenen Stücke bei Version 2.7 auf über 2 000 angewachsen, die Zahl kann auf Linux-Kontrollknoten ermittelt werden mit: $ ansible-doc -l | wc -l. Es gibt zunächst einmal die relativ übersichtliche Anzahl von Standardmodulen für Handgriffe auf Linux-Servern und das Aufspielen von Dateien und Jinja2-Templates. Darüber hinaus existieren viele spezielle Module, die den gesamten für die Provisionierung von Software benötigten Werkzeugkasten abbilden. Dieser beinhaltet den Umgang mit Versionskontrollsystemen, Codehostern wie GitHub, das Einspielen von Softwarepaketen für die verwendete Linux-Distribution aus offiziellen Paketquellen wie dem Python Package Index, Ruby Gems usw. Eine weitere große Gruppe bilden die vielen Module für die Kontrolle von Applikationen, wie zum Beispiel der Webserver Apache2 und nginx. Außerdem gibt es viele Module für die Benutzung der Services von Public-Cloud-Providern. Eine besondere Stellung nehmen die Module für die Steuerung von Network Appliances wie Routern, Switches oder Firewallsystemen ein, für die Ansible mittlerweile eine gewisse Domäne zukommt. Da diese Systeme oft über die normale Vorgehensweise des Provisioners (per SSH einloggen, Module mitsamt Ausführungspaket auf dem Zielsystem aufspielen und sie dort ausführen) nicht zugänglich sind, muss die Steuerung einer solchen Hardware anders umgesetzt werden.

Die Architektur von Ansible ist für die prozedurale Ausführung von Modulen ausgelegt. Dabei sind die vom Anwender zu schreibenden Playbooks dafür da, die zur Verfügung stehenden Module auf eigene Art und Weise zusammenzustellen, um auf den im Inventar verzeichneten Zielmaschinen (Hosts) bestimmte Ziele zu erreichen. Das bedeutet aber auch, dass die Funktionalität des Provisioners vollständig durch seine Module bestimmt ist – wenn man von der Möglichkeit absieht, mit Ansible Shellbefehle auf Hosts auszuführen. Zudem hat sich der Anwender immer danach zu richten, wie die Entwickler eines Moduls vorgesehen haben, es zu verwenden. Ob darunterliegende Werkzeuge wie etwa Git, SVN (Subversion), sed und reguläre Ausdrücke durch ein darüberliegendes Modul angemessen repräsentiert sind, daran kann in dem ein oder anderen Fall durchaus Kritik geübt werden.

Bei Ansible gehören die Module zum eingebauten Plug-in-System, weshalb beliebige Drittanbieterlösungen und auch eigene Entwicklungen unkompliziert eingesetzt werden können, um Unzulänglichkeiten bei den offiziell eingebundenen und mitgelieferten Stücken zu überwinden. Bei Modulen handelt es sich immer um vollständige, selbstständig laufende, kleinere Programme. Und da Ansible an der Schnittstelle zu den auf der Zielmaschine ausgeführten Modulen lediglich ein bestimmtes JSON-Objekt als Rückgabe erwartet, sind Sie bei der Wahl der Programmiersprache für eigene Lösungen grundsätzlich völlig frei. Sie geben in einem Playbook unter tasks: immer den Namen einer ausführbaren Datei im Modulsuchpfad an (ohne Suffixe wie .py). Da Ansible selbst mitsamt den mitgelieferten Modulen in Python geschrieben ist und aus dem Code der Engine auch einige Hilfsbibliotheken für eigene Entwicklungen zu Verfügung stehen, soll diese Sprache hier im Mittelpunkt stehen.

Listing 1: „mysql_secure_installation“

vagrant@contrib-stretch:~$ sudo mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. Set root password? [Y/n] Y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success! By default, a MariaDB installation has an anonymous user, allowing anyo...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang