Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Lab Options

Options for configuring the lab environment, CD strategy, DNS, networking, and operations.

bgpRouter.asn

BGP Autonomous System Number for the router

Type: signed integer

Default: 65000

Declared in: modules/lab/bgp-router.nix


bgpRouter.containerName

Docker container name for the BGP router

Type: string

Default: "catallaxy-router"

Declared in: modules/lab/bgp-router.nix


bgpRouter.enable

Whether to enable Lab BGP router (FRRouting) for LoadBalancer IP advertisement.

Type: boolean

Default: false

Example: true

Declared in: modules/lab/bgp-router.nix


bgpRouter.image

FRRouting container image

Type: string

Default: "frrouting/frr:latest"

Declared in: modules/lab/bgp-router.nix


bgpRouter.lbPool

IP pool CIDR for LoadBalancer service allocation

Type: string

Default: "172.19.200.0/24"

Declared in: modules/lab/bgp-router.nix


bgpRouter.out.service

Computed container service definition for the BGP router

Type: attribute set

Default: { }

Declared in: modules/lab/bgp-router.nix


bgpRouter.peerASN

BGP ASN for Cilium nodes (peers)

Type: signed integer

Default: 65001

Declared in: modules/lab/bgp-router.nix


bgpRouter.peerAddress

IP address where the BGP router is reachable by Cilium nodes (Docker network gateway)

Type: string

Default: "172.19.0.1"

Declared in: modules/lab/bgp-router.nix


cd.argocd.repoUrl

Git repository URL for manifest storage

Type: string

Default: ""

Declared in: modules/lab/types.nix


cd.argocd.targetBranch

Git branch to commit rendered manifests to

Type: string

Default: "main"

Declared in: modules/lab/types.nix


cd.clusterPaths

Per-cluster targetPath overrides. Key = cluster name, value = path in repo. Default: manifests/

Type: attribute set of string

Default: { }

Declared in: modules/lab/types.nix


cd.fleet.repoUrl

Git repository URL for manifest storage

Type: string

Default: ""

Declared in: modules/lab/types.nix


cd.fleet.targetBranch

Git branch to commit rendered manifests to

Type: string

Default: "main"

Declared in: modules/lab/types.nix


cd.git.branch

Target branch for manifest publishing

Type: string

Default: "main"

Declared in: modules/lab/types.nix


cd.git.path

Subdirectory within the repo for manifests (empty = repo root)

Type: string

Default: ""

Declared in: modules/lab/types.nix


cd.git.prBaseBranch

Base branch for PRs (the branch to merge into)

Type: string

Default: "main"

Declared in: modules/lab/types.nix


cd.git.prEnabled

Create a PR/MR instead of pushing directly to the target branch

Type: boolean

Default: false

Declared in: modules/lab/types.nix


cd.git.provider

Git provider for PR/MR creation

Type: one of "github", "gitlab", "forgejo"

Default: "github"

Declared in: modules/lab/types.nix


cd.git.repo

Git repository URL for publishing rendered manifests (e.g. git@github.com:org/manifests.git)

Type: string

Default: ""

Declared in: modules/lab/types.nix


cd.kapp.waitTimeout

Timeout waiting for resources to reconcile

Type: string

Default: "10m"

Declared in: modules/lab/types.nix


cd.strategy

CD strategy for delivering manifests to all clusters:

  • kapp: Direct apply via kapp (fast, no git, ideal for local dev)
  • argocd: Render manifests to git, ArgoCD syncs from there
  • fleet: Render manifests to git, Fleet syncs from there

Type: one of "kapp", "argocd", "fleet"

Default: "kapp"

Declared in: modules/lab/types.nix


clusters

Cluster configurations. Each cluster is provisioned directly by the CLI (e.g. via k3d for local dev). Any cluster can optionally enable CAPI to manage external clusters.

Type: attribute set of (submodule)

Default: { }

Declared in: modules/lab/types.nix


