{
    "description": "NutanixMachineProviderConfig is the Schema for the nutanixmachineproviderconfigs API Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).",
    "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"
        },
        "bootType": {
            "description": "bootType indicates the boot type (Legacy, UEFI or SecureBoot) the Machine's VM uses to boot. If this field is empty or omitted, the VM will use the default boot type \"Legacy\" to boot. \"SecureBoot\" depends on \"UEFI\" boot, i.e., enabling \"SecureBoot\" means that \"UEFI\" boot is also enabled.",
            "enum": [
                "",
                "Legacy",
                "UEFI",
                "SecureBoot"
            ],
            "type": "string"
        },
        "categories": {
            "description": "categories optionally adds one or more prism categories (each with key and value) for the Machine's VM to associate with. All the category key and value pairs specified must already exist in the prism central.",
            "items": {
                "description": "NutanixCategory identifies a pair of prism category key and value",
                "properties": {
                    "key": {
                        "description": "key is the prism category key name",
                        "maxLength": 64,
                        "minLength": 1,
                        "type": "string"
                    },
                    "value": {
                        "description": "value is the prism category value associated with the key",
                        "maxLength": 64,
                        "minLength": 1,
                        "type": "string"
                    }
                },
                "required": [
                    "key",
                    "value"
                ],
                "type": "object",
                "additionalProperties": false
            },
            "type": "array",
            "x-kubernetes-list-map-keys": [
                "key"
            ],
            "x-kubernetes-list-type": "map"
        },
        "cluster": {
            "description": "cluster is to identify the cluster (the Prism Element under management of the Prism Central), in which the Machine's VM will be created. The cluster identifier (uuid or name) can be obtained from the Prism Central console or using the prism_central API.",
            "properties": {
                "name": {
                    "description": "name is the resource name in the PC",
                    "type": "string"
                },
                "type": {
                    "description": "Type is the identifier type to use for this resource.",
                    "enum": [
                        "uuid",
                        "name"
                    ],
                    "type": "string"
                },
                "uuid": {
                    "description": "uuid is the UUID of the resource in the PC.",
                    "type": "string"
                }
            },
            "required": [
                "type"
            ],
            "type": "object",
            "additionalProperties": false
        },
        "credentialsSecret": {
            "description": "credentialsSecret is a local reference to a secret that contains the credentials data to access Nutanix PC client",
            "properties": {
                "name": {
                    "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?",
                    "type": "string"
                }
            },
            "type": "object",
            "additionalProperties": false
        },
        "failureDomain": {
            "description": "failureDomain refers to the name of the FailureDomain with which this Machine is associated. If this is configured, the Nutanix machine controller will use the prism_central endpoint and credentials defined in the referenced FailureDomain to communicate to the prism_central. It will also verify that the 'cluster' and subnets' configuration in the NutanixMachineProviderConfig is consistent with that in the referenced failureDomain.",
            "properties": {
                "name": {
                    "description": "name of the failure domain in which the nutanix machine provider will create the VM. Failure domains are defined in a cluster's config.openshift.io/Infrastructure resource.",
                    "maxLength": 64,
                    "minLength": 1,
                    "pattern": "[a-z0-9]([-a-z0-9]*[a-z0-9])?",
                    "type": "string"
                }
            },
            "required": [
                "name"
            ],
            "type": "object",
            "additionalProperties": false
        },
        "image": {
            "description": "image is to identify the rhcos image uploaded to the Prism Central (PC) The image identifier (uuid or name) can be obtained from the Prism Central console or using the prism_central API.",
            "properties": {
                "name": {
                    "description": "name is the resource name in the PC",
                    "type": "string"
                },
                "type": {
                    "description": "Type is the identifier type to use for this resource.",
                    "enum": [
                        "uuid",
                        "name"
                    ],
                    "type": "string"
                },
                "uuid": {
                    "description": "uuid is the UUID of the resource in the PC.",
                    "type": "string"
                }
            },
            "required": [
                "type"
            ],
            "type": "object",
            "additionalProperties": false
        },
        "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"
        },
        "memorySize": {
            "anyOf": [
                {
                    "type": "integer"
                },
                {
                    "type": "string"
                }
            ],
            "description": "memorySize is the memory size (in Quantity format) of the VM The minimum memorySize is 2Gi bytes",
            "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
            "x-kubernetes-int-or-string": true
        },
        "metadata": {
            "type": "object"
        },
        "project": {
            "description": "project optionally identifies a Prism project for the Machine's VM to associate with.",
            "properties": {
                "name": {
                    "description": "name is the resource name in the PC",
                    "type": "string"
                },
                "type": {
                    "description": "Type is the identifier type to use for this resource.",
                    "enum": [
                        "uuid",
                        "name"
                    ],
                    "type": "string"
                },
                "uuid": {
                    "description": "uuid is the UUID of the resource in the PC.",
                    "type": "string"
                }
            },
            "required": [
                "type"
            ],
            "type": "object",
            "additionalProperties": false
        },
        "subnets": {
            "description": "subnets holds a list of identifiers (one or more) of the cluster's network subnets for the Machine's VM to connect to. The subnet identifiers (uuid or name) can be obtained from the Prism Central console or using the prism_central API.",
            "items": {
                "description": "NutanixResourceIdentifier holds the identity of a Nutanix PC resource (cluster, image, subnet, etc.)",
                "properties": {
                    "name": {
                        "description": "name is the resource name in the PC",
                        "type": "string"
                    },
                    "type": {
                        "description": "Type is the identifier type to use for this resource.",
                        "enum": [
                            "uuid",
                            "name"
                        ],
                        "type": "string"
                    },
                    "uuid": {
                        "description": "uuid is the UUID of the resource in the PC.",
                        "type": "string"
                    }
                },
                "required": [
                    "type"
                ],
                "type": "object",
                "additionalProperties": false
            },
            "minItems": 1,
            "type": "array"
        },
        "systemDiskSize": {
            "anyOf": [
                {
                    "type": "integer"
                },
                {
                    "type": "string"
                }
            ],
            "description": "systemDiskSize is size (in Quantity format) of the system disk of the VM The minimum systemDiskSize is 20Gi bytes",
            "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
            "x-kubernetes-int-or-string": true
        },
        "userDataSecret": {
            "description": "userDataSecret is a local reference to a secret that contains the UserData to apply to the VM",
            "properties": {
                "name": {
                    "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?",
                    "type": "string"
                }
            },
            "type": "object",
            "additionalProperties": false
        },
        "vcpuSockets": {
            "description": "vcpuSockets is the number of vCPU sockets of the VM",
            "format": "int32",
            "minimum": 1,
            "type": "integer",
            "maximum": 2147483647
        },
        "vcpusPerSocket": {
            "description": "vcpusPerSocket is the number of vCPUs per socket of the VM",
            "format": "int32",
            "minimum": 1,
            "type": "integer",
            "maximum": 2147483647
        }
    },
    "required": [
        "cluster",
        "credentialsSecret",
        "image",
        "memorySize",
        "subnets",
        "systemDiskSize",
        "vcpuSockets",
        "vcpusPerSocket"
    ],
    "type": "object",
    "additionalProperties": false,
    "$schema": "http://json-schema.org/draft-04/schema#"
}
