TalosMachine

This page is generated from the CRD schema in config/crd/bases (make docs-reference). Do not edit it.

TalosMachine is the Schema for the talosmachines API

Groupichor.maesh.dev
KindTalosMachine (list kind TalosMachineList)
Resourcetalosmachines
Short namestm
ScopeNamespaced

v1alpha1

Version v1alpha1: has a status subresource.

spec

FieldTypeRequiredDescription
specobjectyesspec defines the desired state of TalosMachine
spec.approvalDecisionobjectnoapprovalDecision records who made the current approvalState decision, when, and why. It is kept separate from approvalState, not folded into it, so approvalState alone remains this machine's single source of truth for approval status -- this struct asserts no approved/ rejected state of its own, only the record behind whichever state approvalState already carries. Unset until the first approve/reject.
spec.approvalDecision.actorstringnoactor identifies who made the decision. Fixed to the backend's own identity until OIDC login lands; the field is added now rather than later so every decision from here on has an actor recorded, instead of leaving earlier decisions with none once a real per-person identity exists to fill it.
spec.approvalDecision.atstring (date-time)noat is when the decision was made.
spec.approvalDecision.reason (deprecated)stringnoreason is deprecated: unused, kept so the schema never drops a field. It is no longer asked for or written; decisions made before it carry the text they were given.
spec.approvalStatestringnoapprovalState records the human decision on this machine: pending (the default, awaiting a decision), approved (the controller renders and applies configuration), or rejected (an operator explicitly turned it away; re-approving reverses it). This replaces an earlier plain "approved" bool, which had no way to represent "rejected" without a second field claiming the same truth -- one field is the source of truth for this machine's approval status. Allowed values: pending, approved, rejected. Default: "pending".
spec.clusterRefobjectyesclusterRef names the TalosCluster this machine belongs to.
spec.clusterRef.namestringnoName of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names Default: "".
spec.disks[]objectnodisks assign roles to disks other than the system disk (spec.install): ephemeral puts EPHEMERAL on its own disk, userVolume provisions a named user volume.
spec.disks[].diskobjectyesdisk selects the disk.
spec.disks[].disk.busPathstringnobusPath is the disk's bus path, e.g. /pci0000:00/0000:00:17.0/ata1/host0/target0:0:0/0:0:0:0.
spec.disks[].disk.byIDPathstringnobyIDPath is a /dev/disk/by-id/ symlink of the disk.
spec.disks[].disk.devPathstringnodevPath is the kernel device path, e.g. /dev/sda. Not stable across boots; prefer the others.
spec.disks[].disk.serialstringnoserial is the disk's serial number.
spec.disks[].disk.wwidstringnowwid is the disk's World Wide Identifier.
spec.disks[].maxSizestringnomaxSize caps a user volume, e.g. 200GiB. Unset lets it use the whole disk.
spec.disks[].namestringnoname is the user volume's name; it is mounted at /var/mnt/<name>.
spec.disks[].rolestringyesrole is ephemeral (EPHEMERAL on this disk) or userVolume (a user volume on it). Allowed values: ephemeral, userVolume.
spec.endpointstringyesendpoint is the machine's Talos API address.
spec.hostnamestringnohostname overrides the Kubernetes Node name; Talos derives one from the machine if unset. It must be an RFC 1123 DNS label or subdomain (lower-case alphanumerics, '-' and '.').
spec.identityobjectyesidentity identifies the physical machine backing this resource.
spec.identity.macAddresses[]stringnomacAddresses are the machine's NIC MAC addresses, used as an identity hint.
spec.identity.serialstringnoserial is the machine's SMBIOS serial number, used as an identity hint.
spec.identity.uuidstringyesuuid is the machine's SMBIOS UUID, the primary key for identity.
spec.installobjectnoinstall is where Talos installs itself on this machine (the design's system disk role). Unset renders no install configuration, which leaves a machine that boots from an installed disk alone but gives a maintenance-mode machine nothing to install onto.
spec.install.diskobjectyesdisk selects the system disk by a stable identifier. Required: the v1.14 install document has no meaning without a disk to install onto.
spec.install.disk.busPathstringnobusPath is the disk's bus path, e.g. /pci0000:00/0000:00:17.0/ata1/host0/target0:0:0/0:0:0:0.
spec.install.disk.byIDPathstringnobyIDPath is a /dev/disk/by-id/ symlink of the disk.
spec.install.disk.devPathstringnodevPath is the kernel device path, e.g. /dev/sda. Not stable across boots; prefer the others.
spec.install.disk.serialstringnoserial is the disk's serial number.
spec.install.disk.wwidstringnowwid is the disk's World Wide Identifier.
spec.install.imagestringnoimage is the installer image reference. Unset lets Talos use the installer of the schematic it booted from, which only works when it booted an Image Factory asset.
spec.install.wipebooleannowipe is the install-time wipe flag of the node's configuration (UnattendedInstallConfig provisioning.wipe, machine.install.wipe before v1.14). It is read only when Talos installs, so on a running node it records what the configuration says and does nothing. Default false, which is what Talos's generator writes.
spec.networkobjectnonetwork is the machine's primary network link and how it is addressed. Unset leaves networking to Talos's default (DHCP on every physical link).
spec.network.addresses[]stringnoaddresses are the static addresses with their prefix length, e.g. 192.168.1.10/24.
spec.network.addressingstringnoaddressing is dhcp (the default) or static. Allowed values: dhcp, static. Default: "dhcp".
spec.network.dnsServers[]stringnodnsServers are resolver addresses, in order. Valid with either addressing.
spec.network.gatewaystringnogateway is the default gateway; unset adds no default route.
spec.network.macstringyesmac is the link's permanent hardware address, as discovery reported it.
spec.network.vlanIDintegernovlanID puts the addressing on a VLAN of the link instead of the link itself.
spec.nodeLabelsmap[string]stringnonodeLabels are applied to the Kubernetes Node, not to this resource, which is why the field isn't called "labels".
spec.rolestringnorole is the machine's role in the cluster. Left unset by discovery, which does not know it yet; approval must set it before the configuration reconciler can render anything for this machine. Allowed values: controlplane, worker.

status

FieldTypeRequiredDescription
statusobjectnostatus defines the observed state of TalosMachine
status.apiServerRestartPaths[]stringnoapiServerRestartPaths lists the configuration field paths whose pending change needs no reboot but restarts the node's kube-apiserver (pkg/fieldmeta's APIServerRestart class), while Ready is False with reason APIServerRestartRequired; empty otherwise. This reconciler never applies them (it would restart every control plane's API server at about the same time); a config-rollout TalosOperation does, one control plane at a time.
status.appliedConfigHashstringnoappliedConfigHash is the sha256 of the rendered configuration last confirmed applied to the node (pkg/render's hash format), used for the convergence check on later reconciles. It is a hash only, never the rendered configuration itself (principles 1 and 3).
status.conditions[]objectnoconditions represent the current state of the TalosMachine resource, kstatus-compatible.
status.conditions[].lastTransitionTimestring (date-time)yeslastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
status.conditions[].messagestringyesmessage is a human readable message indicating details about the transition. This may be an empty string.
status.conditions[].observedGenerationintegernoobservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.
status.conditions[].reasonstringyesreason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.
status.conditions[].statusstringyesstatus of the condition, one of True, False, Unknown. Allowed values: True, False, Unknown.
status.conditions[].typestringyestype of condition in CamelCase or in foo.example.com/CamelCase.
status.configStoredAtstring (date-time)noconfigStoredAt is when the node accepted its initial configuration over the insecure maintenance API. Once set, Ichor never applies to this node insecurely again; it only follows the node to running. Empty for a node that has not been provisioned by Ichor.
status.discoveredDisks[]objectnodiscoveredDisks lists the installable disks (no CD-ROM, no read-only one) the node reported through its maintenance-mode API when discovery last probed it. Approval picks the install disk and disk roles from this list, and DiscoveryWarnings checks a choice against it. Empty until a probe has recorded one.
status.discoveredDisks[].busPathstringnobusPath is the disk's bus path, as reported.
status.discoveredDisks[].byIDPathstringnobyIDPath is the disk's /dev/disk/by-id/ symlink, as reported.
status.discoveredDisks[].devPathstringnodevPath is the kernel device path, as reported. Not stable across boots.
status.discoveredDisks[].modelstringnomodel is the disk's model name, as reported.
status.discoveredDisks[].serialstringnoserial is the disk's serial number, as reported.
status.discoveredDisks[].sizeBytesintegernosizeBytes is the disk size in bytes.
status.discoveredDisks[].transportstringnotransport is the bus the disk is attached over (sata, nvme, scsi, virtio, ...), as reported.
status.discoveredDisks[].wwidstringnowwid is the disk's World Wide Identifier, as reported.
status.discoveredLinks[]objectnodiscoveredLinks lists the physical links with a permanent MAC address the node reported through its maintenance-mode API when discovery last probed it. Approval picks the primary NIC from this list. Empty until a probe has recorded one.
status.discoveredLinks[].driverstringnodriver is the kernel driver that owns the NIC, as reported.
status.discoveredLinks[].linkUpbooleannolinkUp is true when the link reports carrier.
status.discoveredLinks[].namestringyesname is the kernel link name (eno1, enp3s0, ...), as reported; it can change between boots.
status.discoveredLinks[].permanentMACstringyespermanentMAC is the hardware address burned into the NIC.
status.discoveredLinks[].speedMbitintegernospeedMbit is the negotiated speed in Mbit/s, or 0 when the link does not report one.
status.kubeletServingCertificateobjectnokubeletServingCertificate is the latest kubelet serving certificate Ichor approved for this machine's node and the Kubernetes CA issued (spec.security.kubeletServingCertificates). Empty while the option is off or no request has been issued yet.
status.kubeletServingCertificate.issuedAtstring (date-time)noissuedAt is when the Kubernetes CA signed it (the certificate's NotBefore).
status.kubeletServingCertificate.notAfterstring (date-time)nonotAfter is when it expires; the kubelet asks for a new one before that.
status.kubeletServingCertificate.requeststringnorequest is the name of the CertificateSigningRequest Ichor approved.
status.maintenanceFingerprintstringnomaintenanceFingerprint is the SPKI fingerprint (SHA-256, base64) of the certificate the node's maintenance-mode Talos API presented when it was discovered. The controller pushes the first machine configuration, which carries the CA keys, only to a node that presents this certificate again. A node that was never discovered through this controller (added by IP, reclaimed) is pinned at its first provisioning probe instead. It is refreshed while the machine is not approved. Talos issues a new certificate when the node reboots or changes address; an operator who has checked the new one accepts it with the TalosMachineTrustMaintenanceFingerprintAnnotation.
status.nodeNamestringnonodeName is the Kubernetes node name the node reports (its Nodename resource), recorded once it is read so that views can name a machine that has no spec.hostname. Empty until the node has been read.
status.observedEndpointstringnoobservedEndpoint is the node's Talos API address when it moved away from spec.endpoint (a new DHCP lease, a recreated pod). The controller never changes spec, so it records the address here, found by discovery matching the node's identity or from the node's Kubernetes Node address, and dials it in preference to spec.endpoint.
status.observedEndpointForstringnoobservedEndpointFor is the spec.endpoint that observedEndpoint was recorded against. When an operator edits spec.endpoint, the two differ and observedEndpoint is ignored.
status.observedGenerationintegernoobservedGeneration is the most recent generation the controller has reconciled.
status.observedInputsHashstringnoobservedInputsHash hashes the generations of every object that fed the rendered configuration last confirmed to match the node: the TalosCluster, this TalosMachine, and every TalosConfigPatch that applies to it. It is only updated when the node is confirmed converged, so comparing it against the current generations is how the reconciler tells a desired-state change (a generation moved) apart from drift (none did, so the node must have). A hash only, never the generations or config themselves (principle 3).
status.observedReconcileRequeststringnoobservedReconcileRequest is the value of the ichor.maesh.dev/reconcile-requested annotation at the last reconcile. An etcd restore writes a fresh token there and waits for it to appear here, which proves the machine was looked at again after the rollback.
status.rebootPaths[]stringnorebootPaths lists the configuration field paths whose pending change needs a reboot, while Ready is False with reason RebootRequired; empty otherwise. A config-rollout TalosOperation applies them; the plan shown before starting one reads this.
status.schematicstringnoschematic is the Image Factory schematic ID the node's running system was built from, read from the node (its ImageFactorySchematic resource) on every reconcile that reaches it. Empty when the node did not boot an Image Factory asset or was never read. It is what a Talos upgrade and its plan compare spec.schematic against.
status.securityobjectnosecurity is the boot security the node reported on the last reconcile that reached it (its SecurityState and KernelCmdline resources). Unset until a node has been read.
status.security.bootedWithUKIbooleannobootedWithUKI is true when the node booted a Unified Kernel Image. A node that did not (a GRUB install) cannot get SecureBoot without a reinstall.
status.security.kernelLockdownstringnokernelLockdown is the lockdown level in effect: the last lockdown= word of the kernel command line, else integrity under SecureBoot (Talos v1.14's implicit level), else none. Allowed values: none, integrity, confidentiality.
status.security.moduleSignatureEnforcedbooleannomoduleSignatureEnforced is true when the kernel only loads signed modules.
status.security.pcrSigningKeyFingerprintstringnopcrSigningKeyFingerprint is the fingerprint of the key that signs the PCR measurements of the booted UKI (SecurityState.pcrSigningKeyFingerprint); empty when the node reports none.
status.security.secureBootbooleannosecureBoot is true when the node booted with UEFI SecureBoot enabled.
status.security.ukiSigningKeyFingerprintstringnoukiSigningKeyFingerprint is the UKI signing key fingerprint of Talos's SecurityState. Talos v1.14 does not fill it, so it stays empty; pcrSigningKeyFingerprint is the one it reports. Kept for compatibility (CRD fields are append-only).
status.stagestringnostage is the last stage the node was seen in on its way from maintenance mode to running: maintenance, installing, rebooting or running (Talos's MachineStatus stages). installing and rebooting right after the initial apply are inferred (the apply RPC only means "stored"); running is read from the node.

Search the docs

Search pages and headings