Files
merica/scripts/inject_airflow_bundle.py

70 lines
2.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
""":"
# Python wrapper for execution
exec python3 "$0" "$@"
"""
import sys
import os
import shutil
DEFAULT_FILE = "/home/broto/sicabe-core/deploy/generated/host-control/docker-compose.yml"
file_path = sys.argv[1] if len(sys.argv) > 1 else DEFAULT_FILE
print("==================================================================")
print("🚀 MERICA -> Airflow 3 AIP-66 Git DAG Bundles Auto-Injector")
print("==================================================================")
print(f"Target compose: {file_path}")
if not os.path.exists(file_path):
print(f"❌ Error: File tidak ditemukan di {file_path}")
print("Penggunaan: python3 scripts/inject_airflow_bundle.py [path_ke_docker-compose.yml]")
sys.exit(1)
# 1. Backup file
backup_path = file_path + ".bak"
shutil.copyfile(file_path, backup_path)
print(f"🛡️ [1/3] Backup file tersimpan di: {backup_path}")
with open(file_path, "r", encoding="utf-8") as f:
lines = f.readlines()
# Check if already present
full_content = "".join(lines)
if "AIRFLOW__DAG_PROCESSOR__DAG_BUNDLE_CONFIG_LIST" in full_content:
print("ℹ️ Konfigurasi Git DAG Bundles sudah ada di dalam file. Lewati penyuntikan.")
sys.exit(0)
in_dag_processor = False
in_env = False
insert_idx = None
indent = " "
for i, line in enumerate(lines):
if "airflow-dag-processor:" in line:
in_dag_processor = True
continue
if in_dag_processor:
# Berhenti jika berpindah ke service berikutnya (indentasi level service: 2 spasi)
if line.startswith(" ") and not line.startswith(" ") and not line.strip().startswith("#"):
break
if line.strip().startswith("environment:"):
in_env = True
continue
if in_env and "AIRFLOW__METRICS__STATSD_PREFIX:" in line:
insert_idx = i + 1
break
if insert_idx is not None:
lines.insert(insert_idx, f'{indent}AIRFLOW__DAG_PROCESSOR__DAG_BUNDLE_STORAGE_PATH: /opt/airflow/dag_bundles\n')
lines.insert(insert_idx + 1, f'{indent}AIRFLOW__DAG_PROCESSOR__DAG_BUNDLE_CONFIG_LIST: \'[{{"name":"merica-pipeline","classpath":"airflow.providers.git.bundles.git.GitDagBundle","kwargs":{{"repo_url":"https://repo.sicabe.com/merica-dlh/merica-pipelines.git","tracking_ref":"main","subdir":"dags","refresh_interval":30}}}}]\'\n')
with open(file_path, "w", encoding="utf-8") as f:
f.writelines(lines)
print("🎉 [2/3] SUKSES: Variabel Git DAG Bundles berhasil disuntikkan ke airflow-dag-processor!")
print("\n[3/3] Langkah Terakhir — Restart HANYA DAG Processor:")
print(" 👉 docker restart sicabe-airflow-dag-processor")
print(" 👉 docker logs --tail 30 -f sicabe-airflow-dag-processor\n")
else:
print("❌ Gagal: Blok 'airflow-dag-processor:' dengan 'environment:' tidak ditemukan.")
sys.exit(1)