{
  "description": "AzureManagedControlPlane is the Schema for the azuremanagedcontrolplanes 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": "AzureManagedControlPlaneSpec defines the desired state of AzureManagedControlPlane.",
      "properties": {
        "aadProfile": {
          "description": "AadProfile is Azure Active Directory configuration to integrate with AKS for aad authentication.",
          "properties": {
            "adminGroupObjectIDs": {
              "description": "AdminGroupObjectIDs - AAD group object IDs that will have admin role of the cluster.",
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "managed": {
              "description": "Managed - Whether to enable managed AAD.",
              "type": "boolean"
            }
          },
          "required": [
            "adminGroupObjectIDs",
            "managed"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "additionalTags": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "AdditionalTags is an optional set of tags to add to Azure resources managed by the Azure provider, in addition to the ones added by default.",
          "type": "object"
        },
        "controlPlaneEndpoint": {
          "description": "ControlPlaneEndpoint represents the endpoint used to communicate with the control plane.",
          "properties": {
            "host": {
              "description": "The hostname on which the API server is serving.",
              "type": "string"
            },
            "port": {
              "description": "The port on which the API server is serving.",
              "format": "int32",
              "type": "integer"
            }
          },
          "required": [
            "host",
            "port"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "dnsServiceIP": {
          "description": "DNSServiceIP is an IP address assigned to the Kubernetes DNS service. It must be within the Kubernetes service address range specified in serviceCidr.",
          "type": "string"
        },
        "loadBalancerSKU": {
          "description": "LoadBalancerSKU is the SKU of the loadBalancer to be provisioned.",
          "enum": [
            "Basic",
            "Standard"
          ],
          "type": "string"
        },
        "location": {
          "description": "Location is a string matching one of the canonical Azure region names. Examples: \"westus2\", \"eastus\".",
          "type": "string"
        },
        "networkPlugin": {
          "description": "NetworkPlugin used for building Kubernetes network.",
          "enum": [
            "azure",
            "kubenet"
          ],
          "type": "string"
        },
        "networkPolicy": {
          "description": "NetworkPolicy used for building Kubernetes network.",
          "enum": [
            "azure",
            "calico"
          ],
          "type": "string"
        },
        "nodeResourceGroupName": {
          "description": "NodeResourceGroupName is the name of the resource group containing cluster IaaS resources. Will be populated to default in webhook.",
          "type": "string"
        },
        "resourceGroupName": {
          "description": "ResourceGroupName is the name of the Azure resource group for this AKS Cluster.",
          "type": "string"
        },
        "sshPublicKey": {
          "description": "SSHPublicKey is a string literal containing an ssh public key base64 encoded.",
          "type": "string"
        },
        "subscriptionID": {
          "description": "SubscriotionID is the GUID of the Azure subscription to hold this cluster.",
          "type": "string"
        },
        "version": {
          "description": "Version defines the desired Kubernetes version.",
          "minLength": 2,
          "type": "string"
        },
        "virtualNetwork": {
          "description": "VirtualNetwork describes the vnet for the AKS cluster. Will be created if it does not exist.",
          "properties": {
            "cidrBlock": {
              "type": "string"
            },
            "name": {
              "type": "string"
            },
            "subnet": {
              "description": "ManagedControlPlaneSubnet describes a subnet for an AKS cluster.",
              "properties": {
                "cidrBlock": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              },
              "required": [
                "cidrBlock",
                "name"
              ],
              "type": "object",
              "additionalProperties": false
            }
          },
          "required": [
            "cidrBlock",
            "name"
          ],
          "type": "object",
          "additionalProperties": false
        }
      },
      "required": [
        "location",
        "nodeResourceGroupName",
        "resourceGroupName",
        "sshPublicKey",
        "version"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "AzureManagedControlPlaneStatus defines the observed state of AzureManagedControlPlane.",
      "properties": {
        "initialized": {
          "description": "Initialized is true when the the control plane is available for initial contact. This may occur before the control plane is fully ready. In the AzureManagedControlPlane implementation, these are identical.",
          "type": "boolean"
        },
        "ready": {
          "description": "Ready is true when the provider resource is ready.",
          "type": "boolean"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
