{
  "description": "AzureCluster is the Schema for the azureclusters 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": "AzureClusterSpec defines the desired state of AzureCluster.",
      "properties": {
        "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"
        },
        "azureEnvironment": {
          "description": "AzureEnvironment is the name of the AzureCloud to be used. The default value that would be used by most users is \"AzurePublicCloud\", other values are: - ChinaCloud: \"AzureChinaCloud\" - GermanCloud: \"AzureGermanCloud\" - PublicCloud: \"AzurePublicCloud\" - USGovernmentCloud: \"AzureUSGovernmentCloud\"",
          "type": "string"
        },
        "bastionSpec": {
          "description": "BastionSpec encapsulates all things related to the Bastions in the cluster.",
          "properties": {
            "azureBastion": {
              "description": "AzureBastion specifies how the Azure Bastion cloud component should be configured.",
              "properties": {
                "name": {
                  "type": "string"
                },
                "publicIP": {
                  "description": "PublicIPSpec defines the inputs to create an Azure public IP address.",
                  "properties": {
                    "dnsName": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "name"
                  ],
                  "type": "object",
                  "additionalProperties": false
                },
                "subnet": {
                  "description": "SubnetSpec configures an Azure subnet.",
                  "properties": {
                    "cidrBlocks": {
                      "description": "CIDRBlocks defines the subnet's address space, specified as one or more address prefixes in CIDR notation.",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "id": {
                      "description": "ID defines a unique identifier to reference this resource.",
                      "type": "string"
                    },
                    "name": {
                      "description": "Name defines a name for the subnet resource.",
                      "type": "string"
                    },
                    "natGateway": {
                      "description": "NatGateway associated with this subnet.",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "ip": {
                          "description": "PublicIPSpec defines the inputs to create an Azure public IP address.",
                          "properties": {
                            "dnsName": {
                              "type": "string"
                            },
                            "name": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "name"
                          ],
                          "type": "object",
                          "additionalProperties": false
                        },
                        "name": {
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "role": {
                      "description": "Role defines the subnet role (eg. Node, ControlPlane)",
                      "type": "string"
                    },
                    "routeTable": {
                      "description": "RouteTable defines the route table that should be attached to this subnet.",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "securityGroup": {
                      "description": "SecurityGroup defines the NSG (network security group) that should be attached to this subnet.",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        },
                        "securityRules": {
                          "description": "SecurityRules is a slice of Azure security rules for security groups.",
                          "items": {
                            "description": "SecurityRule defines an Azure security rule for security groups.",
                            "properties": {
                              "description": {
                                "description": "A description for this rule. Restricted to 140 chars.",
                                "type": "string"
                              },
                              "destination": {
                                "description": "Destination is the destination address prefix. CIDR or destination IP range. Asterix '*' can also be used to match all source IPs. Default tags such as 'VirtualNetwork', 'AzureLoadBalancer' and 'Internet' can also be used.",
                                "type": "string"
                              },
                              "destinationPorts": {
                                "description": "DestinationPorts specifies the destination port or range. Integer or range between 0 and 65535. Asterix '*' can also be used to match all ports.",
                                "type": "string"
                              },
                              "direction": {
                                "description": "Direction indicates whether the rule applies to inbound, or outbound traffic. \"Inbound\" or \"Outbound\".",
                                "enum": [
                                  "Inbound",
                                  "Outbound"
                                ],
                                "type": "string"
                              },
                              "name": {
                                "description": "Name is a unique name within the network security group.",
                                "type": "string"
                              },
                              "priority": {
                                "description": "Priority is a number between 100 and 4096. Each rule should have a unique value for priority. Rules are processed in priority order, with lower numbers processed before higher numbers. Once traffic matches a rule, processing stops.",
                                "format": "int32",
                                "type": "integer"
                              },
                              "protocol": {
                                "description": "Protocol specifies the protocol type. \"Tcp\", \"Udp\", \"Icmp\", or \"*\".",
                                "enum": [
                                  "Tcp",
                                  "Udp",
                                  "Icmp",
                                  "*"
                                ],
                                "type": "string"
                              },
                              "source": {
                                "description": "Source specifies the CIDR or source IP range. Asterix '*' can also be used to match all source IPs. Default tags such as 'VirtualNetwork', 'AzureLoadBalancer' and 'Internet' can also be used. If this is an ingress rule, specifies where network traffic originates from.",
                                "type": "string"
                              },
                              "sourcePorts": {
                                "description": "SourcePorts specifies source port or range. Integer or range between 0 and 65535. Asterix '*' can also be used to match all ports.",
                                "type": "string"
                              }
                            },
                            "required": [
                              "description",
                              "direction",
                              "name",
                              "protocol"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        },
                        "tags": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Tags defines a map of tags.",
                          "type": "object"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "name"
                  ],
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "cloudProviderConfigOverrides": {
          "description": "CloudProviderConfigOverrides is an optional set of configuration values that can be overridden in azure cloud provider config. This is only a subset of options that are available in azure cloud provider config. Some values for the cloud provider config are inferred from other parts of cluster api provider azure spec, and may not be available for overrides. See: https://kubernetes-sigs.github.io/cloud-provider-azure/install/configs Note: All cloud provider config values can be customized by creating the secret beforehand. CloudProviderConfigOverrides is only used when the secret is managed by the Azure Provider.",
          "properties": {
            "backOffs": {
              "description": "BackOffConfig indicates the back-off config options.",
              "properties": {
                "cloudProviderBackoff": {
                  "type": "boolean"
                },
                "cloudProviderBackoffDuration": {
                  "type": "integer"
                },
                "cloudProviderBackoffExponent": {
                  "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
                },
                "cloudProviderBackoffJitter": {
                  "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
                },
                "cloudProviderBackoffRetries": {
                  "type": "integer"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "rateLimits": {
              "items": {
                "description": "RateLimitSpec represents the rate limit configuration for a particular kind of resource. Eg. loadBalancerRateLimit is used to configure rate limits for load balancers. This eventually gets converted to CloudProviderRateLimitConfig that cloud-provider-azure expects. See: https://github.com/kubernetes-sigs/cloud-provider-azure/blob/d585c2031925b39c925624302f22f8856e29e352/pkg/provider/azure_ratelimit.go#L25 We cannot use CloudProviderRateLimitConfig directly because floating point values are not supported in controller-tools. See: https://github.com/kubernetes-sigs/controller-tools/issues/245",
                "properties": {
                  "config": {
                    "description": "RateLimitConfig indicates the rate limit config options.",
                    "properties": {
                      "cloudProviderRateLimit": {
                        "type": "boolean"
                      },
                      "cloudProviderRateLimitBucket": {
                        "type": "integer"
                      },
                      "cloudProviderRateLimitBucketWrite": {
                        "type": "integer"
                      },
                      "cloudProviderRateLimitQPS": {
                        "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
                      },
                      "cloudProviderRateLimitQPSWrite": {
                        "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
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "name": {
                    "description": "Name is the name of the rate limit spec.",
                    "enum": [
                      "defaultRateLimit",
                      "routeRateLimit",
                      "subnetsRateLimit",
                      "interfaceRateLimit",
                      "routeTableRateLimit",
                      "loadBalancerRateLimit",
                      "publicIPAddressRateLimit",
                      "securityGroupRateLimit",
                      "virtualMachineRateLimit",
                      "storageAccountRateLimit",
                      "diskRateLimit",
                      "snapshotRateLimit",
                      "virtualMachineScaleSetRateLimit",
                      "virtualMachineSizesRateLimit",
                      "availabilitySetRateLimit"
                    ],
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "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
        },
        "identityRef": {
          "description": "IdentityRef is a reference to an AzureIdentity to be used when reconciling this cluster",
          "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 should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.",
              "type": "string"
            },
            "kind": {
              "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
              "type": "string"
            },
            "name": {
              "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
              "type": "string"
            },
            "namespace": {
              "description": "Namespace of the referent. More 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. More 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. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids",
              "type": "string"
            }
          },
          "type": "object",
          "x-kubernetes-map-type": "atomic",
          "additionalProperties": false
        },
        "location": {
          "type": "string"
        },
        "networkSpec": {
          "description": "NetworkSpec encapsulates all things related to Azure network.",
          "properties": {
            "apiServerLB": {
              "description": "APIServerLB is the configuration for the control-plane load balancer.",
              "properties": {
                "frontendIPs": {
                  "items": {
                    "description": "FrontendIP defines a load balancer frontend IP configuration.",
                    "properties": {
                      "name": {
                        "minLength": 1,
                        "type": "string"
                      },
                      "privateIP": {
                        "type": "string"
                      },
                      "publicIP": {
                        "description": "PublicIPSpec defines the inputs to create an Azure public IP address.",
                        "properties": {
                          "dnsName": {
                            "type": "string"
                          },
                          "name": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "name"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "type": "array"
                },
                "frontendIPsCount": {
                  "description": "FrontendIPsCount specifies the number of frontend IP addresses for the load balancer.",
                  "format": "int32",
                  "type": "integer"
                },
                "id": {
                  "type": "string"
                },
                "idleTimeoutInMinutes": {
                  "description": "IdleTimeoutInMinutes specifies the timeout for the TCP idle connection.",
                  "format": "int32",
                  "type": "integer"
                },
                "name": {
                  "type": "string"
                },
                "sku": {
                  "description": "SKU defines an Azure load balancer SKU.",
                  "type": "string"
                },
                "type": {
                  "description": "LBType defines an Azure load balancer Type.",
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "controlPlaneOutboundLB": {
              "description": "ControlPlaneOutboundLB is the configuration for the control-plane outbound load balancer. This is different from APIServerLB, and is used only in private clusters (optionally) for enabling outbound traffic.",
              "properties": {
                "frontendIPs": {
                  "items": {
                    "description": "FrontendIP defines a load balancer frontend IP configuration.",
                    "properties": {
                      "name": {
                        "minLength": 1,
                        "type": "string"
                      },
                      "privateIP": {
                        "type": "string"
                      },
                      "publicIP": {
                        "description": "PublicIPSpec defines the inputs to create an Azure public IP address.",
                        "properties": {
                          "dnsName": {
                            "type": "string"
                          },
                          "name": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "name"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "type": "array"
                },
                "frontendIPsCount": {
                  "description": "FrontendIPsCount specifies the number of frontend IP addresses for the load balancer.",
                  "format": "int32",
                  "type": "integer"
                },
                "id": {
                  "type": "string"
                },
                "idleTimeoutInMinutes": {
                  "description": "IdleTimeoutInMinutes specifies the timeout for the TCP idle connection.",
                  "format": "int32",
                  "type": "integer"
                },
                "name": {
                  "type": "string"
                },
                "sku": {
                  "description": "SKU defines an Azure load balancer SKU.",
                  "type": "string"
                },
                "type": {
                  "description": "LBType defines an Azure load balancer Type.",
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "nodeOutboundLB": {
              "description": "NodeOutboundLB is the configuration for the node outbound load balancer.",
              "properties": {
                "frontendIPs": {
                  "items": {
                    "description": "FrontendIP defines a load balancer frontend IP configuration.",
                    "properties": {
                      "name": {
                        "minLength": 1,
                        "type": "string"
                      },
                      "privateIP": {
                        "type": "string"
                      },
                      "publicIP": {
                        "description": "PublicIPSpec defines the inputs to create an Azure public IP address.",
                        "properties": {
                          "dnsName": {
                            "type": "string"
                          },
                          "name": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "name"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "type": "array"
                },
                "frontendIPsCount": {
                  "description": "FrontendIPsCount specifies the number of frontend IP addresses for the load balancer.",
                  "format": "int32",
                  "type": "integer"
                },
                "id": {
                  "type": "string"
                },
                "idleTimeoutInMinutes": {
                  "description": "IdleTimeoutInMinutes specifies the timeout for the TCP idle connection.",
                  "format": "int32",
                  "type": "integer"
                },
                "name": {
                  "type": "string"
                },
                "sku": {
                  "description": "SKU defines an Azure load balancer SKU.",
                  "type": "string"
                },
                "type": {
                  "description": "LBType defines an Azure load balancer Type.",
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "privateDNSZoneName": {
              "description": "PrivateDNSZoneName defines the zone name for the Azure Private DNS.",
              "type": "string"
            },
            "subnets": {
              "description": "Subnets is the configuration for the control-plane subnet and the node subnet.",
              "items": {
                "description": "SubnetSpec configures an Azure subnet.",
                "properties": {
                  "cidrBlocks": {
                    "description": "CIDRBlocks defines the subnet's address space, specified as one or more address prefixes in CIDR notation.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "id": {
                    "description": "ID defines a unique identifier to reference this resource.",
                    "type": "string"
                  },
                  "name": {
                    "description": "Name defines a name for the subnet resource.",
                    "type": "string"
                  },
                  "natGateway": {
                    "description": "NatGateway associated with this subnet.",
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "ip": {
                        "description": "PublicIPSpec defines the inputs to create an Azure public IP address.",
                        "properties": {
                          "dnsName": {
                            "type": "string"
                          },
                          "name": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "name"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "role": {
                    "description": "Role defines the subnet role (eg. Node, ControlPlane)",
                    "type": "string"
                  },
                  "routeTable": {
                    "description": "RouteTable defines the route table that should be attached to this subnet.",
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "securityGroup": {
                    "description": "SecurityGroup defines the NSG (network security group) that should be attached to this subnet.",
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      },
                      "securityRules": {
                        "description": "SecurityRules is a slice of Azure security rules for security groups.",
                        "items": {
                          "description": "SecurityRule defines an Azure security rule for security groups.",
                          "properties": {
                            "description": {
                              "description": "A description for this rule. Restricted to 140 chars.",
                              "type": "string"
                            },
                            "destination": {
                              "description": "Destination is the destination address prefix. CIDR or destination IP range. Asterix '*' can also be used to match all source IPs. Default tags such as 'VirtualNetwork', 'AzureLoadBalancer' and 'Internet' can also be used.",
                              "type": "string"
                            },
                            "destinationPorts": {
                              "description": "DestinationPorts specifies the destination port or range. Integer or range between 0 and 65535. Asterix '*' can also be used to match all ports.",
                              "type": "string"
                            },
                            "direction": {
                              "description": "Direction indicates whether the rule applies to inbound, or outbound traffic. \"Inbound\" or \"Outbound\".",
                              "enum": [
                                "Inbound",
                                "Outbound"
                              ],
                              "type": "string"
                            },
                            "name": {
                              "description": "Name is a unique name within the network security group.",
                              "type": "string"
                            },
                            "priority": {
                              "description": "Priority is a number between 100 and 4096. Each rule should have a unique value for priority. Rules are processed in priority order, with lower numbers processed before higher numbers. Once traffic matches a rule, processing stops.",
                              "format": "int32",
                              "type": "integer"
                            },
                            "protocol": {
                              "description": "Protocol specifies the protocol type. \"Tcp\", \"Udp\", \"Icmp\", or \"*\".",
                              "enum": [
                                "Tcp",
                                "Udp",
                                "Icmp",
                                "*"
                              ],
                              "type": "string"
                            },
                            "source": {
                              "description": "Source specifies the CIDR or source IP range. Asterix '*' can also be used to match all source IPs. Default tags such as 'VirtualNetwork', 'AzureLoadBalancer' and 'Internet' can also be used. If this is an ingress rule, specifies where network traffic originates from.",
                              "type": "string"
                            },
                            "sourcePorts": {
                              "description": "SourcePorts specifies source port or range. Integer or range between 0 and 65535. Asterix '*' can also be used to match all ports.",
                              "type": "string"
                            }
                          },
                          "required": [
                            "description",
                            "direction",
                            "name",
                            "protocol"
                          ],
                          "type": "object",
                          "additionalProperties": false
                        },
                        "type": "array"
                      },
                      "tags": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "description": "Tags defines a map of tags.",
                        "type": "object"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  }
                },
                "required": [
                  "name"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "vnet": {
              "description": "Vnet is the configuration for the Azure virtual network.",
              "properties": {
                "cidrBlocks": {
                  "description": "CIDRBlocks defines the virtual network's address space, specified as one or more address prefixes in CIDR notation.",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "id": {
                  "description": "ID is the identifier of the virtual network this provider should use to create resources.",
                  "type": "string"
                },
                "name": {
                  "description": "Name defines a name for the virtual network resource.",
                  "type": "string"
                },
                "resourceGroup": {
                  "description": "ResourceGroup is the name of the resource group of the existing virtual network or the resource group where a managed virtual network should be created.",
                  "type": "string"
                },
                "tags": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Tags is a collection of tags describing the resource.",
                  "type": "object"
                }
              },
              "required": [
                "name"
              ],
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "resourceGroup": {
          "type": "string"
        },
        "subscriptionID": {
          "type": "string"
        }
      },
      "required": [
        "location"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "AzureClusterStatus defines the observed state of AzureCluster.",
      "properties": {
        "conditions": {
          "description": "Conditions defines current service state of the AzureCluster.",
          "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. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
                "format": "date-time",
                "type": "string"
              },
              "message": {
                "description": "A human readable message indicating details about the transition. This field may be empty.",
                "type": "string"
              },
              "reason": {
                "description": "The reason for the condition's last transition in CamelCase. The specific API may choose whether or not this field is considered a guaranteed API. This field may not be empty.",
                "type": "string"
              },
              "severity": {
                "description": "Severity provides an explicit classification of Reason code, so the users or machines can immediately understand the current situation and act accordingly. The 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. Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important.",
                "type": "string"
              }
            },
            "required": [
              "status",
              "type"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "failureDomains": {
          "additionalProperties": {
            "description": "FailureDomainSpec is the Schema for Cluster API failure domains. It allows controllers to understand how many failure domains a cluster can optionally span across.",
            "properties": {
              "attributes": {
                "additionalProperties": {
                  "type": "string"
                },
                "description": "Attributes is a free form map of attributes an infrastructure provider might use or require.",
                "type": "object"
              },
              "controlPlane": {
                "description": "ControlPlane determines if this failure domain is suitable for use by control plane machines.",
                "type": "boolean"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "description": "FailureDomains specifies the list of unique failure domains for the location/region of the cluster. A FailureDomain maps to Availability Zone with an Azure Region (if the region support them). An Availability Zone is a separate data center within a region and they can be used to ensure the cluster is more resilient to failure. See: https://learn.microsoft.com/azure/reliability/availability-zones-overview This list will be used by Cluster API to try and spread the machines across the failure domains.",
          "type": "object"
        },
        "longRunningOperationStates": {
          "description": "LongRunningOperationStates saves the states for Azure long-running operations so they can be continued on the next reconciliation loop.",
          "items": {
            "description": "Future contains the data needed for an Azure long-running operation to continue across reconcile loops.",
            "properties": {
              "data": {
                "description": "Data is the base64 url encoded json Azure AutoRest Future.",
                "type": "string"
              },
              "name": {
                "description": "Name is the name of the Azure resource. Together with the service name, this forms the unique identifier for the future.",
                "type": "string"
              },
              "resourceGroup": {
                "description": "ResourceGroup is the Azure resource group for the resource.",
                "type": "string"
              },
              "serviceName": {
                "description": "ServiceName is the name of the Azure service. Together with the name of the resource, this forms the unique identifier for the future.",
                "type": "string"
              },
              "type": {
                "description": "Type describes the type of future, such as update, create, delete, etc.",
                "type": "string"
              }
            },
            "required": [
              "name",
              "serviceName",
              "type"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "ready": {
          "description": "Ready is true when the provider resource is ready.",
          "type": "boolean"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
