linux-ubuntu-debian automation python devops scripting api

Python for DevOps & System Automation (Artikel 052)

Einsatz von Python zur Automatisierung komplexer Systemaufgaben. Von der API-Interaktion über File-Management bis hin zur Entwicklung robuster DevOps-Tools.

# Python for DevOps: Die Brücke zwischen Bash und Applikation

TL;DR / Management Summary Wenn Bash-Skripte zu komplex werden (über 500 Zeilen) oder massive Datenverarbeitung (JSON/XML) nötig ist, ist Python die Rettung. Dank einer riesigen Standardbibliothek und Modulen wie requests, pandas oder fabric ist Python das Schweizer Taschenmesser für Admins. Es ist lesbar, wartbar und der Standard für die Kommunikation mit modernen Cloud-APIs.


# 1. Einführung & Architektur

Warum Python statt Bash?

  • Bash: Ideal für einfache Prozess-Ketten und OS-Kommandos. Schwach bei Datenstrukturen und Fehlerbehandlung.
  • Python: Ideal für Logik, API-Integration und Objektorientierung. Bietet echte Fehlerbehandlung (try/except).
graph LR
    A[Bash Script] -->|Simple| B[Cron / Small Tasks]
    C[Python Script] -->|Complex| D[API Integrations]
    C -->|Complex| E[Data Parsing / Reporting]
    C -->|Complex| F[Cross-Platform Tools]

# 2. Best Practices: Saubere Entwicklung

Kein Chaos auf dem Server.

# Virtual Environments (venv)

Installieren Sie niemals Python-Module global mit pip install (Gefahr für das OS-Python!).

sudo apt update && sudo apt install python3-venv
python3 -m venv ~/scripts/.venv
source ~/scripts/.venv/bin/activate
# Jetzt sicher installieren
pip install requests

# Der Safety-Header (Shebang)

#!/usr/bin/env python3
import sys
import os

def main():
    # Logik hier
    pass

if __name__ == "__main__":
    main()

# 3. Praxis-Szenarien

Was Admins täglich brauchen.

# API-Abfragen (Requests)

import requests

def get_pve_status():
    response = requests.get("https://proxmox:8006/api2/json/nodes", verify=False)
    if response.status_code == 200:
        data = response.json()
        print(f"Nodes found: {len(data['data'])}")

get_pve_status()

# System-Kommandos sicher ausführen

Statt os.system() nutzen wir subprocess:

import subprocess

def check_disk_usage():
    # capture_output=True verhindert Text-Salat im Terminal
    result = subprocess.run(["df", "-h", "/"], capture_output=True, text=True)
    print(result.stdout)

# 4. Day-2 Operations: Packaging & Deployment

Tools an das Team verteilen.

# Requirements.txt

Halten Sie Abhängigkeiten fest:

pip freeze > requirements.txt
# Auf anderem Server wiederherstellen
pip install -r requirements.txt

# Fehlerbehandlung (E-Mail/Alert)

try:
    critical_task()
except Exception as e:
    send_alert_to_pagerduty(f"CRITICAL: {str(e)}")
    sys.exit(1)

# 5. Troubleshooting & “War Stories”

Wenn das Skript hakt.

# Story 1: “Der Python 2 Geist”

Symptom: Ein Skript funktioniert auf dem Dev-Laptop, aber wirft auf dem Server Syntax-Fehler. Ursache: Der Aufruf python zeigt auf einem alten Server noch auf Python 2.7. Lösung: Nutzen Sie immer explizit python3. Prüfen Sie dies im Shebang und im Alias.

# Story 2: “Memory Leak in Long-Running-Scripts”

Symptom: Ein Automatisierungs-Skript, das 24/7 läuft, wird immer langsamer und frisst RAM. Ursache: Offene Dateihandler oder unkontrollierte Listen-Wachstum. Lösung: Nutzen Sie Context Manager (with open(...) as f:) und räumen Sie globale Variablen auf.


# 6. Fazit & Empfehlung

  • Bash für alles unter 10 Minuten Entwicklungszeit.
  • Python für alles, was APIs nutzt oder Fehlerbehandlung braucht.
  • Linter: Nutzen Sie flake8 oder pylint, um sauberen Code zu garantieren.

# Anhang: Cheatsheet

Aufgabe Modul Beispiel
JSON parsen import json json.loads(string)
Filesystem import pathlib Path("/tmp").exists()
Zeit/Datum import datetime datetime.datetime.now()
Argumente import argparse --help Support bauen
Remote SSH import paramiko SSH via Python
Env Vars import os os.getenv("API_KEY")
Performance import timeit Zeit messen