v1alpha3

package
v0.24.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 12, 2026 License: Apache-2.0 Imports: 8 Imported by: 1

Documentation

Overview

+kubebuilder:object:generate=true +groupName=unbounded-cloud.io

Index

Constants

View Source
const (
	// MachineConditionProvisioned indicates that the machine has been
	// successfully provisioned. The observedGeneration field on the
	// condition tracks which generation of the Machine spec was
	// provisioned.
	MachineConditionProvisioned = "Provisioned"

	// MachineConditionSSHReachable indicates whether the machine is
	// reachable via SSH. The lastTransitionTime and message fields are
	// updated on probe results.
	MachineConditionSSHReachable = "SSHReachable"

	// MachineConditionProvisioning indicates that the machine is
	// currently being provisioned. The lastTransitionTime records when
	// provisioning started, which is used to detect stale provisioning
	// attempts (e.g. after a controller restart).
	MachineConditionProvisioning = "Provisioning"

	// MachineConditionAgentBootstrapped indicates whether the unbounded
	// agent completed initial node bootstrap. Status is False with Reason
	// "Running" while the agent is preparing the nspawn node, False with
	// a failure reason when nspawn startup or kubelet TLS bootstrap fails,
	// and True with Reason "Succeeded" once the kubelet has bootstrapped.
	MachineConditionAgentBootstrapped = "AgentBootstrapped"

	// MachineConditionNodeUpdated indicates the result of a node
	// update performed by the agent daemon. Status is True with
	// Reason "Succeeded" after a successful update, and False with
	// Reason "Failed" when the update fails. While the update is in
	// progress the status is False with Reason "InProgress".
	MachineConditionNodeUpdated = "NodeUpdated"

	// MachineConditionConfigurationPending indicates that no
	// MachineConfiguration has been assigned to this Machine, either
	// directly via configurationRef or through a machineSelector
	// match. The Machine remains in a waiting state until a
	// configuration is assigned.
	MachineConditionConfigurationPending = "ConfigurationPending"

	// MachineConditionIsolationDrift is True when spec.isolation differs
	// from the mode the agent reports as applied (status.isolation).
	// Nothing moves on drift: the node changes mode at its next repave.
	// False when they match or when spec.isolation is empty (no
	// declaration), absent when the applied mode has not been reported.
	MachineConditionIsolationDrift = "IsolationDrift"

	// MachineConditionRepavePending indicates that the Machine's desired
	// configuration version has not yet been applied to the running Node.
	// For OnDelete updates this remains True until the operator deletes
	// the Node and the agent repaves with the desired version.
	MachineConditionRepavePending = "RepavePending"
)

Condition types for Machine.

View Source
const (
	// AnnotationProvider associates a Machine with a provider's
	// controller for reboot/repave operations.
	AnnotationProvider = "unbounded-cloud.io/provider"

	// AnnotationConfigurationVersion is set on the Kubernetes Node
	// object to record which MachineConfigurationVersion was used to
	// bootstrap the machine.
	AnnotationConfigurationVersion = "unbounded-cloud.io/machine-configuration-version"

	// AnnotationAllowReprovision on a Machine, set to "true", allows the
	// agent to change the isolation mode by resetting the host and
	// bootstrapping it again (IsolationChangeReprovision). It is separate
	// from spec.isolation so that declaring a mode never wipes a host by
	// itself. Without it, a change that needs a reprovision is refused and
	// reported in status.isolationChange with reason
	// IsolationChangeReasonReprovisionNotAllowed; the repave goes ahead in
	// the mode the node already runs.
	AnnotationAllowReprovision = "unbounded-cloud.io/allow-reprovision"
)

Annotation keys.

View Source
const (
	// BondMode8023AD is IEEE 802.3ad dynamic link aggregation (LACP).
	BondMode8023AD = "802.3ad"
	// BondModeActiveBackup keeps one member active at a time.
	BondModeActiveBackup = "active-backup"
	// BondModeBalanceXOR balances traffic by the transmit hash policy.
	BondModeBalanceXOR = "balance-xor"
)
View Source
const (
	// PXEBootProtocolPXE uses DHCP/TFTP PXE boot.
	PXEBootProtocolPXE = "PXE"
	// PXEBootProtocolHTTP uses Redfish UEFI HTTP boot.
	PXEBootProtocolHTTP = "HTTP"
	// PXEBootProtocolVirtualMedia uses a Redfish-mounted bootstrap ISO.
	PXEBootProtocolVirtualMedia = "VirtualMedia"
	// PXEArchitectureAMD64 is the x86_64 target architecture for PXE boot.
	PXEArchitectureAMD64 = "amd64"
	// PXEArchitectureARM64 is the aarch64 target architecture for PXE boot.
	PXEArchitectureARM64 = "arm64"
	// DefaultPXEArchitecture is used when host.netboot.architecture is omitted.
	DefaultPXEArchitecture = PXEArchitectureAMD64
	// DefaultPXEBootProtocol is used when host.netboot.bootProtocol is omitted.
	DefaultPXEBootProtocol = PXEBootProtocolPXE
)
View Source
const (
	// IsolationChangeReasonUnsupportedMode means the agent on the host cannot
	// run the target mode, for example because it predates it, or cannot
	// change a running node to it.
	IsolationChangeReasonUnsupportedMode = "UnsupportedMode"
	// IsolationChangeReasonReprovisionNotAllowed means the change needs a
	// reprovision and the Machine does not carry AnnotationAllowReprovision.
	IsolationChangeReasonReprovisionNotAllowed = "ReprovisionNotAllowed"
	// IsolationChangeReasonExperimentalNotEnabled means the target mode is
	// experimental and the agent's configuration does not opt in to it.
	IsolationChangeReasonExperimentalNotEnabled = "ExperimentalNotEnabled"
)

Machine-readable reasons the agent gives for a refused mode change in IsolationChangeStatus.Reason.

View Source
const (
	// AllocationProviderIDPrefix prefixes the allocation UID in Node providerIDs.
	AllocationProviderIDPrefix = "unbounded:///machineallocations/"

	// MachineAllocationConditionAllocated reports whether the host launched.
	MachineAllocationConditionAllocated = "Allocated"

	// MachineAllocationConditionRegistered reports whether the expected Node
	// registered with the allocation providerID.
	MachineAllocationConditionRegistered = "Registered"

	// MachineAllocationConditionDrifted reports whether the frozen class
	// revision differs from the class's current resolved revision.
	MachineAllocationConditionDrifted = "Drifted"

	// MachineAllocationConditionFenced reports whether the host may no longer
	// repave or rejoin. Fencing never releases infrastructure by itself.
	MachineAllocationConditionFenced = "Fenced"

	// MachineAllocationConditionReleased reports whether every remote effect and
	// the per-allocation bootstrap credential were confirmed released.
	MachineAllocationConditionReleased = "Released"

	// MachineAllocationFinalizer is held by the allocation controller on a
	// MachineAllocation, its Machine and its allocation MachineOperations
	// until release finishes.
	MachineAllocationFinalizer = "unbounded-cloud.io/machineallocation"

	// LabelAllocationUID carries the MachineAllocation UID on the allocation,
	// its Machine, its MachineOperations and its bootstrap token Secret.
	LabelAllocationUID = "unbounded-cloud.io/allocation-uid"

	// LabelConsumerUID carries spec.consumerRef.uid, as written, on a
	// MachineAllocation. An allocation whose consumer UID is not a valid label
	// value fails with InvalidRequest.
	LabelConsumerUID = "unbounded-cloud.io/consumer-uid"

	// LabelMachineClass carries spec.classRef.name, as written, on a
	// MachineAllocation and its Machine. An allocation whose class name is not
	// a valid label value fails with InvalidRequest.
	LabelMachineClass = "unbounded-cloud.io/machine-class"

	// LabelCapacityType is the offering label derived from an offering's
	// capacityType.
	LabelCapacityType = "unbounded-cloud.io/capacity-type"
)
View Source
const (
	// MachineClassConditionReady reports whether the class inputs resolved for
	// the current generation and capacity can be requested from it.
	MachineClassConditionReady = "Ready"

	// MachineClassConditionOfferingsCurrent reports whether the published
	// offerings were observed recently enough to be trusted.
	MachineClassConditionOfferingsCurrent = "OfferingsCurrent"

	// MachineClassBootstrapRunKey is the required key in the bootstrap files
	// ConfigMap that holds the script run before the agent installer.
	MachineClassBootstrapRunKey = "run"
)
View Source
const (
	// MCVConfigurationLabelKey identifies the parent MachineConfiguration.
	MCVConfigurationLabelKey = "unbounded-cloud.io/machine-configuration"

	// MCVVersionLabelKey stores the version number as a label for
	// efficient selection.
	MCVVersionLabelKey = "unbounded-cloud.io/machine-configuration-version"
)

Label keys set on MachineConfigurationVersion objects.

View Source
const (
	// MachineOperationConditionCompleted indicates whether the operation has
	// reached a terminal state.
	MachineOperationConditionCompleted = "Completed"

	// MachineOperationConditionBootLoaderDownloaded indicates that a metalman
	// target has downloaded the initial PXE boot loader for the operation.
	// Once set to True for an operation, it remains latched.
	MachineOperationConditionBootLoaderDownloaded = "BootLoaderDownloaded"

	// MachineOperationConditionBootImageWritten indicates that a metalman
	// target has booted the PXE installer and written the boot image to disk.
	MachineOperationConditionBootImageWritten = "BootImageWritten"

	// MachineOperationConditionCloudInitDone indicates that a metalman PXE
	// target has completed first-boot cloud-init after writing the boot image.
	MachineOperationConditionCloudInitDone = "CloudInitDone"

	// MachineOperationConditionProviderOperationStalled reports that an
	// accepted external provider operation has exceeded its expected duration.
	MachineOperationConditionProviderOperationStalled = "ProviderOperationStalled"
)

Condition types for MachineOperation.

View Source
const (
	// OverridePhaseNone means no override resolves to any workload for the Site.
	OverridePhaseNone = "None"

	// OverridePhaseApplied means every resolved workload carries the hash that
	// was desired. It reports that the merge was written, not that the pods are
	// healthy.
	OverridePhaseApplied = "Applied"

	// OverridePhaseDegraded means the document could not be used, a workload
	// failed, or an applied hash differs from the desired one.
	OverridePhaseDegraded = "Degraded"
)

Override phases reported in OverrideStatus.Phase.

These are deliberately not declared as a schema enum. The operator is the only writer and the values come from these constants, so validation could only catch a bug the compiler already prevents. What it would add is a failure mode: a newer operator writing a value an older CRD's enum does not list has its whole status patch rejected, taking every condition on the Site with it, where an unrecognized value would otherwise simply be pruned. Every enum elsewhere in this API is on a spec field, where the input is user-supplied and rejecting it is the point.

View Source
const (
	// OverrideStateApplied means the merged workload was written and carries
	// the hash that was desired.
	OverrideStateApplied = "Applied"

	// OverrideStatePending means the write was deferred to the next pass
	// because the cluster moved under this one. Nothing is wrong and no action
	// is needed.
	OverrideStatePending = "Pending"

	// OverrideStateWithheld means the operator declined to write the workload
	// because an override that could have shaped it could not be used. The
	// running workload is untouched, which is the point.
	OverrideStateWithheld = "Withheld"

	// OverrideStateFailed means the override could not be resolved, merged, or
	// written.
	OverrideStateFailed = "Failed"
)

Override states reported in OverriddenWorkload.State. See the note above on why these are not a schema enum either.

View Source
const DefaultRedfishPasswordKey = "password"

DefaultRedfishPasswordKey is the Secret key that holds a Redfish password when RedfishPasswordSelector.Key is not set.

View Source
const (
	ExternalProviderAzureVM = "AzureVM"
)

External provider names.

View Source
const IsolationChangeMessageMaxLength = 4096

IsolationChangeMessageMaxLength is the longest IsolationChangeStatus.Message the API accepts, in bytes. Writers truncate to it. It must match the MaxLength marker on the field.

View Source
const (
	// MachineOperationTargetConditionRedfishDisableBootOverrideUnsupported
	// indicates that metalman determined the target BMC does not support
	// disabling the Redfish boot override. When True, metalman falls back to
	// setting Hdd/Continuous for this target within this operation only.
	MachineOperationTargetConditionRedfishDisableBootOverrideUnsupported = "RedfishDisableBootOverrideUnsupported"
)

Condition types for MachineOperation targets.

View Source
const (
	// MachineSiteLabelKey is the canonical site-membership label. It scopes a
	// Machine to a site and is also the canonical label the net controller
	// applies to Nodes, superseding the deprecated net.unbounded-cloud.io/site.
	MachineSiteLabelKey = "unbounded-cloud.io/site"
)

Variables

View Source
var (
	// GroupVersion is group version used to register these objects.
	GroupVersion = schema.GroupVersion{Group: "unbounded-cloud.io", Version: "v1alpha3"}

	// SchemeBuilder is used to add go types to the GroupVersionKind scheme.
	SchemeBuilder = &runtime.SchemeBuilder{}

	// AddToScheme adds the types in this group-version to the given scheme.
	AddToScheme = SchemeBuilder.AddToScheme
)

Functions

func ComponentEnabled added in v0.1.23

func ComponentEnabled(component *SiteComponentSpec) bool

ComponentEnabled reports whether a component spec enables a component. Components default to disabled unless explicitly enabled.

func MachineConfigurationVersionName added in v0.1.4

func MachineConfigurationVersionName(configurationName string, version int32) string

MachineConfigurationVersionName returns the canonical name for a MachineConfigurationVersion child object.

func Resource added in v0.1.23

func Resource(resource string) schema.GroupResource

Resource returns a GroupResource for this API group.

Types

type AgentArtifact added in v0.23.0

type AgentArtifact struct {
	// URL is the agent tarball location: an https URL whose host is a DNS name
	// or dotted IPv4 address with an optional port from 1 to 65535, or a local
	// file:/// path. It must not embed credentials, a query, or a fragment.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MaxLength=2048
	// +kubebuilder:validation:Pattern=`^(https://[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*(:(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3}))?|file://)(/[A-Za-z0-9._~%+=,:-]+)+$`
	URL string `json:"url"`

	// SHA256 is the lowercase hex SHA-256 digest of the tarball.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:Pattern=`^[a-f0-9]{64}$`
	SHA256 string `json:"sha256"`
}

AgentArtifact identifies a digest-pinned agent tarball.

func (*AgentArtifact) DeepCopy added in v0.23.0

func (in *AgentArtifact) DeepCopy() *AgentArtifact

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentArtifact.

func (*AgentArtifact) DeepCopyInto added in v0.23.0

func (in *AgentArtifact) DeepCopyInto(out *AgentArtifact)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AgentDownloadsSpec added in v0.1.3

type AgentDownloadsSpec struct {
	// Kubernetes overrides the download source for kubelet/kubectl/kube-proxy
	// (upstream default: https://dl.k8s.io).
	// +optional
	Kubernetes *DownloadSource `json:"kubernetes,omitempty"`

	// Containerd overrides the download source for containerd
	// (upstream default: https://github.com/containerd/containerd).
	// +optional
	Containerd *DownloadSource `json:"containerd,omitempty"`

	// Runc overrides the download source for runc
	// (upstream default: https://github.com/opencontainers/runc).
	// +optional
	Runc *DownloadSource `json:"runc,omitempty"`

	// CNI overrides the download source for CNI plugins
	// (upstream default: https://github.com/containernetworking/plugins).
	// +optional
	CNI *DownloadSource `json:"cni,omitempty"`

	// Crictl overrides the download source for crictl
	// (upstream default: https://github.com/kubernetes-sigs/cri-tools).
	// +optional
	Crictl *DownloadSource `json:"crictl,omitempty"`

	// CoreDNS overrides the download source for CoreDNS.
	// +optional
	CoreDNS *DownloadSource `json:"coreDNS,omitempty"`
}

AgentDownloadsSpec overrides the download sources for the artifacts the agent installs into the nspawn rootfs. Each entry is optional; unset entries fall back to the upstream defaults.

func (*AgentDownloadsSpec) DeepCopy added in v0.1.3

func (in *AgentDownloadsSpec) DeepCopy() *AgentDownloadsSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentDownloadsSpec.

func (*AgentDownloadsSpec) DeepCopyInto added in v0.1.3

