Files
the-nexus/bin/rollback_command.py

45 lines
1.3 KiB
Python

import os
import subprocess
import json
from datetime import datetime
DEPLOYMENT_HISTORY_DIR = os.path.expanduser("~/deployment_history")
def rollback(service_name: str):
"""Rollback to last known good version of a service"""
deployments = sorted(
[f for f in os.listdir(DEPLOYMENT_HISTORY_DIR) if f.startswith(f"{service_name}_")],
reverse=True
)
if not deployments:
print(f"No deployment history found for {service_name}")
return
last_success = None
for dep in deployments:
path = os.path.join(DEPLOYMENT_HISTORY_DIR, dep)
with open(path, 'r') as f:
data = json.load(f)
if data.get('status') == 'success':
last_success = data
break
if not last_success:
print(f"No successful deployment found for {service_name}")
return
print(f"Rolling back {service_name} to {last_success['version']}")
subprocess.run([
"kubectl", "set", "image", "deployment/"+service_name,
f"{service_name}={last_success['image']}"
])
print(f"Rolled back {service_name} to {last_success['version']}")
if __name__ == "__main__":
import sys
if len(sys.argv) < 2:
print("Usage: bezalel-rollback <service>")
else:
rollback(sys.argv[1])