#!/usr/bin/env nu # Derived variables for external_dns bundle rendering. # cf_api_token is injected by components.nu via SOPS decryption before this script runs. # CF_TOKEN_ env var still works as an override (CI/CD pipelines). def cf_token_from_env [secret_ref: string]: nothing -> string { let env_var = ($"CF_TOKEN_($secret_ref | str upcase | str replace --all '-' '_')") $env | get -o $env_var | default "" } def main [component_json: string]: nothing -> nothing { let d = ($component_json | from json) let ns = ($d.namespace? | default "external-dns") let version = ($d.version? | default "v0.21.0") let policy = ($d.policy? | default "upsert-only" | str replace --all "_" "-") let zones = ($d.zones? | default [] | each {|z| $"\"($z)\""} | str join ", ") let sources = ($d.sources? | default ["service", "crd"] | each {|s| $"\"($s)\""} | str join ", ") let secret_ref = ($d.secret_ref? | default "") let injected = ($d.cf_api_token? | default "") let cf_token = if ($injected | is-not-empty) { $injected } else { cf_token_from_env $secret_ref } { namespace: $ns, version: $version, policy: $policy, zones_list: $zones, sources_list: $sources, txt_owner_id: ($d.txt_owner_id? | default "libre-wuji"), interval: ($d.interval? | default "1m"), cf_secret_ref: $secret_ref, cf_api_token: $cf_token, } | to json --raw | print }