# Copyright 2023 Google LLC. All Rights Reserved.
# 
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# 
#     http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
info:
  title: ContainerAzure/Cluster
  description: An Anthos cluster running on Azure.
  x-dcl-struct-name: Cluster
  x-dcl-has-iam: false
  x-dcl-ref:
    text: API reference
    url: https://cloud.google.com/anthos/clusters/docs/multi-cloud/reference/rest/v1/projects.locations.azureClusters
  x-dcl-guides:
  - text: Multicloud overview
    url: https://cloud.google.com/anthos/clusters/docs/multi-cloud
paths:
  get:
    description: The function used to get information about a Cluster
    parameters:
    - name: cluster
      required: true
      description: A full instance of a Cluster
  apply:
    description: The function used to apply information about a Cluster
    parameters:
    - name: cluster
      required: true
      description: A full instance of a Cluster
  delete:
    description: The function used to delete a Cluster
    parameters:
    - name: cluster
      required: true
      description: A full instance of a Cluster
  deleteAll:
    description: The function used to delete all Cluster
    parameters:
    - name: project
      required: true
      schema:
        type: string
    - name: location
      required: true
      schema:
        type: string
  list:
    description: The function used to list information about many Cluster
    parameters:
    - name: project
      required: true
      schema:
        type: string
    - name: location
      required: true
      schema:
        type: string