dns.containerName

Docker container name for the DNS server

Type: string

Default: "catallaxy-dns"

Declared in: modules/lab/dns.nix


dns.enable

Whether to enable Lab DNS server (Knot DNS with RFC2136 for ExternalDNS).

Type: boolean

Default: false

Example: true

Declared in: modules/lab/dns.nix


dns.hostPort

Host-mapped port for the DNS server (for host access). Avoids 5353 which conflicts with mDNS.

Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)

Default: 5354

Declared in: modules/lab/dns.nix


dns.image

Knot DNS container image

Type: string

Default: "cznic/knot:latest"

Declared in: modules/lab/dns.nix


dns.out.dnsInfo

DNS server info for host resolver configuration

Type: attribute set

Default: { }

Declared in: modules/lab/dns.nix


dns.out.service

Computed container service definition for the lab DNS server

Type: attribute set

Default: { }

Declared in: modules/lab/dns.nix


dns.port

Port for the DNS server (as seen from clusters, defaults to hostPort)

Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)

Default: 5354

Declared in: modules/lab/dns.nix


dns.server

IP address where the DNS server is reachable from clusters (Docker gateway by default)

Type: string

Default: "172.19.0.1"

Declared in: modules/lab/dns.nix


dns.tsigKeyname

TSIG key name for RFC2136 dynamic updates

Type: string

Default: "externaldns-key"

Declared in: modules/lab/dns.nix


dns.tsigSecret

Base64-encoded TSIG secret (pre-generated for local dev)

Type: string

Default: "kp4bgnFAVCmajGIqOW7rj0MNwRNZHBqMvYaLTwzPHgI="

Declared in: modules/lab/dns.nix


dns.tsigSecretAlg

TSIG algorithm

Type: string

Default: "hmac-sha256"

Declared in: modules/lab/dns.nix


dns.zone

DNS zone for the lab (defaults to ‘.test’)

Type: string

Default: "docs-placeholder.test"

Declared in: modules/lab/dns.nix


environment

Lab environment. Components can adjust defaults based on this:

  • development: minimal replicas, relaxed resource limits, self-signed TLS
  • staging: moderate replicas, production-like config, self-signed or ACME TLS
  • production: HA replicas, strict resource limits, ACME TLS, destructive ops require –force

Type: one of "development", "staging", "production"

Default: "development"

Declared in: modules/lab/types.nix


images.allowedRegistries

When non-empty, the lint check warns about images from registries not in this list. Example: [“ghcr.io” “registry.k8s.io” “docker.io”]

Type: list of string

Default: [ ]

Declared in: modules/lab/images.nix


images.pins

Pinned container images. Each pin declares an image with optional tag and digest. Components can reference pins via lab.images.pins.<name>.ref to get the full image reference string.

Example: lab.images.pins.grafana = { image = “docker.io/grafana/grafana”; tag = “11.4.0”; digest = “sha256:abc123…”; };

Type: attribute set of (submodule)

Default: { }

Declared in: modules/lab/images.nix


images.pins.<name>.digest

Image digest (e.g., sha256:abc123…). Immutable — ensures reproducibility.

Type: null or string

Declared in: modules/lab/images.nix


images.pins.<name>.image

Full image path (e.g., docker.io/grafana/grafana)

Type: string

Declared in: modules/lab/images.nix


images.pins.<name>.ref

Computed full image reference (image:tag@digest)

Type: string

Declared in: modules/lab/images.nix


images.pins.<name>.tag

Image tag (e.g., 11.4.0). Mutable — use digest for reproducibility.

Type: null or string

Declared in: modules/lab/images.nix


images.requireDigest

When true, the lint check errors on container images without digest pins. Use this to enforce reproducible deployments.

Type: boolean

Default: false

Declared in: modules/lab/images.nix


lint.checks

Custom lint checks that run on rendered manifests. Each check is a shell command executed per YAML file. Checks run alongside built-in checks during cata lab lint.

