{
  "description": "HCloudMachineTemplate is the Schema for the hcloudmachinetemplates 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": "HCloudMachineTemplateSpec defines the desired state of HCloudMachineTemplate.",
      "properties": {
        "template": {
          "description": "HCloudMachineTemplateResource describes the data needed to create am HCloudMachine from a template.",
          "properties": {
            "metadata": {
              "description": "Standard object's metadata.",
              "properties": {
                "annotations": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Annotations is an unstructured key value map stored with a resource that may be\nset by external tools to store and retrieve arbitrary metadata. They are not\nqueryable and should be preserved when modifying objects.\nMore info: http://kubernetes.io/docs/user-guide/annotations",
                  "type": "object"
                },
                "labels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Map of string keys and values that can be used to organize and categorize\n(scope and select) objects. May match selectors of replication controllers\nand services.\nMore info: http://kubernetes.io/docs/user-guide/labels",
                  "type": "object"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "spec": {
              "description": "Spec is the specification of the desired behavior of the machine.",
              "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
            }
          },
          "required": [
            "spec"
          ],
          "type": "object",
          "additionalProperties": false
        }
      },
      "required": [
        "template"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "HCloudMachineTemplateStatus defines the observed state of HCloudMachineTemplate.",
      "properties": {
        "capacity": {
          "additionalProperties": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "string"
              }
            ],
            "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
            "x-kubernetes-int-or-string": true
          },
          "description": "Capacity defines the resource capacity for this machine.\nThis value is used for autoscaling from zero operations as defined in:\nhttps://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20210310-opt-in-autoscaling-from-zero.md",
          "type": "object"
        },
        "conditions": {
          "description": "Conditions defines current service state of the HCloudMachineTemplate.",
          "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"
        },
        "ownerType": {
          "description": "OwnerType is the type of object that owns the HCloudMachineTemplate.",
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
