Realisierung eigener Plugins, Lookups, Filter oder Callbacks

Ansible bietet eine leistungsstarke Möglichkeit, IT-Prozesse zu automatisieren, aber manchmal reichen die Standardfunktionen nicht aus, um spezielle Anforderungen abzudecken. In solchen Fällen bietet Ansible Entwicklern die Möglichkeit, eigene Plugins, Lookups, Filter und Callbacks zu erstellen. Diese Erweiterungen können verwendet werden, um die Standardfunktionalität von Ansible zu erweitern und maßgeschneiderte Lösungen für spezielle Anwendungsfälle zu bieten.

In diesem Tutorial werden wir erklären, wie man eigene Plugins, Lookups, Filter und Callbacks erstellt, um die Flexibilität von Ansible zu maximieren.


1. Einführung in Ansible-Erweiterungen

Ansible bietet mehrere Arten von Erweiterungen, die Sie selbst erstellen können:

  • Plugins: Erweitern die Funktionalität von Ansible in verschiedenen Bereichen wie Aktionen, Verbindungen, Cache usw.
  • Lookups: Ermöglichen das Abrufen von Daten aus externen Quellen wie Dateien oder APIs.
  • Filter: Modifizieren und transformieren Daten innerhalb von Ansible-Playbooks.
  • Callbacks: Reagieren auf bestimmte Ereignisse während der Ausführung eines Playbooks, wie z. B. das Protokollieren von Statusinformationen.

2. Eigene Plugins in Ansible erstellen

Ansible Plugins sind Python-Skripte, die unterschiedliche Aufgaben in einem Playbook unterstützen. In diesem Beispiel erstellen wir ein Aktions-Plugin, das eine benutzerdefinierte Aktion in einem Playbook ausführt.

2.1 Beispiel: Eigene Aktion mit einem Plugin

Erstellen Sie die Verzeichnisstruktur:

my_ansible_plugins/action_plugins/

Legen Sie nun das Python-Skript my_custom_action.py im Verzeichnis action_plugins ab:

from ansible.plugins.action import ActionBase

class ActionModule(ActionBase):

    def run(self, tmp=None, task_vars=None):
        # Parameter empfangen
        result = super(ActionModule, self).run(tmp, task_vars)
        my_param = self._task.args.get('my_param')

        # Benutzerdefinierte Aktion
        result['changed'] = True
        result['msg'] = f"Aktion mit Parameter '{my_param}' ausgeführt."

        return result

2.2 Verwendung des Plugins im Playbook

Sobald das Plugin erstellt ist, können Sie es in einem Playbook verwenden:

---
- hosts: localhost
  tasks:
    - name: Eigene Aktion aufrufen
      my_custom_action:
        my_param: "Hallo Welt!"

Erklärung:

  • Dieses einfache Aktions-Plugin empfängt einen Parameter my_param und gibt eine Erfolgsmeldung mit diesem Parameter zurück.
  • Sie können nun komplexere Aktionen innerhalb des Plugins definieren.

3. Eigene Lookup-Plugins erstellen

Lookups sind eine großartige Möglichkeit, um Daten von externen Quellen in ein Playbook zu integrieren. Sie können z. B. Inhalte aus Dateien, Datenbanken oder APIs abrufen.

3.1 Beispiel: Eigenes Lookup-Plugin

Erstellen Sie die Verzeichnisstruktur:

my_ansible_plugins/lookup_plugins/

Legen Sie das Python-Skript my_custom_lookup.py im Verzeichnis lookup_plugins ab:

from ansible.plugins.lookup import LookupBase

class LookupModule(LookupBase):

    def run(self, terms, variables=None, **kwargs):
        # Empfangene Parameter
        my_param = terms[0]

        # Hier kann man externe Daten abrufen oder manipulieren
        result = [f"Lookup-Ergebnis für: {my_param}"]

        return result

3.2 Verwendung des Lookup-Plugins

Das Lookup-Plugin kann in einem Playbook wie folgt verwendet werden:

---
- hosts: localhost
  tasks:
    - name: Verwendung des eigenen Lookups
      debug:
        msg: "{{ lookup('my_custom_lookup', 'Beispieldaten') }}"

Erklärung:

  • Das Lookup-Plugin empfängt einen Parameter und gibt ihn in einer modifizierten Form zurück.
  • Diese Art von Plugin kann erweitert werden, um Daten von externen APIs, Datenbanken oder Dateien abzurufen.

4. Eigene Filter-Plugins erstellen

Filter werden verwendet, um Variablen oder Daten in Playbooks zu transformieren. Sie können damit z. B. Textformatierungen, Berechnungen oder logische Operationen durchführen.

4.1 Beispiel: Eigenes Filter-Plugin

Erstellen Sie die Verzeichnisstruktur:

my_ansible_plugins/filter_plugins/

Legen Sie das Python-Skript my_custom_filter.py im Verzeichnis filter_plugins ab:

def reverse_string(value):
    return value[::-1]

class FilterModule(object):
    def filters(self):
        return {
            'reverse_string': reverse_string
        }

4.2 Verwendung des Filter-Plugins

Verwenden Sie den Filter im Playbook wie folgt:

---
- hosts: localhost
  tasks:
    - name: Verwende den benutzerdefinierten Filter
      debug:
        msg: "{{ 'Hallo Ansible' | reverse_string }}"

Erklärung:

  • Dieses Filter-Plugin dreht den übergebenen String um und gibt ihn in umgekehrter Reihenfolge zurück.
  • Filter-Plugins können in komplexeren Szenarien nützlich sein, um Datentransformationen durchzuführen.

5. Eigene Callback-Plugins erstellen

Callback-Plugins reagieren auf Ereignisse während der Ausführung eines Playbooks. Sie können verwendet werden, um benutzerdefinierte Protokolle zu schreiben, Benachrichtigungen zu senden oder Aktionen bei bestimmten Playbook-Ereignissen auszulösen.

5.1 Beispiel: Eigenes Callback-Plugin

Erstellen Sie die Verzeichnisstruktur:

my_ansible_plugins/callback_plugins/

Legen Sie das Python-Skript my_custom_callback.py im Verzeichnis callback_plugins ab:

from ansible.plugins.callback import CallbackBase

class CallbackModule(CallbackBase):

    def v2_runner_on_ok(self, result):
        # Ausgabe bei erfolgreicher Task
        print(f"TASK OK: {result._task.name}")

5.2 Verwendung des Callback-Plugins

Das Callback-Plugin wird automatisch von Ansible bei bestimmten Ereignissen aufgerufen, ohne dass es im Playbook explizit erwähnt werden muss. Es gibt beim erfolgreichen Abschluss einer Task eine Meldung aus.

Um das Callback-Plugin zu verwenden, platzieren Sie es im Ordner callback_plugins und führen ein Playbook aus. Die Ausgabe wird dann in der Konsole erscheinen.


6. Fazit

Die Möglichkeit, eigene Plugins, Lookups, Filter und Callbacks in Ansible zu erstellen, bietet Ihnen die Flexibilität, die Automatisierung an Ihre spezifischen Anforderungen anzupassen. Ob Sie benutzerdefinierte Aktionen ausführen, Daten aus externen Quellen abrufen oder spezielle Protokollierungen und Benachrichtigungen einrichten möchten – mit diesen Erweiterungen können Sie Ansible nach Belieben anpassen.

Durch die Erstellung eigener Plugins und Erweiterungen können Sie Ihre Automatisierungs-Playbooks effizienter gestalten und maßgeschneiderte Lösungen für Ihre IT-Infrastruktur entwickeln.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert