948 Commits

Author SHA1 Message Date
Kevin Tijssen
576c269484
feat: add --platform=all support to image cache-create
Add support for caching all platforms in a multi-platform image index
by passing --platform=all to the images cache-create command.

When all is specified, the index manifest is fetched without platform
resolution, and each platform-specific image is downloaded individually.
Attestation manifests (unknown/unknown) are included.

Include the platform in the fetch log line so each pull is identifiable,
e.g. fetching image "..." (linux/amd64).

Signed-off-by: Kevin Tijssen <kevin.tijssen@siderolabs.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 786bf00abb309955616e440cd06fd0718b1b77ab)
2026-03-26 16:01:56 +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
Andrey Smirnov
a02d578faa
feat: add support for mirroring image signatures
Enable signature verification in image cache & airgapped tests.

Fixes #12892

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-03-09 20:07:51 +04:00
Laura Brehm
7f2eb48561
feat: add image verification endpoint
Add support for whole machine-wide image verification configuration.
Configuration is a set of rules applied top-down to the image reference,
each specifying a specific cosign-based identity or static public key
claim.

Talos provides a machined API to verify an image reference, resolving it
to the digest on the way as needed.

Talos itself hooks up in the image verification process, while
containerd CRI plugin accesses same API via the machined socket.

Signed-off-by: Laura Brehm <laurabrehm@hey.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-03-06 20:06:07 +04:00
Mateusz Urbanek
1e4cd20d23
feat: add talosctl install command and upgrade via LifecycleService
Add new `talosctl install` command using the LifecycleService.Install
streaming API with support for insecure (maintenance) mode and progress
reporting. Refactor `talosctl upgrade` to use the new
LifecycleService.Upgrade streaming API with automatic fallback to the
legacy MachineService.Upgrade path for older Talos versions.

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
2026-03-06 15:40:54 +01:00
Orzelius
d417d68e0d
feat: bring in new ssa logic
drop the old cli-utils based manifest apply logic and replace it with the new fluxcd/pkg/ssa based implementation

Signed-off-by: Orzelius <33936483+Orzelius@users.noreply.github.com>
2026-03-02 19:37:31 +09:00
Jan Paul
c8800b41e5
fix: update path handling on talosctl cgroups
The call to filepath.join in current code causes breakage when using talosctl on windows due to wrong slash introduced into the embed path.

Signed-off-by: Jan Paul <paulj@nerakhon.cz>
2026-02-23 15:12:50 +01:00
Andrey Smirnov
8b1c974a2a
refactor: drop termui-widgets library
Use the library built for tview, so that we don't have to have two UI
libraries working in parallel in the same TUI.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-02-21 16:24:26 +04:00
Dmitrii Sharshakov
9758bd4fe0
feat: update Go to 1.26
Via tools/pkgs, also pulling in Clang-built Linux

Update go.mod dependencies

Fix linter errors with new golangci-lint, modernize, use new()

Signed-off-by: Dmitrii Sharshakov <dmitry.sharshakov@siderolabs.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-02-19 22:15:19 +01:00
Andrey Smirnov
f20445ad09
chore: improve logging of disk encryption handling
Pulls in KMS with logging, and adds more logging to Talos.

This allows to debug encryption problems better.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-02-19 19:06:42 +04:00
Orzelius
ce53ffa900
fix: disks flag parsing and handling in create qemu command
The disks flag Set method was appending new disk requests to the existing ones,
which caused duplicate disk entries when custom values for the disks flag were set.

Signed-off-by: Orzelius <33936483+Orzelius@users.noreply.github.com>
2026-02-16 08:24:40 +09:00
Andrey Smirnov
f118ee47ea
fix: read multi-doc machine config with newer talosctl
This affects reading multi-doc machine config via `talosctl` from Talos
machines v1.11 and below by `talosctl` of v1.12 and up.

The problem is that before v1.12 Talos returned machine config as
embedded document instead of the spec if the resource, which was not
valid YAML. It worked via hacks we used in our fork of yaml library.

Talos v1.12+ cleans that up by marshaling the config as a string, and
drops the forked library. The problem is that we can't still pass
multi-doc YAML via this path, so we have to resort to going into COSI
internals to retrieve the actual value as written by Talos API.

Note: there is no problem for Omni, as it goes via protobuf path which
hasn't been affected.