Type: attribute set of (submodule)

Default: { }

Declared in: modules/lab/lint.nix


lint.checks.<name>.command

Shell command to execute per YAML file. Environment variables: $FILE — path to the YAML manifest file $CLUSTER — name of the cluster being checked Exit 0 = pass, non-zero = fail. Stdout = diagnostic message (shown to user on failure).

Type: string

Declared in: modules/lab/lint.nix


lint.checks.<name>.description

Human-readable description of what this check validates

Type: string

Declared in: modules/lab/lint.nix


lint.checks.<name>.severity

Error = fails the lint, Warning = reported but doesn’t fail

Type: one of "error", "warning"

Default: "warning"

Declared in: modules/lab/lint.nix


name

Unique name for this lab

Type: string

Example: "homelab"

Declared in: modules/lab/types.nix


network.dockerSubnet

Subnet for the lab

Type: string

Default: "172.19.0.0/16"

Declared in: modules/lab/network.nix


ops.commands

Lab-global operational commands. These are not cluster-specific and appear directly in the ops tool under their category.

Components contribute cluster-scoped commands via the cluster-level ops.<name> option. Same-named commands from different clusters are automatically merged (enum options get their values unioned).

Type: attribute set of (submodule)

Default: { }

Declared in: modules/lab/ops.nix


ops.commands.<name>.args

Positional arguments

Type: list of (submodule)

Default: [ ]

Declared in: modules/lab/ops.nix


ops.commands.<name>.args.*.description

This option has no description.

Type: string

Default: ""

Declared in: modules/lab/ops.nix


ops.commands.<name>.args.*.name

This option has no description.

Type: string

Declared in: modules/lab/ops.nix


ops.commands.<name>.args.*.required

This option has no description.

Type: boolean

Default: true

Declared in: modules/lab/ops.nix


ops.commands.<name>.category

Subcommand group (e.g. ‘backup’, ‘database’)

Type: string

Default: "general"

Declared in: modules/lab/ops.nix


ops.commands.<name>.description

One-line description shown in help

Type: string

Declared in: modules/lab/ops.nix


ops.commands.<name>.options

Named options (flags)

Type: attribute set of (submodule)

Default: { }

Declared in: modules/lab/ops.nix


ops.commands.<name>.options.<name>.default

This option has no description.

Type: null or string

Declared in: modules/lab/ops.nix


ops.commands.<name>.options.<name>.description

This option has no description.

Type: string

Default: ""

Declared in: modules/lab/ops.nix


ops.commands.<name>.options.<name>.required

This option has no description.

Type: boolean

Default: false

Declared in: modules/lab/ops.nix


ops.commands.<name>.options.<name>.type

This option has no description.

Type: one of "string", "enum", "bool"

Default: "string"

Declared in: modules/lab/ops.nix


ops.commands.<name>.options.<name>.values

Valid values for enum type

Type: list of string

Default: [ ]

Declared in: modules/lab/ops.nix


ops.commands.<name>.package

Package providing the command binary

Type: package

Declared in: modules/lab/ops.nix


ops.out.tool

Generated lab operations CLI tool (null if no commands defined)

Type: null or package

Declared in: modules/lab/ops.nix


out.allClusters

Computed attrset of all clusters in the lab. Keys are cluster names, values are evaluated cluster configs. Use this for cross-cluster references.

Type: attribute set of (attribute set)

Default: { }

Declared in: modules/lab/out.nix


out.bootstrapManifests

Per-cluster kapp-format manifests for direct-apply bootstrap. When strategy is kapp, this equals manifests. Otherwise renders with kapp for use by lab up (which always direct-applies).

Type: attribute set of package

Default: { }

Declared in: modules/lab/out.nix


out.cliConfig

JSON-serializable lab configuration for the CLI. Contains the fields that cata lab commands need: management, clusterNames, services, network, registryPort, dnsInfo.

Type: attribute set

Default: { }