func (in *AgentDownloadsSpec) DeepCopyInto(out *AgentDownloadsSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AgentSpec

type AgentSpec struct {
	// Image is the OCI image reference used for provisioning the
	// nspawn machine (e.g. "ghcr.io/org/repo:tag"). When empty the
	// agent falls back to its built-in default image.
	// +optional
	Image string `json:"image,omitempty"`

	// Version pins the unbounded-agent release tag that is downloaded
	// onto the host (e.g. "v0.0.10"). When empty the install script
	// tracks the latest published release.
	// +optional
	Version string `json:"version,omitempty"`

	// BaseURL overrides the base URL used to construct the
	// unbounded-agent download URL. Defaults to the upstream GitHub
	// releases URL. The layout under BaseURL must match the GitHub
	// releases layout (<base>/latest/download/<asset> and
	// <base>/download/<tag>/<asset>).
	// +optional
	BaseURL string `json:"baseURL,omitempty"`

	// URL is a fully qualified download URL for the unbounded-agent
	// tarball. When set it overrides Version and BaseURL entirely.
	// +optional
	URL string `json:"url,omitempty"`

	// Downloads overrides the download sources for the binaries the
	// agent installs into the nspawn rootfs (kubelet, containerd, runc,
	// CNI plugins, crictl). When unset the agent downloads each
	// artifact from its upstream default host.
	// +optional
	Downloads *AgentDownloadsSpec `json:"downloads,omitempty"`

	// LocalDNS configures the optional CoreDNS cache inside the nspawn machine.
	// +optional
	LocalDNS *LocalDNSSpec `json:"localDNS,omitempty"`
}

AgentSpec defines settings for the unbounded node agent.

func (*AgentSpec) DeepCopy

func (in *AgentSpec) DeepCopy() *AgentSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentSpec.

func (*AgentSpec) DeepCopyInto

func (in *AgentSpec) DeepCopyInto(out *AgentSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AgentStatus

type AgentStatus struct {
	// Image is the OCI image reference that was applied to the
	// nspawn machine.
	Image string `json:"image,omitempty"`
}

AgentStatus holds the applied agent settings for the machine.

func (*AgentStatus) DeepCopy

func (in *AgentStatus) DeepCopy() *AgentStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentStatus.

func (*AgentStatus) DeepCopyInto

func (in *AgentStatus) DeepCopyInto(out *AgentStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AzureHostSpec added in v0.1.23

type AzureHostSpec struct {
	// ResourceID is the full Azure Resource Manager ID of the virtual machine.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	ResourceID string `json:"resourceID"`
}

AzureHostSpec identifies one Azure virtual machine. +kubebuilder:validation:XValidation:rule="self.resourceID == oldSelf.resourceID",message="resourceID is immutable"

func (*AzureHostSpec) DeepCopy added in v0.1.23

func (in *AzureHostSpec) DeepCopy() *AzureHostSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureHostSpec.

func (*AzureHostSpec) DeepCopyInto added in v0.1.23

func (in *AzureHostSpec) DeepCopyInto(out *AzureHostSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type BastionSSHSpec

type BastionSSHSpec struct {
	// Host is the hostname or IP address of the bastion, optionally
	// including the port (e.g. "1.2.3.4:2222"). When the port is
	// omitted, 22 is assumed.
	// +kubebuilder:validation:Required
	Host string `json:"host"`

	// Username is the SSH username for the bastion.
	// +kubebuilder:default=azureuser
	Username string `json:"username,omitempty"`

	// PrivateKeyRef references a secret containing the SSH private key
	// for the bastion. If not specified, uses the same key as the
	// parent SSHSpec.
	// +optional
	PrivateKeyRef *SecretKeySelector `json:"privateKeyRef,omitempty"`
}

BastionSSHSpec defines SSH connection details for a bastion host. It mirrors SSHSpec but omits the recursive Bastion field.

func (*BastionSSHSpec) DeepCopy

func (in *BastionSSHSpec) DeepCopy() *BastionSSHSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BastionSSHSpec.

func (*BastionSSHSpec) DeepCopyInto

func (in *BastionSSHSpec) DeepCopyInto(out *BastionSSHSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type BondSpec added in v0.24.0

type BondSpec struct {
	// Name is the bond interface name, for example bond0.
	// +kubebuilder:validation:MaxLength=15
	// +kubebuilder:validation:Pattern=`^[a-zA-Z][a-zA-Z0-9_-]{0,14}$`
	Name string `json:"name"`

	// Interfaces lists the names of the ethernets aggregated by this bond.
	// +listType=set
	// +kubebuilder:validation:MinItems=1
	// +kubebuilder:validation:MaxItems=8
	// +kubebuilder:validation:items:MaxLength=15
	Interfaces []string `json:"interfaces"`

	// Mode is the bonding mode.
	// +kubebuilder:validation:Enum="802.3ad";active-backup;balance-xor
	// +kubebuilder:default="802.3ad"
	// +optional
	Mode string `json:"mode,omitempty"`

	// MIIMonitorInterval is the link monitoring interval in milliseconds.
	// +kubebuilder:validation:Minimum=0
	// +kubebuilder:validation:Maximum=10000
	// +kubebuilder:default=100
	// +optional
	MIIMonitorInterval *int32 `json:"miiMonitorInterval,omitempty"`

	// TransmitHashPolicy selects the member used to transmit each flow in
	// 802.3ad and balance-xor modes.
	// +kubebuilder:validation:Enum=layer2;layer2+3;layer3+4;encap2+3;encap3+4
	// +optional
	TransmitHashPolicy string `json:"transmitHashPolicy,omitempty"`

	// LACPRate is the LACPDU transmit rate requested from the link partner in
	// 802.3ad mode.
	// +kubebuilder:validation:Enum=slow;fast
	// +optional
	LACPRate string `json:"lacpRate,omitempty"`

	InterfaceAddressing `json:",inline"`
}

BondSpec declares a link aggregation interface. +kubebuilder:validation:XValidation:rule="!has(self.lacpRate) || self.mode == '802.3ad'",message="lacpRate requires mode 802.3ad"

func (*BondSpec) DeepCopy added in v0.24.0

func (in *BondSpec) DeepCopy() *BondSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BondSpec.

func (*BondSpec) DeepCopyInto added in v0.24.0

func (in *BondSpec) DeepCopyInto(out *BondSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type BootstrapStatus added in v0.17.0

type BootstrapStatus struct {
	// CredentialID is the ID of the most recent bootstrap ServiceAccount
	// token issued for this Machine, in the form the API server reports in
	// the authentication.kubernetes.io/credential-id user extra
	// (for example "JTI=<uuid>"). Kubelet client certificate requests made
	// with the token are approved only for NodeName.
	// +optional
	CredentialID string `json:"credentialID,omitempty"`

	// NodeName is the Kubernetes Node name the credential was issued for.
	// It is the name written into the agent config served to the host, so
	// later spec.kubernetes.nodeRef edits do not change which node the
	// credential may claim.
	// +optional
	NodeName string `json:"nodeName,omitempty"`

	// IssuedAt is when the credential was issued.
	// +optional
	IssuedAt *metav1.Time `json:"issuedAt,omitempty"`
}

BootstrapStatus identifies the bootstrap credential issued to a Machine.

func (*BootstrapStatus) DeepCopy added in v0.17.0

func (in *BootstrapStatus) DeepCopy() *BootstrapStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BootstrapStatus.

func (*BootstrapStatus) DeepCopyInto added in v0.17.0

func (in *BootstrapStatus) DeepCopyInto(out *BootstrapStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type CapacityType added in v0.23.0

type CapacityType string

CapacityType identifies the purchase model of an offering. +kubebuilder:validation:Enum=OnDemand;Spot

const (
	// CapacityTypeOnDemand is regular, non-preemptible capacity.
	CapacityTypeOnDemand CapacityType = "OnDemand"

	// CapacityTypeSpot is preemptible capacity.
	CapacityTypeSpot CapacityType = "Spot"
)

type CloudInitSpec

type CloudInitSpec struct {
	// UserDataConfigMapRef references a ConfigMap containing custom
	// cloud-init user-data. The referenced key (default "user-data")
	// must contain a valid cloud-init configuration (e.g. a
	// #cloud-config YAML document).
	// +optional
	UserDataConfigMapRef *ConfigMapKeySelector `json:"userDataConfigMapRef,omitempty"`
}

CloudInitSpec defines cloud-init customization for PXE-booted machines. Cloud-init merges vendor-data (managed by unbounded-kube) with user-data (managed by the cluster operator). This spec controls the user-data portion, allowing operators to configure SSH keys, install packages, and perform other host-level customization.

func (*CloudInitSpec) DeepCopy

func (in *CloudInitSpec) DeepCopy() *CloudInitSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CloudInitSpec.

func (*CloudInitSpec) DeepCopyInto

func (in *CloudInitSpec) DeepCopyInto(out *CloudInitSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ConfigMapKeySelector

type ConfigMapKeySelector struct {
	// Name of the ConfigMap.
	Name string `json:"name"`

	// Namespace of the ConfigMap.
	Namespace string `json:"namespace"`

	// Key within the ConfigMap.
	// +kubebuilder:default=user-data
	Key string `json:"key,omitempty"`
}

ConfigMapKeySelector selects a key from a ConfigMap.

func (*ConfigMapKeySelector) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigMapKeySelector.

func (*ConfigMapKeySelector) DeepCopyInto

func (in *ConfigMapKeySelector) DeepCopyInto(out *ConfigMapKeySelector)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ConfigurationContentSnapshot added in v0.23.0

type ConfigurationContentSnapshot struct {
	// Name is the MachineConfiguration name.
	// +kubebuilder:validation:Required
	Name string `json:"name"`

	// Version is the MachineConfiguration version.
	// +kubebuilder:validation:Required
	Version int32 `json:"version"`

	// VersionName is the MachineConfigurationVersion object name.
	// +kubebuilder:validation:Required
	VersionName string `json:"versionName"`

	// UID is the MachineConfigurationVersion UID.
	// +kubebuilder:validation:Required
	UID types.UID `json:"uid"`

	// Hash is the SHA-256 of the configuration template.
	// +kubebuilder:validation:Required
	Hash string `json:"hash"`
}

ConfigurationContentSnapshot identifies the exact configuration content.

func (*ConfigurationContentSnapshot) DeepCopy added in v0.23.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigurationContentSnapshot.

func (*ConfigurationContentSnapshot) DeepCopyInto added in v0.23.0

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type DHCPLease

type DHCPLease struct {
	// IPv4 is the IP address to assign.
	IPv4 string `json:"ipv4"`

	// MAC is the MAC address of the network interface.
	MAC string `json:"mac"`

	// SubnetMask is the subnet mask for the lease.
	SubnetMask string `json:"subnetMask"`

	// Gateway is the default gateway.
	Gateway string `json:"gateway"`

	// DNS is a list of DNS server addresses.
	// +optional
	DNS []string `json:"dns,omitempty"`

	// HoldLease, when true, makes the installed host also run a DHCPv4
	// client on this lease's NIC so the site DHCP server keeps the lease
	// for IPv4 and does not reassign it to another host. The static
	// address, gateway, and DNS remain authoritative; routes, DNS, NTP,
	// hostname, and domains from DHCP are ignored. The site DHCP server
	// should reserve IPv4 for MAC. Leave unset where there is no DHCP
	// server.
	// +optional
	HoldLease bool `json:"holdLease,omitempty"`
}

DHCPLease defines static IPv4 provisioning network settings.

func (*DHCPLease) DeepCopy

func (in *DHCPLease) DeepCopy() *DHCPLease

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DHCPLease.

func (*DHCPLease) DeepCopyInto

func (in *DHCPLease) DeepCopyInto(out *DHCPLease)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type DownloadSource added in v0.1.3

type DownloadSource struct {
	// BaseURL replaces the upstream host + path prefix used to
	// construct the download URL. Version and arch substitution are
	// preserved so mirrors need to publish assets under the same
	// layout as the upstream project.
	// +optional
	BaseURL string `json:"baseURL,omitempty"`

	// URL is a fully qualified download URL template. Version/arch
	// substitution via fmt directives is preserved. When set it
	// overrides BaseURL entirely.
	// +optional
	URL string `json:"url,omitempty"`

	// Version overrides the version of the artifact that would
	// otherwise be derived from the cluster Kubernetes version or the
	// agent's compiled-in defaults.
	// +optional
	Version string `json:"version,omitempty"`
}

DownloadSource configures an override for a binary download source. Exactly one of URL or BaseURL should typically be set; when both are set URL wins. Version overrides the version that would otherwise be derived from the cluster Kubernetes version or agent defaults.

func (*DownloadSource) DeepCopy added in v0.1.3

func (in *DownloadSource) DeepCopy() *DownloadSource

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DownloadSource.

func (*DownloadSource) DeepCopyInto added in v0.1.3

func (in *DownloadSource) DeepCopyInto(out *DownloadSource)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type EthernetSpec added in v0.24.0

type EthernetSpec struct {
	// Name is the interface name persisted on the installed host, for example
	// enp1s0f0. Metalman matches the device by MACAddress and does not rely
	// on the kernel's naming during installation.
	// +kubebuilder:validation:MaxLength=15
	// +kubebuilder:validation:Pattern=`^[a-zA-Z][a-zA-Z0-9_-]{0,14}$`
	Name string `json:"name"`

	// MACAddress is the permanent MAC address of the physical interface, as
	// lowercase colon-separated hex (aa:bb:cc:dd:ee:ff).
	// +kubebuilder:validation:Pattern=`^([0-9a-f]{2}:){5}[0-9a-f]{2}$`
	MACAddress string `json:"macAddress"`

	InterfaceAddressing `json:",inline"`
}

EthernetSpec declares a physical network interface.

func (*EthernetSpec) DeepCopy added in v0.24.0

func (in *EthernetSpec) DeepCopy() *EthernetSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EthernetSpec.

func (*EthernetSpec) DeepCopyInto added in v0.24.0

func (in *EthernetSpec) DeepCopyInto(out *EthernetSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ExternalHostSpec added in v0.1.23

type ExternalHostSpec struct {
	// Provider selects the registered provider controller and its credentials.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Provider string `json:"provider"`

	// ProviderID is an opaque provider-specific host identifier. Providers that
	// replace the underlying resource may update it after a successful handoff.
	// +optional
	ProviderID string `json:"providerID,omitempty"`

	// MachineRef identifies an optional provider-owned resource containing rich
	// provider-specific state for this Machine.
	// +optional
	MachineRef *ProviderMachineReference `json:"machineRef,omitempty"`
}

ExternalHostSpec identifies a host owned by a registered external provider. +kubebuilder:validation:XValidation:rule="has(self.providerID) || has(self.machineRef)",message="providerID or machineRef is required" +kubebuilder:validation:XValidation:rule="has(self.machineRef) == has(oldSelf.machineRef) && (!has(self.machineRef) || self.machineRef == oldSelf.machineRef)",message="machineRef is immutable" +kubebuilder:validation:XValidation:rule="self.provider == oldSelf.provider",message="provider is immutable"

func (*ExternalHostSpec) DeepCopy added in v0.1.23

func (in *ExternalHostSpec) DeepCopy() *ExternalHostSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalHostSpec.

func (*ExternalHostSpec) DeepCopyInto added in v0.1.23

func (in *ExternalHostSpec) DeepCopyInto(out *ExternalHostSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type GantryArtifactStreamingSpec added in v0.23.0

type GantryArtifactStreamingSpec struct {
	// Enabled controls the Gantry range endpoint and OverlayBD configurator.
	// +optional
	Enabled bool `json:"enabled,omitempty"`

	// NodeSelector must select only AKS node pools with Artifact Streaming
	// enabled. It is required when Enabled is true.
	// +kubebuilder:validation:MinProperties=1
	// +optional
	NodeSelector map[string]string `json:"nodeSelector,omitempty"`
}

GantryArtifactStreamingSpec selects the AKS nodes whose Azure-managed OverlayBD installation should be configured to use Gantry.

func (*GantryArtifactStreamingSpec) DeepCopy added in v0.23.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GantryArtifactStreamingSpec.

func (*GantryArtifactStreamingSpec) DeepCopyInto added in v0.23.0

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type GantryComponentSpec added in v0.2.0

type GantryComponentSpec struct {
	SiteComponentSpec `json:",inline"`

	// ArtifactStreaming configures Gantry as the node-local range proxy for
	// AKS ACR Artifact Streaming. It is disabled when omitted. Because Gantry is
	// a cluster singleton, every Site that enables it must use the same node
	// selector.
	// +optional
	ArtifactStreaming *GantryArtifactStreamingSpec `json:"artifactStreaming,omitempty"`
}

GantryComponentSpec configures the gantry peer-to-peer OCI distribution agent for a site. Gantry is a cluster-wide singleton and, unlike the other components, defaults to enabled: it is reconciled unless a site explicitly sets enabled to false.

func (*GantryComponentSpec) DeepCopy added in v0.2.0

func (in *GantryComponentSpec) DeepCopy() *GantryComponentSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GantryComponentSpec.

func (*GantryComponentSpec) DeepCopyInto added in v0.2.0

func (in *GantryComponentSpec) DeepCopyInto(out *GantryComponentSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type HostNetworkSpec added in v0.24.0

type HostNetworkSpec struct {
	// Ethernets declares the physical network interfaces, matched by their
	// permanent MAC addresses.
	// +listType=map
	// +listMapKey=name
	// +kubebuilder:validation:MinItems=1
	// +kubebuilder:validation:MaxItems=16
	Ethernets []EthernetSpec `json:"ethernets"`

	// Bonds declares link aggregation interfaces built from ethernets.
	// +listType=map
	// +listMapKey=name
	// +kubebuilder:validation:MaxItems=8
	// +optional
	Bonds []BondSpec `json:"bonds,omitempty"`

	// VLANs declares 802.1Q VLAN interfaces on top of ethernets or bonds.
	// +listType=map
	// +listMapKey=name
	// +kubebuilder:validation:MaxItems=32
	// +optional
	VLANs []VLANSpec `json:"vlans,omitempty"`

	// DNS is the list of IPv4 nameserver addresses for the host.
	// +kubebuilder:validation:MaxItems=3
	// +kubebuilder:validation:items:MaxLength=15
	// +optional
	DNS []string `json:"dns,omitempty"`
}

HostNetworkSpec declares a static host network topology.

The cross-reference rules (bond members and VLAN links) are declared on MachineSpec and HostSpec rather than here: PXESpec is also embedded in the unbounded MachineOperation status.targets list, where these nested list rules would exceed the API server's CEL cost budget.

func (*HostNetworkSpec) DeepCopy added in v0.24.0

func (in *HostNetworkSpec) DeepCopy() *HostNetworkSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HostNetworkSpec.

func (*HostNetworkSpec) DeepCopyInto added in v0.24.0

func (in *HostNetworkSpec) DeepCopyInto(out *HostNetworkSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type HostSpec added in v0.1.23

type HostSpec struct {
	// Image is an opaque provider-interpreted image identifier. If omitted,
	// HostReplace preserves the host's current image.
	// +optional
	Image string `json:"image,omitempty"`

	// ProvisioningFormat declares the first-boot format for the desired host
	// image. When preserving an image, omission falls back to the installed
	// observation, then CloudInit for legacy hosts. Image identifiers are opaque;
	// an explicit replacement image on a known Ignition host requires a format.
	// +optional
	ProvisioningFormat ProvisioningFormat `json:"provisioningFormat,omitempty"`

	// Netboot contains the machine-specific network boot configuration owned by
	// Metalman.
	// +optional
	Netboot *PXESpec `json:"netboot,omitempty"`

	// Azure identifies an Azure VM managed by the built-in Azure provider.
	// +optional
	Azure *AzureHostSpec `json:"azure,omitempty"`

	// External identifies a host managed by a registered external provider.
	// +optional
	External *ExternalHostSpec `json:"external,omitempty"`
}

HostSpec contains desired host settings and its mutually exclusive owner. +kubebuilder:validation:XValidation:rule="(has(self.netboot) ? 1 : 0) + (has(self.azure) ? 1 : 0) + (has(self.external) ? 1 : 0) <= 1",message="at most one of netboot, azure, or external may be set" +kubebuilder:validation:XValidation:rule="!has(oldSelf.netboot) || has(self.netboot)",message="netboot host ownership is immutable once set" +kubebuilder:validation:XValidation:rule="!has(oldSelf.azure) || has(self.azure)",message="azure host ownership is immutable once set" +kubebuilder:validation:XValidation:rule="!has(oldSelf.external) || has(self.external)",message="external host ownership is immutable once set" +kubebuilder:validation:XValidation:rule="!has(self.netboot) || !has(self.netboot.network) || !has(self.netboot.network.bonds) || self.netboot.network.bonds.all(b, b.interfaces.all(i, self.netboot.network.ethernets.exists(e, e.name == i)))",message="bond interfaces must reference declared ethernets",fieldPath=".netboot.network.bonds" +kubebuilder:validation:XValidation:rule="!has(self.netboot) || !has(self.netboot.network) || !has(self.netboot.network.vlans) || self.netboot.network.vlans.all(v, self.netboot.network.ethernets.exists(e, e.name == v.link) || (has(self.netboot.network.bonds) && self.netboot.network.bonds.exists(b, b.name == v.link)))",message="vlan link must reference a declared ethernet or bond",fieldPath=".netboot.network.vlans"

func (*HostSpec) DeepCopy added in v0.1.23

func (in *HostSpec) DeepCopy() *HostSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HostSpec.

func (*HostSpec) DeepCopyInto added in v0.1.23

func (in *HostSpec) DeepCopyInto(out *HostSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*HostSpec) ProvisioningFormatOrDefault added in v0.9.0

func (s *HostSpec) ProvisioningFormatOrDefault() ProvisioningFormat

ProvisioningFormatOrDefault returns the declared format or the legacy default. Replacement resolution also considers template declarations and observations.

type InterfaceAddressing added in v0.24.0

type InterfaceAddressing struct {
	// MTU is the interface MTU in bytes. When omitted, the kernel default is
	// used.
	// +kubebuilder:validation:Minimum=576
	// +kubebuilder:validation:Maximum=9216
	// +optional
	MTU *int32 `json:"mtu,omitempty"`

	// Addresses lists static IPv4 addresses in CIDR notation, for example
	// 192.0.2.10/24.
	// +kubebuilder:validation:MaxItems=8
	// +kubebuilder:validation:items:MaxLength=18
	// +optional
	Addresses []string `json:"addresses,omitempty"`

	// Gateway is the IPv4 default gateway reachable through this interface.
	// At most one interface in the host network may set it.
	// +kubebuilder:validation:MaxLength=15
	// +optional
	Gateway string `json:"gateway,omitempty"`

	// Routes lists static IPv4 routes through this interface.
	// +kubebuilder:validation:MaxItems=32
	// +optional
	Routes []RouteSpec `json:"routes,omitempty"`
}

InterfaceAddressing holds the static IPv4 configuration of an interface.

func (*InterfaceAddressing) DeepCopy added in v0.24.0

func (in *InterfaceAddressing) DeepCopy() *InterfaceAddressing

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InterfaceAddressing.

func (*InterfaceAddressing) DeepCopyInto added in v0.24.0

func (in *InterfaceAddressing) DeepCopyInto(out *InterfaceAddressing)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type IsolationChangePhase added in v0.23.0

type IsolationChangePhase string

IsolationChangePhase is how far a mode change got. +kubebuilder:validation:Enum=InProgress;Succeeded;Failed

const (
	// IsolationChangeInProgress means the agent started the change.
	IsolationChangeInProgress IsolationChangePhase = "InProgress"
	// IsolationChangeSucceeded means the node now runs in the target mode.
	IsolationChangeSucceeded IsolationChangePhase = "Succeeded"
	// IsolationChangeFailed means the change did not complete or was
	// refused. The message says why and whether the node was rolled back.
	// The agent does not retry on its own; the next repave tries again.
	IsolationChangeFailed IsolationChangePhase = "Failed"
)

type IsolationChangeStatus added in v0.23.0

type IsolationChangeStatus struct {
	// TargetMode is the mode the change was moving the node to. It is not
	// limited to the modes this release can run: an agent reports a change it
	// refused to a mode it does not know.
	// +kubebuilder:validation:MinLength=1
	// +kubebuilder:validation:MaxLength=63
	TargetMode IsolationMode `json:"targetMode"`

	// Phase is how far the change got.
	Phase IsolationChangePhase `json:"phase"`

	// Strategy is how the change was carried out.
	// +optional
	Strategy IsolationChangeStrategy `json:"strategy,omitempty"`

	// Reason is a machine-readable CamelCase reason for a refused change,
	// such as UnsupportedMode or ReprovisionNotAllowed. Empty for a change
	// that was attempted.
	// +kubebuilder:validation:MaxLength=64
	// +kubebuilder:validation:Pattern=`^([A-Za-z][A-Za-z0-9]*)?$`
	// +optional
	Reason string `json:"reason,omitempty"`

	// Message explains the phase, including why a failed change failed and
	// whether the node was rolled back.
	// +kubebuilder:validation:MaxLength=4096
	// +optional
	Message string `json:"message,omitempty"`

	// LastTransitionTime is when Phase last changed.
	// +optional
	LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"`
}

IsolationChangeStatus reports a mode change made at a repave.

func (*IsolationChangeStatus) DeepCopy added in v0.23.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IsolationChangeStatus.

func (*IsolationChangeStatus) DeepCopyInto added in v0.23.0

func (in *IsolationChangeStatus) DeepCopyInto(out *IsolationChangeStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type IsolationChangeStrategy added in v0.23.0

type IsolationChangeStrategy string

IsolationChangeStrategy is how a mode change is carried out. +kubebuilder:validation:Enum=InPlace;Reprovision

const (
	// IsolationChangeInPlace builds the target beside the running node and
	// switches over, rolling back on failure.
	IsolationChangeInPlace IsolationChangeStrategy = "InPlace"
	// IsolationChangeReprovision resets the host and bootstraps it again in
	// the target mode. It needs the AnnotationAllowReprovision opt-in.
	IsolationChangeReprovision IsolationChangeStrategy = "Reprovision"
)

type IsolationMode added in v0.23.0

type IsolationMode string

IsolationMode names where the node stack runs on a host.

const (
	// IsolationNSpawn runs the node stack in a systemd-nspawn machine. It is
	// the default.
	IsolationNSpawn IsolationMode = "nspawn"
	// IsolationNone runs the node stack directly on the host.
	IsolationNone IsolationMode = "none"
	// IsolationContainer runs the node stack in a privileged OCI container.
	// It is experimental and must be enabled explicitly.
	IsolationContainer IsolationMode = "container"
)

type KubernetesSpec

type KubernetesSpec struct {
	// Version is the Kubernetes version to install (e.g., "v1.34.0").
	// When omitted the controller falls back to the cluster's
	// Kubernetes version.
	// +optional
	Version string `json:"version,omitempty"`

	// NodeRef references the Node that corresponds to this Machine.
	// +optional
	NodeRef *LocalObjectReference `json:"nodeRef,omitempty"`

	// NodeLabels are labels passed to kubelet's --node-labels flag.
	// +optional
	NodeLabels map[string]string `json:"nodeLabels,omitempty"`

	// RegisterWithTaints are taints passed to kubelet's --register-with-taints flag.
	// Each entry uses the standard Kubernetes taint format: key=value:Effect.
	// +optional
	RegisterWithTaints []string `json:"registerWithTaints,omitempty"`

	// BootstrapTokenRef references a bootstrap token Secret in
	// kube-system. The secret must be of type
	// bootstrap.kubernetes.io/token with the well-known keys
	// "token-id" and "token-secret".
	// +optional
	BootstrapTokenRef *LocalObjectReference `json:"bootstrapTokenRef,omitempty"`
}

KubernetesSpec defines Kubernetes-specific configuration for a Machine.

func (*KubernetesSpec) DeepCopy

func (in *KubernetesSpec) DeepCopy() *KubernetesSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubernetesSpec.

func (*KubernetesSpec) DeepCopyInto

func (in *KubernetesSpec) DeepCopyInto(out *KubernetesSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type LocalDNSSpec added in v0.2.3

type LocalDNSSpec struct {
	// +optional
	Enabled bool `json:"enabled,omitempty"`
	// +optional
	NodeListenerIP string `json:"nodeListenerIP,omitempty"`
	// +optional
	ClusterListenerIP string `json:"clusterListenerIP,omitempty"`
	// +optional
	MetricsAddress string `json:"metricsAddress,omitempty"`
	// +optional
	CPULimitInMilliCores *int32 `json:"cpuLimitInMilliCores,omitempty"`
	// +optional
	MemoryLimitInMB *int32 `json:"memoryLimitInMB,omitempty"`
	// +optional
	RequiredPlugins []string `json:"requiredPlugins,omitempty"`
	// +optional
	CorefileTemplate string `json:"corefileTemplate,omitempty"`
}

LocalDNSSpec configures machine-local CoreDNS.

func (*LocalDNSSpec) DeepCopy added in v0.2.3

func (in *LocalDNSSpec) DeepCopy() *LocalDNSSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LocalDNSSpec.

func (*LocalDNSSpec) DeepCopyInto added in v0.2.3

func (in *LocalDNSSpec) DeepCopyInto(out *LocalDNSSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type LocalObjectReference

type LocalObjectReference struct {
	// Name of the referenced resource.
	// +kubebuilder:validation:MinLength=1
	Name string `json:"name"`
}

LocalObjectReference contains enough information to locate the referenced resource.

func (*LocalObjectReference) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LocalObjectReference.

func (*LocalObjectReference) DeepCopyInto

func (in *LocalObjectReference) DeepCopyInto(out *LocalObjectReference)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachinaComponentSpec added in v0.1.23

type MachinaComponentSpec struct {
	SiteComponentSpec `json:",inline"`
}

MachinaComponentSpec is a deprecated compatibility setting and is ignored. Machina is required and cannot be disabled.

func (*MachinaComponentSpec) DeepCopy added in v0.1.23

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachinaComponentSpec.

func (*MachinaComponentSpec) DeepCopyInto added in v0.1.23

func (in *MachinaComponentSpec) DeepCopyInto(out *MachinaComponentSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type Machine

type Machine struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`

	Spec   MachineSpec   `json:"spec,omitempty"`
	Status MachineStatus `json:"status,omitempty"`
}

Machine represents a machine that can be managed by machina.

func (*Machine) DeepCopy

func (in *Machine) DeepCopy() *Machine

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Machine.

func (*Machine) DeepCopyInto

func (in *Machine) DeepCopyInto(out *Machine)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*Machine) DeepCopyObject

func (in *Machine) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

func (*Machine) NodeName added in v0.17.0

func (m *Machine) NodeName() string

NodeName returns the Kubernetes Node name expected for the Machine: spec.kubernetes.nodeRef.name when set, otherwise the Machine name.

type MachineAllocation added in v0.23.0

type MachineAllocation struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`

	// +required
	Spec   MachineAllocationSpec   `json:"spec"`
	Status MachineAllocationStatus `json:"status,omitempty"`
}

MachineAllocation is one consumer-owned request for one machine from a MachineClass. Its UID owns every remote effect made on its behalf.

func (*MachineAllocation) DeepCopy added in v0.23.0

func (in *MachineAllocation) DeepCopy() *MachineAllocation

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineAllocation.

func (*MachineAllocation) DeepCopyInto added in v0.23.0

func (in *MachineAllocation) DeepCopyInto(out *MachineAllocation)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*MachineAllocation) DeepCopyObject added in v0.23.0

func (in *MachineAllocation) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type MachineAllocationConsumerReference added in v0.23.0

type MachineAllocationConsumerReference struct {
	// APIGroup is the consumer API group. An empty value means the core API
	// group.
	// +kubebuilder:validation:Required
	APIGroup string `json:"apiGroup"`

	// Kind is the consumer kind.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Kind string `json:"kind"`

	// Name is the consumer name.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Name string `json:"name"`

	// UID is the consumer UID. A consumer with another UID is a different
	// object.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:Type=string
	// +kubebuilder:validation:MinLength=1
	UID types.UID `json:"uid"`
}

MachineAllocationConsumerReference identifies the requesting object.

func (*MachineAllocationConsumerReference) DeepCopy added in v0.23.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineAllocationConsumerReference.

func (*MachineAllocationConsumerReference) DeepCopyInto added in v0.23.0

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineAllocationFailureReason added in v0.23.0

type MachineAllocationFailureReason string

MachineAllocationFailureReason is a normalized terminal launch failure. +kubebuilder:validation:Enum=InsufficientCapacity;QuotaExceeded;InvalidRequest;AuthFailed;ProviderConflict;ProviderFailed

const (
	// FailureInsufficientCapacity means no offering could satisfy the request.
	FailureInsufficientCapacity MachineAllocationFailureReason = "InsufficientCapacity"

	// FailureQuotaExceeded means the provider refused the launch for quota.
	FailureQuotaExceeded MachineAllocationFailureReason = "QuotaExceeded"

	// FailureInvalidRequest means the allocation or its class cannot be
	// satisfied as written.
	FailureInvalidRequest MachineAllocationFailureReason = "InvalidRequest"

	// FailureAuthFailed means the provider rejected the credential.
	FailureAuthFailed MachineAllocationFailureReason = "AuthFailed"

	// FailureProviderConflict means a provider resource with the planned
	// identity already exists and is not owned by this allocation.
	FailureProviderConflict MachineAllocationFailureReason = "ProviderConflict"

	// FailureProviderFailed means the provider failed for another reason.
	FailureProviderFailed MachineAllocationFailureReason = "ProviderFailed"
)

type MachineAllocationLifecycle added in v0.23.0

type MachineAllocationLifecycle string

MachineAllocationLifecycle is the consumer's lifecycle intent. +kubebuilder:validation:Enum=Active;Released

const (
	// MachineAllocationActive keeps the allocation's machine.
	MachineAllocationActive MachineAllocationLifecycle = "Active"

	// MachineAllocationReleased authorizes releasing the machine. Consumers set
	// it only after their workload and storage safety steps complete.
	MachineAllocationReleased MachineAllocationLifecycle = "Released"
)

type MachineAllocationList added in v0.23.0

type MachineAllocationList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []MachineAllocation `json:"items"`
}

MachineAllocationList contains a list of MachineAllocation.

func (*MachineAllocationList) DeepCopy added in v0.23.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineAllocationList.

func (*MachineAllocationList) DeepCopyInto added in v0.23.0

func (in *MachineAllocationList) DeepCopyInto(out *MachineAllocationList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*MachineAllocationList) DeepCopyObject added in v0.23.0

func (in *MachineAllocationList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type MachineAllocationNodeTemplate added in v0.23.0

type MachineAllocationNodeTemplate struct {
	// Labels are added to the Node at registration.
	// +optional
	Labels map[string]string `json:"labels,omitempty"`

	// Taints are added to the Node at registration.
	// +optional
	Taints []corev1.Taint `json:"taints,omitempty"`

	// StartupTaints are added at registration and removed by their owners
	// once the Node is initialized.
	// +optional
	StartupTaints []corev1.Taint `json:"startupTaints,omitempty"`
}

MachineAllocationNodeTemplate is applied to the Node at registration.

func (*MachineAllocationNodeTemplate) DeepCopy added in v0.23.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineAllocationNodeTemplate.

func (*MachineAllocationNodeTemplate) DeepCopyInto added in v0.23.0

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineAllocationOperations added in v0.23.0

type MachineAllocationOperations struct {
	// Allocate is the MachineOperation that launches the host.
	// +optional
	Allocate *UIDReference `json:"allocate,omitempty"`

	// Release is the MachineOperation that releases the host.
	// +optional
	Release *UIDReference `json:"release,omitempty"`
}

MachineAllocationOperations identifies allocation MachineOperations.

func (*MachineAllocationOperations) DeepCopy added in v0.23.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineAllocationOperations.

func (*MachineAllocationOperations) DeepCopyInto added in v0.23.0

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineAllocationRequirement added in v0.23.0

type MachineAllocationRequirement struct {
	// Key is the label key.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Key string `json:"key"`

	// Operator is the requirement operator.
	// +kubebuilder:validation:Required
	Operator RequirementOperator `json:"operator"`

	// Values are the operator values.
	// +optional
	Values []string `json:"values,omitempty"`

	// MinValues is the consumer's flexibility floor: at least this many
	// distinct values of Key must remain among the current offerings that
	// satisfy every requirement, or the allocation fails with
	// InsufficientCapacity. The allocation then resolves to one of them.
	// +optional
	// +kubebuilder:validation:Minimum=1
	MinValues *int32 `json:"minValues,omitempty"`
}

MachineAllocationRequirement constrains one offering label.

func (*MachineAllocationRequirement) DeepCopy added in v0.23.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineAllocationRequirement.

func (*MachineAllocationRequirement) DeepCopyInto added in v0.23.0

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineAllocationSnapshot added in v0.23.0

type MachineAllocationSnapshot struct {
	// ClassUID is the class UID the snapshot was taken from.
	// +kubebuilder:validation:Required
	ClassUID types.UID `json:"classUID"`

	// ClassGeneration is the class generation the snapshot was taken from.
	// +kubebuilder:validation:Required
	ClassGeneration int64 `json:"classGeneration"`

	// ClassRevision is the class resolved revision.
	// +kubebuilder:validation:Required
	ClassRevision string `json:"classRevision"`

	// Provider is the provider adapter name.
	// +kubebuilder:validation:Required
	Provider string `json:"provider"`

	// SiteName is the Site the machine joins.
	// +kubebuilder:validation:Required
	SiteName string `json:"siteName"`

	// SiteUID is the exact Site instance frozen before any effect. A Site
	// recreated under the same name has a different UID.
	// +kubebuilder:validation:Required
	SiteUID types.UID `json:"siteUID"`

	// Credential is the exact MachineOperationCredential instance frozen
	// before any effect. A credential recreated under the same name has a
	// different UID.
	// +kubebuilder:validation:Required
	Credential UIDReference `json:"credential"`

	// Offering is the selected offering.
	// +kubebuilder:validation:Required
	Offering MachineClassOffering `json:"offering"`

	// ProviderConfig is the exact provider config content.
	// +kubebuilder:validation:Required
	ProviderConfig ObjectContentSnapshot `json:"providerConfig"`

	// BootstrapFiles is the exact bootstrap files content.
	// +optional
	BootstrapFiles *ObjectContentSnapshot `json:"bootstrapFiles,omitempty"`

	// AgentArtifact is the digest-pinned agent tarball.
	// +optional
	AgentArtifact *AgentArtifact `json:"agentArtifact,omitempty"`

	// Configuration identifies the configuration version content.
	// +kubebuilder:validation:Required
	Configuration ConfigurationContentSnapshot `json:"configuration"`

	// ConfigurationTemplate is the frozen configuration content for Machines
	// of this allocation, copied from the configuration version.
	// +kubebuilder:validation:Required
	ConfigurationTemplate MachineConfigurationTemplate `json:"configurationTemplate"`

	// HostImage is the provider-interpreted host image.
	// +kubebuilder:validation:Required
	HostImage string `json:"hostImage"`

	// HostProviderID is the provider-specific host ID planned before the
	// host exists. It is intended to become the Machine's
	// host.external.providerID.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	HostProviderID string `json:"hostProviderID"`
}

MachineAllocationSnapshot is the protected, immutable allocation input. +kubebuilder:validation:XValidation:rule="self == oldSelf",message="snapshot is immutable"

func (*MachineAllocationSnapshot) DeepCopy added in v0.23.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineAllocationSnapshot.

func (*MachineAllocationSnapshot) DeepCopyInto added in v0.23.0

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineAllocationSpec added in v0.23.0

type MachineAllocationSpec struct {
	// ConsumerRef identifies the object that requested this allocation.
	// +kubebuilder:validation:Required
	ConsumerRef MachineAllocationConsumerReference `json:"consumerRef"`

	// ClassRef identifies the exact MachineClass the allocation is made from.
	// +kubebuilder:validation:Required
	ClassRef UIDReference `json:"classRef"`

	// Resources are the minimum requested resources.
	// +optional
	Resources corev1.ResourceList `json:"resources,omitempty"`

	// Requirements constrain the offering labels the allocation may use.
	// +optional
	Requirements []MachineAllocationRequirement `json:"requirements,omitempty"`

	// NodeTemplate is applied to the Node at registration.
	// +optional
	NodeTemplate *MachineAllocationNodeTemplate `json:"nodeTemplate,omitempty"`

	// Lifecycle authorizes release. It moves only from Active to Released.
	// +optional
	// +kubebuilder:default=Active
	// +kubebuilder:validation:XValidation:rule="oldSelf == 'Active' || self == 'Released'",message="lifecycle cannot return to Active"
	Lifecycle MachineAllocationLifecycle `json:"lifecycle,omitempty"`
}

MachineAllocationSpec defines the requested machine. Every field except lifecycle is immutable. +kubebuilder:validation:XValidation:rule="self.consumerRef == oldSelf.consumerRef",message="consumerRef is immutable" +kubebuilder:validation:XValidation:rule="self.classRef == oldSelf.classRef",message="classRef is immutable" +kubebuilder:validation:XValidation:rule="has(self.resources) == has(oldSelf.resources) && (!has(self.resources) || self.resources == oldSelf.resources)",message="resources is immutable" +kubebuilder:validation:XValidation:rule="has(self.requirements) == has(oldSelf.requirements) && (!has(self.requirements) || self.requirements == oldSelf.requirements)",message="requirements is immutable" +kubebuilder:validation:XValidation:rule="has(self.nodeTemplate) == has(oldSelf.nodeTemplate) && (!has(self.nodeTemplate) || self.nodeTemplate == oldSelf.nodeTemplate)",message="nodeTemplate is immutable"

func (*MachineAllocationSpec) DeepCopy added in v0.23.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineAllocationSpec.

func (*MachineAllocationSpec) DeepCopyInto added in v0.23.0

func (in *MachineAllocationSpec) DeepCopyInto(out *MachineAllocationSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineAllocationStatus added in v0.23.0

type MachineAllocationStatus struct {
	// ObservedGeneration is the allocation generation last reconciled.
	// +optional
	ObservedGeneration int64 `json:"observedGeneration,omitempty"`

	// Snapshot is the frozen input for every remote effect made for this
	// allocation. It is set by the allocation controller and cannot change or
	// be removed once set.
	// +optional
	Snapshot *MachineAllocationSnapshot `json:"snapshot,omitempty"`

	// ProviderID is the exact Node.spec.providerID the machine registers with.
	// It cannot change or be removed once set.
	// +optional
	ProviderID string `json:"providerID,omitempty"`

	// ProviderResourceID is the provider-native host identifier.
	// +optional
	ProviderResourceID string `json:"providerResourceID,omitempty"`

	// InstanceType is the launched instance type.
	// +optional
	InstanceType string `json:"instanceType,omitempty"`

	// Zone is the launched zone.
	// +optional
	Zone string `json:"zone,omitempty"`

	// CapacityType is the launched purchase model.
	// +optional
	CapacityType CapacityType `json:"capacityType,omitempty"`

	// Image is the launched host image.
	// +optional
	Image string `json:"image,omitempty"`

	// Capacity is the machine capacity.
	// +optional
	Capacity corev1.ResourceList `json:"capacity,omitempty"`

	// Allocatable is observed from the Node once registered, otherwise
	// capacity minus overhead.
	// +optional
	Allocatable corev1.ResourceList `json:"allocatable,omitempty"`

	// Labels are the labels the Node registers with.
	// +optional
	Labels map[string]string `json:"labels,omitempty"`

	// OwnedResources are the provider resources the allocate operation
	// confirmed as created for this allocation, with provider-native identity
	// proving ownership. Release is limited to these resources.
	// +optional
	// +listType=map
	// +listMapKey=id
	OwnedResources []ProviderOwnedResource `json:"ownedResources,omitempty"`

	// MachineRef identifies the Machine created for this allocation.
	// +optional
	MachineRef *UIDReference `json:"machineRef,omitempty"`

	// NodeRef identifies the first Node registered for this allocation.
	// +optional
	NodeRef *UIDReference `json:"nodeRef,omitempty"`

	// Operations identifies the durable allocation operations.
	// +optional
	Operations MachineAllocationOperations `json:"operations,omitempty"`

	// FailureReason is a normalized terminal launch failure category.
	// +optional
	FailureReason MachineAllocationFailureReason `json:"failureReason,omitempty"`

	// FailureMessage describes the terminal launch failure.
	// +optional
	FailureMessage string `json:"failureMessage,omitempty"`

	// Conditions represent the latest available observations.
	// +optional
	// +listType=map
	// +listMapKey=type
	Conditions []metav1.Condition `json:"conditions,omitempty"`
}

MachineAllocationStatus reports the observed allocation state.

func (*MachineAllocationStatus) DeepCopy added in v0.23.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineAllocationStatus.

func (*MachineAllocationStatus) DeepCopyInto added in v0.23.0

func (in *MachineAllocationStatus) DeepCopyInto(out *MachineAllocationStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineClass added in v0.23.0

type MachineClass struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`

	// +required
	Spec   MachineClassSpec   `json:"spec"`
	Status MachineClassStatus `json:"status,omitempty"`
}

MachineClass describes a provider-neutral template from which capacity consumers request MachineAllocations. Provider-specific settings live in an object referenced by providerConfigRef and are interpreted only by the provider adapter.

func (*MachineClass) DeepCopy added in v0.23.0

func (in *MachineClass) DeepCopy() *MachineClass

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineClass.

func (*MachineClass) DeepCopyInto added in v0.23.0

func (in *MachineClass) DeepCopyInto(out *MachineClass)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*MachineClass) DeepCopyObject added in v0.23.0

func (in *MachineClass) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type MachineClassBootstrap added in v0.23.0

type MachineClassBootstrap struct {
	// FilesRef references a ConfigMap of bootstrap files for hosts launched
	// from this class. Its required "run" key is the script that runs as root
	// on the host before the agent installer.
	// +optional
	FilesRef *NamespacedObjectReference `json:"filesRef,omitempty"`

	// AgentArtifact overrides the agent tarball location and pins its digest.
	// +optional
	AgentArtifact *AgentArtifact `json:"agentArtifact,omitempty"`
}

MachineClassBootstrap customizes first-boot artifact delivery. It must not contain credentials; the referenced files become part of host user data.

func (*MachineClassBootstrap) DeepCopy added in v0.23.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineClassBootstrap.

func (*MachineClassBootstrap) DeepCopyInto added in v0.23.0

func (in *MachineClassBootstrap) DeepCopyInto(out *MachineClassBootstrap)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineClassList added in v0.23.0

type MachineClassList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []MachineClass `json:"items"`
}

MachineClassList contains a list of MachineClass.

func (*MachineClassList) DeepCopy added in v0.23.0

func (in *MachineClassList) DeepCopy() *MachineClassList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineClassList.

func (*MachineClassList) DeepCopyInto added in v0.23.0

func (in *MachineClassList) DeepCopyInto(out *MachineClassList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*MachineClassList) DeepCopyObject added in v0.23.0

func (in *MachineClassList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type MachineClassOffering added in v0.23.0

type MachineClassOffering struct {
	// Name uniquely identifies the offering within the class.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Name string `json:"name"`

	// InstanceType is the provider instance type.
	// +kubebuilder:validation:Required
	InstanceType string `json:"instanceType"`

	// Zone is the provider zone, or empty for regional capacity.
	// +optional
	Zone string `json:"zone,omitempty"`

	// CapacityType is the purchase model.
	// +kubebuilder:validation:Required
	CapacityType CapacityType `json:"capacityType"`

	// Labels are the well-known labels Nodes from this offering register with.
	// +optional
	Labels map[string]string `json:"labels,omitempty"`

	// Capacity is the machine capacity before overhead.
	// +optional
	Capacity corev1.ResourceList `json:"capacity,omitempty"`

	// Overhead is the capacity reserved from workloads.
	// +optional
	Overhead OfferingOverhead `json:"overhead,omitempty"`

	// Availability is the observed availability.
	// +kubebuilder:validation:Required
	Availability OfferingAvailability `json:"availability"`

	// Price is the observed or configured price, when known.
	// +optional
	Price *OfferingPrice `json:"price,omitempty"`

	// ObservedAt is when availability and capacity were observed.
	// +optional
	ObservedAt *metav1.Time `json:"observedAt,omitempty"`

	// ValidUntil is when this observation expires. An expired offering must
	// not be used to launch a machine.
	// +optional
	ValidUntil *metav1.Time `json:"validUntil,omitempty"`
}

MachineClassOffering is one normalized purchasable capacity shape.

func (*MachineClassOffering) DeepCopy added in v0.23.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineClassOffering.

func (*MachineClassOffering) DeepCopyInto added in v0.23.0

func (in *MachineClassOffering) DeepCopyInto(out *MachineClassOffering)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineClassSpec added in v0.23.0

type MachineClassSpec struct {
	// SiteRef identifies the Site that allocated machines join. It is
	// immutable after creation.
	// +kubebuilder:validation:Required
	SiteRef LocalObjectReference `json:"siteRef"`

	// Provider selects the registered provider adapter that interprets
	// providerConfigRef and executes allocation operations. It is immutable
	// after creation.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Provider string `json:"provider"`

	// ProviderConfigRef references provider-specific configuration. Only a
	// namespaced ConfigMap in the core API group is accepted today.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:XValidation:rule="!has(self.apiGroup) || self.apiGroup == ”",message="providerConfigRef.apiGroup must be the core group"
	// +kubebuilder:validation:XValidation:rule="self.kind == 'ConfigMap'",message="providerConfigRef.kind must be ConfigMap"
	// +kubebuilder:validation:XValidation:rule="self.kind != 'ConfigMap' || has(self.namespace)",message="providerConfigRef.namespace is required for a ConfigMap"
	ProviderConfigRef TypedObjectReference `json:"providerConfigRef"`

	// ConfigurationRef pins the MachineConfiguration version whose content is
	// frozen into each allocation.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:XValidation:rule="has(self.version)",message="configurationRef.version is required"
	ConfigurationRef MachineConfigurationRef `json:"configurationRef"`

	// Bootstrap optionally customizes first-boot artifact delivery.
	// +optional
	Bootstrap *MachineClassBootstrap `json:"bootstrap,omitempty"`
}

MachineClassSpec defines the inputs shared by allocations from this class. +kubebuilder:validation:XValidation:rule="self.provider == oldSelf.provider",message="provider is immutable" +kubebuilder:validation:XValidation:rule="self.siteRef == oldSelf.siteRef",message="siteRef is immutable"

func (*MachineClassSpec) DeepCopy added in v0.23.0

func (in *MachineClassSpec) DeepCopy() *MachineClassSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineClassSpec.

func (*MachineClassSpec) DeepCopyInto added in v0.23.0

func (in *MachineClassSpec) DeepCopyInto(out *MachineClassSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineClassStatus added in v0.23.0

type MachineClassStatus struct {
	// ObservedGeneration is the class generation whose inputs were resolved.
	// +optional
	ObservedGeneration int64 `json:"observedGeneration,omitempty"`

	// ResolvedRevision identifies the resolved spec, provider config,
	// bootstrap files, and configuration content. Allocations whose frozen
	// revision differs are drifted.
	// +optional
	ResolvedRevision string `json:"resolvedRevision,omitempty"`

	// ProviderConfig records the provider config observed for the revision.
	// +optional
	ProviderConfig *ObjectContentSnapshot `json:"providerConfig,omitempty"`

	// BootstrapFiles records the bootstrap files observed for the revision.
	// +optional
	BootstrapFiles *ObjectContentSnapshot `json:"bootstrapFiles,omitempty"`

	// Configuration records the configuration version observed for the revision.
	// +optional
	Configuration *ConfigurationContentSnapshot `json:"configuration,omitempty"`

	// Site is the exact Site instance the revision was resolved for. A Site
	// deleted and recreated under the same name is a different authority.
	// +optional
	Site *UIDReference `json:"site,omitempty"`

	// Credential is the exact MachineOperationCredential instance the
	// revision was resolved with.
	// +optional
	Credential *UIDReference `json:"credential,omitempty"`

	// Offerings are the normalized capacity offerings for this class.
	// +optional
	// +listType=map
	// +listMapKey=name
	Offerings []MachineClassOffering `json:"offerings,omitempty"`

	// Conditions represent the latest available observations.
	// +optional
	// +listType=map
	// +listMapKey=type
	Conditions []metav1.Condition `json:"conditions,omitempty"`
}

MachineClassStatus reports the normalized, observed class state.

func (*MachineClassStatus) DeepCopy added in v0.23.0

func (in *MachineClassStatus) DeepCopy() *MachineClassStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineClassStatus.

func (*MachineClassStatus) DeepCopyInto added in v0.23.0

func (in *MachineClassStatus) DeepCopyInto(out *MachineClassStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineConfiguration added in v0.1.4

type MachineConfiguration struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`

	Spec   MachineConfigurationSpec   `json:"spec,omitempty"`
	Status MachineConfigurationStatus `json:"status,omitempty"`
}

MachineConfiguration stores a configuration profile for a class of machines. It acts like a Deployment: edits to the spec automatically create or update a child MachineConfigurationVersion, similar to how Deployment edits create or update ReplicaSets.

func (*MachineConfiguration) DeepCopy added in v0.1.4

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfiguration.

func (*MachineConfiguration) DeepCopyInto added in v0.1.4

func (in *MachineConfiguration) DeepCopyInto(out *MachineConfiguration)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*MachineConfiguration) DeepCopyObject added in v0.1.4

func (in *MachineConfiguration) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type MachineConfigurationAgent added in v0.1.4

type MachineConfigurationAgent struct {
	// Image is the OCI image reference used for provisioning the
	// nspawn machine (e.g. "ghcr.io/org/repo:tag").
	// +kubebuilder:validation:Required
	Image string `json:"image"`

	// LocalDNS configures the optional CoreDNS cache for this version.
	// +optional
	LocalDNS *LocalDNSSpec `json:"localDNS,omitempty"`
}

MachineConfigurationAgent holds agent-specific fields that are part of the versioned configuration.

func (*MachineConfigurationAgent) DeepCopy added in v0.1.4

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigurationAgent.

func (*MachineConfigurationAgent) DeepCopyInto added in v0.1.4

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineConfigurationHostSpec added in v0.1.23

type MachineConfigurationHostSpec struct {
	// ProvisioningFormat declares the first-boot payload understood by Image.
	// +optional
	ProvisioningFormat ProvisioningFormat `json:"provisioningFormat,omitempty"`
	// Image is an opaque provider-interpreted image identifier.
	// +optional
	Image string `json:"image,omitempty"`
}

MachineConfigurationHostSpec contains versioned, provider-neutral host settings. Per-machine host ownership belongs on Machine.spec.host.

func (*MachineConfigurationHostSpec) DeepCopy added in v0.1.23

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigurationHostSpec.

func (*MachineConfigurationHostSpec) DeepCopyInto added in v0.1.23

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineConfigurationKubernetes added in v0.1.4

type MachineConfigurationKubernetes struct {
	// Version is the Kubernetes version to install (e.g. "v1.34.0").
	// +optional
	Version string `json:"version,omitempty"`

	// NodeLabels are labels passed to kubelet's --node-labels flag.
	// +optional
	NodeLabels map[string]string `json:"nodeLabels,omitempty"`

	// RegisterWithTaints are taints passed to kubelet's
	// --register-with-taints flag.
	// +optional
	RegisterWithTaints []corev1.Taint `json:"registerWithTaints,omitempty"`
}

MachineConfigurationKubernetes holds the Kubernetes-specific fields that are part of the versioned configuration.

func (*MachineConfigurationKubernetes) DeepCopy added in v0.1.4

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigurationKubernetes.

func (*MachineConfigurationKubernetes) DeepCopyInto added in v0.1.4

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineConfigurationList added in v0.1.4

type MachineConfigurationList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []MachineConfiguration `json:"items"`
}

MachineConfigurationList contains a list of MachineConfiguration.

func (*MachineConfigurationList) DeepCopy added in v0.1.4

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigurationList.

func (*MachineConfigurationList) DeepCopyInto added in v0.1.4

func (in *MachineConfigurationList) DeepCopyInto(out *MachineConfigurationList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*MachineConfigurationList) DeepCopyObject added in v0.1.4

func (in *MachineConfigurationList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type MachineConfigurationRef added in v0.1.4

type MachineConfigurationRef struct {
	// Name is the name of the MachineConfiguration.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Name string `json:"name"`

	// Version is the specific MachineConfigurationVersion number to
	// use. If omitted, the controller selects the latest locked
	// (deployed) version and populates this field.
	// +optional
	Version *int32 `json:"version,omitempty"`
}

MachineConfigurationRef references a MachineConfiguration and optionally a specific MachineConfigurationVersion.

func (*MachineConfigurationRef) DeepCopy added in v0.1.4

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigurationRef.

func (*MachineConfigurationRef) DeepCopyInto added in v0.1.4

func (in *MachineConfigurationRef) DeepCopyInto(out *MachineConfigurationRef)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineConfigurationRefStatus added in v0.1.4

type MachineConfigurationRefStatus struct {
	// Name is the MachineConfiguration name.
	Name string `json:"name,omitempty"`

	// Version is the MachineConfigurationVersion number that was applied.
	Version int32 `json:"version,omitempty"`

	// VersionName is the full MachineConfigurationVersion object name
	// (e.g. "myconfig-v3").
	VersionName string `json:"versionName,omitempty"`
}

MachineConfigurationRefStatus records which configuration version was applied to a Machine.

func (*MachineConfigurationRefStatus) DeepCopy added in v0.1.4

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigurationRefStatus.

func (*MachineConfigurationRefStatus) DeepCopyInto added in v0.1.4

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineConfigurationSpec added in v0.1.4

type MachineConfigurationSpec struct {
	// Template contains the configuration fields that are versioned
	// into MachineConfigurationVersion objects.
	// +kubebuilder:validation:Required
	Template MachineConfigurationTemplate `json:"template"`

	// MachineSelector selects machines that should automatically
	// receive this configuration. If set, new machines matching the
	// selector will be assigned the latest locked version of the
	// highest priority configuration that matches.
	// +optional
	MachineSelector *metav1.LabelSelector `json:"machineSelector,omitempty"`

	// Priority determines which configuration is selected when multiple
	// configurations match a machine's labels. Higher values take
	// precedence. When two configurations have the same priority,
	// lexicographic ordering of names is used as a tiebreaker.
	// +optional
	// +kubebuilder:default=0
	Priority int32 `json:"priority,omitempty"`

	// UpdateStrategy controls how configuration changes are rolled out
	// to machines that reference this configuration.
	// +optional
	UpdateStrategy MachineConfigurationUpdateStrategy `json:"updateStrategy,omitempty"`

	// RevisionHistoryLimit is the number of old
	// MachineConfigurationVersions to retain for rollback. Versions
	// that are still referenced by a Machine are never deleted
	// regardless of this limit, so the actual number of retained
	// versions may exceed this value.
	// +optional
	// +kubebuilder:default=10
	// +kubebuilder:validation:Minimum=0
	RevisionHistoryLimit *int32 `json:"revisionHistoryLimit,omitempty"`
}

MachineConfigurationSpec defines the desired configuration profile for a class of machines.

func (*MachineConfigurationSpec) DeepCopy added in v0.1.4

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigurationSpec.

func (*MachineConfigurationSpec) DeepCopyInto added in v0.1.4

func (in *MachineConfigurationSpec) DeepCopyInto(out *MachineConfigurationSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineConfigurationStatus added in v0.1.4

type MachineConfigurationStatus struct {
	// LatestVersion is the highest version number that has been
	// created for this MachineConfiguration. The controller uses this
	// to avoid reusing version numbers when versions are deleted.
	LatestVersion int32 `json:"latestVersion,omitempty"`

	// CurrentVersion is the version number of the latest non-deployed
	// (editable) MachineConfigurationVersion. If all versions are
	// deployed, this is 0.
	CurrentVersion int32 `json:"currentVersion,omitempty"`

	// Conditions represent the latest available observations of the
	// MachineConfiguration's state.
	// +optional
	Conditions []metav1.Condition `json:"conditions,omitempty"`
}

MachineConfigurationStatus defines the observed state of a MachineConfiguration.

func (*MachineConfigurationStatus) DeepCopy added in v0.1.4

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigurationStatus.

func (*MachineConfigurationStatus) DeepCopyInto added in v0.1.4

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineConfigurationTemplate added in v0.1.4

type MachineConfigurationTemplate struct {
	// Host contains provider-neutral desired host settings.
	// +optional
	Host *MachineConfigurationHostSpec `json:"host,omitempty"`

	// Kubernetes contains Kubernetes-specific configuration such as
	// the target version, node labels, and taints.
	// +optional
	Kubernetes *MachineConfigurationKubernetes `json:"kubernetes,omitempty"`

	// Agent contains settings for the unbounded node agent (e.g. the
	// OCI image reference for the nspawn machine).
	// +optional
	Agent *MachineConfigurationAgent `json:"agent,omitempty"`
}

MachineConfigurationTemplate holds the versioned configuration fields. These fields are copied into each MachineConfigurationVersion.

func (*MachineConfigurationTemplate) DeepCopy added in v0.1.4

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigurationTemplate.

func (*MachineConfigurationTemplate) DeepCopyInto added in v0.1.4

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineConfigurationUpdateStrategy added in v0.1.4

type MachineConfigurationUpdateStrategy struct {
	// Type is the update strategy type.
	// +kubebuilder:default=OnDelete
	Type MachineConfigurationUpdateStrategyType `json:"type,omitempty"`

	// MaxUnavailable is the maximum number of machines that can be
	// unavailable during a RollingUpdate. Only used when Type is
	// RollingUpdate. Can be an absolute number or a percentage.
	// +optional
	MaxUnavailable *int32 `json:"maxUnavailable,omitempty"`
}

MachineConfigurationUpdateStrategy defines the strategy for applying configuration updates.

func (*MachineConfigurationUpdateStrategy) DeepCopy added in v0.1.4

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigurationUpdateStrategy.

func (*MachineConfigurationUpdateStrategy) DeepCopyInto added in v0.1.4

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineConfigurationUpdateStrategyType added in v0.1.4

type MachineConfigurationUpdateStrategyType string

MachineConfigurationUpdateStrategyType defines how configuration changes are applied to machines. +kubebuilder:validation:Enum=OnDelete;RollingUpdate

const (
	// OnDeleteUpdateStrategy requires the operator to manually
	// cordon, drain, and delete the Node object to trigger a repave
	// with the new configuration.
	OnDeleteUpdateStrategy MachineConfigurationUpdateStrategyType = "OnDelete"

	// RollingUpdateStrategy automates the cordon/drain/delete cycle
	// across machines, respecting maxUnavailable. Reserved for future
	// implementation.
	RollingUpdateStrategy MachineConfigurationUpdateStrategyType = "RollingUpdate"
)

type MachineConfigurationVersion added in v0.1.4

type MachineConfigurationVersion struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`

	Spec   MachineConfigurationVersionSpec   `json:"spec,omitempty"`
	Status MachineConfigurationVersionStatus `json:"status,omitempty"`
}

MachineConfigurationVersion is an immutable-once-deployed snapshot of a MachineConfiguration's spec at a specific point in time. It acts like a ReplicaSet to a Deployment: the MachineConfiguration controller automatically creates and manages these objects. Versions remain editable until they are deployed (referenced by a Machine). Once deployed, the spec fields become immutable.

func (*MachineConfigurationVersion) DeepCopy added in v0.1.4

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigurationVersion.

func (*MachineConfigurationVersion) DeepCopyInto added in v0.1.4

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*MachineConfigurationVersion) DeepCopyObject added in v0.1.4

func (in *MachineConfigurationVersion) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type MachineConfigurationVersionList added in v0.1.4

type MachineConfigurationVersionList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []MachineConfigurationVersion `json:"items"`
}

MachineConfigurationVersionList contains a list of MachineConfigurationVersion.

func (*MachineConfigurationVersionList) DeepCopy added in v0.1.4

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigurationVersionList.

func (*MachineConfigurationVersionList) DeepCopyInto added in v0.1.4

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*MachineConfigurationVersionList) DeepCopyObject added in v0.1.4

func (in *MachineConfigurationVersionList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type MachineConfigurationVersionSpec added in v0.1.4

type MachineConfigurationVersionSpec struct {
	// Version is the monotonically increasing version number within
	// the parent MachineConfiguration.
	// +kubebuilder:validation:Minimum=1
	Version int32 `json:"version"`

	// Template is the configuration snapshot copied from the parent
	// MachineConfiguration at the time this version was created or
	// last updated (while still editable).
	Template MachineConfigurationTemplate `json:"template"`
}

MachineConfigurationVersionSpec defines the versioned configuration snapshot.

func (*MachineConfigurationVersionSpec) DeepCopy added in v0.1.4

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigurationVersionSpec.

func (*MachineConfigurationVersionSpec) DeepCopyInto added in v0.1.4

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineConfigurationVersionStatus added in v0.1.4

type MachineConfigurationVersionStatus struct {
	// Deployed indicates whether any Machine has been provisioned
	// using this version. Once true, the spec fields are immutable.
	Deployed bool `json:"deployed,omitempty"`

	// DeployedMachines is the count of Machines currently referencing
	// this version.
	DeployedMachines int32 `json:"deployedMachines,omitempty"`

	// Conditions represent the latest available observations.
	// +optional
	Conditions []metav1.Condition `json:"conditions,omitempty"`
}

MachineConfigurationVersionStatus defines the observed state of a MachineConfigurationVersion.

func (*MachineConfigurationVersionStatus) DeepCopy added in v0.1.4

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigurationVersionStatus.

func (*MachineConfigurationVersionStatus) DeepCopyInto added in v0.1.4

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineList

type MachineList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []Machine `json:"items"`
}

MachineList contains a list of Machine.

func (*MachineList) DeepCopy

func (in *MachineList) DeepCopy() *MachineList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineList.

func (*MachineList) DeepCopyInto

func (in *MachineList) DeepCopyInto(out *MachineList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*MachineList) DeepCopyObject

func (in *MachineList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type MachineOperation added in v0.1.4

type MachineOperation struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`

	Spec   MachineOperationSpec   `json:"spec,omitempty"`
	Status MachineOperationStatus `json:"status,omitempty"`
}

MachineOperation represents a discrete operation to be performed on a Machine. MachineOperations are created by CLI commands or controllers and processed by the appropriate agent. The in-VM agent handles operations like NodeReboot and HostSoftReboot, while cloud or PXE controllers handle operations like HostHardReboot, HostPowerOff, and HostPowerOn. HostAllocate and HostRelease act on a MachineAllocation, and neither the agent nor the cloud or PXE controllers process them.

func (*MachineOperation) DeepCopy added in v0.1.4

func (in *MachineOperation) DeepCopy() *MachineOperation

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineOperation.

func (*MachineOperation) DeepCopyInto added in v0.1.4

func (in *MachineOperation) DeepCopyInto(out *MachineOperation)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*MachineOperation) DeepCopyObject added in v0.1.4

func (in *MachineOperation) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type MachineOperationAllocationResult added in v0.23.0

type MachineOperationAllocationResult struct {
	// ProviderResourceID is the provider-native host identifier.
	// +optional
	ProviderResourceID string `json:"providerResourceID,omitempty"`

	// InstanceType is the launched instance type.
	// +optional
	InstanceType string `json:"instanceType,omitempty"`

	// Zone is the launched zone.
	// +optional
	Zone string `json:"zone,omitempty"`

	// Image is the launched host image.
	// +optional
	Image string `json:"image,omitempty"`

	// OwnedResources are the provider resources confirmed as created for the
	// allocation, with provider-native identity. A failed allocation may still
	// report them.
	// +optional
	// +listType=map
	// +listMapKey=id
	OwnedResources []ProviderOwnedResource `json:"ownedResources,omitempty"`
}

MachineOperationAllocationResult is the provider's result for a HostAllocate. Field names match MachineAllocationStatus.

func (*MachineOperationAllocationResult) DeepCopy added in v0.23.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineOperationAllocationResult.

func (*MachineOperationAllocationResult) DeepCopyInto added in v0.23.0

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineOperationBootMediaStatus added in v0.15.0

type MachineOperationBootMediaStatus struct {
	ID              string    `json:"id"`
	SourceServer    string    `json:"sourceServer,omitempty"`
	SourceName      string    `json:"sourceName,omitempty"`
	Phase           string    `json:"phase"`
	MachineUID      types.UID `json:"machineUID"`
	Netboot         *PXESpec  `json:"netboot"`
	CertFingerprint string    `json:"certFingerprint,omitempty"`
	ImageWritten    bool      `json:"imageWritten,omitempty"`
	Cleaned         bool      `json:"cleaned,omitempty"`
	// StagedDeleted confirms rack media deletion after safe boot is restored.
	StagedDeleted bool `json:"stagedDeleted,omitempty"`
	// CleanedAt starts the bounded wait for installer reboot handoff.
	CleanedAt *metav1.Time `json:"cleanedAt,omitempty"`
	// RebootRequestedAt is set by the successful installer ready callback.
	RebootRequestedAt *metav1.Time `json:"rebootRequestedAt,omitempty"`
	// Released confirms local media removal after Cleaned revokes serving.
	Released bool `json:"released,omitempty"`
	// Site preserves controller ownership after the Machine is deleted.
	Site string `json:"site,omitempty"`
	// NodeName preserves the expected Node across Machine edits.
	NodeName string `json:"nodeName,omitempty"`
	// PhaseStartedAt bounds active progress without spending retry attempts.
	PhaseStartedAt *metav1.Time `json:"phaseStartedAt,omitempty"`
	// ReadinessStartedAt gives AC recovery one fixed grace window per phase.
	ReadinessStartedAt *metav1.Time `json:"readinessStartedAt,omitempty"`
	// LoaderStartedAt is set when the bootloader on the media first fetches
	// its install config. It proves the host booted the media.
	LoaderStartedAt *metav1.Time `json:"loaderStartedAt,omitempty"`
	// BootAttempts counts power-on attempts used to boot the media.
	BootAttempts int32 `json:"bootAttempts,omitempty"`
	// Abandoned ends ownership after the installer never finished its
	// handoff within the allowed time.
	Abandoned bool `json:"abandoned,omitempty"`
}

MachineOperationBootMediaStatus persists media ownership before BMC changes.

func (*MachineOperationBootMediaStatus) DeepCopy added in v0.15.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineOperationBootMediaStatus.

func (*MachineOperationBootMediaStatus) DeepCopyInto added in v0.15.0

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineOperationCredential added in v0.1.8

type MachineOperationCredential struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`

	Spec MachineOperationCredentialSpec `json:"spec,omitempty"`
}

MachineOperationCredential defines the credential source used by external MachineOperation controllers for machines in a site.

func (*MachineOperationCredential) DeepCopy added in v0.1.8

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineOperationCredential.

func (*MachineOperationCredential) DeepCopyInto added in v0.1.8

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*MachineOperationCredential) DeepCopyObject added in v0.1.8

func (in *MachineOperationCredential) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type MachineOperationCredentialAuth added in v0.1.8

type MachineOperationCredentialAuth struct {
	// Mode identifies the credential source.
	// +kubebuilder:validation:Required
	Mode MachineOperationCredentialAuthMode `json:"mode"`

	// SecretRef references provider-specific external plugin configuration. It
	// is required for ExternalPlugin mode.
	// +optional
	SecretRef *NamespacedSecretReference `json:"secretRef,omitempty"`
}

MachineOperationCredentialAuth defines the credential source configuration.

func (*MachineOperationCredentialAuth) DeepCopy added in v0.1.8

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineOperationCredentialAuth.

func (*MachineOperationCredentialAuth) DeepCopyInto added in v0.1.8

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineOperationCredentialAuthMode added in v0.1.8

type MachineOperationCredentialAuthMode string

MachineOperationCredentialAuthMode identifies the credential source used by a MachineOperation controller. +kubebuilder:validation:Enum=WorkloadIdentity;ExternalPlugin

const (
	// MachineOperationCredentialAuthWorkloadIdentity uses OIDC/workload identity
	// credentials available to the controller process.
	MachineOperationCredentialAuthWorkloadIdentity MachineOperationCredentialAuthMode = "WorkloadIdentity"

	// MachineOperationCredentialAuthExternalPlugin delegates credential handling
	// to provider-specific external plugin configuration.
	MachineOperationCredentialAuthExternalPlugin MachineOperationCredentialAuthMode = "ExternalPlugin"
)

type MachineOperationCredentialList added in v0.1.8

type MachineOperationCredentialList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []MachineOperationCredential `json:"items"`
}

MachineOperationCredentialList contains a list of MachineOperationCredential.

func (*MachineOperationCredentialList) DeepCopy added in v0.1.8

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineOperationCredentialList.

func (*MachineOperationCredentialList) DeepCopyInto added in v0.1.8

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*MachineOperationCredentialList) DeepCopyObject added in v0.1.8

func (in *MachineOperationCredentialList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type MachineOperationCredentialSpec added in v0.1.8

type MachineOperationCredentialSpec struct {
	// SiteName is matched against the Machine site label.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	SiteName string `json:"siteName"`

	// Provider identifies the external control provider this credential applies
	// to.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Provider string `json:"provider"`

	// Auth identifies how the provider should authenticate.
	// +kubebuilder:validation:Required
	Auth MachineOperationCredentialAuth `json:"auth"`
}

MachineOperationCredentialSpec defines a provider credential source for a site.

func (*MachineOperationCredentialSpec) DeepCopy added in v0.1.8

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineOperationCredentialSpec.

func (*MachineOperationCredentialSpec) DeepCopyInto added in v0.1.8

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineOperationList added in v0.1.4

type MachineOperationList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []MachineOperation `json:"items"`
}

MachineOperationList contains a list of MachineOperation.

func (*MachineOperationList) DeepCopy added in v0.1.4

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineOperationList.

func (*MachineOperationList) DeepCopyInto added in v0.1.4

func (in *MachineOperationList) DeepCopyInto(out *MachineOperationList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*MachineOperationList) DeepCopyObject added in v0.1.4

func (in *MachineOperationList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type MachineOperationSpec added in v0.1.4

type MachineOperationSpec struct {
	// MachineRef is the name of the Machine CR this operation targets.
	// Either machineRef or machineSelector must be set.
	// +optional
	MachineRef string `json:"machineRef,omitempty"`

	// AllocationRef identifies the MachineAllocation incarnation that a
	// HostAllocate or HostRelease acts on. It is required for those kinds,
	// forbidden for all others, and immutable.
	// +optional
	AllocationRef *UIDReference `json:"allocationRef,omitempty"`

	// MachineSelector selects machines by labels. When set, the
	// controller creates individual MachineOperation children for
	// each matched machine. Either machineRef or machineSelector
	// must be set.
	// +optional
	MachineSelector *metav1.LabelSelector `json:"machineSelector,omitempty"`

	// OperationKind is the operation to perform on the target machine.
	// +kubebuilder:validation:Required
	OperationKind OperationKind `json:"operationKind"`

	// Parameters is an optional set of key-value pairs passed to the
	// operation executor. For example, RestartService uses "service" to
	// specify the systemd unit name.
	// TODO: Revisit whether map[string]string is sufficient or if we
	// need a richer type (e.g. runtime.RawExtension for arbitrary
	// JSON, or a typed []OperationParameter struct).
	// +optional
	Parameters map[string]string `json:"parameters,omitempty"`

	// TTLSecondsAfterFinished limits the lifetime of a completed or failed
	// MachineOperation. If set, the agent deletes the MachineOperation
	// this many seconds after it reaches a terminal phase. If unset, the
	// MachineOperation is kept indefinitely.
	// +optional
	// +kubebuilder:validation:Minimum=0
	TTLSecondsAfterFinished *int32 `json:"ttlSecondsAfterFinished,omitempty"`
}

MachineOperationSpec defines the desired state of a MachineOperation. +kubebuilder:validation:XValidation:rule="!(self.operationKind in ['HostAllocate', 'HostRelease']) || has(self.allocationRef)",message="allocationRef is required for HostAllocate and HostRelease" +kubebuilder:validation:XValidation:rule="!has(self.allocationRef) || self.operationKind in ['HostAllocate', 'HostRelease']",message="allocationRef is allowed only for HostAllocate and HostRelease" +kubebuilder:validation:XValidation:rule="!(self.operationKind in ['HostAllocate', 'HostRelease']) || (has(self.machineRef) && self.machineRef != \"\")",message="machineRef is required for HostAllocate and HostRelease" +kubebuilder:validation:XValidation:rule="!(self.operationKind in ['HostAllocate', 'HostRelease']) || !has(self.machineSelector)",message="machineSelector is not allowed for HostAllocate and HostRelease" +kubebuilder:validation:XValidation:rule="!(self.operationKind in ['HostAllocate', 'HostRelease']) || !has(self.ttlSecondsAfterFinished)",message="ttlSecondsAfterFinished is not allowed for HostAllocate and HostRelease"

func (*MachineOperationSpec) DeepCopy added in v0.1.4

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineOperationSpec.

func (*MachineOperationSpec) DeepCopyInto added in v0.1.4

func (in *MachineOperationSpec) DeepCopyInto(out *MachineOperationSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineOperationStatus added in v0.1.4

type MachineOperationStatus struct {
	// Phase is the current phase of the operation.
	Phase OperationPhase `json:"phase,omitempty"`

	// Message is a human-readable description of the current state.
	// +optional
	Message string `json:"message,omitempty"`

	// StartedAt is when the agent began executing the operation.
	// +optional
	StartedAt *metav1.Time `json:"startedAt,omitempty"`

	// CompletedAt is when the operation reached a terminal state
	// (Complete or Failed).
	// +optional
	CompletedAt *metav1.Time `json:"completedAt,omitempty"`

	// ObservedMachineGeneration is the Machine's metadata.generation
	// at the time the agent began executing the operation. Clients
	// can compare this to the current Machine generation to determine
	// whether the operation acted on the expected machine state.
	// +optional
	ObservedMachineGeneration int64 `json:"observedMachineGeneration,omitempty"`

	// Targets records the per-machine execution state for this operation.
	// For single-machine operations this contains one entry. For selector
	// operations, targets are snapshotted when execution begins and remain
	// authoritative even if selector matches change later.
	// +optional
	// +listType=map
	// +listMapKey=machineRef
	Targets []MachineOperationTargetStatus `json:"targets,omitempty"`

	// Allocation is the provider's result for a HostAllocate. It is accepted
	// only on HostAllocate and cannot change or be removed once set.
	// +optional
	Allocation *MachineOperationAllocationResult `json:"allocation,omitempty"`

	// Conditions represent the latest available observations of the
	// operation's state.
	// +optional
	Conditions []metav1.Condition `json:"conditions,omitempty"`
}

MachineOperationStatus defines the observed state of a MachineOperation.

func (*MachineOperationStatus) DeepCopy added in v0.1.4

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineOperationStatus.

func (*MachineOperationStatus) DeepCopyInto added in v0.1.4

func (in *MachineOperationStatus) DeepCopyInto(out *MachineOperationStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*MachineOperationStatus) IsTerminal added in v0.1.4

func (s *MachineOperationStatus) IsTerminal() bool

IsTerminal returns true if the operation phase is Complete or Failed.

type MachineOperationTargetInput added in v0.1.23

type MachineOperationTargetInput struct {
	// ProviderRef identifies the exact provider-owned resource referenced by
	// host.external.machineRef when the operation target was initialized.
	// +optional
	ProviderRef *ProviderMachineSnapshot `json:"providerRef,omitempty"`

	// HostImage is the resolved provider-interpreted host image for HostReplace.
	// An empty value instructs the provider to preserve the current image.
	// +optional
	HostImage string `json:"hostImage,omitempty"`

	// ProvisioningFormat is resolved with HostImage from the same configuration
	// version at HostReplace initialization. Retries use this frozen pair rather
	// than reselecting intent from a Machine edited during execution.
	// +optional
	ProvisioningFormat ProvisioningFormat `json:"provisioningFormat,omitempty"`
}

MachineOperationTargetInput is the immutable, controller-resolved input for one MachineOperation target. It is persisted before provider execution so retries do not silently adopt later desired-state changes.

func (*MachineOperationTargetInput) DeepCopy added in v0.1.23

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineOperationTargetInput.

func (*MachineOperationTargetInput) DeepCopyInto added in v0.1.23

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MachineOperationTargetStatus added in v0.1.7

type MachineOperationTargetStatus struct {
	// BootMedia records immutable media ownership and cleanup progress.
	// +optional
	BootMedia *MachineOperationBootMediaStatus `json:"bootMedia,omitempty"`

	// MachineRef is the name of the targeted Machine.
	// +kubebuilder:validation:Required
	MachineRef string `json:"machineRef"`

	// Phase is the current lifecycle phase for this target.
	// +optional
	Phase OperationPhase `json:"phase,omitempty"`

	// Stage is the current operation-specific stage for this target.
	// +optional
	Stage OperationStage `json:"stage,omitempty"`

	// Message is a human-readable description of target progress or failure.
	// +optional
	Message string `json:"message,omitempty"`

	// StartedAt is when execution began for this target.
	// +optional
	StartedAt *metav1.Time `json:"startedAt,omitempty"`

	// CompletedAt is when this target reached a terminal phase.
	// +optional
	CompletedAt *metav1.Time `json:"completedAt,omitempty"`

	// ObservedGeneration is the target Machine generation acted on.
	// +optional
	ObservedGeneration int64 `json:"observedGeneration,omitempty"`

	// BootID is the host kernel boot ID the agent observed before it issued
	// a HostSoftReboot. The agent that starts after the reboot compares it with
	// the current boot ID to decide whether the reboot happened.
	// +optional
	BootID string `json:"bootID,omitempty"`

	// Input is the immutable provider input resolved before execution begins.
	// +optional
	Input *MachineOperationTargetInput `json:"input,omitempty"`

	// Attempts is the number of external action attempts made for this target.
	// Polling expected state changes does not increment this field.
	// +optional
	Attempts int32 `json:"attempts,omitempty"`

	// LastAttemptAt records when the latest external action attempt occurred.
	// +optional
	LastAttemptAt *metav1.Time `json:"lastAttemptAt,omitempty"`

	// ProviderOperation identifies the resumable external operation for this
	// target, when the provider returned one.
	// +optional
	ProviderOperation *ProviderOperationStatus `json:"providerOperation,omitempty"`

	// Conditions represent target-scoped observations for this operation. These
	// conditions are not persisted on the Machine, so BMC capability fallbacks
	// apply only to this MachineOperation target.
	// +optional
	// +listType=map
	// +listMapKey=type
	Conditions []metav1.Condition `json:"conditions,omitempty"`
}

MachineOperationTargetStatus records execution state for one target Machine.

func (MachineOperationTargetStatus) BootMediaBootUnconfirmed added in v0.19.0

func (t MachineOperationTargetStatus) BootMediaBootUnconfirmed() bool

BootMediaBootUnconfirmed reports whether the host may still be running the media installer because it has not reported booting the installed OS.

func (MachineOperationTargetStatus) CloudInitReported added in v0.19.0

func (t MachineOperationTargetStatus) CloudInitReported() bool

CloudInitReported reports whether the installed OS has reported a final cloud-init result. A failure also proves the host left the installer and booted from disk.

func (*MachineOperationTargetStatus) DeepCopy added in v0.1.7

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineOperationTargetStatus.

func (*MachineOperationTargetStatus) DeepCopyInto added in v0.1.7

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (MachineOperationTargetStatus) HasOutstandingBootMedia added in v0.19.0

func (t MachineOperationTargetStatus) HasOutstandingBootMedia() bool

HasOutstandingBootMedia reports whether virtual boot media for this target is still owned, or released before the host confirmed a boot from disk. The host must not be rebooted by anyone else while this holds.

type MachinePhase

type MachinePhase string

MachinePhase represents the current phase of a Machine.

const (
	MachinePhasePending      MachinePhase = "Pending"
	MachinePhaseRebooting    MachinePhase = "Rebooting"
	MachinePhaseProvisioning MachinePhase = "Provisioning"
	MachinePhaseJoining      MachinePhase = "Joining"
	MachinePhaseReady        MachinePhase = "Ready"
	MachinePhaseFailed       MachinePhase = "Failed"
)

type MachineSpec

type MachineSpec struct {
	// SSH contains the SSH connection and credential details for the
	// machine.
	// +optional
	SSH *SSHSpec `json:"ssh,omitempty"`

	// PXE contains legacy PXE boot configuration for the machine. New callers
	// should use Host.Netboot.
	// +optional
	PXE *PXESpec `json:"pxe,omitempty"`

	// Kubernetes contains Kubernetes-specific configuration.
	// +optional
	Kubernetes *KubernetesSpec `json:"kubernetes,omitempty"`

	// Agent contains settings for the unbounded node agent.
	// +optional
	Agent *AgentSpec `json:"agent,omitempty"`

	// Isolation declares where the node stack (containerd, kubelet, CNI and
	// CoreDNS) runs on the host. Empty means no declaration: a new host is
	// provisioned in nspawn, and a repave leaves a running node in the mode it
	// already uses. Setting it does not move a running node: the node changes
	// to this mode at its next repave, which the agent performs when the Node
	// is deleted. The enum lists only the modes this release can run.
	// container is experimental: machina provisions it, and the agent runs
	// it, only when explicitly enabled (see the isolation reference docs).
	// +kubebuilder:validation:Enum="";nspawn;none;container
	// +optional
	Isolation IsolationMode `json:"isolation,omitempty"`

	// Provider identifies the legacy external control provider for this machine.
	// New callers should use Host.External.Provider or Host.Azure.
	// +optional
	// +kubebuilder:validation:MinLength=1
	Provider string `json:"provider,omitempty"`

	// ProviderID identifies the underlying infrastructure resource for this
	// machine, using a Kubernetes-style provider ID such as
	// azure:///subscriptions/.../virtualMachines/name
	//
	// This is a legacy field. New callers should use Host.External.ProviderID,
	// Host.External.MachineRef, or Host.Azure.ResourceID.
	// +optional
	ProviderID string `json:"providerID,omitempty"`

	// Host contains desired host settings and exactly one optional host owner.
	// New Machines should set one of Netboot, Azure, or External. Image alone
	// may be used with deprecated ownership fields during migration.
	// +optional
	Host *HostSpec `json:"host,omitempty"`

	// ConfigurationRef references a MachineConfiguration (and
	// optionally a specific version) that defines the configuration
	// profile for this machine. If a specific version is set, that
	// version is used at provisioning time; otherwise the latest
	// locked version is used and the version field is set by the
	// controller.
	// +optional
	ConfigurationRef *MachineConfigurationRef `json:"configurationRef,omitempty"`

	// AllocationRef identifies the MachineAllocation this Machine was
	// created for. It can be set only when the Machine is created.
	// +optional
	AllocationRef *UIDReference `json:"allocationRef,omitempty"`

	// Fenced forbids the agent from starting this Machine's node again. It
	// can only change from false to true, and requires AllocationRef.
	// +optional
	Fenced bool `json:"fenced,omitempty"`
}

MachineSpec defines the desired state of a Machine. +kubebuilder:validation:XValidation:rule="!has(oldSelf.provider) || (has(self.provider) && self.provider == oldSelf.provider)",message="provider is immutable once set" +kubebuilder:validation:XValidation:rule="!has(self.host) || (!has(self.host.netboot) && !has(self.host.azure) && !has(self.host.external)) || (!has(self.pxe) && !has(self.provider) && !has(self.providerID))",message="host ownership cannot be combined with legacy pxe, provider, or providerID fields" +kubebuilder:validation:XValidation:rule="!has(self.fenced) || !self.fenced || has(self.allocationRef)",message="fenced requires allocationRef" +kubebuilder:validation:XValidation:rule="!has(self.pxe) || !has(self.pxe.network) || !has(self.pxe.network.bonds) || self.pxe.network.bonds.all(b, b.interfaces.all(i, self.pxe.network.ethernets.exists(e, e.name == i)))",message="bond interfaces must reference declared ethernets",fieldPath=".pxe.network.bonds" +kubebuilder:validation:XValidation:rule="!has(self.pxe) || !has(self.pxe.network) || !has(self.pxe.network.vlans) || self.pxe.network.vlans.all(v, self.pxe.network.ethernets.exists(e, e.name == v.link) || (has(self.pxe.network.bonds) && self.pxe.network.bonds.exists(b, b.name == v.link)))",message="vlan link must reference a declared ethernet or bond",fieldPath=".pxe.network.vlans"

func (*MachineSpec) DeepCopy

func (in *MachineSpec) DeepCopy() *MachineSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineSpec.

func (*MachineSpec) DeepCopyInto

func (in *MachineSpec) DeepCopyInto(out *MachineSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*MachineSpec) Netboot added in v0.1.23

func (s *MachineSpec) Netboot() *PXESpec

Netboot returns the canonical network boot configuration, falling back to the released spec.pxe field for existing Machines.

type MachineStatus

type MachineStatus struct {
	// ObservedProvisioningFormat is the agent's explicit installation observation.
	// It does not override desired replacement image settings.
	// +optional
	ObservedProvisioningFormat ProvisioningFormat `json:"observedProvisioningFormat,omitempty"`

	// Isolation is the isolation mode the agent reports as applied on the
	// host. Empty means the agent has not reported one. It is compared with
	// spec.isolation to report drift. Only the agent writes it.
	// +kubebuilder:validation:Enum="";nspawn;none;container
	// +optional
	Isolation IsolationMode `json:"isolation,omitempty"`

	// IsolationChange reports the agent's latest attempt to move the node to
	// the mode in spec.isolation during a repave. Only the agent writes it.
	// +optional
	IsolationChange *IsolationChangeStatus `json:"isolationChange,omitempty"`
	// Phase is the current phase of the machine. Intended for human
	// consumption; follows the state machine rather than driving it.
	Phase MachinePhase `json:"phase,omitempty"`

	// Message provides additional status information.
	Message string `json:"message,omitempty"`

	// SSH holds observed SSH state.
	// +optional
	SSH *SSHStatus `json:"ssh,omitempty"`

	// Redfish holds observed Redfish state.
	// +optional
	Redfish *RedfishStatus `json:"redfish,omitempty"`

	// TPM holds observed TPM state.
	// +optional
	TPM *TPMStatus `json:"tpm,omitempty"`

	// Bootstrap records the bootstrap credential most recently issued to
	// this Machine by TPM attestation.
	// +optional
	Bootstrap *BootstrapStatus `json:"bootstrap,omitempty"`

	// Agent holds the applied agent settings.
	// +optional
	Agent *AgentStatus `json:"agent,omitempty"`

	// Configuration records the MachineConfigurationVersion that was
	// applied to this machine during the most recent provisioning.
	// +optional
	Configuration *MachineConfigurationRefStatus `json:"configuration,omitempty"`

	// Conditions represent the latest available observations of the
	// machine's state.
	Conditions []metav1.Condition `json:"conditions,omitempty"`
}

MachineStatus defines the observed state of a Machine.

func (*MachineStatus) DeepCopy

func (in *MachineStatus) DeepCopy() *MachineStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineStatus.

func (*MachineStatus) DeepCopyInto

func (in *MachineStatus) DeepCopyInto(out *MachineStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MetalmanComponentSpec added in v0.1.23

type MetalmanComponentSpec struct {
	SiteComponentSpec `json:",inline"`

	// DHCPAutoInterface lets Metalman choose the DHCP interface automatically.
	// +optional
	DHCPAutoInterface *bool `json:"dhcpAutoInterface,omitempty"`

	// Replicas is the desired number of Metalman replicas. Defaults to 1 when
	// omitted.
	// +kubebuilder:validation:Minimum=0
	// +optional
	Replicas *int32 `json:"replicas,omitempty"`
}

MetalmanComponentSpec configures Metalman for a site.

func (*MetalmanComponentSpec) DeepCopy added in v0.1.23

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetalmanComponentSpec.

func (*MetalmanComponentSpec) DeepCopyInto added in v0.1.23

func (in *MetalmanComponentSpec) DeepCopyInto(out *MetalmanComponentSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type NamespacedObjectReference added in v0.23.0

type NamespacedObjectReference struct {
	// Namespace is the referenced object namespace.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Namespace string `json:"namespace"`

	// Name is the referenced object name.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Name string `json:"name"`
}

NamespacedObjectReference identifies a namespaced object.

func (*NamespacedObjectReference) DeepCopy added in v0.23.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamespacedObjectReference.

func (*NamespacedObjectReference) DeepCopyInto added in v0.23.0

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type NamespacedSecretReference added in v0.1.8

type NamespacedSecretReference struct {
	// Name of the secret.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Name string `json:"name"`

	// Namespace of the secret.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Namespace string `json:"namespace"`
}

NamespacedSecretReference contains enough information to locate a Secret.

func (*NamespacedSecretReference) DeepCopy added in v0.1.8

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamespacedSecretReference.

func (*NamespacedSecretReference) DeepCopyInto added in v0.1.8

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ObjectContentSnapshot added in v0.23.0

type ObjectContentSnapshot struct {
	// Namespace is the object namespace.
	// +kubebuilder:validation:Required
	Namespace string `json:"namespace"`

	// Name is the object name.
	// +kubebuilder:validation:Required
	Name string `json:"name"`

	// UID detects deletion and recreation of the object.
	// +kubebuilder:validation:Required
	UID types.UID `json:"uid"`

	// Hash is the SHA-256 of the object content.
	// +kubebuilder:validation:Required
	Hash string `json:"hash"`
}

ObjectContentSnapshot identifies the exact content of an object.

func (*ObjectContentSnapshot) DeepCopy added in v0.23.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObjectContentSnapshot.

func (*ObjectContentSnapshot) DeepCopyInto added in v0.23.0

func (in *ObjectContentSnapshot) DeepCopyInto(out *ObjectContentSnapshot)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type OfferingAvailability added in v0.23.0

type OfferingAvailability string

OfferingAvailability is the observed availability of an offering. +kubebuilder:validation:Enum=Available;Unavailable;Unknown

const (
	// OfferingAvailable means the provider reported the offering as usable.
	OfferingAvailable OfferingAvailability = "Available"

	// OfferingUnavailable means the provider reported the offering as unusable.
	OfferingUnavailable OfferingAvailability = "Unavailable"

	// OfferingAvailabilityUnknown means availability could not be observed.
	OfferingAvailabilityUnknown OfferingAvailability = "Unknown"
)

type OfferingOverhead added in v0.23.0

type OfferingOverhead struct {
	// KubeReserved is reserved for Kubernetes node components.
	// +optional
	KubeReserved corev1.ResourceList `json:"kubeReserved,omitempty"`

	// SystemReserved is reserved for operating system daemons.
	// +optional
	SystemReserved corev1.ResourceList `json:"systemReserved,omitempty"`

	// EvictionThreshold is the hard eviction threshold.
	// +optional
	EvictionThreshold corev1.ResourceList `json:"evictionThreshold,omitempty"`
}

OfferingOverhead is the capacity unavailable to workloads.

func (*OfferingOverhead) DeepCopy added in v0.23.0

func (in *OfferingOverhead) DeepCopy() *OfferingOverhead

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OfferingOverhead.

func (*OfferingOverhead) DeepCopyInto added in v0.23.0

func (in *OfferingOverhead) DeepCopyInto(out *OfferingOverhead)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type OfferingPrice added in v0.23.0

type OfferingPrice struct {
	// Currency is the ISO 4217 currency code.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:Pattern=`^[A-Z]{3}$`
	Currency string `json:"currency"`

	// PerHour is the decimal price per instance hour.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:Pattern=`^[0-9]+(\.[0-9]+)?$`
	PerHour string `json:"perHour"`

	// Source documents where the price came from and what it includes.
	// +optional
	Source string `json:"source,omitempty"`

	// ObservedAt is when the price was observed.
	// +optional
	ObservedAt *metav1.Time `json:"observedAt,omitempty"`
}

OfferingPrice is a normalized price for an offering.

func (*OfferingPrice) DeepCopy added in v0.23.0

func (in *OfferingPrice) DeepCopy() *OfferingPrice

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OfferingPrice.

func (*OfferingPrice) DeepCopyInto added in v0.23.0

func (in *OfferingPrice) DeepCopyInto(out *OfferingPrice)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type OperationKind added in v0.1.4

type OperationKind string

OperationKind identifies the kind of operation to perform. Predefined operations cover common lifecycle actions; custom operations may be supported by individual cloud controllers. +kubebuilder:validation:Enum=NodeReboot;AgentUpgrade;AgentReset;HostHardReboot;HostSoftReboot;HostPowerOff;HostPowerOn;HostReplace;HostAllocate;HostRelease

const (
	// OperationNodeReboot restarts the node stack in place without
	// reprovisioning. Services are stopped, the node stack (nspawn machine,
	// container or host units, depending on the isolation mode) is
	// restarted, and services are brought back up. Handled by the agent.
	OperationNodeReboot OperationKind = "NodeReboot"

	// OperationAgentUpgrade upgrades the host-side unbounded-agent binary.
	// Handled by the in-VM agent.
	OperationAgentUpgrade OperationKind = "AgentUpgrade"

	// OperationAgentReset resets the host by removing the unbounded-agent and
	// all associated resources. Handled by the in-VM agent.
	OperationAgentReset OperationKind = "AgentReset"

	// OperationHostHardReboot triggers a full hardware power cycle of the host
	// via BMC (e.g. Redfish). Handled by the machina controller or cloud
	// controller.
	OperationHostHardReboot OperationKind = "HostHardReboot"

	// OperationHostSoftReboot reboots the host operating system from inside
	// the host (systemctl reboot). Handled by the in-VM agent, which reports
	// completion after it starts again on a new boot. The agent does not start
	// it while an out-of-band host operation targeting the same Machine is
	// unfinished; out-of-band host operations do not wait for it.
	OperationHostSoftReboot OperationKind = "HostSoftReboot"

	// OperationHostPowerOff powers off the host through an out-of-band provider.
	OperationHostPowerOff OperationKind = "HostPowerOff"

	// OperationHostPowerOn powers on the host through an out-of-band provider.
	OperationHostPowerOn OperationKind = "HostPowerOn"

	// OperationHostReplace replaces the host VM through an out-of-band provider
	// and reinstalls the unbounded-agent so the node can rejoin the cluster.
	OperationHostReplace OperationKind = "HostReplace"

	// OperationHostAllocate launches the host for the MachineAllocation named
	// by spec.allocationRef. The shared machine-ops controller, metalman and
	// the agent do not process it.
	OperationHostAllocate OperationKind = "HostAllocate"

	// OperationHostRelease releases the host for the MachineAllocation named
	// by spec.allocationRef and the provider resources the allocation owns.
	// The shared machine-ops controller, metalman and the agent do not
	// process it.
	OperationHostRelease OperationKind = "HostRelease"
)

func (OperationKind) IsAllocationOperation added in v0.23.0

func (k OperationKind) IsAllocationOperation() bool

IsAllocationOperation reports whether k acts on a MachineAllocation rather than on an existing host. It is true only for HostAllocate and HostRelease.

type OperationPhase added in v0.1.4

type OperationPhase string

OperationPhase represents the current phase of a MachineOperation.

const (
	OperationPhasePending    OperationPhase = "Pending"
	OperationPhaseInProgress OperationPhase = "InProgress"
	OperationPhaseComplete   OperationPhase = "Complete"
	OperationPhaseFailed     OperationPhase = "Failed"
)

type OperationStage added in v0.1.7

type OperationStage string

OperationStage represents the current stage of a target operation.

const (
	OperationStagePoweringOff      OperationStage = "PoweringOff"
	OperationStageWaitingOff       OperationStage = "WaitingOff"
	OperationStagePoweringOn       OperationStage = "PoweringOn"
	OperationStageWaitingOn        OperationStage = "WaitingOn"
	OperationStageRepaveRequested  OperationStage = "RepaveRequested"
	OperationStageWaitingRepave    OperationStage = "WaitingRepave"
	OperationStageWaitingCloudInit OperationStage = "WaitingCloudInit"
	OperationStageWaitingNode      OperationStage = "WaitingNode"
	OperationStageWaitingProvider  OperationStage = "WaitingProviderOperation"
)

type OverriddenWorkload added in v0.3.0

type OverriddenWorkload struct {
	// Kind and Name identify the workload. Name alone is not unique, because a
	// Deployment and a DaemonSet may share one.
	Kind string `json:"kind"`
	Name string `json:"name"`

	// DesiredHash is computed by the operator from the observed ConfigMap.
	// AppliedHash is what the workload actually carries. They match when the
	// override is in effect and differ when it could not be applied.
	// +optional
	DesiredHash string `json:"desiredHash,omitempty"`
	// +optional
	AppliedHash string `json:"appliedHash,omitempty"`

	// VersionDrift is set when an override changed a container image, formatted
	// as `<container>=<image>`. Such a component is no longer version-matched to
	// the operator, and the pin survives operator upgrades, which makes it the
	// likeliest cause of an install behaving unlike its reported version.
	// +optional
	VersionDrift string `json:"versionDrift,omitempty"`

	// State is what happened to this workload's override in the last pass: one
	// of Applied, Pending, Withheld or Failed.
	//
	// The hashes alone cannot express it. A workload the operator declined to
	// write has no applied hash, and neither does one whose write was deferred
	// for a second, and neither does one whose merge failed; reading an empty
	// applied hash as "not applied" reported all three identically, and a
	// withheld workload appeared in status not at all.
	//
	// It may be empty when the operator that wrote this status predates the
	// field, or when a CRD older than the operator pruned it. Consumers should
	// fall back to comparing the hashes.
	// +optional
	State string `json:"state,omitempty"`
}

OverriddenWorkload reports the override state of one workload.

func (*OverriddenWorkload) DeepCopy added in v0.3.0

func (in *OverriddenWorkload) DeepCopy() *OverriddenWorkload

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OverriddenWorkload.

func (*OverriddenWorkload) DeepCopyInto added in v0.3.0

func (in *OverriddenWorkload) DeepCopyInto(out *OverriddenWorkload)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type OverrideStatus added in v0.3.0

type OverrideStatus struct {
	// Phase is the aggregate state of override processing for this Site: one of
	// None, Applied or Degraded.
	//
	// Applied means every resolved workload carries the hash that was desired.
	// It reports that the override merged and was written, not that the
	// resulting pods are healthy.
	Phase string `json:"phase"`

	// ObservedResourceVersion is the resourceVersion of the overrides ConfigMap
	// this status was computed from, so a result is traceable to a specific
	// input version. Empty when no overrides ConfigMap exists.
	// +optional
	ObservedResourceVersion string `json:"observedResourceVersion,omitempty"`

	// Workloads carries the desired and applied hash for each overridden
	// workload.
	//
	// Both are per workload because contributors differ per workload: a
	// Site-wide desired hash would not be comparable to any of them whenever a
	// document targets more than one.
	// +optional
	// +listType=map
	// +listMapKey=kind
	// +listMapKey=name
	Workloads []OverriddenWorkload `json:"workloads,omitempty"`

	// Message explains a Degraded phase, naming the ConfigMap key and entry
	// index at fault. Empty otherwise.
	// +optional
	Message string `json:"message,omitempty"`
}

OverrideStatus summarizes user-supplied workload overrides for one Site.

Overrides live in a cluster-scoped ConfigMap and one document routinely targets several components, so this is aggregated per Site rather than per component; component-level detail stays in Conditions.

func (*OverrideStatus) DeepCopy added in v0.3.0

func (in *OverrideStatus) DeepCopy() *OverrideStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OverrideStatus.

func (*OverrideStatus) DeepCopyInto added in v0.3.0

func (in *OverrideStatus) DeepCopyInto(out *OverrideStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type PXESpec

type PXESpec struct {
	// Image is an OCI image reference containing the machine disk image.
	// The image must contain /disk/disk.img.gz.
	// VirtualMedia requires a digest reference (image@sha256:...).
	// Example: "ghcr.io/azure/host-ubuntu2404:v1"
	// +kubebuilder:validation:Required
	Image string `json:"image"`

	// PullSecretRef references a Docker registry credential Secret used to pull
	// Image. The Secret must be type kubernetes.io/dockerconfigjson or
	// kubernetes.io/dockercfg.
	// +optional
	PullSecretRef *NamespacedSecretReference `json:"pullSecretRef,omitempty"`

	// Architecture is the target CPU architecture for PXE boot artifacts and
	// machine images.
	// +kubebuilder:validation:Enum=amd64;arm64
	// +kubebuilder:default=amd64
	// +optional
	Architecture string `json:"architecture,omitempty"`

	// NetbootImage is an OCI image reference containing the PXE boot
	// artifacts used to install Image. When omitted, metalman uses the
	// default netboot image that corresponds to its release.
	// VirtualMedia requires this field to be set to a digest reference
	// (image@sha256:...).
	// +optional
	NetbootImage string `json:"netbootImage,omitempty"`

	// NetbootPullSecretRef references a Docker registry credential Secret used to
	// pull NetbootImage. It is ignored when NetbootImage is omitted; metalman's
	// configured default netboot pull secret is used for the default netboot image.
	// The Secret must be type kubernetes.io/dockerconfigjson or
	// kubernetes.io/dockercfg.
	// +optional
	NetbootPullSecretRef *NamespacedSecretReference `json:"netbootPullSecretRef,omitempty"`

	// BootProtocol selects how metalman should trigger network boot for
	// repaves. PXE uses DHCP/TFTP bootfile options. HTTP uses Redfish UEFI
	// HTTP boot with a URL derived from the netboot image metadata.
	// VirtualMedia mounts an operation-owned bootstrap ISO through Redfish.
	// It requires redfish, a digest Image, and a digest NetbootImage.
	// +kubebuilder:validation:Enum=PXE;HTTP;VirtualMedia
	// +kubebuilder:default=PXE
	// +optional
	BootProtocol string `json:"bootProtocol,omitempty"`

	// DHCPLeases defines static IPv4 provisioning network settings. PXE boot
	// uses them as DHCP leases. HTTP boot uses the first entry to configure the
	// Redfish UEFI HTTP boot client.
	// +optional
	DHCPLeases []DHCPLease `json:"dhcpLeases,omitempty"`

	// TargetDisk is the block device the installer writes the machine image to.
	// Examples: /dev/nvme0n1, /dev/sda, /dev/disk/by-id/...
	// When omitted, the installer chooses a target disk automatically.
	// +optional
	TargetDisk string `json:"targetDisk,omitempty"`

	// Redfish configures optional Redfish BMC access.
	// +optional
	Redfish *RedfishSpec `json:"redfish,omitempty"`

	// CloudInit contains optional cloud-init customization for PXE-booted
	// machines.
	// +optional
	CloudInit *CloudInitSpec `json:"cloudInit,omitempty"`

	// Network declares the host's static network topology: physical
	// ethernets identified by MAC address, bonds, and VLANs. The installer
	// brings it up before fetching install instructions and persists it as
	// netplan or systemd-networkd configuration on the installed host.
	// It requires the VirtualMedia boot protocol: metalman then boots the
	// installer from the bootstrap ISO without network access, so links that
	// only pass traffic once LACP negotiates (no switch fallback) still work.
	// The first DHCPLeases entry remains the provisioning identity: its IPv4
	// address and gateway must be configured on exactly one declared
	// interface, and its MAC must be one of the declared ethernets.
	// When omitted, metalman keeps the single-NIC behavior driven by
	// DHCPLeases.
	// +optional
	Network *HostNetworkSpec `json:"network,omitempty"`
}

PXESpec defines PXE boot configuration for a Machine. +kubebuilder:validation:XValidation:rule="!has(self.bootProtocol) || self.bootProtocol != 'VirtualMedia' || has(self.redfish)",message="VirtualMedia requires redfish" +kubebuilder:validation:XValidation:rule="!has(self.network) || (has(self.bootProtocol) && self.bootProtocol == 'VirtualMedia')",message="network requires bootProtocol VirtualMedia" +kubebuilder:validation:XValidation:rule="!has(self.network) || (has(self.dhcpLeases) && size(self.dhcpLeases) > 0)",message="network requires a dhcpLeases entry for the provisioning address" +kubebuilder:validation:XValidation:rule="!has(self.network) || !has(self.dhcpLeases) || size(self.dhcpLeases) == 0 || !has(self.dhcpLeases[0].holdLease) || !self.dhcpLeases[0].holdLease",message="network does not support dhcpLeases[0].holdLease",fieldPath=".dhcpLeases"

func (*PXESpec) DeepCopy

func (in *PXESpec) DeepCopy() *PXESpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PXESpec.

func (*PXESpec) DeepCopyInto

func (in *PXESpec) DeepCopyInto(out *PXESpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*PXESpec) TargetArchitecture added in v0.1.20

func (p *PXESpec) TargetArchitecture() string

TargetArchitecture returns the effective PXE target architecture.

func (*PXESpec) TargetBootProtocol added in v0.1.20

func (p *PXESpec) TargetBootProtocol() string

TargetBootProtocol returns the effective network boot protocol.

type ProviderMachineReference added in v0.1.23

type ProviderMachineReference struct {
	// APIGroup is the API group of the provider-owned Machine resource.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	APIGroup string `json:"apiGroup"`

	// Kind is the kind of the provider-owned Machine resource.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Kind string `json:"kind"`

	// Name is the name of the cluster-scoped provider-owned Machine resource.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Name string `json:"name"`
}

ProviderMachineReference identifies a cluster-scoped provider-owned Machine resource used by an external host provider. API version is intentionally omitted so providers can evolve served versions without rewriting Machines.

func (*ProviderMachineReference) DeepCopy added in v0.1.23

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderMachineReference.

func (*ProviderMachineReference) DeepCopyInto added in v0.1.23

func (in *ProviderMachineReference) DeepCopyInto(out *ProviderMachineReference)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ProviderMachineSnapshot added in v0.1.23

type ProviderMachineSnapshot struct {
	// APIGroup is the API group of the provider-owned Machine resource.
	// +kubebuilder:validation:Required
	APIGroup string `json:"apiGroup"`

	// Kind is the kind of the provider-owned Machine resource.
	// +kubebuilder:validation:Required
	Kind string `json:"kind"`

	// Name is the name of the provider-owned Machine resource.
	// +kubebuilder:validation:Required
	Name string `json:"name"`

	// UID detects deletion and recreation of the provider-owned resource.
	// +kubebuilder:validation:Required
	UID types.UID `json:"uid"`

	// Generation records the provider-owned resource generation whose inputs
	// were observed.
	// +kubebuilder:validation:Minimum=1
	Generation int64 `json:"generation"`
}

ProviderMachineSnapshot identifies the exact provider-owned resource observed when a MachineOperation target was initialized.

func (*ProviderMachineSnapshot) DeepCopy added in v0.1.23

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderMachineSnapshot.

func (*ProviderMachineSnapshot) DeepCopyInto added in v0.1.23

func (in *ProviderMachineSnapshot) DeepCopyInto(out *ProviderMachineSnapshot)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ProviderOperationStatus added in v0.1.23

type ProviderOperationStatus struct {
	// Provider is the external provider that accepted the operation.
	// +kubebuilder:validation:Required
	Provider string `json:"provider"`

	// OperationID is the provider-assigned operation identifier.
	// +kubebuilder:validation:Required
	OperationID string `json:"operationID"`

	// ResumeToken is opaque provider data needed to resume polling. Providers
	// must not store credentials or other secrets in this field.
	// +optional
	ResumeToken string `json:"resumeToken,omitempty"`
}

ProviderOperationStatus identifies a resumable operation owned by an external provider.

func (*ProviderOperationStatus) DeepCopy added in v0.1.23

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderOperationStatus.

func (*ProviderOperationStatus) DeepCopyInto added in v0.1.23

func (in *ProviderOperationStatus) DeepCopyInto(out *ProviderOperationStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ProviderOwnedResource added in v0.23.0

type ProviderOwnedResource struct {
	// ID is the provider resource identifier.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	ID string `json:"id"`

	// NativeID is the provider-assigned instance identity. A resource
	// recreated under the same ID has a different NativeID.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	NativeID string `json:"nativeID"`
}

ProviderOwnedResource is a provider resource owned by one allocation.

func (*ProviderOwnedResource) DeepCopy added in v0.23.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderOwnedResource.

func (*ProviderOwnedResource) DeepCopyInto added in v0.23.0

func (in *ProviderOwnedResource) DeepCopyInto(out *ProviderOwnedResource)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ProvisioningFormat added in v0.9.0

type ProvisioningFormat string

ProvisioningFormat identifies the first-boot payload a host image consumes. +kubebuilder:validation:Enum=CloudInit;Ignition

const (
	ProvisioningFormatCloudInit ProvisioningFormat = "CloudInit"
	ProvisioningFormatIgnition  ProvisioningFormat = "Ignition"
)

type RedfishPasswordSelector added in v0.19.0

type RedfishPasswordSelector struct {
	// Name of the secret.
	Name string `json:"name"`

	// Namespace of the secret.
	Namespace string `json:"namespace"`

	// Key within the secret. Defaults to "password".
	// +kubebuilder:default=password
	Key string `json:"key,omitempty"`
}

RedfishPasswordSelector selects the key of a Secret that holds a Redfish password. It differs from SecretKeySelector only in its key default.

func (*RedfishPasswordSelector) DeepCopy added in v0.19.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedfishPasswordSelector.

func (*RedfishPasswordSelector) DeepCopyInto added in v0.19.0

func (in *RedfishPasswordSelector) DeepCopyInto(out *RedfishPasswordSelector)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (RedfishPasswordSelector) KeyOrDefault added in v0.19.0

func (s RedfishPasswordSelector) KeyOrDefault() string

KeyOrDefault returns Key, or DefaultRedfishPasswordKey when Key is empty. The API server applies the default on admission, but objects built in Go without going through it can still carry an empty key.

type RedfishSpec

type RedfishSpec struct {
	// URL is the Redfish endpoint URL. It may include a per-system path prefix,
	// for example https://manager:8080/7. Do not include /redfish/v1.
	// +kubebuilder:validation:Required
	URL string `json:"url"`

	// Username is the Redfish username.
	// +kubebuilder:validation:Required
	Username string `json:"username"`

	// DeviceID is the Redfish system device ID. Defaults to "1".
	// It is ignored when the endpoint exposes a single system selected by its URL.
	// +kubebuilder:default="1"
	DeviceID string `json:"deviceID,omitempty"`

	// PasswordRef references a secret containing the Redfish password. Its key
	// defaults to "password".
	// +kubebuilder:validation:Required
	PasswordRef RedfishPasswordSelector `json:"passwordRef"`
}

RedfishSpec defines Redfish BMC connection details.

func (*RedfishSpec) DeepCopy

func (in *RedfishSpec) DeepCopy() *RedfishSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedfishSpec.

func (*RedfishSpec) DeepCopyInto

func (in *RedfishSpec) DeepCopyInto(out *RedfishSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type RedfishStatus

type RedfishStatus struct {
	// CertFingerprint is the TLS certificate fingerprint for the
	// Redfish endpoint, pinned on first connection.
	CertFingerprint string `json:"certFingerprint,omitempty"`
}

RedfishStatus holds observed Redfish state.

func (*RedfishStatus) DeepCopy

func (in *RedfishStatus) DeepCopy() *RedfishStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedfishStatus.

func (*RedfishStatus) DeepCopyInto

func (in *RedfishStatus) DeepCopyInto(out *RedfishStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type RequirementOperator added in v0.23.0

type RequirementOperator string

RequirementOperator is a label requirement operator. +kubebuilder:validation:Enum=In;NotIn;Exists;DoesNotExist;Gt;Lt

const (
	// RequirementOpIn requires the label value to be one of the values.
	RequirementOpIn RequirementOperator = "In"

	// RequirementOpNotIn requires the label value to be none of the values.
	RequirementOpNotIn RequirementOperator = "NotIn"

	// RequirementOpExists requires the label to be present.
	RequirementOpExists RequirementOperator = "Exists"

	// RequirementOpDoesNotExist requires the label to be absent.
	RequirementOpDoesNotExist RequirementOperator = "DoesNotExist"

	// RequirementOpGt requires the label value, as an integer, to be greater
	// than the single value.
	RequirementOpGt RequirementOperator = "Gt"

	// RequirementOpLt requires the label value, as an integer, to be less than
	// the single value.
	RequirementOpLt RequirementOperator = "Lt"
)

type RouteSpec added in v0.24.0

type RouteSpec struct {
	// To is the destination prefix in CIDR notation, for example
	// 198.51.100.0/24.
	// +kubebuilder:validation:MaxLength=18
	To string `json:"to"`

	// Via is the IPv4 next-hop address.
	// +kubebuilder:validation:MaxLength=15
	Via string `json:"via"`
}

RouteSpec declares a static IPv4 route.

func (*RouteSpec) DeepCopy added in v0.24.0

func (in *RouteSpec) DeepCopy() *RouteSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RouteSpec.

func (*RouteSpec) DeepCopyInto added in v0.24.0

func (in *RouteSpec) DeepCopyInto(out *RouteSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type SSHSpec

type SSHSpec struct {
	// Host is the hostname or IP address of the machine, optionally
	// including the port (e.g. "1.2.3.4:2222"). When the port is
	// omitted, 22 is assumed.
	// +kubebuilder:validation:Required
	Host string `json:"host"`

	// Username is the SSH username.
	// +kubebuilder:default=azureuser
	Username string `json:"username,omitempty"`

	// PrivateKeyRef references a secret containing the SSH private key.
	// +kubebuilder:validation:Required
	PrivateKeyRef SecretKeySelector `json:"privateKeyRef"`

	// Bastion configures an optional SSH jump host (bastion) for proxy
	// connections. Its structure is identical to SSHSpec minus the
	// bastion field itself.
	// +optional
	Bastion *BastionSSHSpec `json:"bastion,omitempty"`
}

SSHSpec defines SSH connection details. The same structure is reused for both the target machine and the optional bastion host.

func (*SSHSpec) DeepCopy

func (in *SSHSpec) DeepCopy() *SSHSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SSHSpec.

func (*SSHSpec) DeepCopyInto

func (in *SSHSpec) DeepCopyInto(out *SSHSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type SSHStatus

type SSHStatus struct {
	// Fingerprint is the SSH host key fingerprint discovered on
	// first connection. Subsequent connections must match this value.
	Fingerprint string `json:"fingerprint,omitempty"`
}

SSHStatus holds observed SSH state.

func (*SSHStatus) DeepCopy

func (in *SSHStatus) DeepCopy() *SSHStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SSHStatus.

func (*SSHStatus) DeepCopyInto

func (in *SSHStatus) DeepCopyInto(out *SSHStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type SecretKeySelector

type SecretKeySelector struct {
	// Name of the secret.
	Name string `json:"name"`

	// Namespace of the secret.
	Namespace string `json:"namespace"`

	// Key within the secret.
	// +kubebuilder:default=ssh-privatekey
	Key string `json:"key,omitempty"`
}

SecretKeySelector selects a key from a Secret.

func (*SecretKeySelector) DeepCopy

func (in *SecretKeySelector) DeepCopy() *SecretKeySelector

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretKeySelector.

func (*SecretKeySelector) DeepCopyInto

func (in *SecretKeySelector) DeepCopyInto(out *SecretKeySelector)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type Site added in v0.1.23

type Site struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`

	Spec   SiteSpec   `json:"spec,omitempty"`
	Status SiteStatus `json:"status,omitempty"`
}

Site defines a top-level Unbounded location and the optional components enabled for that location.

func (*Site) DeepCopy added in v0.1.23

func (in *Site) DeepCopy() *Site

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Site.

func (*Site) DeepCopyInto added in v0.1.23

func (in *Site) DeepCopyInto(out *Site)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*Site) DeepCopyObject added in v0.1.23

func (in *Site) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type SiteComponentSpec added in v0.1.23

type SiteComponentSpec struct {
	// Enabled controls whether the component is reconciled.
	// +optional
	Enabled *bool `json:"enabled,omitempty"`
}

SiteComponentSpec contains common component configuration. Components install into the unbounded-system namespace at the operator's own version, so neither namespace nor image is configurable here.

The generated Deployments and DaemonSets can be customized through workload overrides, a cluster-scoped ConfigMap the operator reads. That surface is deliberately separate from this one: it is cluster-scoped because the net, machina and gantry singletons are shared across Sites, and write access to it is equivalent to cluster-admin. See docs/content/reference/workload-overrides.md.

func (*SiteComponentSpec) DeepCopy added in v0.1.23

func (in *SiteComponentSpec) DeepCopy() *SiteComponentSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SiteComponentSpec.

func (*SiteComponentSpec) DeepCopyInto added in v0.1.23

func (in *SiteComponentSpec) DeepCopyInto(out *SiteComponentSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type SiteComponents added in v0.1.23

type SiteComponents struct {
	// Machina is a deprecated compatibility setting and is ignored.
	// Machina is required and cannot be disabled.
	// +optional
	Machina *MachinaComponentSpec `json:"machina,omitempty"`

	// Metalman configures the Metalman PXE controller for this site.
	// +optional
	Metalman *MetalmanComponentSpec `json:"metalman,omitempty"`

	// Gantry configures the gantry peer-to-peer OCI distribution agent for this
	// site. Gantry defaults to enabled; set
	// gantry.enabled to false to opt a site out. The apiserver defaults an
	// omitted gantry block to enabled=true so the intent is explicit on read
	// (for example the Gantry print column) whenever a components block is
	// present. A site that omits the components block entirely is not defaulted.
	// +optional
	// +kubebuilder:default={enabled: true}
	Gantry *GantryComponentSpec `json:"gantry,omitempty"`

	// TokenRefresher maintains bootstrap tokens for machines joining this Site.
	// It defaults to enabled and is ignored for the reserved cluster Site.
	// +optional
	// +kubebuilder:default={enabled: true}
	TokenRefresher *TokenRefresherComponentSpec `json:"tokenRefresher,omitempty"`
}

SiteComponents declares optional components managed by the unbounded operator. Networking (unbounded-net) and machina are required cluster singletons the operator deploys whenever at least one Site exists.

Each field corresponds to a component reconciler registered with the operator. To add a new component, add a typed field here and implement component.ClusterComponent or component.SiteComponent in a package under internal/operator/components, then register it in operator.DefaultRegistry.

func (*SiteComponents) DeepCopy added in v0.1.23

func (in *SiteComponents) DeepCopy() *SiteComponents

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SiteComponents.

func (*SiteComponents) DeepCopyInto added in v0.1.23

func (in *SiteComponents) DeepCopyInto(out *SiteComponents)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type SiteList added in v0.1.23

type SiteList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []Site `json:"items"`
}

SiteList contains a list of Site.

func (*SiteList) DeepCopy added in v0.1.23

func (in *SiteList) DeepCopy() *SiteList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SiteList.

func (*SiteList) DeepCopyInto added in v0.1.23

func (in *SiteList) DeepCopyInto(out *SiteList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*SiteList) DeepCopyObject added in v0.1.23

func (in *SiteList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type SiteSpec added in v0.1.23

type SiteSpec struct {
	// NodeCidrs are the CIDRs that contain the internal IPs of nodes at this site.
	// +kubebuilder:validation:MinItems=1
	NodeCidrs []string `json:"nodeCidrs"`

	// PodCidrAssignments define how pod CIDRs are allocated to nodes in this site.
	// +kubebuilder:validation:MinItems=1
	PodCidrAssignments []unboundednetv1alpha1.PodCidrAssignment `json:"podCidrAssignments"`

	// ManageCniPlugin controls whether the node agent writes CNI configuration
	// and creates tunnel endpoints for same-site nodes. When true (the default),
	// CNI config is written and all same-site nodes are tunnel peers.
	// When false, only tunnel links to gateway pools for other sites are created,
	// allowing an external CNI plugin to manage intra-site networking.
	// Omitted assignmentEnabled values on podCidrAssignments default to this
	// setting. Explicit assignmentEnabled values override that default.
	// The podCidrAssignments are still required to define the CIDR ranges
	// used for inter-site routing, even when assignment is disabled.
	// +optional
	ManageCniPlugin *bool `json:"manageCniPlugin,omitempty"`

	// NonMasqueradeCIDRs are CIDR blocks that should NOT be masqueraded when
	// traffic leaves the node via the default gateway. Traffic to these CIDRs
	// will use the pod's actual IP address.
	// +optional
	NonMasqueradeCIDRs []string `json:"nonMasqueradeCIDRs,omitempty"`

	// LocalCIDRs are CIDR blocks that are considered local to this site.
	// Traffic to these CIDRs should never be routed via gateway pools.
	// +optional
	LocalCIDRs []string `json:"localCidrs,omitempty"`

	// HealthCheckSettings controls health check settings for inter-site tunnel peers.
	// +optional
	HealthCheckSettings *unboundednetv1alpha1.HealthCheckSettings `json:"healthCheckSettings,omitempty"`

	// TunnelProtocol selects the tunnel protocol for this site.
	// Valid values are "WireGuard", "IPIP", "GENEVE", "VXLAN", "None", or "Auto".
	// Defaults to "Auto" when unset.
	// +kubebuilder:validation:Enum=WireGuard;IPIP;GENEVE;VXLAN;None;Auto
	// +optional
	TunnelProtocol *unboundednetv1alpha1.TunnelProtocol `json:"tunnelProtocol,omitempty"`

	// TunnelMTU is the MTU to set on routes through tunnels for this site.
	// +kubebuilder:validation:Minimum=576
	// +kubebuilder:validation:Maximum=9000
	// +optional
	TunnelMTU *int32 `json:"tunnelMTU,omitempty"`

	// Components declares optional Unbounded components managed for this site.
	// +optional
	Components SiteComponents `json:"components,omitempty"`
}

SiteSpec defines the desired state of Site.

func (*SiteSpec) DeepCopy added in v0.1.23

func (in *SiteSpec) DeepCopy() *SiteSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SiteSpec.

func (*SiteSpec) DeepCopyInto added in v0.1.23

func (in *SiteSpec) DeepCopyInto(out *SiteSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (SiteSpec) PodCIDRAssignmentEnabled added in v0.17.0

func (s SiteSpec) PodCIDRAssignmentEnabled(assignment unboundednetv1alpha1.PodCidrAssignment) bool

PodCIDRAssignmentEnabled resolves an assignment's explicit setting or the site's CNI management default without persisting an inherited value.

type SiteStatus added in v0.1.23

type SiteStatus struct {
	// NodeCount is the number of nodes matched to this site by unbounded-net.
	// +optional
	NodeCount int `json:"nodeCount,omitempty"`

	// SliceCount is the number of SiteNodeSlice objects for this site.
	// +optional
	SliceCount int `json:"sliceCount,omitempty"`

	// Conditions report the last observed state of site components. One
	// condition is published per component (for example NetReady, MachinaReady,
	// MetalmanReady) so callers can `kubectl wait` on a Site.
	// +optional
	// +listType=map
	// +listMapKey=type
	Conditions []metav1.Condition `json:"conditions,omitempty"`

	// Overrides summarizes user-supplied workload overrides affecting this
	// Site. It is absent when no override targets any of the Site's workloads.
	// +optional
	Overrides *OverrideStatus `json:"overrides,omitempty"`
}

SiteStatus defines the observed state of Site.

func (*SiteStatus) DeepCopy added in v0.1.23

func (in *SiteStatus) DeepCopy() *SiteStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SiteStatus.

func (*SiteStatus) DeepCopyInto added in v0.1.23

func (in *SiteStatus) DeepCopyInto(out *SiteStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type TPMStatus

type TPMStatus struct {
	// EKPublicKey is the TPM endorsement key public key, written
	// when the PXE boot image requests a bootstrap token.
	EKPublicKey string `json:"ekPublicKey,omitempty"`
}

TPMStatus holds observed TPM state.

func (*TPMStatus) DeepCopy

func (in *TPMStatus) DeepCopy() *TPMStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TPMStatus.

func (*TPMStatus) DeepCopyInto

func (in *TPMStatus) DeepCopyInto(out *TPMStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type TokenRefresherComponentSpec added in v0.5.0

type TokenRefresherComponentSpec struct {
	SiteComponentSpec `json:",inline"`
}

TokenRefresherComponentSpec configures bootstrap token refresh for a Site.

func (*TokenRefresherComponentSpec) DeepCopy added in v0.5.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TokenRefresherComponentSpec.

func (*TokenRefresherComponentSpec) DeepCopyInto added in v0.5.0

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type TypedObjectReference added in v0.23.0

type TypedObjectReference struct {
	// APIGroup is the API group of the referenced object. An absent or empty
	// value means the core API group.
	// +optional
	APIGroup string `json:"apiGroup,omitempty"`

	// Kind is the kind of the referenced object.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Kind string `json:"kind"`

	// Name is the name of the referenced object.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Name string `json:"name"`

	// Namespace is the namespace of the referenced object. It is absent for
	// cluster-scoped kinds.
	// +optional
	// +kubebuilder:validation:MinLength=1
	Namespace string `json:"namespace,omitempty"`
}

TypedObjectReference identifies an object by API group, kind, name, and optional namespace.

func (*TypedObjectReference) DeepCopy added in v0.23.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TypedObjectReference.

func (*TypedObjectReference) DeepCopyInto added in v0.23.0

func (in *TypedObjectReference) DeepCopyInto(out *TypedObjectReference)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type UIDReference added in v0.23.0

type UIDReference struct {
	// Name is the object name.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Name string `json:"name"`

	// UID is the object UID.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:Type=string
	// +kubebuilder:validation:MinLength=1
	UID types.UID `json:"uid"`
}

UIDReference identifies one object incarnation by name and UID.

func (*UIDReference) DeepCopy added in v0.23.0

func (in *UIDReference) DeepCopy() *UIDReference

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UIDReference.

func (*UIDReference) DeepCopyInto added in v0.23.0

func (in *UIDReference) DeepCopyInto(out *UIDReference)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type VLANSpec added in v0.24.0

type VLANSpec struct {
	// Name is the VLAN interface name, for example bond0.64.
	// +kubebuilder:validation:MaxLength=15
	// +kubebuilder:validation:Pattern=`^[a-zA-Z][a-zA-Z0-9_.-]{0,14}$`
	Name string `json:"name"`

	// ID is the 802.1Q VLAN identifier.
	// +kubebuilder:validation:Minimum=1
	// +kubebuilder:validation:Maximum=4094
	ID int32 `json:"id"`

	// Link is the name of the ethernet or bond carrying the VLAN.
	// +kubebuilder:validation:MaxLength=15
	Link string `json:"link"`

	InterfaceAddressing `json:",inline"`
}

VLANSpec declares an 802.1Q VLAN interface.

func (*VLANSpec) DeepCopy added in v0.24.0

func (in *VLANSpec) DeepCopy() *VLANSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VLANSpec.

func (*VLANSpec) DeepCopyInto added in v0.24.0

func (in *VLANSpec) DeepCopyInto(out *VLANSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL