45 lines
1.3 KiB
Python
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])
|