Aufgaben-Python/courses/bash/11_netzwerk_ssh_und_curl_pipelines/aufgabe.sh

105 lines
4.5 KiB
Bash

#!/usr/bin/env bash
# ==============================================================================
# Bash 11: Remote SSH, REST-Pipelines (curl) & rsync Automatisierung
# ==============================================================================
# In diesem Modul lernst du, REST-APIs abzufragen, HTTP-Statuscodes zu extrahieren,
# SSH-Befehle im Non-Interactive/Batch-Modus auszuführen und rsync-Pipelines zu steuern.
# ==============================================================================
# ------------------------------------------------------------------------------
# TODO 1: HTTP POST Request mit Auth-Header & JSON-Payload generieren/ausführen
# ------------------------------------------------------------------------------
# Implementiere die Funktion `build_curl_post_command`.
# Parameter:
# $1: API-Endpunkt (z.B. "https://api.cloud.corp/v1/deploy")
# $2: Bearer Auth Token (z.B. "sec_token_999")
# $3: JSON Payload String (z.B. '{"env":"prod","version":"1.4.0"}')
# Verhalten:
# - Gibt den vollständigen, korrekten curl-Befehl als String aus:
# curl -s -f -X POST "<endpoint>" -H "Authorization: Bearer <token>" -H "Content-Type: application/json" -d '<payload>'
# - Bei fehlenden Parametern: Return 1.
# ------------------------------------------------------------------------------
build_curl_post_command() {
local endpoint="${1:-}"
local token="${2:-}"
local payload="${3:-}"
# TODO: Validiere Parameter
# TODO: Gib formatierten curl-Befehl aus
echo "TODO: Implementiere build_curl_post_command"
return 1
}
# ------------------------------------------------------------------------------
# TODO 2: HTTP Status Code ermitteln
# ------------------------------------------------------------------------------
# Implementiere die Funktion `get_http_status_code`.
# Parameter:
# $1: URL (z.B. "https://example.com/health")
# Verhalten:
# - Nutzt curl, um NUR den HTTP Status-Code (z.B. "200", "404", "500") zurückzugeben.
# - Verwendet Optionen: `-s -o /dev/null -w "%{http_code}"`
# - Bei leerem Parameter: Return 1.
# ------------------------------------------------------------------------------
get_http_status_code() {
local url="${1:-}"
# TODO: Validiere URL
# TODO: Führe curl aus und gib nur den Status-Code aus
echo "TODO: Implementiere get_http_status_code"
return 1
}
# ------------------------------------------------------------------------------
# TODO 3: Non-Interactive SSH Batch-Befehl mit Skriptübertragung
# ------------------------------------------------------------------------------
# Implementiere die Funktion `build_ssh_batch_command`.
# Parameter:
# $1: SSH-Benutzer (z.B. "deployer")
# $2: Hostname / IP (z.B. "10.0.1.50")
# $3: Pfad zum lokalen Shell-Skript (z.B. "/opt/setup.sh")
# $4: Port (optional, Default: 22)
# Verhalten:
# - Gibt den sicheren, automatisierten SSH-Befehl aus:
# ssh -p <port> -o BatchMode=yes -o StrictHostKeyChecking=no <user>@<host> "bash -s" < <script>
# - Wenn ein Parameter ($1, $2 oder $3) fehlt: Return 1.
# ------------------------------------------------------------------------------
build_ssh_batch_command() {
local user="${1:-}"
local host="${2:-}"
local script_file="${3:-}"
local port="${4:-22}"
# TODO: Validiere Parameter
# TODO: Gib formatierten SSH-Befehl aus
echo "TODO: Implementiere build_ssh_batch_command"
return 1
}
# ------------------------------------------------------------------------------
# TODO 4: rsync Synchronisations-Kommando
# ------------------------------------------------------------------------------
# Implementiere die Funktion `build_rsync_command`.
# Parameter:
# $1: Quellverzeichnis (z.B. "/var/www/html/")
# $2: Zielverzeichnis (z.B. "backup@nas.corp:/backups/html/")
# $3: Exclude-Muster (z.B. "*.tmp" oder ".git")
# $4: Delete-Flag ("true" oder "false", Default: "false")
# Verhalten:
# - Basis-Flags für rsync: `-avz`
# - Wenn Exclude angegeben: `--exclude="<muster>"`
# - Wenn Delete-Flag "true": `--delete`
# - Format: rsync -avz [--delete] [--exclude="<muster>"] <quelle> <ziel>
# - Bei fehlenden Quell- oder Zielpfaden: Return 1.
# ------------------------------------------------------------------------------
build_rsync_command() {
local src="${1:-}"
local dest="${2:-}"
local exclude="${3:-}"
local delete_flag="${4:-false}"
# TODO: Validiere Parameter
# TODO: Baue rsync Kommando zusammen und gib es aus
echo "TODO: Implementiere build_rsync_command"
return 1
}