70 lines
2.8 KiB
Python
70 lines
2.8 KiB
Python
#!/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)
|