2797 Commits

Author SHA1 Message Date
Mateusz Urbanek
5e2fc260a8
fix: revert add extraArgs from service-account-issuer
This reverts commit d1954278a1ba3470b2e5ccae90762078c18d69e9.

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
(cherry picked from commit f19eef78b9cc01c107f86a6eddf24da0d288d124)
2026-04-27 10:43:57 +02:00
Mateusz Urbanek
17448fcd29
fix: revert use append instead of prepend in service-account-issuer
This reverts commit 01a3678913de0fa4d309a361428c117d24ce0d1e.

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
(cherry picked from commit 6821225b64ddd48e5cc0d16ab80204d539110f78)
2026-04-27 10:42:47 +02:00
Andrey Smirnov
f62c331130
refactor: make all controller unit-test follow modern patterns
Kill old-style "manual" tests, use `ctest` consistently now.

This should be no-op refactoring.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit df0b9a8da1423842d830261e5ddc5dc8f5a234c1)
2026-04-24 21:50:39 +04:00
Andrey Smirnov
e9afea74d6
test: fix OOM test flake
While the OOM pressure is high, we might observe "extra kills" as there
are no other victims to kill anymore (as `stress-ng` is already gone).
Tolerate those kills, but log them in case we see this getting out of
hand.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 71aeb347f90969cb6057651666bfda205269d917)
2026-04-24 21:48:44 +04:00
Andrey Smirnov
f9531d3529
test: fix a flake in the manifest sync test
A sample failure:

```
manifests.go:133:
        	Error Trace:	/src/internal/integration/k8s/manifests.go:133
        	Error:      	[]string{"/usr/local/bin/kube-proxy", "--cluster-cidr=10.244.0.0/16", "--conntrack-max-per-core=0", "--hostname-override=$(NODE_NAME)", "--kubeconfig=/etc/kubernetes/kubeconfig", "--proxy-mode=nftables"} does not contain "--nodeport-addresses=0.0.0.0/0"
        	Test:       	TestIntegration/k8s.ManifestsSuite/TestSync
    manifests.go:137: disabling kube-proxy
```

My running theory is that `List()` picks up a stale pod, so trying to
filter it out and log it in full if we hit it.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 9b9542cc55ee6d08f3490d270c1b497c7b9d3049)
2026-04-24 21:47:54 +04:00
Andrey Smirnov
9f04f2c4ef
fix: watch kubelet's kubeconfig and time out for cache sync
Fixes #13169

Also fixes a number of other issues with controller being stuck
"watching" over stale data.

The major part of the change is to watch contents of kubelet's
kubeconfig and restart the watch when it changes.

The internals of the watch process don't always bubble up error
properly, or we don't watch for errors.

With this change, not only initial sync has a timeout and a way to abort
the sync process, Talos now can also restart the sync on kubeconfig
change make it more transparent.

This might become irrelevant if we start managing kubeconfig via Talos
controlplane for workers, but for now this seems to be the way to fix
issues.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 149592fa59d20c5aa29e4c0af9a3760585f378ce)
2026-04-24 21:45:14 +04:00
Noel Georgi
f3bab2baf2
chore(ci): nvidia update helm values
See #13159, newer GPU operator v26.3.1 has better detection.

Signed-off-by: Noel Georgi <git@frezbo.dev>
(cherry picked from commit bba0b4aeefd7ec0daf7cc048e48c66d8b614f576)
2026-04-24 21:44:51 +04:00
Andrey Smirnov
d4d018b546
fix: propagate route table down to the resource
Fixes #13153

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 3399ff4de05b4fafb8511d6399e919436f1178da)
2026-04-24 21:44:31 +04:00
Noel Georgi
ffa0bcf61a
chore(ci): bump gpu operator version
Bump GPU operator version.

