Realisierung eigener Module in bash oder pyhton

Ansible ist ein leistungsstarkes Open-Source-Tool zur Automatisierung von IT-Umgebungen. Eine der herausragenden Stärken von Ansible ist seine Flexibilität, die es ermöglicht, eigene Module zu erstellen. Diese Module erweitern die Funktionen von Ansible und helfen bei der Umsetzung spezifischer Anforderungen, die durch vorhandene Module nicht abgedeckt sind. In diesem Tutorial werden wir die Erstellung eigener Ansible-Module sowohl in Bash als auch in Python erläutern.

1. Einführung: Was sind Ansible-Module?

Ansible-Module sind in sich geschlossene Skripte, die eine bestimmte Aufgabe auf einem Zielsystem ausführen. Diese Module werden durch Ansible aufgerufen, um Aktionen wie das Kopieren von Dateien, das Starten von Diensten oder das Verwalten von Benutzern durchzuführen. Standardmäßig stellt Ansible eine Vielzahl von Modulen zur Verfügung, aber in vielen Fällen benötigen Sie maßgeschneiderte Lösungen. Hier kommen eigene Module ins Spiel.

2. Struktur eines eigenen Ansible-Moduls

Jedes Ansible-Modul, egal in welcher Sprache es geschrieben ist, sollte nach einem bestimmten Muster arbeiten:

  • Input: Das Modul empfängt Eingabewerte (Parameter) als JSON.
  • Output: Das Modul gibt seine Ergebnisse in einem JSON-Format zurück.
  • Return-Codes: Es sollte Rückgabewerte wie Erfolg oder Misserfolg beinhalten.

Diese Module können in verschiedenen Programmiersprachen geschrieben werden, aber Python und Bash sind zwei der häufigsten Sprachen, die verwendet werden.


3. Beispiel: Ansible-Modul in Bash

Bash eignet sich gut für kleinere und einfache Aufgaben. Hier ein Beispiel für ein einfaches Ansible-Modul in Bash, das eine Datei auf einem Remote-Host erstellt.

3.1 Skript für das Bash-Modul erstellen

#!/bin/bash

# Ansible Eingabe wird als JSON gelesen
read -r INPUT_JSON

# Parameter aus dem JSON extrahieren
FILENAME=$(echo "$INPUT_JSON" | jq -r '.filename')

# Datei erstellen
if touch "$FILENAME"; then
  # Erfolgreich: JSON-Antwort ausgeben
  echo "{\"changed\": true, \"msg\": \"Datei wurde erstellt: $FILENAME\"}"
else
  # Fehlerfall: Fehler melden
  echo "{\"failed\": true, \"msg\": \"Fehler beim Erstellen der Datei: $FILENAME\"}"
fi

3.2 Wichtige Punkte des Bash-Skripts:

  • Das Modul liest die Eingabewerte als JSON von Ansible ein.
  • Mithilfe des Tools jq werden Parameter wie der Dateiname extrahiert.
  • Das Modul führt die Aktion (Erstellung einer Datei) aus und gibt die Ergebnisse als JSON zurück.
  • changed: true bedeutet, dass das System geändert wurde, failed: true gibt einen Fehler an.

3.3 Modul in Ansible aufrufen

Um das Modul in einem Ansible-Playbook zu verwenden, können Sie wie folgt vorgehen:

---
- hosts: localhost
  tasks:
    - name: Eigene Datei mit Bash-Modul erstellen
      ansible.builtin.command:
        cmd: ./mein_bash_modul.sh
      register: result

    - debug:
        var: result.stdout

4. Beispiel: Ansible-Modul in Python

Python ist die bevorzugte Sprache für Ansible-Module, da es viele eingebaute Ansible-Hilfsfunktionen bietet. Hier ein einfaches Modul, das eine Datei erstellt und die Ergebnisse zurückgibt.

4.1 Skript für das Python-Modul erstellen

#!/usr/bin/python

import json
import os
import sys

def main():
    # Parameter von Ansible empfangen
    input_data = json.load(sys.stdin)
    filename = input_data.get('filename')

    # Datei erstellen
    try:
        with open(filename, 'w') as f:
            f.write('')

        # Erfolgsnachricht
        result = {
            'changed': True,
            'msg': f"Datei '{filename}' wurde erstellt."
        }

    except Exception as e:
        # Fehlernachricht
        result = {
            'failed': True,
            'msg': str(e)
        }

    # Rückgabe des Ergebnisses
    print(json.dumps(result))

if __name__ == '__main__':
    main()

4.2 Wichtige Punkte des Python-Skripts:

  • Das Modul liest die Eingabedaten von Ansible als JSON über sys.stdin.
  • Es erstellt eine Datei und gibt je nach Ergebnis eine Erfolgsmeldung (changed) oder eine Fehlermeldung (failed) zurück.
  • Python bietet nützliche Standardbibliotheken, die das Arbeiten mit JSON und Dateien erleichtern.

4.3 Modul in Ansible aufrufen

Um das Python-Modul in einem Playbook zu verwenden:

---
- hosts: localhost
  tasks:
    - name: Datei mit Python-Modul erstellen
      ansible.builtin.command:
        cmd: ./mein_python_modul.py
      register: result

    - debug:
        var: result.stdout

5. Fazit

Die Erstellung eigener Ansible-Module in Bash oder Python bietet Flexibilität und Erweiterbarkeit für individuelle Anforderungen. Bash eignet sich hervorragend für einfache Module, während Python aufgrund seiner besseren Integration mit Ansible und seiner Flexibilität ideal für komplexere Module ist.

Durch das Schreiben eigener Module können Sie Ansible auf Ihre spezifischen Bedürfnisse anpassen und Aufgaben automatisieren, die durch Standardmodule nicht abgedeckt werden.

Schreibe einen Kommentar

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