Fixes #12787

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-02-13 16:26:59 +04:00
Sébastien Masset
87615f5511
feat: implement network policies with Flannel CNI
Align flannel ClusterRole with upstream chart template (cf.
https://github.com/flannel-io/flannel/blob/master/chart/kube-flannel/templates/rbac.yaml)

Add boolean in cluster flannel CNI config to deploy extra resources to
handle network policies. Inspired by flannel Helm chart handling of
netpol.enabled value (cf. https://github.com/flannel-io/flannel/blob/master/Documentation/netpol.md)

Signed-off-by: Sébastien Masset <86793256+smasset-orange@users.noreply.github.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-02-10 15:47:49 +04:00
Andrey Smirnov
9690dbad02
chore: bump tools (including linter)
Re-generate, fix new linting issues.

Update containerd library to the latest 2.2.1 to address the new cgroups
package import (via tools update).

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-02-09 13:07:35 +04:00
Andrey Smirnov
d5ebcd7cae
fix: stop building talosctl debug on Windows
This command is very specific to terminal operations which don't exist
or might not work well enough on Windows.

Windows users will have better luck with WSL and Linux talosctl.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-02-06 13:12:23 +04:00
Laura Brehm
d43a01ccbd
feat: implement talosctl debug
This implements a way to run a debug container with a provided image on
the node.

The container runs with privileged profile, allowing to issue debugging
commands (e.g. using some advanced network tools) to troubleshoot a
machine.

Signed-off-by: Laura Brehm <laurabrehm@hey.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-02-04 21:26:09 +04:00
Noel Georgi
055add7aeb
release(v1.13.0-alpha.1): prepare release
This is the official v1.13.0-alpha.1 release.

Signed-off-by: Noel Georgi <git@frezbo.dev>
2026-02-03 19:47:01 +05:30
Andrey Smirnov
8b245b8f26
feat: implement new image service APIs
These new APIs only support one2one proxying, so they don't have any
hacks, and look as regular gRPC APIs.

Old APIs are deprecated, but still supported.

Implement client-side multiplexing in `talosctl`, provide fallback to
old APIs for legacy Talos versions.

New APIs include removing an image, importing an image.

Extracted from #12392

Co-authored-by: Laura Brehm <laurabrehm@hey.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-02-02 15:55:56 +04:00
Andrey Smirnov
d90c775b84
chore: rename internal talosctl debug air-gapped
This command was always hidden, rename it to `debug-tool` to free up the
`talosctl debug` for #12932.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-02-02 14:25:01 +04:00
Andrey Smirnov
410d8cb572
fix: undo CRLF on Windows (talosctl edit)
Fixes #12664

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-01-26 19:45:39 +04:00
Andrei Kvapil
0bd48bbc6f
fix(talosctl): pass --k8s-endpoint flag to rotate-ca kubernetes rotation
The --k8s-endpoint flag was defined but never used in the rotate-ca
command. This fix passes the flag value through to the Kubernetes
client, allowing users to override the default Kubernetes API endpoint
during CA rotation.

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-01-26 18:28:49 +04:00
Andrey Smirnov
ddd6b186eb
refactor: generate GRUB images
Simplify the flow a bit by using live partition info,
avoid doing some calculations which are already done in the
partition code.

Remove some steps I believe we don't need to do.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-01-21 16:37:25 +04:00
Alexis La Goutte
634b71e2d0
docs: move talosctl pcap example to Example Block
it is before on Long but wrong display on docs website
(already use by image cache-create cmd)

Signed-off-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-01-14 14:35:56 +04:00
Pranav Patil
8184927316
feat: implement KubeSpan multi-document configuration
Migrate KubeSpan configuration to support multi-document format.
Add version-aware support for talosctl cluster create and gen config.
Uses multi-doc format for Talos 1.13+, legacy format for 1.12 and earlier.

Signed-off-by: Pranav Patil <pranavppatil767@gmail.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-01-13 16:08:11 +04:00
Andrey Smirnov
e4ef494dec
fix: drop the persist config flag from gen config
The `persist` value was locked to be true for a long time now, and Talos
doesn't support any other mode (machine config is persisted).

Drop the `gen config` flag and related generate options, as modern Talos
doesn't accept `persist: false`.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-01-12 19:53:50 +04:00
Mateusz Urbanek
c3176adcf9
feat: add EnvironmentConfig document
Add new EnvironmentConfig document for configuring the Env vars.
Deprecate .Machine.Env

Closes #12439

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
2026-01-12 15:10:20 +01:00
Orzelius
c839b38809
feat: expose more SSA options in the upgrade-k8s command
add the following flags to the upgrade-k8s command:
* `--force-conflicts`            overwrite the fields when applying even if the field manager differs
* `--inventory-policy` string    kubernetes SSA inventory policy (one of 'MustMatch', 'AdoptIfNoInventory' or 'AdoptAll') (default "AdoptIfNoInventory")
* `--no-prune`                   whether pruning of previously applied objects should happen after apply
* `--prune-timeout` int          how long to wait for resources to be pruned in secunds (set to zero to disable waiting for resources to be fully deleted) (default 180)
* `--reconcile-timeout` int      how long to wait for resources to be prfully reconciled in secunds (set to zero to disable waiting for resources to be fully reoondiled) (default 180)

Signed-off-by: Orzelius <33936483+Orzelius@users.noreply.github.com>
2026-01-12 21:17:43 +09:00
Mateusz Urbanek
080efcbda2
feat: add k8s-version parameter to k8s-bundle
Allow overriding K8s version in the  command.

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
2026-01-07 10:26:39 +01:00
Noel Georgi
70e67787d6
feat: imager: populate filesystems with root owned files
Populate filesystems from source directories with root owned files.
This completes running imager fully rootless.

Fixes: #12498

Signed-off-by: Noel Georgi <git@frezbo.dev>
2026-01-05 21:13:42 +05:30
Mateusz Urbanek
7416dca593
fix: print talosctl images to release notes
After changing `talsoctl images k8s-bundle and talos-bundle`
we stopped printing some of the images to release notes.
This fixes that issue.

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
2026-01-05 15:01:57 +01:00
Noel Georgi
dc2009e477
chore: use context when creating filesystems
Pass in context when creating filesystems with `mkfs.*` commands.

Signed-off-by: Noel Georgi <git@frezbo.dev>
2026-01-05 15:29:35 +05:30
Noel Georgi
226cd6bc1d
fix: do not allocate for the actual disk image file
Do not allocate space for the actual full disk image file, this defeats sparsing.

Signed-off-by: Noel Georgi <git@frezbo.dev>
2025-12-26 15:03:15 +05:30
Noel Georgi
53f5bf8d2c
fix: overlay installers
Overlays installers assume the `/boot/EFI` path, so we generate assets into `/boot/EFI` then move that directory to the mountPrefix+/EFI.

Signed-off-by: Noel Georgi <git@frezbo.dev>
2025-12-26 15:03:11 +05:30
Noel Georgi
77086694d1
fix: partition data population
`FileSystemTypeZeroes` and `FileSystemTypeNone` doesn't need data to be populated.

Signed-off-by: Noel Georgi <git@frezbo.dev>
2025-12-26 15:03:03 +05:30
Noel Georgi
4d5657b1a3
fix: drop SBC board code
Boards were deprecated in favor of overlays from Talos 1.7.

Now completely remove all board specific code.

Part of: #12492

Signed-off-by: Noel Georgi <git@frezbo.dev>
2025-12-26 14:45:17 +05:30
Andrey Smirnov
c57701d659
fix: remove interactive installer
The interactive installer has been deprecated since v1.12 cycle,
now removed completely including the API method.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-25 15:01:10 +04:00
Noel Georgi
8f2b337994
feat: imager support rootless builds
Also changes the bootloader interface.
Disks are formatted/created with pre-populated source directories in Install/Image mode.

Signed-off-by: Noel Georgi <git@frezbo.dev>
2025-12-24 11:02:37 +05:30
Noel Georgi
c7525a97ef
feat: support creating filesystems from folder
Support creating filesystems from `SourceDirectory`, this implies partitions can have the data populated when formatted.

ImageCache handling is now using `SourceDirectory` while formatting simplifying the code.

Signed-off-by: Noel Georgi <git@frezbo.dev>
2025-12-23 18:13:01 +05:30
Noel Georgi
e2bffb5ceb
chore: refactor imager code so it's more clear
Refactor imager code to simplify code flow.

Signed-off-by: Noel Georgi <git@frezbo.dev>
2025-12-23 18:12:58 +05:30
Mateusz Urbanek
0fb50dbd0a
fix: invalid versions check in talos-bundle
Fixes #12471

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
2025-12-23 11:45:25 +01:00
Andrey Smirnov
0592ff0cdb
fix: drop the Omni API URL check on IP address
I don't see much point in this check, as it's only valuable when joining
to a local development instance of Omni, which is pretty nice usecase.

But this check breaks joining to "real" Omni which has hostname in the
endpoint.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-17 21:30:48 +04:00
Andrey Smirnov
43b43ff189
docs: split talosctl commands into groups
Use the grouping feature to reflect internal command structure better in
the `--help` output.

```
$ talosctl --help
A CLI for out-of-band management of Kubernetes nodes created by Talos

Usage:
  talosctl [command]

Manage running Talos clusters:
  apply-config        Apply a new configuration to a node
  bootstrap           Bootstrap the etcd cluster on the specified node.
  cgroups             Retrieve cgroups usage information
  config              Manage the client configuration file (talosconfig)
  conformance         Run conformance tests
  containers          List containers
  copy                Copy data out from the node
  dashboard           Cluster dashboard with node overview, logs and real-time metrics
  dmesg               Retrieve kernel logs
  edit                Edit Talos node machine configuration with the default editor.
  etcd                Manage etcd
  events              Stream runtime events
  get                 Get a specific resource or list of resources (use 'talosctl get rd' to see all available resource types).
  health              Check cluster health
  image               Manage CRI container images
  inspect             Inspect internals of Talos
  kubeconfig          Download the admin kubeconfig from the node
  list                Retrieve a directory listing
  logs                Retrieve logs for a service
  memory              Show memory usage
  meta                Write and delete keys in the META partition
  mounts              List mounts
  netstat             Show network connections and sockets
  patch               Patch machine configuration of a Talos node with a local patch.
  pcap                Capture the network packets from the node.
  processes           List running processes
  read                Read a file on the machine
  reboot              Reboot a node
  reset               Reset a node
  restart             Restart a process
  rollback            Rollback a node to the previous installation
  rotate-ca           Rotate cluster CAs (Talos and Kubernetes APIs).
  service             Retrieve the state of a service (or all services), control service state
  shutdown            Shutdown a node
  stats               Get container stats
  support             Dump debug information about the cluster
  time                Gets current server time
  upgrade             Upgrade Talos on the target node
  upgrade-k8s         Upgrade Kubernetes control plane in the Talos cluster.
  usage               Retrieve a disk usage
  version             Prints the version
  wipe                Wipe block device or volumes

Commands to generate and manage machine configuration offline:
  gen                 Generate CAs, certificates, and private keys
  inject              Inject Talos API resources into Kubernetes manifests
  machineconfig       Machine config related commands
  validate            Validate config

Local Talos cluster commands:
  cluster             A collection of commands for managing local docker-based or QEMU-based clusters

Additional Commands:
  completion          Output shell completion code for the specified shell (bash, fish or zsh)
  help                Help about any command

Flags:
  -h, --help   help for talosctl

Use "talosctl [command] --help" for more information about a command.
```

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-16 20:00:02 +04:00
Andrey Smirnov
884e76662a
docs: fix the talosctl cluster create help output
Un-hide the `talosctl cluster create` command, as it hides its children,
but instead hide all flags. The flags are still documented for
`talosctl cluster dev`.

Fixes #12423

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-16 16:33:25 +04:00
Mateusz Urbanek
694f45413f
feat: external volumes
Add new volume type for managing external volume mounts - Virtiofs volumes

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
2025-12-15 14:35:52 +01:00
Andrey Smirnov
008cd0986c
fix: disable kexec in talosctl cluster create on arm64
Fixes #12393

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-11 17:05:05 +04:00
Mateusz Urbanek
e387e48b30
fix: do not override DNS on MacOS
When creating Talos with QEMU on Mac, do not override default DNS settings to Gateway IPs

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
2025-12-11 11:28:33 +01:00
Justin Garrison
51bcfb5679
feat: rename image default and source bundle
s/default/k8s-bundle
s/source-bundle/talos-bundle

for UX consistency when generating lists of images used by talos.

Remove non-k8s images from k8s-bundle list.

Signed-off-by: Justin Garrison <justin.garrison@siderolabs.com>
2025-12-10 07:02:48 -08:00
Orzelius
fc8ae3249f
docs: add omni join token example to create qemu command
this will hopefully reduce confusion on what the flag value should look like

Signed-off-by: Orzelius <33936483+Orzelius@users.noreply.github.com>
2025-12-07 19:40:57 +09:00
Andrey Smirnov
ba13b67865
fix: correct condition to use UKI cmdline in GRUB
Use UKI cmdline either if the config is missing completely, or if the
incomplete machine config is present (we are in maintenance mode).

Fixes #12349

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-05 16:28:07 +04:00
Andrey Smirnov
e2ee39b8ac
fix: support specifying patch file without '@' symbol
Try to be more smart while parsing `--config-patch` (and similar) flags:

* we still support inline patches
* if the flag value doesn't look like a patch, try to use it as a
  filename directly

This avoids common confusion with `--config-patch=patch.yaml` returning
an error "expected a mapping node".

Also clarify/updated documentation for `talosctl edit` and `talosctl
patch`, as they only work for the machineconfig, there is no other
usecase now.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-11-27 19:19:08 +04:00