Signed-off-by: Noel Georgi <git@frezbo.dev>
(cherry picked from commit ed9545d0db55cdff8ad7f7755398913780a7540e)
2026-04-24 21:44:10 +04:00
Utku Ozdemir
8035e6e49b
fix: do not flip machine stage to rebooting during shutdown
At the end of every sequence that intentionally terminates the machine (reboot, shutdown, upgrade, etc.), a fatal event is published to signal expected termination. The machine status controller was unconditionally flipping the stage to "rebooting" on this event, which was correct for sequences that end in a reboot but incorrect for the shutdown sequence whose expected termination is a power-off.

The stage tracker now skips this transition when the current sequence is shutdown, so the machine stays in "shutting down" until it actually powers off.

Signed-off-by: Utku Ozdemir <utku.ozdemir@siderolabs.com>
(cherry picked from commit c028db0b8d25e85a4b580e10252d964785320291)
2026-04-24 21:43:48 +04:00
Noel Georgi
10606bdfe8
fix: boot entry detection
Fixes: #13080

Signed-off-by: Noel Georgi <git@frezbo.dev>
(cherry picked from commit 509cd9733926a6994843fb58ccdf38e5cd63a382)
2026-04-24 21:43:29 +04:00
Noel Georgi
23393a5ea3
fix: zfs extensions test
Make sure we run the check commands also on the same node where we created the pool.

Fixes: #13014

Signed-off-by: Noel Georgi <git@frezbo.dev>
(cherry picked from commit 7fa4d39197e1a9e54ba8a259c111f2cb8047ef9c)
2026-04-24 21:42:31 +04:00
Andrey Smirnov
a922d1540c
fix: return failed precondition on upgrade when not installed
This check was in maintenance Upgrade API for Talos <= 1.12,
so keep it in the "normal" API as well.

It always makes sense - the upgrade would fail if Talos is not
installed, but that failure in legacy Upgrade API is async and not
reported properly back.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 0d8362119e4415182caa9349e0ddfb27ea290d90)
2026-04-24 21:41:14 +04:00
Andrey Smirnov
252799a00b
fix: reduce memory dashboard usage
Many small changes, memory reduction measured to be aroun -20MiB.

Reduce cgroup memory limit.

Changes:

* limit updates to 2fps
* batch log updates
* reuse/maps slices to reduce allocations

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit bdcc9321b637da77f1007a571193c2e03c984b8b)
2026-04-24 21:40:52 +04:00
Mateusz Urbanek
8180cb11c9
fix: wrong slot of encryption key was logged
During removal of encryption key, we logged slot of current key instead of the removed key.

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
(cherry picked from commit be58eafaba98bb7b1bcd20ac1ed8f8b03734c7e0)
2026-04-24 21:40:28 +04:00
Andrey Smirnov
370c035ab6
fix: audit trustd code for security
There are no security issues fixed.

Drop username/password creds - they were not used.

Improve security of token interceptor.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 9fbb7c95df2b1dcd68fafa23865412bbd8300f4b)
2026-04-24 21:39:29 +04:00
Andrey Smirnov
3e1c6fd84b
chore: bump container registry library
They re-enabled support for absolute symlinks, but symlinks which target
paths with `../` are still dropped.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 212182e6f655f61e8917059868fc381728e4a959)
2026-04-24 21:39:09 +04:00
Andrey Smirnov
1a519a4108
test: allow more tests to run in FIPS strict mode
Remove the skip statements/rework the code to allow
FIPS builds to do Wireguard by wrapping Wireguard operations
into `fips140.WithoutEnforcement` blocks.

Using Wireguard (or not using it) is still a user's choice, but this
allows tests to run in strict mode.

There might be more fixes required for FIPS strict, right now being
blocked by Go issue with X25119 which is going to be backported to Go
1.26.3.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 1ef8e630ab77b3c849e7da6d1ff83e7c6795f070)
2026-04-24 21:37:23 +04:00
Nico Berlee
929ab71653
fix(machined): clear stale bond ARP/NS targets on decode
Reset ARPIPTargets and NSIP6Targets at the start of BondMasterSpec.Decode.

