zmgr/docs/ai/registry-format.md
Till Wegmueller 430be11b13
Add multi-network zones and list-based IPAM pools
Templates now define named `net` blocks instead of a single pool
reference, allowing zones like a router to attach to both internal and
public networks. Pools support an `addresses` block with explicit IPs
as an alternative to contiguous range-start/range-end — useful for
hoster-assigned public addresses.

Default init now includes a router template (internal + public) and a
public pool with example addresses. Zone registry entries store per-net
address/VNIC/stub/gateway. Import parses multiple net blocks from
zonecfg info. Backward compatible with legacy single-pool templates.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 14:04:15 +01:00

3.2 KiB

Registry Format

All files use KDL v2 syntax. The registry root defaults to /etc/zmgr/ but can be overridden with --registry.

config.kdl

zonepath-prefix "/zones"
default-template "oi"
Field Type Default Description
zonepath-prefix string /zones Parent directory for zone roots
default-template string oi Template used when --template is omitted

templates/*.kdl

Templates define one or more net blocks, each referencing an IPAM pool.

// Single-net template
template "oi" {
  brand "ipkg"
  autoboot #false
  ip-type "exclusive"
  net "internal" {
    pool "internal"
  }
}

// Multi-net template (e.g., router with internal + public)
template "router" {
  brand "ipkg"
  autoboot #true
  ip-type "exclusive"
  net "internal" {
    pool "internal"
  }
  net "public" {
    pool "public"
  }
}
Field Type Required Description
brand string yes Zone brand (ipkg, nlipkg, etc.)
autoboot bool no Boot zone after install (default: #false)
ip-type string no IP type (default: exclusive)
net "<name>" block yes (1+) Network attachment with pool reference

Legacy: a flat pool "name" field is accepted as shorthand for a single net named "default".

pools/*.kdl

Pools support two address source modes: range or list.

Range-based pool (contiguous)

pool "internal" {
  network "10.1.0.0/24"
  gateway "10.1.0.1"
  stub "oinetint0"
  range-start "10.1.0.10"
  range-end "10.1.0.250"
}

List-based pool (specific addresses)

For public IPs from a hoster where addresses may not be contiguous:

pool "public" {
  network "203.0.113.0/28"
  gateway "203.0.113.1"
  stub "pubstub0"
  addresses {
    address "203.0.113.2"
    address "203.0.113.3"
    address "203.0.113.5"
  }
}
Field Type Required Description
network CIDR yes Network in CIDR notation
gateway IPv4 yes Default router for zones in this pool
stub string yes Etherstub/VNIC parent for zone VNICs
range-start IPv4 * First allocatable address (range mode)
range-end IPv4 * Last allocatable address (range mode)
addresses block * Explicit address list (list mode)

* Exactly one of range (range-start + range-end) or addresses is required.

zones/*.kdl

Zone registry entries store per-net address/VNIC/stub/gateway:

zone "gateway" {
  template "router"
  created "2026-03-22"
  net "internal" {
    address "10.1.0.10/24"
    gateway "10.1.0.1"
    vnic "gateway0"
    stub "oinetint0"
  }
  net "public" {
    address "203.0.113.2/28"
    gateway "203.0.113.1"
    vnic "gateway1"
    stub "pubstub0"
  }
}

These files are created by zmgr create and zmgr import. They serve as the IPAM allocation ledger — scanning all zone net blocks determines which IPs are in use.

VNIC naming: <zonename><index> where index is the position in the net list (0, 1, 2...).

publishers/*.kdl

publisher "openindiana.org" {
  origin "https://pkg.openindiana.org/hipster"
}

IPS publisher configurations. Currently informational — future work could apply these during zone install.