a9ff182bd6829893df279fb5b0283dcdad0e0dda
Some checks failed
Two separate things, found because adding IPv6 to the provisioning templates
meant parsing the output for the first time.
PRE-EXISTING, AND THE BIGGER NEWS: renderUbuntuAutoinstall produced a document
that does not parse, for vanilla, worker and infra alike. There was no test on
this template, and `toContain` assertions would never have caught it. Three
faults:
* late-commands were serialised as `- "${c}"` with no escaping at all.
Embedded double quotes ended the scalar early -- `echo "tmpfs /tmp ..." >>
/etc/fstab` gives "expected <block end>, but found '<scalar>'".
* the same naive quoting put REAL newlines inside a double-quoted scalar, and
YAML folds those into spaces. So even where it parsed, each heredoc reached
the target as one long line and wrote a file with no line breaks -- the k3s
modules-load and sysctl files among them.
* the longhorn/rancher LVM entries were indented 8 spaces where their siblings
in storage.config sit at 6, so the storage list became a nested map.
Fixed by serialising with JSON.stringify (JSON is a subset of YAML, so escaping
comes for free and \n survives the round trip) and dedenting the LVM blocks.
Verified by parsing the rendered document: the modules heredoc now arrives with
its four lines intact and the fstab command keeps its quotes.
Guarded by a new test that parses the output with a real YAML parser for every
role, mirroring how kickstart.test.ts shells out to ksvalidator. python3's yaml
rather than a new npm dependency.
DUAL-STACK: both templates now request an IPv6 lease. install.ks.ts uses
--ipv6=auto rather than =dhcp so the RA's managed-flag steers the node to DHCPv6
while a VLAN with no DHCPv6 yet still installs -- failing an OS install because
IPv6 was not ready is the worse trade. ubuntu-autoinstall.ts gets a netplan
block with dhcp4+dhcp6 and optional: true, for the same reason. The address
comes from a kea DHCPv6 reservation keyed on MAC, the same source of truth as
the v4 address, so neither template needs to know it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DMVzWZgiKW2wquf5z8S1yH
Description
No description provided
Languages
TypeScript
62.1%
Shell
27.4%
Python
8.9%
HTML
0.6%
JavaScript
0.6%
Other
0.4%