Without this, repeated decode calls on the same struct can retain old target
entries after config removes them, which makes link status drift from
current bond configuration.

Add a regression test that decodes a payload with targets, then decodes a
payload without target attributes into the same struct and asserts both
slices are empty.

Signed-off-by: Nico Berlee <nico.berlee@on2it.net>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 0a47f40b3cdf304a079c6b3fa964e9f82e91ec63)
2026-04-15 19:29:36 +04:00
Noel Georgi
730937eee9
chore: bump tools
Bump tools

Signed-off-by: Noel Georgi <git@frezbo.dev>
(cherry picked from commit e3e8f01ca66ee74898ebba5dadf4f199775d278e)
2026-04-15 19:29:36 +04:00
Andrey Smirnov
53609713f3
fix: upgrade API in maintenance mode (legacy)
Add an integration test and fix legacy upgrade API in maintenance mode.

There were several assumptions which do not hold true in maintenance as
we have no machine configuration.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit c464c7e88a3f058cb2bbc36af1910d69d903cd07)
2026-04-15 19:29:33 +04:00
Andrey Smirnov
2de7fb60d5
refactor: allow overriding out image name suffix
Also fix one more place when version.Name wasn't used properly.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 4ba11156fd164a0d94538508f5c028f249deed50)
2026-04-15 19:29:32 +04:00
Noel Georgi
9b8c1891bb
fix: panic in reading PCR values
Fix panic in reading PCR values.

Fixes: #13110

Signed-off-by: Noel Georgi <git@frezbo.dev>
(cherry picked from commit c81aa125c85d3886c5b9bb4d7f77ec2def104f21)
2026-04-15 19:29:31 +04:00
Noel Georgi
67a34a6eb3
feat(ci): add nvidia arm64 matrix
Add NVIDIA arm64 test matrix.

Also ensure we have a known baseline for nvidia cdi files,
so if upstream adds more files and we don't install to right location
the test would fail.

Signed-off-by: Noel Georgi <git@frezbo.dev>
(cherry picked from commit 6a3ab87c54f83f70869a2e298e6ed7722cf4afad)
2026-04-15 19:29:31 +04:00
Mateusz Urbanek
7d7776dcaa
fix: handle boot failure
Fixes #13083

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
(cherry picked from commit 181584a5f1850f2bfb2a837c0d05bd9e30ee48b5)
2026-04-15 18:45:08 +04:00
Andrey Smirnov
db2c007ee7
fix: create correct blackhole routes for IPv4
For IPv4, they should be attached to no interfaces.

Discovered while doing some manual testing for the documentation.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 0bfdf7f7035fefe804ec4b568709cd6a09195293)
2026-04-15 18:44:14 +04:00
Andrey Smirnov
6f84628494
refactor: propagate NAME properly, allow to set on build
Allow to set build NAME on build, propagate it down to more consumers.

Expose name in `Version` resource, and use that in the dashboard
next to Talos version.

Fix some places where `Name` was hardcoded.

Propagate Name down to UKI build.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 968ec1e0ca26eb1f0de0836e0a55df09dea7dafe)
2026-04-15 18:43:43 +04:00
Andrey Smirnov
9be7bc0250
fix: don't set xattrs while decompressing extensions
When decompressing extensions, we might not be able to set xattrs (e.g.
running rootless), so instead of setting xattrs, save them in memory and
push to mksquashfs as pseudo definitions.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit d697f5538a7a624a1ac7bafdfebc67dd9418c434)
2026-04-15 18:38:38 +04:00
Mateusz Urbanek
9cc735588b
feat: add client-side Kubernetes node drain to reboot and upgrade commands
Add --drain and --drain-timeout flags to `talosctl reboot` (default off)
and `talosctl upgrade` (default on) that cordon and drain the Kubernetes
node before rebooting, then wait for Ready and uncordon after it comes
back. When --drain is enabled, --wait is forced to true.

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
(cherry picked from commit 52b920032e97e1b241c1e0bd89c6e41cbc1c9a47)
2026-04-15 18:38:13 +04:00
Andrey Smirnov
8499579f4a
fix: add os:meta:writer role to the dashboard
When dashboard runs within Talos, it previously used `os:admin` role
which allows anything.

