#!/usr/bin/env bash # ============================================================================= # eBdesk SiCABE — Jalankan agent ingestion OpenMetadata # ============================================================================= # Mengapa script ini ada: # Membuat SERVICE di OpenMetadata hanya menyimpan konfigurasi koneksi. Metadata # (database → schema → tabel → kolom) baru terisi setelah AGENT dijalankan, dan # halaman Explore membaca hasilnya dari search index. Tanpa agent: Explore kosong. # # LINEAGE (bronze→silver→gold) TIDAK dihasilkan oleh ingestion metadata: lineage # berasal dari definisi transformasi, jadi diambil dari ARTEFAK dbt lewat workflow # terpisah (`ingest-dbt.yaml`). Keduanya dijalankan oleh `--all`. # # Script memakai Ingestion Framework yang sudah ada di container Airflow # (`metadata` CLI) — tidak perlu memasang apa pun. # # ⚠️ Cakupan metadata mengikuti ACL identitas agent (workflow memakai `svc_om`, # role `data-catalog` = baca-saja seluruh tabel). # # Usage: # ./scripts/ingest-openmetadata.sh # metadata (Trino) saja # ./scripts/ingest-openmetadata.sh --all # metadata + lineage dbt # ./scripts/ingest-openmetadata.sh --dbt-only # lineage dbt saja # ./scripts/ingest-openmetadata.sh --workflow config/openmetadata/ingest-dbt.yaml # ============================================================================= set -uo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" # shellcheck source=../lib/common.sh source "${SCRIPT_DIR}/lib/common.sh" # shellcheck source=../config/environment.defaults.sh source "${SCRIPT_DIR}/config/environment.defaults.sh" sicabe_load_env "${SCRIPT_DIR}" "$@" OM_URL="${OPENMETADATA_URL:-http://localhost:${OPENMETADATA_PORT:-12085}}" OM_ADMIN_EMAIL="${OPENMETADATA_ADMIN_EMAIL:-admin@open-metadata.org}" OM_ADMIN_PASS="${OPENMETADATA_ADMIN_PASSWORD:-openmetadata123}" SERVICE_NAME="${OPENMETADATA_TRINO_SERVICE:-trino_sicabe}" AIRFLOW_CONTAINER="${AIRFLOW_INGEST_CONTAINER:-sicabe-airflow-webserver}" REMOTE_DIR="/tmp/om-ingest" DBT_PROJECT_DIR="${DBT_PROJECT_DIR:-/opt/airflow/dbt/sicabe}" # Di multi-host, pakai workflow TER-RENDER dari bundle host (hostname → alamat host); # sumber `config/**` masih memakai nama container (single-host). `SICABE_BUNDLE_DIR` # diset sicabe_load_env(): single-host = deploy/ (config sumber), multi-host = # generated/host-/ (config ter-render). CONFIG_DIR="${SICABE_BUNDLE_DIR:-${SCRIPT_DIR}}/config" WF_METADATA="${CONFIG_DIR}/openmetadata/ingest-trino.yaml" WF_DBT="${CONFIG_DIR}/openmetadata/ingest-dbt.yaml" MODE="metadata" CUSTOM_WORKFLOW="" while [[ $# -gt 0 ]]; do case "$1" in --env-file) shift 2 ;; # sudah dipakai sicabe_load_env() di atas --all) MODE="all"; shift ;; --dbt-only) MODE="dbt"; shift ;; --workflow) CUSTOM_WORKFLOW="$2"; shift 2 ;; *) echo "Argumen tidak dikenal: $1"; exit 1 ;; esac done # ── Helper ────────────────────────────────────────────────────────────────── om_ws() { # om_ws [body] local method="$1" path="$2" body="${3:-}" if [[ -n "${body}" ]]; then curl -s --max-time 30 -X "${method}" "${OM_URL}${path}" \ -H "Authorization: Bearer ${TOKEN}" -H "Content-Type: application/json" -d "${body}" 2>/dev/null else curl -s --max-time 30 -X "${method}" "${OM_URL}${path}" -H "Authorization: Bearer ${TOKEN}" 2>/dev/null fi } run_workflow() { # run_workflow