Declared in: modules/lab/out.nix


out.clusterNames

List of all cluster names in the lab

Type: list of string

Default: [ ]

Declared in: modules/lab/out.nix


out.deploymentPlan

Computed deployment plan — an ordered list of typed steps for the CLI to execute. Inspect with cata lab plan.

Type: list of (submodule)

Declared in: modules/lab/planner.nix


out.deploymentPlan.*.bootstrapContext

This option has no description.

Type: null or string

Declared in: modules/lab/planner.nix


out.deploymentPlan.*.cluster

This option has no description.

Type: null or string

Declared in: modules/lab/planner.nix


out.deploymentPlan.*.clusters

This option has no description.

Type: list of string

Default: [ ]

Declared in: modules/lab/planner.nix


out.deploymentPlan.*.description

This option has no description.

Type: string

Default: ""

Declared in: modules/lab/planner.nix


out.deploymentPlan.*.ephemeral

This option has no description.

Type: boolean

Default: false

Declared in: modules/lab/planner.nix


out.deploymentPlan.*.name

This option has no description.

Type: null or string

Declared in: modules/lab/planner.nix


out.deploymentPlan.*.provisioner

This option has no description.

Type: null or string

Declared in: modules/lab/planner.nix


out.deploymentPlan.*.resources

This option has no description.

Type: list of attribute set of string

Default: [ ]

Declared in: modules/lab/planner.nix


out.deploymentPlan.*.skipIfReachable

This option has no description.

Type: null or string

Declared in: modules/lab/planner.nix


out.deploymentPlan.*.stores

This option has no description.

Type: list of string

Default: [ ]

Declared in: modules/lab/planner.nix


out.deploymentPlan.*.target

This option has no description.

Type: null or string

Declared in: modules/lab/planner.nix


out.deploymentPlan.*.targetContext

This option has no description.

Type: null or string

Declared in: modules/lab/planner.nix


out.deploymentPlan.*.type

This option has no description.

Type: string

Declared in: modules/lab/planner.nix


out.labNamespaces

Per-cluster list of lab-created namespaces (before prefix application). Used by checks to verify prefix completeness.

Type: attribute set of list of string

Default: { }

Declared in: modules/lab/out.nix


out.manifests

Per-cluster rendered manifest packages. Each package contains the strategy-specific directory layout (kapp, argocd, or fleet) with human-readable YAML manifests.

Type: attribute set of package

Default: { }

Declared in: modules/lab/out.nix


out.package

Single package containing all lab outputs. Includes metadata.json (pretty-printed) and manifests/ directory with symlinks to each cluster’s rendered manifests.

Type: package

Declared in: modules/lab/out.nix


out.teardownPlan

Computed teardown plan — an ordered list of typed steps for safe lab destruction. Inspect with cata lab plan --teardown.

Type: list of (submodule)

Declared in: modules/lab/planner.nix


out.teardownPlan.*.bootstrapContext

This option has no description.

Type: null or string

Declared in: modules/lab/planner.nix


out.teardownPlan.*.cluster

This option has no description.

Type: null or string

Declared in: modules/lab/planner.nix


out.teardownPlan.*.clusters

This option has no description.

Type: list of string

Default: [ ]

Declared in: modules/lab/planner.nix


out.teardownPlan.*.description

This option has no description.

Type: string

Default: ""

Declared in: modules/lab/planner.nix


out.teardownPlan.*.ephemeral

This option has no description.

Type: boolean

Default: false

Declared in: modules/lab/planner.nix


out.teardownPlan.*.name

This option has no description.

Type: null or string

Declared in: modules/lab/planner.nix


out.teardownPlan.*.provisioner

This option has no description.

Type: null or string

Declared in: modules/lab/planner.nix


out.teardownPlan.*.resources

This option has no description.

Type: list of attribute set of string

Default: [ ]

Declared in: modules/lab/planner.nix


out.teardownPlan.*.skipIfReachable