With changes in 1.13, I dropped the role to `os:reader`, which is a way
tighter scope from the security perspective, but it broke network config
tab - it tries to write to META, which is not allowed under `os:reader`
role, so this change fixes the dashboard, but still keeps the RBAC
tight.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 649ab7fe4234de1a947071926603377e00910cb9)
2026-04-15 18:36:09 +04:00
Andrey Smirnov
f7be2c5984
feat: add resource view to talosctl dashboard
Fixes #12933

There are many usecases for this:

* exploring resources and state of the system, learning available
  resources
* when a Talos machine is booted up in an environment without network
  access, learning all available network interfaces, all disks
  available, etc.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 5e24d5265bde9adee92c02e675140de87ee126bf)
2026-04-15 18:35:18 +04:00
Andrey Smirnov
a47b766187
fix: unseal with "slow" TPM
Fixes #13056

The TPM unseal operation doesn't respect the context, and we had 10
second timeout for the whole key unlock operation.

So there might a case when a "slow" TPM unseal runs for more than 10
seconds, and by the time TPM unseal is down, context timeout already
passed, so a somewhat wrong messahe pops in, as the rate limiter is
configured with any limit, but it fails due to the fact that the context
got canceled (but it would have failed later anyways doing the actual
resource operation).

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 087ced85f5130656cbc647c2e4d838cab3ff1737)
2026-04-15 18:34:45 +04:00
Mateusz Urbanek
38d391e9dc
fix: always grow disks
Previously, there was no way to grow virtual disks attached to VMs,
even though resizing them was possible (e.g. through hypervisor changing
the size of disk). This forces the UserVolume of type=disk to always
grow to full size of the disk.

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
(cherry picked from commit e2df0f6ce8c47b0dc3e93bf257afb8a1ae9243fb)
2026-04-15 18:34:01 +04:00
Utku Ozdemir
f0c5cb517f
fix: add metal-agent mode to runtime capabilities
The runtime capabilities lookup did not include an entry for the metal-agent mode, causing an index out of range panic when any capability check was performed in that mode. This broke MetaWrite calls from Omni to machines running in metal-agent mode through the new unified apid, preventing them from appearing as pending machines.

Also fix the incorrect comments on the existing entries to match the actual iota order.

Signed-off-by: Utku Ozdemir <utku.ozdemir@siderolabs.com>
(cherry picked from commit 783a35851ed1bac4ddd0f1fed583fc1b6477614d)
2026-04-15 18:33:41 +04:00
Andrey Smirnov
abc0ddf11e
feat: bump musl to 1.2.6
Bump via tools/extensions.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit b3dfbf743e6c2fd44020911ee1e0eea3a7676579)
2026-03-26 16:10:07 +04:00
Orzelius
fcdfeab2ba
fix: incorrect route source for on-link routes
when processing on-link routes, the source address was incorrectly set to the first address of the interface.
This caused issues when the interface had multiple addresses, as the source address may not have been valid for the route.
The source address is now set to an empty string, which allows the kernel to automatically select the appropriate source address for the route.

Signed-off-by: Orzelius <33936483+Orzelius@users.noreply.github.com>
(cherry picked from commit 3400059ccf4811140a4326397d972f68693c708c)
2026-03-26 16:07:07 +04:00
Andrey Smirnov
ccf1e0c274
test: fix the PKI mismatch test flake
It seems that depending on timing, we might get one or another Talos in
gRPC client.

