{
  "description": "GCPManagedControlPlane is the Schema for the gcpmanagedcontrolplanes 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": "GCPManagedControlPlaneSpec defines the desired state of GCPManagedControlPlane.",
      "properties": {
        "clusterName": {
          "description": "ClusterName allows you to specify the name of the GKE cluster.\nIf you don't specify a name then a default name will be created\nbased on the namespace and name of the managed control plane.",
          "type": "string"
        },
        "clusterNetwork": {
          "description": "ClusterNetwork define the cluster network.",
          "properties": {
            "pod": {
              "description": "Pod defines the range of CIDRBlock list from where it gets the IP address.",
              "properties": {
                "cidrBlock": {
                  "description": "CidrBlock is where all pods in the cluster are assigned an IP address from this range. Enter a range\n(in CIDR notation) within a network range, a mask, or leave this field blank to use a default range.\nThis setting is permanent.",
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "privateCluster": {
              "description": "PrivateCluster defines the private cluster spec.",
              "properties": {
                "controlPlaneCidrBlock": {
                  "description": "ControlPlaneCidrBlock is the IP range in CIDR notation to use for the hosted master network. This range must not\noverlap with any other ranges in use within the cluster's network. Honored when enabled is true.",
                  "type": "string"
                },
                "controlPlaneGlobalAccess": {
                  "description": "ControlPlaneGlobalAccess is whenever master is accessible globally or not. Honored when enabled is true.",
                  "type": "boolean"
                },
                "disableDefaultSNAT": {
                  "description": "DisableDefaultSNAT disables cluster default sNAT rules. Honored when enabled is true.",
                  "type": "boolean"
                },
                "enablePrivateEndpoint": {
                  "description": "EnablePrivateEndpoint: Whether the master's internal IP\naddress is used as the cluster endpoint.",
                  "type": "boolean"
                },
                "enablePrivateNodes": {
                  "description": "EnablePrivateNodes: Whether nodes have internal IP\naddresses only. If enabled, all nodes are given only RFC\n1918 private addresses and communicate with the master via\nprivate networking.",
                  "type": "boolean"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "service": {
              "description": "Service defines the range of CIDRBlock list from where it gets the IP address.",
              "properties": {
                "cidrBlock": {
                  "description": "CidrBlock is where cluster services will be assigned an IP address from this IP address range. Enter a range\n(in CIDR notation) within a network range, a mask, or leave this field blank to use a default range.\nThis setting is permanent.",
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "useIPAliases": {
              "description": "UseIPAliases is whether alias IPs will be used for pod IPs in the cluster. If false, routes will be used for\npod IPs in the cluster.",
              "type": "boolean"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "controlPlaneVersion": {
          "description": "ControlPlaneVersion represents the control plane version of the GKE cluster.\nIf not specified, the default version currently supported by GKE will be\nused.",
          "type": "string"
        },
        "description": {
          "description": "Description describe the cluster.",
          "type": "string"
        },
        "enableAutopilot": {
          "description": "EnableAutopilot indicates whether to enable autopilot for this GKE cluster.",
          "type": "boolean"
        },
        "enableIdentityService": {
          "description": "EnableIdentityService indicates whether to enable Identity Service component for this GKE cluster.",
          "type": "boolean"
        },
        "endpoint": {
          "description": "Endpoint 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
        },
        "location": {
          "description": "Location represents the location (region or zone) in which the GKE cluster\nwill be created.",
          "type": "string"
        },
        "master_authorized_networks_config": {
          "description": "MasterAuthorizedNetworksConfig represents configuration options for master authorized networks feature of the GKE cluster.\nThis feature is disabled if this field is not specified.",
          "properties": {
            "cidr_blocks": {
              "description": "cidr_blocks define up to 50 external networks that could access\nKubernetes master through HTTPS.",
              "items": {
                "description": "MasterAuthorizedNetworksConfigCidrBlock contains an optional name and one CIDR block.",
                "properties": {
                  "cidr_block": {
                    "description": "cidr_block must be specified in CIDR notation.",
                    "pattern": "^(?:[0-9]{1,3}\\.){3}[0-9]{1,3}(?:\\/([0-9]|[1-2][0-9]|3[0-2]))?$|^([a-fA-F0-9:]+:+)+[a-fA-F0-9]+\\/[0-9]{1,3}$",
                    "type": "string"
                  },
                  "display_name": {
                    "description": "display_name is an field for users to identify CIDR blocks.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "gcp_public_cidrs_access_enabled": {
              "description": "Whether master is accessible via Google Compute Engine Public IP addresses.",
              "type": "boolean"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "project": {
          "description": "Project is the name of the project to deploy the cluster to.",
          "type": "string"
        },
        "releaseChannel": {
          "description": "ReleaseChannel represents the release channel of the GKE cluster.",
          "enum": [
            "rapid",
            "regular",
            "stable"
          ],
          "type": "string"
        }
      },
      "required": [
        "location",
        "project"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "GCPManagedControlPlaneStatus defines the observed state of GCPManagedControlPlane.",
      "properties": {
        "conditions": {
          "description": "Conditions specifies the conditions for the managed control plane",
          "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"
        },
        "currentVersion": {
          "description": "CurrentVersion shows the current version of the GKE control plane.",
          "type": "string"
        },
        "initialized": {
          "description": "Initialized is true when the control plane is available for initial contact.\nThis may occur before the control plane is fully ready.",
          "type": "boolean"
        },
        "ready": {
          "default": false,
          "description": "Ready denotes that the GCPManagedControlPlane API Server is ready to\nreceive requests.",
          "type": "boolean"
        }
      },
      "required": [
        "ready"
      ],
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
