Skip to content

Value Layering Overview

How values are merged from multiple sources into the final rendered output.

Merge Order

Values merge bottom-up. Later sources override earlier ones:

1. charts-repository/apps/<group>/<app>/values.yaml         (base defaults)
        ↓ deep merge
2. gitops-repository/clusters/<cluster>/<group>/values.yaml (group-level override)
        ↓ deep merge
3. gitops-repository/clusters/<cluster>/<group>/in-cluster/<app>/values.yaml (app-level override)
        ↓ deep merge
4. Hydra ConfigMaps on cluster                              (runtime injection)

Merge Semantics

  • Maps — Deep merged. Nested keys are merged individually. A key in a later layer overrides the same key from an earlier layer.
  • Lists — Replaced entirely. A list in a later layer replaces (not appends to) the same list from an earlier layer.
  • Scalars — Replaced. A scalar in a later layer overrides the earlier value.

Example: Value Flow

Given a chart with refs.events defined in the charts-repo:

# charts-repository/apps/cluster-infra/cert-manager/values.yaml
global:
  hydra:
    refs:
      events:
        tag: [uninstall]
        predicate: 'gvk == "events.k8s.io/v1/Event" && ns == "cert-manager"'

And a cluster override adding an additional ref group:

# gitops-repository/clusters/prod/cluster-infra/in-cluster/cert-manager/values.yaml
global:
  hydra:
    refs:
      custom-secret:
        tag: [backup]
        predicate: 'kind == "Secret" && ns == "cert-manager" && name == "ca-key"'

The effective result has both ref groups (deep merge of the refs map).

Where to Define What

Value type Where Why
Ref definitions Charts repo Part of the app's dependency model
Preset overrides Charts repo or GitOps repo Depends on whether it's app-global or cluster-specific
kubectl.allowedContexts GitOps repo Cluster-specific
path, revision, repository GitOps repo Cluster/environment metadata
kubernetesVersion GitOps repo Cluster-specific

Inspecting Effective Values

# Without cluster ConfigMaps
hydra local values prod.cluster-infra.cert-manager

# With cluster ConfigMaps merged
hydra gitops values prod.cluster-infra.cert-manager

See Also