provisioning-catalog/components/vector/cluster/vars.nu

51 lines
1.7 KiB
Text
Raw Normal View History

#!/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
}