Custom Overlay Example

A repository document, rendered for the site. View source markdown.

New to cub? Install the cub CLI first. You can pull and render public catalog packages without an account. Commands that save or change ConfigHub data require you to sign in.

Generated at: 2026-07-30T12:38:02.000Z UTC · source: committed helm-expt evidence for this rendered repository document.

UNOFFICIAL/EXPERIMENTAL

This is the custom overlay case in its simplest form.

Product Lane

ExternalDNS customer overlays sit across three product lanes:

1. Free/out-of-box catalog configs:
   reviewed ExternalDNS base shapes that are common enough to publish.

2. ConfigHub customization:
   customer, environment, region, target, gates, facts, and observation policy
   as derived variants over a reviewed base.

3. Managed or potentially paid complexity:
   private wrapper charts, private values, GitOps import, fleet variants, full
   stacks, production receipts, support SLAs, and old-version patch work.

The example below is a classification golden for that boundary. It is not a claim that every customer overlay is free catalog material, and it is not a live production import receipt.

Example

Component: ExternalDNS
Customer: Acme
Environment: production
Region: us-east
Target: prod-us-east
Domain: acme.example.com

Base Variant

The base variant is the reviewed ExternalDNS install shape.

ExternalDNS/managed-aws-acme

It is produced by cub installer.

It includes the choices that change rendered Kubernetes objects:

chart: external-dns/external-dns@1.21.1
provider: aws
sources:
  - service
  - ingress
registry: txt
txtPrefix: kubara-
domainFilters:
  - acme.example.com
txtOwnerId: acme-prod-us-east
serviceAccount:
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/external-dns-acme-prod
rbac:
  create: true

These values change controller args, ServiceAccount metadata, RBAC, or object behavior. They belong in the base because Kubernetes will receive different YAML.

Overlay Variant

The overlay variant is the customer production ConfigHub variant.

ExternalDNS/customer-acme-prod

It is created from:

ExternalDNS/managed-aws-acme

It applies customer production refinements after the reviewed base has been uploaded:

customer: acme
environment: prod
region: us-east
target: prod-us-east
observationFreshness: PT15M
targetFacts:
  requiredHostedZones:
    - name: acme.example.com
      provider: aws
      visibility: public
  requiredSecrets:
    - namespace: external-dns
      name: external-dns-aws
      keys:
        - credentials

It does not rerender Helm. It does not change the ExternalDNS Deployment, ServiceAccount, RBAC, or CRD shape. It can still bind target facts and fill approved existing fields when the Creator contract allows those changes and records checks and mutation receipts.

User UX

A future/polished Creator flow should present this as:

Create variant
From: ExternalDNS/managed-aws-acme
For: customer-acme-prod
Change: customer, environment, region, target, observation policy
Require: hosted zone acme.example.com, Secret external-dns/external-dns-aws
Review: same ExternalDNS install shape, approved customer production refinements
Status: ready when target facts are confirmed
Create

That is the whole user story.

When To Go Back To The Base

If Acme changes any of these, create or update a base variant:

provider
sources
registry
domainFilters
txtOwnerId
IAM role annotation
RBAC
CRDs
controller args or env

Those values affect rendered Kubernetes objects.

If Acme changes any of these, use a derived ConfigHub variant:

customer
environment
region
target
approval gates
observation freshness
required hosted zone
required external Secret reference
approved placeholder or TransformPaths fills

Those values refine the reviewed object set after upload without rerendering Helm.

Checked Example Files

The checked example data is here:

data/managed-overlay-goldens/external-dns-customer-acme-prod/

The main files are:

wrapper-chart/Chart.yaml
values/platform-values.yaml
values/customer-acme-prod-values.yaml
overlay-classification.yaml
preview.yaml
receipts/*.yaml