--- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.12.1 name: baremetalhosts.metal3.io spec: group: metal3.io names: kind: BareMetalHost listKind: BareMetalHostList plural: baremetalhosts shortNames: - bmh - bmhost singular: baremetalhost scope: Namespaced versions: - additionalPrinterColumns: - description: Operational status jsonPath: .status.operationalStatus name: Status priority: 1 type: string - description: Provisioning status jsonPath: .status.provisioning.state name: State type: string - description: Consumer using this host jsonPath: .spec.consumerRef.name name: Consumer type: string - description: Address of management controller jsonPath: .spec.bmc.address name: BMC priority: 1 type: string - description: Whether the host is online or not jsonPath: .spec.online name: Online type: string - description: Type of the most recent error jsonPath: .status.errorType name: Error type: string - description: Time duration since creation of BaremetalHost jsonPath: .metadata.creationTimestamp name: Age type: date name: v1alpha1 schema: openAPIV3Schema: description: BareMetalHost is the Schema for the baremetalhosts API properties: apiVersion: description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object spec: description: BareMetalHostSpec defines the desired state of BareMetalHost. properties: architecture: description: CPU architecture of the host, e.g. "x86_64" or "aarch64". If unset, eventually populated by inspection. type: string automatedCleaningMode: default: metadata description: When set to disabled, automated cleaning will be avoided during provisioning and deprovisioning. enum: - metadata - disabled type: string bmc: description: How do we connect to the BMC? properties: address: description: Address holds the URL for accessing the controller on the network. type: string credentialsName: description: The name of the secret containing the BMC credentials (requires keys "username" and "password"). type: string disableCertificateVerification: description: DisableCertificateVerification disables verification of server certificates when using HTTPS to connect to the BMC. This is required when the server certificate is self-signed, but is insecure because it allows a man-in-the-middle to intercept the connection. type: boolean required: - address - credentialsName type: object bootMACAddress: description: Which MAC address will PXE boot? This is optional for some types, but required for libvirt VMs driven by vbmc. pattern: '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}' type: string bootMode: description: Select the method of initializing the hardware during boot. Defaults to UEFI. enum: - UEFI - UEFISecureBoot - legacy type: string consumerRef: description: ConsumerRef can be used to store information about something that is using a host. When it is not empty, the host is considered "in use". properties: apiVersion: description: API version of the referent. type: string fieldPath: description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' type: string kind: description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string name: description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' type: string namespace: description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' type: string resourceVersion: description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' type: string uid: description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' type: string type: object x-kubernetes-map-type: atomic customDeploy: description: A custom deploy procedure. properties: method: description: Custom deploy method name. This name is specific to the deploy ramdisk used. If you don't have a custom deploy ramdisk, you shouldn't use CustomDeploy. type: string required: - method type: object description: description: Description is a human-entered text used to help identify the host type: string externallyProvisioned: description: ExternallyProvisioned means something else is managing the image running on the host and the operator should only manage the power status and hardware inventory inspection. If the Image field is filled in, this field is ignored. type: boolean firmware: description: BIOS configuration for bare metal server properties: simultaneousMultithreadingEnabled: description: 'Allows a single physical processor core to appear as several logical processors. This supports following options: true, false.' enum: - true - false type: boolean sriovEnabled: description: 'SR-IOV support enables a hypervisor to create virtual instances of a PCI-express device, potentially increasing performance. This supports following options: true, false.' enum: - true - false type: boolean virtualizationEnabled: description: 'Supports the virtualization of platform hardware. This supports following options: true, false.' enum: - true - false type: boolean type: object hardwareProfile: description: What is the name of the hardware profile for this host? Hardware profiles are deprecated and should not be used. Use the separate fields Architecture and RootDeviceHints instead. Set to "empty" to prepare for the future version of the API without hardware profiles. type: string image: description: Image holds the details of the image to be provisioned. properties: checksum: description: Checksum is the checksum for the image. type: string checksumType: description: ChecksumType is the checksum algorithm for the image, e.g md5, sha256 or sha512. The special value "auto" can be used to detect the algorithm from the checksum. If missing, MD5 is used. If in doubt, use "auto". enum: - md5 - sha256 - sha512 - auto type: string format: description: DiskFormat contains the format of the image (raw, qcow2, ...). Needs to be set to raw for raw images streaming. Note live-iso means an iso referenced by the url will be live-booted and not deployed to disk, and in this case the checksum options are not required and if specified will be ignored. enum: - raw - qcow2 - vdi - vmdk - live-iso type: string url: description: URL is a location of an image to deploy. type: string required: - url type: object metaData: description: MetaData holds the reference to the Secret containing host metadata (e.g. meta_data.json) which is passed to the Config Drive. properties: name: description: name is unique within a namespace to reference a secret resource. type: string namespace: description: namespace defines the space within which the secret name must be unique. type: string type: object x-kubernetes-map-type: atomic networkData: description: NetworkData holds the reference to the Secret containing network configuration (e.g content of network_data.json) which is passed to the Config Drive. properties: name: description: name is unique within a namespace to reference a secret resource. type: string namespace: description: namespace defines the space within which the secret name must be unique. type: string type: object x-kubernetes-map-type: atomic online: description: Should the server be online? type: boolean preprovisioningNetworkDataName: description: PreprovisioningNetworkDataName is the name of the Secret in the local namespace containing network configuration (e.g content of network_data.json) which is passed to the preprovisioning image, and to the Config Drive if not overridden by specifying NetworkData. type: string raid: description: RAID configuration for bare metal server properties: hardwareRAIDVolumes: description: The list of logical disks for hardware RAID, if rootDeviceHints isn't used, first volume is root volume. You can set the value of this field to `[]` to clear all the hardware RAID configurations. items: description: HardwareRAIDVolume defines the desired configuration of volume in hardware RAID. properties: controller: description: The name of the RAID controller to use type: string level: description: 'RAID level for the logical disk. The following levels are supported: 0;1;2;5;6;1+0;5+0;6+0.' enum: - "0" - "1" - "2" - "5" - "6" - 1+0 - 5+0 - 6+0 type: string name: description: Name of the volume. Should be unique within the Node. If not specified, volume name will be auto-generated. maxLength: 64 type: string numberOfPhysicalDisks: description: Integer, number of physical disks to use for the logical disk. Defaults to minimum number of disks required for the particular RAID level. minimum: 1 type: integer physicalDisks: description: Optional list of physical disk names to be used for the Hardware RAID volumes. The disk names are interpreted by the Hardware RAID controller, and the format is hardware specific. items: type: string type: array rotational: description: Select disks with only rotational or solid-state storage type: boolean sizeGibibytes: description: Size (Integer) of the logical disk to be created in GiB. If unspecified or set be 0, the maximum capacity of disk will be used for logical disk. minimum: 0 type: integer required: - level type: object nullable: true type: array softwareRAIDVolumes: description: The list of logical disks for software RAID, if rootDeviceHints isn't used, first volume is root volume. If HardwareRAIDVolumes is set this item will be invalid. The number of created Software RAID devices must be 1 or 2. If there is only one Software RAID device, it has to be a RAID-1. If there are two, the first one has to be a RAID-1, while the RAID level for the second one can be 0, 1, or 1+0. As the first RAID device will be the deployment device, enforcing a RAID-1 reduces the risk of ending up with a non-booting node in case of a disk failure. Software RAID will always be deleted. items: description: SoftwareRAIDVolume defines the desired configuration of volume in software RAID. properties: level: description: 'RAID level for the logical disk. The following levels are supported: 0;1;1+0.' enum: - "0" - "1" - 1+0 type: string physicalDisks: description: A list of device hints, the number of items should be greater than or equal to 2. items: description: RootDeviceHints holds the hints for specifying the storage location for the root filesystem for the image. properties: deviceName: description: A Linux device name like "/dev/vda", or a by-path link to it like "/dev/disk/by-path/pci-0000:01:00.0-scsi-0:2:0:0". The hint must match the actual value exactly. type: string hctl: description: A SCSI bus address like 0:0:0:0. The hint must match the actual value exactly. type: string minSizeGigabytes: description: The minimum size of the device in Gigabytes. minimum: 0 type: integer model: description: A vendor-specific device identifier. The hint can be a substring of the actual value. type: string rotational: description: True if the device should use spinning media, false otherwise. type: boolean serialNumber: description: Device serial number. The hint must match the actual value exactly. type: string vendor: description: The name of the vendor or manufacturer of the device. The hint can be a substring of the actual value. type: string wwn: description: Unique storage identifier. The hint must match the actual value exactly. type: string wwnVendorExtension: description: Unique vendor storage identifier. The hint must match the actual value exactly. type: string wwnWithExtension: description: Unique storage identifier with the vendor extension appended. The hint must match the actual value exactly. type: string type: object minItems: 2 type: array sizeGibibytes: description: Size (Integer) of the logical disk to be created in GiB. If unspecified or set be 0, the maximum capacity of disk will be used for logical disk. minimum: 0 type: integer required: - level type: object maxItems: 2 nullable: true type: array type: object rootDeviceHints: description: Provide guidance about how to choose the device for the image being provisioned. properties: deviceName: description: A Linux device name like "/dev/vda", or a by-path link to it like "/dev/disk/by-path/pci-0000:01:00.0-scsi-0:2:0:0". The hint must match the actual value exactly. type: string hctl: description: A SCSI bus address like 0:0:0:0. The hint must match the actual value exactly. type: string minSizeGigabytes: description: The minimum size of the device in Gigabytes. minimum: 0 type: integer model: description: A vendor-specific device identifier. The hint can be a substring of the actual value. type: string rotational: description: True if the device should use spinning media, false otherwise. type: boolean serialNumber: description: Device serial number. The hint must match the actual value exactly. type: string vendor: description: The name of the vendor or manufacturer of the device. The hint can be a substring of the actual value. type: string wwn: description: Unique storage identifier. The hint must match the actual value exactly. type: string wwnVendorExtension: description: Unique vendor storage identifier. The hint must match the actual value exactly. type: string wwnWithExtension: description: Unique storage identifier with the vendor extension appended. The hint must match the actual value exactly. type: string type: object taints: description: Taints is the full, authoritative list of taints to apply to the corresponding Machine. This list will overwrite any modifications made to the Machine on an ongoing basis. items: description: The node this Taint is attached to has the "effect" on any pod that does not tolerate the Taint. properties: effect: description: Required. The effect of the taint on pods that do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule and NoExecute. type: string key: description: Required. The taint key to be applied to a node. type: string timeAdded: description: TimeAdded represents the time at which the taint was added. It is only written for NoExecute taints. format: date-time type: string value: description: The taint value corresponding to the taint key. type: string required: - effect - key type: object type: array userData: description: UserData holds the reference to the Secret containing the user data to be passed to the host before it boots. properties: name: description: name is unique within a namespace to reference a secret resource. type: string namespace: description: namespace defines the space within which the secret name must be unique. type: string type: object x-kubernetes-map-type: atomic required: - online type: object status: description: BareMetalHostStatus defines the observed state of BareMetalHost. properties: errorCount: default: 0 description: ErrorCount records how many times the host has encoutered an error since the last successful operation type: integer errorMessage: description: the last error message reported by the provisioning subsystem type: string errorType: description: ErrorType indicates the type of failure encountered when the OperationalStatus is OperationalStatusError enum: - provisioned registration error - registration error - inspection error - preparation error - provisioning error - power management error type: string goodCredentials: description: the last credentials we were able to validate as working properties: credentials: description: SecretReference represents a Secret Reference. It has enough information to retrieve secret in any namespace properties: name: description: name is unique within a namespace to reference a secret resource. type: string namespace: description: namespace defines the space within which the secret name must be unique. type: string type: object x-kubernetes-map-type: atomic credentialsVersion: type: string type: object hardware: description: The hardware discovered to exist on the host. properties: cpu: description: CPU describes one processor on the host. properties: arch: type: string clockMegahertz: description: ClockSpeed is a clock speed in MHz format: double type: number count: type: integer flags: items: type: string type: array model: type: string type: object firmware: description: Firmware describes the firmware on the host. properties: bios: description: The BIOS for this firmware properties: date: description: The release/build date for this BIOS type: string vendor: description: The vendor name for this BIOS type: string version: description: The version of the BIOS type: string type: object type: object hostname: type: string nics: items: description: NIC describes one network interface on the host. properties: ip: description: The IP address of the interface. This will be an IPv4 or IPv6 address if one is present. If both IPv4 and IPv6 addresses are present in a dual-stack environment, two nics will be output, one with each IP. type: string mac: description: The device MAC address pattern: '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}' type: string model: description: The vendor and product IDs of the NIC, e.g. "0x8086 0x1572" type: string name: description: The name of the network interface, e.g. "en0" type: string pxe: description: Whether the NIC is PXE Bootable type: boolean speedGbps: description: The speed of the device in Gigabits per second type: integer vlanId: description: The untagged VLAN ID format: int32 maximum: 4094 minimum: 0 type: integer vlans: description: The VLANs available items: description: VLAN represents the name and ID of a VLAN. properties: id: description: VLANID is a 12-bit 802.1Q VLAN identifier format: int32 maximum: 4094 minimum: 0 type: integer name: type: string type: object type: array type: object type: array ramMebibytes: type: integer storage: items: description: Storage describes one storage device (disk, SSD, etc.) on the host. properties: alternateNames: description: A list of alternate Linux device names of the disk, e.g. "/dev/sda". Note that this list is not exhaustive, and names may not be stable across reboots. items: type: string type: array hctl: description: The SCSI location of the device type: string model: description: Hardware model type: string name: description: A Linux device name of the disk, e.g. "/dev/disk/by-path/pci-0000:01:00.0-scsi-0:2:0:0". This will be a name that is stable across reboots if one is available. type: string rotational: description: Whether this disk represents rotational storage. This field is not recommended for usage, please prefer using 'Type' field instead, this field will be deprecated eventually. type: boolean serialNumber: description: The serial number of the device type: string sizeBytes: description: The size of the disk in Bytes format: int64 type: integer type: description: 'Device type, one of: HDD, SSD, NVME.' enum: - HDD - SSD - NVME type: string vendor: description: The name of the vendor of the device type: string wwn: description: The WWN of the device type: string wwnVendorExtension: description: The WWN Vendor extension of the device type: string wwnWithExtension: description: The WWN with the extension type: string type: object type: array systemVendor: description: HardwareSystemVendor stores details about the whole hardware system. properties: manufacturer: type: string productName: type: string serialNumber: type: string type: object type: object hardwareProfile: description: The name of the profile matching the hardware details. type: string lastUpdated: description: LastUpdated identifies when this status was last observed. format: date-time type: string operationHistory: description: OperationHistory holds information about operations performed on this host. properties: deprovision: description: OperationMetric contains metadata about an operation (inspection, provisioning, etc.) used for tracking metrics. properties: end: format: date-time nullable: true type: string start: format: date-time nullable: true type: string type: object inspect: description: OperationMetric contains metadata about an operation (inspection, provisioning, etc.) used for tracking metrics. properties: end: format: date-time nullable: true type: string start: format: date-time nullable: true type: string type: object provision: description: OperationMetric contains metadata about an operation (inspection, provisioning, etc.) used for tracking metrics. properties: end: format: date-time nullable: true type: string start: format: date-time nullable: true type: string type: object register: description: OperationMetric contains metadata about an operation (inspection, provisioning, etc.) used for tracking metrics. properties: end: format: date-time nullable: true type: string start: format: date-time nullable: true type: string type: object type: object operationalStatus: description: OperationalStatus holds the status of the host enum: - "" - OK - discovered - error - delayed - detached type: string poweredOn: description: indicator for whether or not the host is powered on type: boolean provisioning: description: Information tracked by the provisioner. properties: ID: description: The machine's UUID from the underlying provisioning tool type: string bootMode: description: BootMode indicates the boot mode used to provision the node enum: - UEFI - UEFISecureBoot - legacy type: string customDeploy: description: Custom deploy procedure applied to the host. properties: method: description: Custom deploy method name. This name is specific to the deploy ramdisk used. If you don't have a custom deploy ramdisk, you shouldn't use CustomDeploy. type: string required: - method type: object firmware: description: The Bios set by the user properties: simultaneousMultithreadingEnabled: description: 'Allows a single physical processor core to appear as several logical processors. This supports following options: true, false.' enum: - true - false type: boolean sriovEnabled: description: 'SR-IOV support enables a hypervisor to create virtual instances of a PCI-express device, potentially increasing performance. This supports following options: true, false.' enum: - true - false type: boolean virtualizationEnabled: description: 'Supports the virtualization of platform hardware. This supports following options: true, false.' enum: - true - false type: boolean type: object image: description: Image holds the details of the last image successfully provisioned to the host. properties: checksum: description: Checksum is the checksum for the image. type: string checksumType: description: ChecksumType is the checksum algorithm for the image, e.g md5, sha256 or sha512. The special value "auto" can be used to detect the algorithm from the checksum. If missing, MD5 is used. If in doubt, use "auto". enum: - md5 - sha256 - sha512 - auto type: string format: description: DiskFormat contains the format of the image (raw, qcow2, ...). Needs to be set to raw for raw images streaming. Note live-iso means an iso referenced by the url will be live-booted and not deployed to disk, and in this case the checksum options are not required and if specified will be ignored. enum: - raw - qcow2 - vdi - vmdk - live-iso type: string url: description: URL is a location of an image to deploy. type: string required: - url type: object raid: description: The Raid set by the user properties: hardwareRAIDVolumes: description: The list of logical disks for hardware RAID, if rootDeviceHints isn't used, first volume is root volume. You can set the value of this field to `[]` to clear all the hardware RAID configurations. items: description: HardwareRAIDVolume defines the desired configuration of volume in hardware RAID. properties: controller: description: The name of the RAID controller to use type: string level: description: 'RAID level for the logical disk. The following levels are supported: 0;1;2;5;6;1+0;5+0;6+0.' enum: - "0" - "1" - "2" - "5" - "6" - 1+0 - 5+0 - 6+0 type: string name: description: Name of the volume. Should be unique within the Node. If not specified, volume name will be auto-generated. maxLength: 64 type: string numberOfPhysicalDisks: description: Integer, number of physical disks to use for the logical disk. Defaults to minimum number of disks required for the particular RAID level. minimum: 1 type: integer physicalDisks: description: Optional list of physical disk names to be used for the Hardware RAID volumes. The disk names are interpreted by the Hardware RAID controller, and the format is hardware specific. items: type: string type: array rotational: description: Select disks with only rotational or solid-state storage type: boolean sizeGibibytes: description: Size (Integer) of the logical disk to be created in GiB. If unspecified or set be 0, the maximum capacity of disk will be used for logical disk. minimum: 0 type: integer required: - level type: object nullable: true type: array softwareRAIDVolumes: description: The list of logical disks for software RAID, if rootDeviceHints isn't used, first volume is root volume. If HardwareRAIDVolumes is set this item will be invalid. The number of created Software RAID devices must be 1 or 2. If there is only one Software RAID device, it has to be a RAID-1. If there are two, the first one has to be a RAID-1, while the RAID level for the second one can be 0, 1, or 1+0. As the first RAID device will be the deployment device, enforcing a RAID-1 reduces the risk of ending up with a non-booting node in case of a disk failure. Software RAID will always be deleted. items: description: SoftwareRAIDVolume defines the desired configuration of volume in software RAID. properties: level: description: 'RAID level for the logical disk. The following levels are supported: 0;1;1+0.' enum: - "0" - "1" - 1+0 type: string physicalDisks: description: A list of device hints, the number of items should be greater than or equal to 2. items: description: RootDeviceHints holds the hints for specifying the storage location for the root filesystem for the image. properties: deviceName: description: A Linux device name like "/dev/vda", or a by-path link to it like "/dev/disk/by-path/pci-0000:01:00.0-scsi-0:2:0:0". The hint must match the actual value exactly. type: string hctl: description: A SCSI bus address like 0:0:0:0. The hint must match the actual value exactly. type: string minSizeGigabytes: description: The minimum size of the device in Gigabytes. minimum: 0 type: integer model: description: A vendor-specific device identifier. The hint can be a substring of the actual value. type: string rotational: description: True if the device should use spinning media, false otherwise. type: boolean serialNumber: description: Device serial number. The hint must match the actual value exactly. type: string vendor: description: The name of the vendor or manufacturer of the device. The hint can be a substring of the actual value. type: string wwn: description: Unique storage identifier. The hint must match the actual value exactly. type: string wwnVendorExtension: description: Unique vendor storage identifier. The hint must match the actual value exactly. type: string wwnWithExtension: description: Unique storage identifier with the vendor extension appended. The hint must match the actual value exactly. type: string type: object minItems: 2 type: array sizeGibibytes: description: Size (Integer) of the logical disk to be created in GiB. If unspecified or set be 0, the maximum capacity of disk will be used for logical disk. minimum: 0 type: integer required: - level type: object maxItems: 2 nullable: true type: array type: object rootDeviceHints: description: The RootDevicehints set by the user properties: deviceName: description: A Linux device name like "/dev/vda", or a by-path link to it like "/dev/disk/by-path/pci-0000:01:00.0-scsi-0:2:0:0". The hint must match the actual value exactly. type: string hctl: description: A SCSI bus address like 0:0:0:0. The hint must match the actual value exactly. type: string minSizeGigabytes: description: The minimum size of the device in Gigabytes. minimum: 0 type: integer model: description: A vendor-specific device identifier. The hint can be a substring of the actual value. type: string rotational: description: True if the device should use spinning media, false otherwise. type: boolean serialNumber: description: Device serial number. The hint must match the actual value exactly. type: string vendor: description: The name of the vendor or manufacturer of the device. The hint can be a substring of the actual value. type: string wwn: description: Unique storage identifier. The hint must match the actual value exactly. type: string wwnVendorExtension: description: Unique vendor storage identifier. The hint must match the actual value exactly. type: string wwnWithExtension: description: Unique storage identifier with the vendor extension appended. The hint must match the actual value exactly. type: string type: object state: description: An indiciator for what the provisioner is doing with the host. type: string required: - ID - state type: object triedCredentials: description: the last credentials we sent to the provisioning backend properties: credentials: description: SecretReference represents a Secret Reference. It has enough information to retrieve secret in any namespace properties: name: description: name is unique within a namespace to reference a secret resource. type: string namespace: description: namespace defines the space within which the secret name must be unique. type: string type: object x-kubernetes-map-type: atomic credentialsVersion: type: string type: object required: - errorCount - errorMessage - hardwareProfile - operationalStatus - poweredOn - provisioning type: object type: object served: true storage: true subresources: status: {}