feat: add homelab deployment configs, documentation, and automation scripts
This commit is contained in:
73
scripts/check_argocd_apps.py
Normal file
73
scripts/check_argocd_apps.py
Normal file
@@ -0,0 +1,73 @@
|
||||
import requests
|
||||
import json
|
||||
import urllib3
|
||||
urllib3.disable_warnings()
|
||||
|
||||
token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhcmdvY2QiLCJzdWIiOiJob21lcGFnZTphcGlLZXkiLCJuYmYiOjE3OTQ1MDIwNzgsImlhdCI6MTc5NDUwMjA3OCwianRpIjoiZjQ2NzU0NjMtODRhOS00MjI0LWI3ODItNmY5ODQxYWEwY2UxIn0.aHhrny2RBG-vAJAyXMvan0jw65jkP3bguqEduaG78O0"
|
||||
headers = {
|
||||
"Authorization": f"Bearer {token}",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
try:
|
||||
resp = requests.get("https://argo.snarfnet.net/api/v1/applications", headers=headers, verify=False, timeout=10)
|
||||
data = resp.json()
|
||||
items = data.get("items", [])
|
||||
print(f"Total Applications: {len(items)}\n")
|
||||
|
||||
out_of_sync = []
|
||||
synced = []
|
||||
|
||||
for app in items:
|
||||
name = app.get("metadata", {}).get("name")
|
||||
sync_status = app.get("status", {}).get("sync", {}).get("status")
|
||||
health_status = app.get("status", {}).get("health", {}).get("status")
|
||||
dest_server = app.get("spec", {}).get("destination", {}).get("server")
|
||||
dest_ns = app.get("spec", {}).get("destination", {}).get("namespace")
|
||||
repo = app.get("spec", {}).get("source", {}).get("repoURL")
|
||||
path = app.get("spec", {}).get("source", {}).get("path")
|
||||
|
||||
# Check operation or sync conditions/messages
|
||||
operation_state = app.get("status", {}).get("operationState", {})
|
||||
op_phase = operation_state.get("phase")
|
||||
op_msg = operation_state.get("message")
|
||||
conditions = app.get("status", {}).get("conditions", [])
|
||||
|
||||
info = {
|
||||
"name": name,
|
||||
"sync": sync_status,
|
||||
"health": health_status,
|
||||
"dest_ns": dest_ns,
|
||||
"dest_server": dest_server,
|
||||
"repo": repo,
|
||||
"path": path,
|
||||
"op_phase": op_phase,
|
||||
"op_msg": op_msg,
|
||||
"conditions": conditions
|
||||
}
|
||||
|
||||
if sync_status != "Synced" or health_status not in ["Healthy", None]:
|
||||
out_of_sync.append(info)
|
||||
else:
|
||||
synced.append(info)
|
||||
|
||||
print(f"=== OUT OF SYNC / DEGRADED APPS ({len(out_of_sync)}) ===")
|
||||
for a in out_of_sync:
|
||||
print(f"\nApp: {a['name']}")
|
||||
print(f" Sync: {a['sync']} | Health: {a['health']}")
|
||||
print(f" Dest: {a['dest_ns']} on {a['dest_server']}")
|
||||
print(f" Path: {a['path']}")
|
||||
if a['op_phase']:
|
||||
print(f" Op Phase: {a['op_phase']}")
|
||||
if a['op_msg']:
|
||||
print(f" Op Msg: {a['op_msg']}")
|
||||
if a['conditions']:
|
||||
print(f" Conditions: {a['conditions']}")
|
||||
|
||||
print(f"\n=== SYNCED APPS ({len(synced)}) ===")
|
||||
for a in synced:
|
||||
print(f" {a['name']}: Sync={a['sync']}, Health={a['health']}, NS={a['dest_ns']}")
|
||||
|
||||
except Exception as e:
|
||||
print("Error querying Argo CD API:", e)
|
||||
|
||||
Reference in New Issue
Block a user