105 lines
4.5 KiB
Bash
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
|
|
}
|