#!/usr/bin/env nu # Derived variables for vector bundle rendering. # Generates vector_config_toml from params.sources and params.sinks. def main [component_json: string]: nothing -> nothing { let d = ($component_json | from json) let workspace = ($d | get -o params.sinks.loki.labels.workspace | default "libre-wuji") let deploy_env = ($d | get -o params.sinks.loki.labels.env | default "production") let loki_url = ($d | get -o params.sinks.loki.endpoint | default "http://loki.observability.svc.cluster.local:3100") let prom_url = ($d | get -o params.sinks.prometheus_remote.endpoint | default "http://prometheus.observability.svc.cluster.local:9090/api/v1/write") let label_sel = ($d | get -o params.sources.kubernetes_logs.extra_label_selector | default "") let source_extra = if ($label_sel | is-not-empty) { $"extra_label_selector = \"($label_sel)\"\n" } else { "" } let vector_config_toml = $"[api] enabled = true address = \"0.0.0.0:8686\" [sources.kubernetes_logs] type = \"kubernetes_logs\" ($source_extra) [transforms.add_labels] type = \"remap\" inputs = [\"kubernetes_logs\"] source = ''' .workspace = \"($workspace)\" .env = \"($deploy_env)\" ''' [sinks.loki] type = \"loki\" inputs = [\"add_labels\"] endpoint = \"($loki_url)\" encoding.codec = \"json\" [sinks.loki.labels] workspace = \"{{ .workspace }}\" env = \"{{ .env }}\" namespace = \"{{ kubernetes.namespace_labels.name }}\" pod = \"{{ kubernetes.pod_name }}\" container = \"{{ kubernetes.container_name }}\" node = \"{{ kubernetes.pod_node_name }}\"" { vector_config_toml: $vector_config_toml } | to json --raw | print }