37 lines
1.5 KiB
Text
37 lines
1.5 KiB
Text
|
|
#!/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_<ZONE> 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
|
||
|
|
}
|