Configuration Overview¶
Volundr loads configuration from multiple sources. Higher priority sources override lower ones.
Priority order (highest to lowest):
- Constructor arguments — testing only
- Environment variables — double underscore nesting:
DATABASE__HOST=postgres.local - YAML config file —
./config.yamlor/etc/volundr/config.yaml /run/secretsfiles — Kubernetes secrets mounted as files
Two Config Contexts¶
There are two ways to configure Volundr depending on how you run it.
Config file (config.yaml / config.yaml.example) is for running from source or local CLI. Uses snake_case throughout.
Helm values (values.yaml) is for Kubernetes deployments. The chart generates a ConfigMap mounted at /etc/volundr/config.yaml. Uses camelCase.
The naming differs between them. Helm uses camelCase (podManager), config.yaml uses snake_case (pod_manager). The chart templates handle the translation.
Dynamic Adapter Pattern¶
Most infrastructure components are configured by specifying a fully-qualified Python class path and constructor kwargs. You can swap backends without code changes — just update the config.
# Example: configure pod manager
pod_manager:
adapter: "volundr.adapters.outbound.flux.FluxPodManager"
kwargs:
namespace: "default"
chart_name: "skuld"
Adding a new adapter = write the class + update config. No code changes in the container.
See Dynamic Adapters for full details on how the pattern works.