Skip to content
Talk to our solutions team

Configuration Files

A developer or operator touches four kinds of files.

/etc/infinity-config/config.yaml, selected with -f. Chassis identity keys plus storage:, per-hive sources:, auth:, and audit:. Development example:

service: config
version: 2.0.0-dev
sid: dev-local
host: ""
port: "7123"
zerotrust: false
storage:
mode: bbolt
bbolt:
path: /var/lib/config
hives:
cluster:
sources:
- name: dev-cluster
backend: localdir
path: /etc/infinity-config/data
owns: ["**"]
priority: 0
writable: true

Production highlights:

storage:
mode: etcd
etcd:
endpoints: [https://etcd-1:2379, https://etcd-2:2379, https://etcd-3:2379]
leader_election:
enabled: true
ttl: 15s
hives:
tenant:
sources:
- name: tenant-git
backend: git
url: https://git.example.com/platform/tenant-config.git
branch: main
owns: ["acme/**"]
priority: 0
auth_username: x-access-token
auth_token: ${env:GIT_TOKEN}
- name: break-glass
backend: postgres
dsn: ${env:PG_DSN}
table: infinity_config_overrides
owns: ["**"]
priority: 100
writable: true
alert_on_write: pagerduty:break-glass

Source descriptor fields: name, backend (fs|localdir|git|etcd|postgres), url/path/dsn/endpoints, branch, table, owns (path globs: "**", "prefix/**", exact), priority, writable, alert_on_write, poll_interval, local_open, auth_*, TLS settings.

Bootstrap changes require a restart — there is no live reload of the bootstrap itself.

The one authoring format for fs, localdir, and git sources. Every *.yaml / *.yml anywhere under the source root is an independent document; folders and filenames carry no meaning. The only reserved keys are path: (colon-separated; "" = hive root) and match: (instance cohort labels):

hives:
cluster:
- path: ""
region: eu
- path: dc1:main:iam
log:
level: info
- path: dc1:main:iam
match: {ring: canary}
log:
level: debug
tenant:
- path: acme:forge:prod:tenant-a
dbpools:
main:
dsn: vault:tenant-a-dsn

localdir is the writable variant of the same format: server-side writes rewrite the entry in its owning file (comments are not preserved). Because the format is identical, a localdir tree can be pushed to git unchanged.

Each hive has an embedded CUE schema; validation mode is per hive: strict (invalid → no snapshot / 422 on write), warn, or off — operator-overridable in the bootstrap. Escape hatches for unschema’d customer data: metadata, annotations, extensions, and x_kisai_* keys are always allowed.

Fetch the schema and a canonical example at runtime:

Terminal window
kis config schema cluster
curl -H "X-Api-Key: $KEY" http://localhost:7123/hives/cluster/_meta/example

File-backed keys for machine access, referenced from auth: in the bootstrap:

Terminal window
config.svc config generate apikeys > /etc/infinity-config/apikeys.yaml

JWT bearer auth validates against a JWKS endpoint (typically the IAM service’s /.well-known/jwks.json), and mTLS client certificates are accepted where zerotrust is on. Authorization is a per-hive expression policy over (subject, action, hive, path).