{
  "description": "HCloudMachine is the Schema for the hcloudmachines 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": "HCloudMachineSpec defines the desired state of HCloudMachine.",
      "properties": {
        "imageName": {
          "description": "ImageName is the reference to the Machine Image from which to create the machine instance.\nIt can reference an image uploaded to Hetzner API in two ways: either directly as the name of an image or as the label of an image.",
          "minLength": 1,
          "type": "string"
        },
        "placementGroupName": {
          "description": "PlacementGroupName defines the placement group of the machine in HCloud API that must reference an existing placement group.",
          "type": "string"
        },
        "providerID": {
          "description": "ProviderID is the unique identifier as specified by the cloud provider.",
          "type": "string"
        },
        "publicNetwork": {
          "description": "PublicNetwork specifies information for public networks. It defines the specs about\nthe primary IP address of the server. If both IPv4 and IPv6 are disabled, then the private network has to be enabled.",
          "properties": {
            "enableIPv4": {
              "default": true,
              "description": "EnableIPv4 defines whether server has IPv4 address enabled.\nAs Hetzner load balancers require an IPv4 address, this setting will be ignored and set to true if there is no private net.",
              "type": "boolean"
            },
            "enableIPv6": {
              "default": true,
              "description": "EnableIPv6 defines whether server has IPv6 addresses enabled.",
              "type": "boolean"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "sshKeys": {
          "description": "SSHKeys define machine-specific SSH keys and override cluster-wide SSH keys.",
          "items": {
            "description": "SSHKey defines the SSHKey for HCloud.",
            "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": "array"
        },
        "type": {
          "description": "Type is the HCloud Machine Type for this machine. It defines the desired server type of\nserver in Hetzner's Cloud API. You can use the hcloud CLI to get server names (`hcloud\nserver-type list`) or on https://www.hetzner.com/cloud\n\n\nThe types follow this pattern: cxNV (shared, cheap), cpxNV (shared, performance), ccxNV\n(dedicated), caxNV (ARM)\n\n\nN is a number, and V is the version of this machine type. Example: cpx32.\n\n\nThe list of valid machine types gets changed by Hetzner from time to time. CAPH no longer\nvalidates this string. It is up to you to use a valid type. Not all types are available in all\nlocations.",
          "type": "string"
        }
      },
      "required": [
        "imageName",
        "type"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "HCloudMachineStatus defines the observed state of HCloudMachine.",
      "properties": {
        "addresses": {
          "description": "Addresses contain the server's associated addresses.",
          "items": {
            "description": "MachineAddress contains information for the node's address.",
            "properties": {
              "address": {
                "description": "The machine address.",
                "type": "string"
              },
              "type": {
                "description": "Machine address type, one of Hostname, ExternalIP, InternalIP, ExternalDNS or InternalDNS.",
                "type": "string"
              }
            },
            "required": [
              "address",
              "type"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "conditions": {
          "description": "Conditions define the current service state of the HCloudMachine.",
          "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"
        },
        "failureMessage": {
          "description": "FailureMessage will be set in the event that there is a terminal problem\nreconciling the Machine and will contain a more verbose string suitable\nfor logging and human consumption.",
          "type": "string"
        },
        "failureReason": {
          "description": "FailureReason will be set in the event that there is a terminal problem\nreconciling the Machine and will contain a succinct value suitable\nfor machine interpretation.",
          "type": "string"
        },
        "instanceState": {
          "description": "InstanceState is the state of the server for this machine.",
          "type": "string"
        },
        "ready": {
          "description": "Ready is true when the provider resource is ready.",
          "type": "boolean"
        },
        "region": {
          "description": "Region contains the name of the HCloud location the server is running.",
          "enum": [
            "fsn1",
            "hel1",
            "nbg1",
            "ash",
            "hil",
            "sin"
          ],
          "type": "string"
        },
        "sshKeys": {
          "description": "SSHKeys specifies the ssh keys that were used for provisioning the server.",
          "items": {
            "description": "SSHKey defines the SSHKey for HCloud.",
            "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": "array"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