components:
  schemas:
    Cluster:
      title: Cluster
      x-dcl-id: projects/{{project}}/locations/{{location}}/azureClusters/{{name}}
      x-dcl-parent-container: project
      x-dcl-has-create: true
      x-dcl-has-iam: false
      x-dcl-read-timeout: 0
      x-dcl-apply-timeout: 0
      x-dcl-delete-timeout: 0
      type: object
      required:
      - name
      - azureRegion
      - resourceGroupId
      - networking
      - controlPlane
      - authorization
      - project
      - location
      - fleet
      properties:
        annotations:
          type: object
          additionalProperties:
            type: string
          x-dcl-go-name: Annotations
          description: 'Optional. Annotations on the cluster. This field has the same
            restrictions as Kubernetes annotations. The total size of all keys and
            values combined is limited to 256k. Keys can have 2 segments: prefix (optional)
            and name (required), separated by a slash (/). Prefix must be a DNS subdomain.
            Name must be 63 characters or less, begin and end with alphanumerics,
            with dashes (-), underscores (_), dots (.), and alphanumerics between.'
          x-kubernetes-immutable: true
        authorization:
          type: object
          x-dcl-go-name: Authorization
          x-dcl-go-type: ClusterAuthorization
          description: Configuration related to the cluster RBAC settings.
          required:
          - adminUsers
          properties:
            adminUsers:
              type: array
              x-dcl-go-name: AdminUsers
              description: Users that can perform operations as a cluster admin. A
                new ClusterRoleBinding will be created to grant the cluster-admin
                ClusterRole to the users. Up to ten admin users can be provided. For
                more info on RBAC, see https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles
              x-dcl-send-empty: true
              x-dcl-list-type: list
              items:
                type: object
                x-dcl-go-type: ClusterAuthorizationAdminUsers
                required:
                - username
                properties:
                  username:
                    type: string
                    x-dcl-go-name: Username
                    description: The name of the user, e.g. `my-gcp-id@gmail.com`.
        azureRegion:
          type: string
          x-dcl-go-name: AzureRegion
          description: The Azure region where the cluster runs. Each Google Cloud
            region supports a subset of nearby Azure regions. You can call to list
            all supported Azure regions within a given Google Cloud region.
          x-kubernetes-immutable: true
        azureServicesAuthentication:
          type: object
          x-dcl-go-name: AzureServicesAuthentication
          x-dcl-go-type: ClusterAzureServicesAuthentication
          description: Azure authentication configuration for management of Azure
            resources
          x-dcl-conflicts:
          - client
          required:
          - tenantId
          - applicationId
          properties:
            applicationId:
              type: string
              x-dcl-go-name: ApplicationId
              description: The Azure Active Directory Application ID for Authentication
                configuration.
            tenantId:
              type: string
              x-dcl-go-name: TenantId
              description: The Azure Active Directory Tenant ID for Authentication
                configuration.
        client:
          type: string
          x-dcl-go-name: Client
          description: Name of the AzureClient. The `AzureClient` resource must reside
            on the same GCP project and region as the `AzureCluster`. `AzureClient`
            names are formatted as `projects/<project-number>/locations/<region>/azureClients/<client-id>`.
            See Resource Names (https:cloud.google.com/apis/design/resource_names)
            for more details on Google Cloud resource names.
          x-dcl-conflicts:
          - azureServicesAuthentication
          x-dcl-references:
          - resource: ContainerAzure/AzureClient
            field: name
        controlPlane:
          type: object
          x-dcl-go-name: ControlPlane
          x-dcl-go-type: ClusterControlPlane
          description: Configuration related to the cluster control plane.
          required:
          - version
          - subnetId
          - sshConfig
          properties:
            databaseEncryption:
              type: object
              x-dcl-go-name: DatabaseEncryption
              x-dcl-go-type: ClusterControlPlaneDatabaseEncryption
              description: Optional. Configuration related to application-layer secrets
                encryption.
              x-kubernetes-immutable: true
              required:
              - keyId
              properties:
                keyId:
                  type: string
                  x-dcl-go-name: KeyId
                  description: 'The ARM ID of the Azure Key Vault key to encrypt /
                    decrypt data. For example: `/subscriptions/<subscription-id>/resourceGroups/<resource-group-id>/providers/Microsoft.KeyVault/vaults/<key-vault-id>/keys/<key-name>`
                    Encryption will always take the latest version of the key and
                    hence specific version is not supported.'
                  x-kubernetes-immutable: true
            mainVolume:
              type: object
              x-dcl-go-name: MainVolume
              x-dcl-go-type: ClusterControlPlaneMainVolume
              description: Optional. Configuration related to the main volume provisioned
                for each control plane replica. The main volume is in charge of storing
                all of the cluster's etcd state. When unspecified, it defaults to
                a 8-GiB Azure Disk.
              x-kubernetes-immutable: true
              x-dcl-server-default: true
              properties:
                sizeGib:
                  type: integer
                  format: int64
                  x-dcl-go-name: SizeGib
                  description: Optional. The size of the disk, in GiBs. When unspecified,
                    a default value is provided. See the specific reference in the
                    parent resource.
                  x-kubernetes-immutable: true
                  x-dcl-server-default: true
            proxyConfig:
              type: object
              x-dcl-go-name: ProxyConfig
              x-dcl-go-type: ClusterControlPlaneProxyConfig
              description: Proxy configuration for outbound HTTP(S) traffic.
              x-kubernetes-immutable: true
              required:
              - resourceGroupId
              - secretId
              properties:
                resourceGroupId:
                  type: string
                  x-dcl-go-name: ResourceGroupId
                  description: The ARM ID the of the resource group containing proxy
                    keyvault. Resource group ids are formatted as `/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>`
                  x-kubernetes-immutable: true
                secretId:
                  type: string
                  x-dcl-go-name: SecretId
                  description: The URL the of the proxy setting secret with its version.
                    Secret ids are formatted as `https:<key-vault-name>.vault.azure.net/secrets/<secret-name>/<secret-version>`.
                  x-kubernetes-immutable: true
            replicaPlacements:
              type: array
              x-dcl-go-name: ReplicaPlacements
              description: Configuration for where to place the control plane replicas.
                Up to three replica placement instances can be specified. If replica_placements
                is set, the replica placement instances will be applied to the three
                control plane replicas as evenly as possible.
              x-kubernetes-immutable: true
              x-dcl-send-empty: true
              x-dcl-list-type: list
              items:
                type: object
                x-dcl-go-type: ClusterControlPlaneReplicaPlacements
                required:
                - subnetId
                - azureAvailabilityZone
                properties:
                  azureAvailabilityZone:
                    type: string
                    x-dcl-go-name: AzureAvailabilityZone
                    description: For a given replica, the Azure availability zone
                      where to provision the control plane VM and the ETCD disk.
                    x-kubernetes-immutable: true
                  subnetId:
                    type: string
                    x-dcl-go-name: SubnetId
                    description: For a given replica, the ARM ID of the subnet where
                      the control plane VM is deployed. Make sure it's a subnet under
                      the virtual network in the cluster configuration.
                    x-kubernetes-immutable: true
            rootVolume:
              type: object
              x-dcl-go-name: RootVolume
              x-dcl-go-type: ClusterControlPlaneRootVolume
              description: Optional. Configuration related to the root volume provisioned
                for each control plane replica. When unspecified, it defaults to 32-GiB
                Azure Disk.
              x-kubernetes-immutable: true
              x-dcl-server-default: true
              properties:
                sizeGib:
                  type: integer
                  format: int64
                  x-dcl-go-name: SizeGib
                  description: Optional. The size of the disk, in GiBs. When unspecified,
                    a default value is provided. See the specific reference in the
                    parent resource.
                  x-kubernetes-immutable: true
                  x-dcl-server-default: true
            sshConfig:
              type: object
              x-dcl-go-name: SshConfig
              x-dcl-go-type: ClusterControlPlaneSshConfig
              description: SSH configuration for how to access the underlying control
                plane machines.
              required:
              - authorizedKey
              properties:
                authorizedKey:
                  type: string
                  x-dcl-go-name: AuthorizedKey
                  description: The SSH public key data for VMs managed by Anthos.
                    This accepts the authorized_keys file format used in OpenSSH according
                    to the sshd(8) manual page.
            subnetId:
              type: string
              x-dcl-go-name: SubnetId
              description: 'The ARM ID of the subnet where the control plane VMs are
                deployed. Example: `/subscriptions//resourceGroups//providers/Microsoft.Network/virtualNetworks//subnets/default`.'
              x-kubernetes-immutable: true
            tags:
              type: object
              additionalProperties:
                type: string
              x-dcl-go-name: Tags
              description: Optional. A set of tags to apply to all underlying control
                plane Azure resources.
              x-kubernetes-immutable: true
            version:
              type: string
              x-dcl-go-name: Version
              description: The Kubernetes version to run on control plane replicas
                (e.g. `1.19.10-gke.1000`). You can list all supported versions on
                a given Google Cloud region by calling GetAzureServerConfig.
            vmSize:
              type: string
              x-dcl-go-name: VmSize
              description: 'Optional. The Azure VM size name. Example: `Standard_DS2_v2`.
                For available VM sizes, see https://docs.microsoft.com/en-us/azure/virtual-machines/vm-naming-conventions.
                When unspecified, it defaults to `Standard_DS2_v2`.'
              x-dcl-server-default: true
        createTime:
          type: string
          format: date-time
          x-dcl-go-name: CreateTime
          readOnly: true
          description: Output only. The time at which this cluster was created.
          x-kubernetes-immutable: true
        description:
          type: string
          x-dcl-go-name: Description
          description: Optional. A human readable description of this cluster. Cannot
            be longer than 255 UTF-8 encoded bytes.
        endpoint:
          type: string
          x-dcl-go-name: Endpoint
          readOnly: true
          description: Output only. The endpoint of the cluster's API server.
          x-kubernetes-immutable: true
        etag:
          type: string
          x-dcl-go-name: Etag
          readOnly: true
          description: Allows clients to perform consistent read-modify-writes through
            optimistic concurrency control. May be sent on update and delete requests
            to ensure the client has an up-to-date value before proceeding.
          x-kubernetes-immutable: true
        fleet:
          type: object
          x-dcl-go-name: Fleet
          x-dcl-go-type: ClusterFleet
          description: Fleet configuration.
          x-kubernetes-immutable: true
          required:
          - project
          properties:
            membership:
              type: string
              x-dcl-go-name: Membership
              readOnly: true
              description: The name of the managed Hub Membership resource associated
                to this cluster. Membership names are formatted as projects/<project-number>/locations/global/membership/<cluster-id>.
              x-kubernetes-immutable: true
            project:
              type: string
              x-dcl-go-name: Project
              description: The number of the Fleet host project where this cluster
                will be registered.
              x-kubernetes-immutable: true
              x-dcl-references:
              - resource: Cloudresourcemanager/Project
                field: name
                parent: true
        location:
          type: string
          x-dcl-go-name: Location
          description: The location for the resource
          x-kubernetes-immutable: true
        name:
          type: string
          x-dcl-go-name: Name
          description: The name of this resource.
          x-kubernetes-immutable: true
        networking:
          type: object
          x-dcl-go-name: Networking
          x-dcl-go-type: ClusterNetworking
          description: Cluster-wide networking configuration.
          x-kubernetes-immutable: true
          required:
          - virtualNetworkId
          - podAddressCidrBlocks
          - serviceAddressCidrBlocks
          properties:
            podAddressCidrBlocks:
              type: array
              x-dcl-go-name: PodAddressCidrBlocks
              description: The IP address range of the pods in this cluster, in CIDR
                notation (e.g. `10.96.0.0/14`). All pods in the cluster get assigned
                a unique RFC1918 IPv4 address from these ranges. Only a single range
                is supported. This field cannot be changed after creation.
              x-kubernetes-immutable: true
              x-dcl-send-empty: true
              x-dcl-list-type: list
              items:
                type: string
                x-dcl-go-type: string
            serviceAddressCidrBlocks:
              type: array
              x-dcl-go-name: ServiceAddressCidrBlocks
              description: The IP address range for services in this cluster, in CIDR
                notation (e.g. `10.96.0.0/14`). All services in the cluster get assigned
                a unique RFC1918 IPv4 address from these ranges. Only a single range
                is supported. This field cannot be changed after creating a cluster.
              x-kubernetes-immutable: true
              x-dcl-send-empty: true
              x-dcl-list-type: list
              items:
                type: string
                x-dcl-go-type: string
            virtualNetworkId:
              type: string
              x-dcl-go-name: VirtualNetworkId
              description: 'The Azure Resource Manager (ARM) ID of the VNet associated
                with your cluster. All components in the cluster (i.e. control plane
                and node pools) run on a single VNet. Example: `/subscriptions/*/resourceGroups/*/providers/Microsoft.Network/virtualNetworks/*`
                This field cannot be changed after creation.'
              x-kubernetes-immutable: true
        project:
          type: string
          x-dcl-go-name: Project
          description: The project for the resource
          x-kubernetes-immutable: true
          x-dcl-references:
          - resource: Cloudresourcemanager/Project
            field: name
            parent: true
        reconciling:
          type: boolean
          x-dcl-go-name: Reconciling
          readOnly: true
          description: Output only. If set, there are currently changes in flight
            to the cluster.
          x-kubernetes-immutable: true
        resourceGroupId:
          type: string
          x-dcl-go-name: ResourceGroupId
          description: 'The ARM ID of the resource group where the cluster resources
            are deployed. For example: `/subscriptions/*/resourceGroups/*`'
          x-kubernetes-immutable: true
        state:
          type: string
          x-dcl-go-name: State
          x-dcl-go-type: ClusterStateEnum
          readOnly: true
          description: 'Output only. The current state of the cluster. Possible values:
            STATE_UNSPECIFIED, PROVISIONING, RUNNING, RECONCILING, STOPPING, ERROR,
            DEGRADED'
          x-kubernetes-immutable: true
          enum:
          - STATE_UNSPECIFIED
          - PROVISIONING
          - RUNNING
          - RECONCILING
          - STOPPING
          - ERROR
          - DEGRADED
        uid:
          type: string
          x-dcl-go-name: Uid
          readOnly: true
          description: Output only. A globally unique identifier for the cluster.
          x-kubernetes-immutable: true
        updateTime:
          type: string
          format: date-time
          x-dcl-go-name: UpdateTime
          readOnly: true
          description: Output only. The time at which this cluster was last updated.
          x-kubernetes-immutable: true
        workloadIdentityConfig:
          type: object
          x-dcl-go-name: WorkloadIdentityConfig
          x-dcl-go-type: ClusterWorkloadIdentityConfig
          readOnly: true
          description: Output only. Workload Identity settings.
          x-kubernetes-immutable: true
          properties:
            identityProvider:
              type: string
              x-dcl-go-name: IdentityProvider
              description: The ID of the OIDC Identity Provider (IdP) associated to
                the Workload Identity Pool.
              x-kubernetes-immutable: true
            issuerUri:
              type: string
              x-dcl-go-name: IssuerUri
              description: The OIDC issuer URL for this cluster.
              x-kubernetes-immutable: true
            workloadPool:
              type: string
              x-dcl-go-name: WorkloadPool
              description: The Workload Identity Pool associated to the cluster.
              x-kubernetes-immutable: true