Fixes #13016

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 4227921b3979d3a8542946fed4ceb622747adb00)
2026-03-26 16:05:22 +04:00
Andrey Smirnov
7978152094
fix: allow blockdevice wipe in maintenance mode
This is a regression compared to Talos 1.12: allow blockdevice wipe in
maintenance mode (with `os:reader` role).

Also improve the test for maintenance via SideroLink - add a test on
install, META write and reboot preserving META value.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 1dd701efa8119b6515a62ff68c430c99a96f2b68)
2026-03-26 16:03:43 +04:00
Andrey Smirnov
efc76f0bfe
test: fix the flakes in tests with trusted roots
As one of the integration tests was overriding TrustedRoots config, it
erased the required settings leading to a random failure (depending on
the nodes picked for subsequent tests).

Fixes #13013

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 70cefab6af3dacdc80921b55ca8dbf5644501c6c)
2026-03-26 16:03:09 +04:00
Andrey Smirnov
902c78a17e
test: improve maintenance API provision tests
Add a test that covers all maintenance APIs in general.

Add a test for transition from SideroLink.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit ad72c73006abc3b51e5371496c61d8637b2222f0)
2026-03-26 16:01:16 +04:00
David Orman
b863607905
fix: add symlinks nvidia-ctk and nvidia-cdi-hook in /usr/bin
The gpu-operator device plugin generates CDI specs with hooks pointing
to /usr/bin/nvidia-ctk and /usr/bin/nvidia-cdi-hook (hardcoded defaults
in NVIDIA/k8s-device-plugin and NVIDIA/nvidia-container-toolkit). Talos
extensions install these binaries under /usr/local/bin/, so pods
requesting nvidia.com/gpu resource limits fail with "no such file".

Add /usr/bin/nvidia-ctk and /usr/bin/nvidia-cdi-hook to the rootfs as
symlinks.

Fixes: #13021
Fixes: https://github.com/siderolabs/extensions/issues/1017

Signed-off-by: David Orman <ormandj@corenode.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 9597714f625ac07bf74de32a24c3e6dad5abdc91)
2026-03-26 15:59:44 +04:00
Andrey Smirnov
d82fada75b
fix: unset rlimits for extension services
See https://github.com/siderolabs/talos/discussions/13012

The containerd's default OCI spec sets NOFILE rlimit to 1024,
unset it to simply let machined defaults take over.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 8ac47d677703624ec6568294d94dcad7e533e6c4)
2026-03-26 15:59:25 +04:00
Andrey Smirnov
76931f4092
feat: enforce PID check on connections to services over file sockets
Whitelist services which can access the file socket, refuse other
connections.

Fixes #12701

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 038cb87354eea1c1ff4612bdd13d1e77e595955a)
2026-03-26 15:58:41 +04:00
Andrey Smirnov
5e171a3de1
test: fix the apid test against AWS/GCP
We should use the endpoint(s) from the original talosconfig instead of
using node IPs, as they might be private/behind the LB.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 8e1c8a7a90fb039fd8a639a1218c169bc683d141)
2026-03-26 15:57:24 +04:00
Andrey Smirnov
b7d70cf625
feat: unify maintenance and regular APIs
Drop maintenance service and all the code supporting it directly.

Instead, move all network API termination into the `apid` service, which
now can work now in more modes to support maintenance operations as
well.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-03-17 17:00:35 +04:00
Andrey Smirnov
13d6b4a03c
fix: trim down cosign dependencies
Trade some imports, bump some modules, net result is killing lots of
transitive dependencies which were getting into the build.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-03-16 22:53:50 +04:00
Andrey Smirnov
5c39a85814
fix: drop aws & azure KMS APIs from the machined build
Replace imports of `pkg/imager` which are reachable from machined.

See #12980

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-03-16 21:44:26 +04:00
Andrey Smirnov
3d059754c2
fix: accept image cache volume encryption config
Fixes #12945

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-03-16 19:01:49 +04:00
Mateusz Urbanek
13ef0cfc9b
fix: unmount pseudo-late recursively
Pseudo late mount points (`/system`, `/run` and `/system`) were consistently failing to unmount.
While reaching this unmount sequence, we should already have unmounted any children.
However, if those are not unmounted, we should log what are we unmounting and unmount them recursively.

