import json import base64 import urllib.request import sys def check_state(repo_name): # Da das Skript auf dem Host läuft, nutzen wir localhost:8500 url = f"http://localhost:8500/v1/kv/terraform/states/{repo_name}" print(f"--- Suche Key in Consul: terraform/states/{repo_name} ---") try: req = urllib.request.Request(url) with urllib.request.urlopen(req, timeout=5) as response: data = json.loads(response.read().decode('utf-8')) # Consul liefert immer eine Liste zurück if isinstance(data, list) and len(data) > 0: kv_pair = data[0] raw_value = kv_pair.get("Value") if not raw_value: print("Status: Key existiert, aber der Inhalt (Value) ist komplett leer!") return # Base64 decodieren decoded_bytes = base64.b64decode(raw_value) state_json = json.loads(decoded_bytes.decode('utf-8')) # Schöne, strukturierte JSON-Ausgabe auf der Konsole print("SUCCESS: Daten erfolgreich geladen und decodiert!\n") print(json.dumps(state_json, indent=2)) else: print("Status: Unerwartetes Antwortformat von Consul.") except urllib.error.HTTPError as e: if e.code == 404: print(f"ERROR: Key 'terraform/states/{repo_name}' wurde in Consul nicht gefunden (404).") print("Wurde die Pipeline für dieses Repo seit dem Umbau schon gestartet?") else: print(f"HTTP Fehler: {e.code}") except Exception as e: print(f"Allgemeiner Fehler: {str(e)}") if __name__ == "__main__": # Standardmässig prüfen wir boday_tf, man kann aber auch ein Argument übergeben repo = sys.argv[1] if len(sys.argv) > 1 else "boday_tf" check_state(repo)