Skip to content

feat: add support for v1.14 config documents - #128

Merged
clementnuss merged 4 commits into
mainfrom
v1.14-fix
Sep 3, 2026
Merged

feat: add support for v1.14 config documents#128
clementnuss merged 4 commits into
mainfrom
v1.14-fix

Conversation

@clementnuss

Copy link
Copy Markdown
Contributor

closes #127

@clementnuss

Copy link
Copy Markdown
Contributor Author

this is still very much a draft. I just let GLM 5.3 try its best; code quality is likely not up to standards 😅

@clementnuss

Copy link
Copy Markdown
Contributor Author

I think we should try to provide some more templating attributes for nodes: something like .Node.RuntimeData.TalosVersion for example, so people can handle the transition to machine-less configs as smoothly as possible

@oscrx

oscrx commented Sep 1, 2026

Copy link
Copy Markdown

Ran topf 0.6.0-rc.0 / Talos 1.14.0-rc.2 against a 4-node IPv6 cluster (3 control planes + 1 worker), migrating every v1alpha1 field to documents. Two topf issues, one upstream note.

1. UnattendedInstallConfig.provisioning is never populated, so stock output doesn't validate.

Empty patches/ dir, minimal topf.yaml:

$ topf render -o out
Wrote machine config for cp1 to out/cp1.yaml

$ talosctl validate -c out/cp1.yaml -m metal
1 error occurred:
	* UnattendedInstallConfig: provisioning.volumeSelector.match is required

Rendered:

kind: UnattendedInstallConfig
installer:
    image: factory.talos.dev/metal-installer/…:v1.14.0-rc.2
provisioning: {}

talosctl gen config fills it in and validates:

provisioning:
    diskSelector:
        match: disk.dev_path == "/dev/sda"
    wipe: false

Related: the document defaults wipe to true, but topf 0.5 emitted machine.install.wipe: false. It only bites on an unattended reinstall, but it's a silent flip on upgrade unless users pin it.

2. render never validates its own output — it exits 0 on the invalid config above. Validating there would have surfaced #1 immediately.

Upstream, not topf: the error says provisioning.volumeSelector.match, but the field is provisioning.diskSelector — there's no volumeSelector in the document.

Rest of the migration was clean. .Node.Data was enough to template a per-node NIC for DHCPv6Config, FWIW re: your .Node.RuntimeData comment.

@clementnuss

Copy link
Copy Markdown
Contributor Author

really cool feedback, thanks. I will try to fix the 2 issues you mention later this week.

as for .Node.RuntimeData, the use case is handling clusters with heterogeneous node versions but a single config repository/folder. we will add a template function to decide whether a certain file should render based on the talos version. might not be useful for a home lab but as we run clusters in production with >100 nodes, we need a way to be able to keep running topf apply there for the time period where nodes get upgraded.

but overall really happy that you managed to upgrade everything without more hiccups, that's a good validation of our config model: just forwarding the upstream config documents is the only way forward.

@TheoBassaw

Copy link
Copy Markdown

Migration worked perfectly on my part. No issue to report at the moment.

@clementnuss
clementnuss force-pushed the v1.14-fix branch 2 times, most recently from 972faea to 18f8407 Compare September 3, 2026 14:18
@clementnuss
clementnuss marked this pull request as ready for review September 3, 2026 14:23
chore: remove unattended_install test

chore: polish/remove comments

chore: remove llm-generated test

build: bump go mods and fix TODOs :)
…ing public key material

fix: keep kubeVersion field optional
@clementnuss
clementnuss merged commit 21c2a50 into main Sep 3, 2026
4 checks passed
@clementnuss
clementnuss deleted the v1.14-fix branch September 3, 2026 15:04
@clementnuss

Copy link
Copy Markdown
Contributor Author

was more effort than anticipated but that's done! here's an example config migration: clementnuss/k8s-gitops@ba92108

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

v1.14 unattendedInstall document not recognized

3 participants