Fixes #12974

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
2026-03-16 14:14:01 +01:00
Andrey Smirnov
e9d45671a8
fix: panic in hardware.SystemInfoController
The panic:

```
2026/03/16 13:39:56 172.20.0.3: {"component":"controller-runtime","controller":"hardware.SystemInfoController","error":"controller \"hardware.SystemInfoController\" panicked: output tracking already enabled\n\ngoroutine 613 [running]:\nruntime/debug.Stack()\n\t/go/src/runtime/debug/stack.go:26 +0x5e\ngithub.com/cosi-project/runtime/pkg/controller/runtime/internal/rruntime.(*Adapter).runOnce.func2()\n\t/.cache/mod/github.com/cosi-project/runtime@v1.14.0/pkg/controller/runtime/internal/rruntime/run.go:67 +0x4c\npanic({0x2a43dc0?, 0x350ff30?})\n\t/go/src/runtime/panic.go:860 +0x13a\ngithub.com/cosi-project/runtime/pkg/controller/runtime/internal/rruntime.(*Adapter).StartTrackingOutputs(0x38246abe1c98?)\n\t/.cache/mod/github.com/cosi-project/runtime@v1.14.0/pkg/controller/runtime/internal/rruntime/output_tracker.go:25 +0x94\ngithub.com/siderolabs/talos/internal/app/machined/pkg/controllers/hardware.(*SystemInfoController).Run(0x38246a3fe280, {0x3549b50, 0x38246a96dbd0}, {0x358b070, 0x38246adaf0e0}, 0x38246adba000)\n\t/src/internal/app/machined/pkg/controllers/hardware/system.go:93 +0x127\ngithub.com/cosi-project/runtime/pkg/controller/runtime/internal/rruntime.(*Adapter).runOnce(0x38246adaf0e0, {0x3549b50, 0x38246a96dbd0}, 0x38246adba000)\n\t/.cache/mod/github.com/cosi-project/runtime@v1.14.0/pkg/controller/runtime/internal/rruntime/run.go:73 +0xfa\ngithub.com/cosi-project/runtime/pkg/controller/runtime/internal/rruntime.(*Adapter).Run(0x38246adaf0e0, {0x3549b50, 0x38246a96dbd0})\n\t/.cache/mod/github.com/cosi-project/runtime@v1.14.0/pkg/controller/runtime/internal/rruntime/run.go:25 +0x16b\ngithub.com/cosi-project/runtime/pkg/controller/runtime.(*Runtime).Run.func1.2()\n\t/.cache/mod/github.com/cosi-project/runtime@v1.14.0/pkg/controller/runtime/runtime.go:201 +0x2e\ngithub.com/cosi-project/runtime/pkg/controller/runtime.(*Runtime).Run.func1.goFunc.3()\n\t/.cache/mod/github.com/cosi-project/runtime@v1.14.0/pkg/controller/runtime/runtime.go:473 +0x13\ngolang.org/x/sync/errgroup.(*Group).Go.func1()\n\t/.cache/mod/golang.org/x/sync@v0.20.0/errgroup/errgroup.go:93 +0x50\ncreated by golang.org/x/sync/errgroup.(*Group).Go in goroutine 146\n\t/.cache/mod/golang.org/x/sync@v0.20.0/errgroup/errgroup.go:78 +0x95\n","msg":"2026-03-16T09:39:56.457Z \u001b[31mERROR\u001b[0m controller failed","talos-level":"info","talos-service":"controller-runtime","talos-time":"2026-03-16T09:39:56.718594712Z"}
```

This more of a cosmetic issue, but still - move tracking outputs below
the `continue` statement, otherwise it might be called twice in a single
run.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-03-16 13:52:46 +04:00