This option has no description.

Type: null or string

Declared in: modules/lab/planner.nix


out.teardownPlan.*.stores

This option has no description.

Type: list of string

Default: [ ]

Declared in: modules/lab/planner.nix


out.teardownPlan.*.target

This option has no description.

Type: null or string

Declared in: modules/lab/planner.nix


out.teardownPlan.*.targetContext

This option has no description.

Type: null or string

Declared in: modules/lab/planner.nix


out.teardownPlan.*.type

This option has no description.

Type: string

Declared in: modules/lab/planner.nix


prefix

Global name prefix applied to all rendered output. Use for multi-tenancy on shared clusters or running multiple lab instances. When set, resource names, namespaces, fleet bundles, and ArgoCD apps are all prefixed. Empty string = disabled.

Type: string

Default: ""

Example: "dev"

Declared in: modules/lab/types.nix


proxy.containerName

Docker container name for the ingress

Type: string

Default: "catallaxy-ingress"

Declared in: modules/lab/proxy.nix


proxy.enable

Whether to enable Lab ingress (HAProxy for domain-based routing to k3d clusters).

Type: boolean

Default: false

Example: true

Declared in: modules/lab/proxy.nix


proxy.httpPort

Host port for HTTP (redirects to HTTPS)

Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)

Default: 80

Declared in: modules/lab/proxy.nix


proxy.httpsPort

Host port for HTTPS

Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)

Default: 443

Declared in: modules/lab/proxy.nix


proxy.image

HAProxy container image

Type: string

Default: "haproxy:3.1-alpine"

Declared in: modules/lab/proxy.nix


proxy.out.service

Computed container service definition for the lab ingress

Type: attribute set

Default: { }

Declared in: modules/lab/proxy.nix


registry.containerName

Docker container name for the registry

Type: string

Default: "catallaxy-registry"

Declared in: modules/lab/registry.nix


registry.enable

Whether to enable Lab registry for image caching (Zot OCI registry as pull-through cache).

Type: boolean

Default: false

Example: true

Declared in: modules/lab/registry.nix


registry.image

Zot registry container image

Type: string

Default: "ghcr.io/project-zot/zot-linux-amd64:v2.1.1"

Declared in: modules/lab/registry.nix


registry.port

Host port for the registry

Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)

Default: 5050

Declared in: modules/lab/registry.nix


registry.service

Computed container service definition for the lab registry

Type: attribute set

Default: { }

Declared in: modules/lab/registry.nix


secrets.managed

Managed secrets. Each declares source keys that live in a store. Components project these into Kubernetes Secrets via cluster-level secrets.projections.

Type: attribute set of (submodule)

Default: { }

Declared in: modules/lab/secrets.nix


secrets.managed.<name>.keys

Source key definitions — these appear in the SOPS file

Type: attribute set of (submodule)

Default: { }

Declared in: modules/lab/secrets.nix


secrets.managed.<name>.keys.<name>.generator

Generator for this key’s value. null means the value is set manually via cata secrets edit.

Type: null or one of "base64", "hex", "alphanumeric", "uuid"

Declared in: modules/lab/secrets.nix


secrets.managed.<name>.keys.<name>.length

Length of generated value

Type: null or (positive integer, meaning >0)

Declared in: modules/lab/secrets.nix


secrets.managed.<name>.store

Name of the secret store this secret belongs to

Type: string

Declared in: modules/lab/secrets.nix


secrets.stores

Secret stores. Each store maps to one SOPS file (or one Vault path). SOPS files are at: secrets//.enc.yaml

Type: attribute set of (submodule)

Default: { }

Declared in: modules/lab/secrets.nix


secrets.stores.<name>.backend

Storage backend:

  • sops: encrypted YAML files in git
  • vault: HashiCorp Vault (future)
  • external: managed outside catallaxy

Type: one of "sops", "vault", "external"

Default: "sops"

Declared in: modules/lab/secrets.nix