{
  "description": "HetznerBareMetalHost is the Schema for the hetznerbaremetalhosts API.",
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore 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.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
      "type": "string"
    },
    "metadata": {
      "type": "object"
    },
    "spec": {
      "description": "HetznerBareMetalHostSpec defines the desired state of HetznerBareMetalHost.",
      "properties": {
        "consumerRef": {
          "description": "ConsumerRef is a reference to the HetznerBareMetalMachine\nthat is using this 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\nshould contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].\nFor example, if the object reference is to a container within a pod, this would take on a value like:\n\"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered\nthe event) or if no container name is specified \"spec.containers[2]\" (container with\nindex 2 in this pod). This syntax is chosen only to have some well-defined way of\nreferencing a part of an object.\nTODO: this design is not final and this field is subject to change in the future.",
              "type": "string"
            },
            "kind": {
              "description": "Kind of the referent.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
              "type": "string"
            },
            "name": {
              "description": "Name of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
              "type": "string"
            },
            "namespace": {
              "description": "Namespace of the referent.\nMore 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.\nMore 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.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids",
              "type": "string"
            }
          },
          "type": "object",
          "x-kubernetes-map-type": "atomic",
          "additionalProperties": false
        },
        "description": {
          "description": "Description is a human-entered text used to help identify the host.\nIt can be used to store some valuable information about the host.",
          "type": "string"
        },
        "maintenanceMode": {
          "description": "MaintenanceMode indicates that a machine is supposed to be deprovisioned\nand won't be selected by any Hetzner bare metal machine.",
          "type": "boolean"
        },
        "rootDeviceHints": {
          "description": "RootDeviceHints provides guidance about how to choose the device for the image\nbeing provisioned. They need to be specified to provision the host.",
          "properties": {
            "raid": {
              "description": "Raid is used to specify multiple storage devices. It provides the controller with information\non which disks a raid can be established.",
              "properties": {
                "wwn": {
                  "description": "WWN defines a list of unique storage identifiers used for raid setups.",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "wwn": {
              "description": "WWN is a unique storage identifier used for non-raid setups. The hint\nmust match the actual value exactly.",
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "serverID": {
          "description": "ServerID defines the ID of the server provided by Hetzner.\nFind it on your Hetzner robot dashboard.",
          "type": "integer"
        },
        "status": {
          "description": "Status contains all status information. The controller writes this status.\nAs some cannot be regenerated during any reconcilement, the status\nis in the specs of the object - not the actual status. DO NOT EDIT!!!",
          "properties": {
            "conditions": {
              "description": "Conditions define the current service state of the HetznerBareMetalHost.",
              "items": {
                "description": "Condition defines an observation of a Cluster API resource operational state.",
                "properties": {
                  "lastTransitionTime": {
                    "description": "Last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when\nthe API field changed is acceptable.",
                    "format": "date-time",
                    "type": "string"
                  },
                  "message": {
                    "description": "A human readable message indicating details about the transition.\nThis field may be empty.",
                    "type": "string"
                  },
                  "reason": {
                    "description": "The reason for the condition's last transition in CamelCase.\nThe specific API may choose whether or not this field is considered a guaranteed API.\nThis field may not be empty.",
                    "type": "string"
                  },
                  "severity": {
                    "description": "Severity provides an explicit classification of Reason code, so the users or machines can immediately\nunderstand the current situation and act accordingly.\nThe Severity field MUST be set only when Status=False.",
                    "type": "string"
                  },
                  "status": {
                    "description": "Status of the condition, one of True, False, Unknown.",
                    "type": "string"
                  },
                  "type": {
                    "description": "Type of condition in CamelCase or in foo.example.com/CamelCase.\nMany .condition.type values are consistent across resources like Available, but because arbitrary conditions\ncan be useful (see .node.status.conditions), the ability to deconflict is important.",
                    "type": "string"
                  }
                },
                "required": [
                  "lastTransitionTime",
                  "status",
                  "type"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "errorCount": {
              "default": 0,
              "description": "ErrorCount records how many times the host has encountered 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\nOperationalStatus is OperationalStatusError.",
              "type": "string"
            },
            "hardwareDetails": {
              "description": "StatusHardwareDetails are automatically gathered and should not be modified by the user.",
              "properties": {
                "cpu": {
                  "description": "CPU describes one processor on the host.",
                  "properties": {
                    "arch": {
                      "type": "string"
                    },
                    "clockGigahertz": {
                      "description": "ClockSpeed is a clock speed in MHz",
                      "format": "double",
                      "type": "string"
                    },
                    "cores": {
                      "type": "integer"
                    },
                    "flags": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "model": {
                      "type": "string"
                    },
                    "threads": {
                      "type": "integer"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "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\nif one is present.  If both IPv4 and IPv6 addresses are present in a\ndual-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"
                      },
                      "speedMbps": {
                        "description": "The speed of the device in Gigabits per second",
                        "type": "integer"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "type": "array"
                },
                "ramGB": {
                  "type": "integer"
                },
                "storage": {
                  "items": {
                    "description": "Storage describes one storage device (disk, SSD, etc.) on the host.",
                    "properties": {
                      "hctl": {
                        "description": "HCTL defines the SCSI location of the device.",
                        "type": "string"
                      },
                      "model": {
                        "description": "Model represents the Hardware model.",
                        "type": "string"
                      },
                      "name": {
                        "description": "The Linux device name of the disk, e.g. \"/dev/sda\". Note that this\nmay not be stable across reboots.",
                        "type": "string"
                      },
                      "rota": {
                        "description": "Rota defines if it's an HDD device or not.",
                        "type": "boolean"
                      },
                      "serialNumber": {
                        "description": "SerialNumber denotes the serial number of the device.",
                        "type": "string"
                      },
                      "sizeBytes": {
                        "description": "SizeBytes is the size of the disk in Bytes.",
                        "format": "int64",
                        "type": "integer"
                      },
                      "sizeGB": {
                        "description": "SizeGB is the size of the disk in GB.",
                        "format": "int64",
                        "type": "integer"
                      },
                      "vendor": {
                        "description": "Vendor is the name of the vendor of the device.",
                        "type": "string"
                      },
                      "wwn": {
                        "description": "WWN defines the WWN of the device.",
                        "type": "string"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "type": "array"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "hetznerClusterRef": {
              "description": "HetznerClusterRef is the name of the HetznerCluster object which is\nneeded as some necessary information is stored there, e.g. the hrobot password.",
              "type": "string"
            },
            "installImage": {
              "description": "InstallImage is the configuration that is used for the autosetup configuration for installing an OS via InstallImage.",
              "properties": {
                "btrfsDefinitions": {
                  "description": "BTRFSDefinitions define the btrfs subvolume definitions to be created.",
                  "items": {
                    "description": "BTRFSDefinition defines the btrfs subvolume definitions to be created.",
                    "properties": {
                      "mount": {
                        "description": "Mount defines the mountpath.",
                        "type": "string"
                      },
                      "subvolume": {
                        "description": "SubVolume defines the subvolume name.",
                        "type": "string"
                      },
                      "volume": {
                        "description": "Volume defines the btrfs volume name.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "mount",
                      "subvolume",
                      "volume"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "type": "array"
                },
                "image": {
                  "description": "Image is the image to be provisioned. It defines the image for baremetal machine.",
                  "properties": {
                    "name": {
                      "description": "Name defines the archive name after download. This has to be a valid name for Installimage.",
                      "type": "string"
                    },
                    "path": {
                      "description": "Path is the local path for a preinstalled image from upstream.",
                      "type": "string"
                    },
                    "url": {
                      "description": "URL defines the remote URL for downloading a tar, tar.gz, tar.bz, tar.bz2, tar.xz, tgz, tbz, txz image.",
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "logicalVolumeDefinitions": {
                  "description": "LVMDefinitions defines the logical volume definitions to be created.",
                  "items": {
                    "description": "LVMDefinition defines the logical volume definitions to be created.",
                    "properties": {
                      "filesystem": {
                        "description": "FileSystem defines the filesystem for this logical volume.",
                        "type": "string"
                      },
                      "mount": {
                        "description": "Mount defines the mountpath.",
                        "type": "string"
                      },
                      "name": {
                        "description": "Name defines the volume name.",
                        "type": "string"
                      },
                      "size": {
                        "description": "Size defines the size in M/G/T or MiB/GiB/TiB.",
                        "type": "string"
                      },
                      "vg": {
                        "description": "VG defines the vg name.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "filesystem",
                      "mount",
                      "name",
                      "size",
                      "vg"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "type": "array"
                },
                "partitions": {
                  "description": "Partitions define the additional Partitions to be created in installimage.",
                  "items": {
                    "description": "Partition defines the additional Partitions to be created.",
                    "properties": {
                      "fileSystem": {
                        "description": "FileSystem can be ext2, ext3, ext4, btrfs, reiserfs, xfs, swap\nor name of the LVM volume group (VG), if this PART is a VG.",
                        "type": "string"
                      },
                      "mount": {
                        "description": "Mount defines the mount path for this filesystem.\nKeyword 'lvm' to use this PART as volume group (VG) for LVM.\nIdentifier 'btrfs.X' to use this PART as volume for\nbtrfs subvolumes. X can be replaced with a unique\nalphanumeric keyword. NOTE: no support for btrfs multi-device volumes.",
                        "type": "string"
                      },
                      "size": {
                        "description": "Size can use the keyword 'all' to assign all the remaining space of the drive to the last partition.\nYou can use M/G/T for unit specification in MiB/GiB/TiB.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "fileSystem",
                      "mount",
                      "size"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "type": "array"
                },
                "postInstallScript": {
                  "description": "PostInstallScript (Bash) is used for configuring commands that should be executed after installimage.\nIt is passed along with the installimage command.",
                  "type": "string"
                },
                "swraid": {
                  "default": 0,
                  "description": "Swraid defines the SWRAID in InstallImage. It enables or disables raids. Set 1 to enable.",
                  "enum": [
                    0,
                    1
                  ],
                  "type": "integer"
                },
                "swraidLevel": {
                  "default": 1,
                  "description": "SwraidLevel defines the SWRAIDLEVEL in InstallImage. Only relevant if the raid is enabled.\nPick one of 0,1,5,6,10. Ignored if Swraid=0.",
                  "enum": [
                    0,
                    1,
                    5,
                    6,
                    10
                  ],
                  "type": "integer"
                }
              },
              "required": [
                "image",
                "partitions"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "ipv4": {
              "description": "IPv4 address of server.",
              "type": "string"
            },
            "ipv6": {
              "description": "IPv6 address of server.",
              "type": "string"
            },
            "lastUpdated": {
              "description": "the last error message reported by the provisioning subsystem.",
              "format": "date-time",
              "type": "string"
            },
            "provisioningState": {
              "description": "Information tracked by the provisioner.",
              "type": "string"
            },
            "rebootTypes": {
              "description": "RebootTypes is a list of all available reboot types for API reboots.",
              "items": {
                "description": "RebootType defines the reboot type of servers via Hetzner robot API.",
                "type": "string"
              },
              "type": "array"
            },
            "rebooted": {
              "description": "Rebooted shows whether the server is currently being rebooted.",
              "type": "boolean"
            },
            "sshSpec": {
              "description": "SSHSpec defines specs for SSH.",
              "properties": {
                "portAfterCloudInit": {
                  "description": "PortAfterCloudInit specifies the port that has to be used to connect to the machine\nby reaching the server via SSH after the successful completion of cloud init.",
                  "type": "integer"
                },
                "portAfterInstallImage": {
                  "default": 22,
                  "description": "PortAfterInstallImage specifies the port that has to be used to connect to the machine\nby reaching the server via SSH after installing the image successfully.",
                  "type": "integer"
                },
                "secretRef": {
                  "description": "SecretRef gives reference to the secret where the SSH key is stored.",
                  "properties": {
                    "key": {
                      "description": "Key contains details about the keys used in the data of the secret.",
                      "properties": {
                        "name": {
                          "description": "Name is the key in the secret's data where the SSH key's name is stored.",
                          "type": "string"
                        },
                        "privateKey": {
                          "description": "PrivateKey is the key in the secret's data where the SSH key's private key is stored.",
                          "type": "string"
                        },
                        "publicKey": {
                          "description": "PublicKey is the key in the secret's data where the SSH key's public key is stored.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "name",
                        "privateKey",
                        "publicKey"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "name": {
                      "description": "Name is the name of the secret.",
                      "type": "string"
                    }
                  },
                  "required": [
                    "key",
                    "name"
                  ],
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "required": [
                "secretRef"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "sshStatus": {
              "description": "HetznerRobotSSHKey contains the name and fingerprint of the HetznerCluster spec specified SSH key.",
              "properties": {
                "currentOS": {
                  "description": "CurrentOS gives information about the secret where the os ssh key is stored.",
                  "properties": {
                    "credentials": {
                      "description": "SecretReference represents a Secret Reference. It has enough information to retrieve secret\nin 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",
                      "additionalProperties": false
                    },
                    "credentialsDataHash": {
                      "format": "byte",
                      "type": "string"
                    },
                    "credentialsVersion": {
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "currentRescue": {
                  "description": "CurrentRescue gives information about the secret where the rescue ssh key is stored.",
                  "properties": {
                    "credentials": {
                      "description": "SecretReference represents a Secret Reference. It has enough information to retrieve secret\nin 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",
                      "additionalProperties": false
                    },
                    "credentialsDataHash": {
                      "format": "byte",
                      "type": "string"
                    },
                    "credentialsVersion": {
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "osKey": {
                  "description": "OSKey contains name and fingerprint of the in HetznerBareMetalMachine spec specified SSH key.",
                  "properties": {
                    "fingerprint": {
                      "description": "Fingerprint defines the fingerprint of the SSH key - added by the controller.",
                      "type": "string"
                    },
                    "name": {
                      "description": "Name defines the name of the SSH key.",
                      "minLength": 1,
                      "type": "string"
                    }
                  },
                  "required": [
                    "name"
                  ],
                  "type": "object",
                  "additionalProperties": false
                },
                "rescueKey": {
                  "description": "RescueKey contains name and fingerprint of the in HetznerCluster spec specified SSH key.",
                  "properties": {
                    "fingerprint": {
                      "description": "Fingerprint defines the fingerprint of the SSH key - added by the controller.",
                      "type": "string"
                    },
                    "name": {
                      "description": "Name defines the name of the SSH key.",
                      "minLength": 1,
                      "type": "string"
                    }
                  },
                  "required": [
                    "name"
                  ],
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "userData": {
              "description": "UserData holds the reference to the Secret containing the user\ndata 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",
              "additionalProperties": false
            }
          },
          "required": [
            "errorCount",
            "hetznerClusterRef"
          ],
          "type": "object",
          "additionalProperties": false
        }
      },
      "required": [
        "serverID"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "HetznerBareMetalHostStatus defines the observed state of HetznerBareMetalHost.",
      "type": "object"
    }
  },
  "type": "object"
}
