mmv1/products/containerattached/Cluster.yaml (342 lines of code) (raw):
# Copyright 2024 Google Inc.
# 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.
---
name: 'Cluster'
api_resource_type_kind: AttachedCluster
description: |
An Anthos cluster running on customer owned infrastructure.
references:
guides:
'API reference': 'https://cloud.google.com/anthos/clusters/docs/multi-cloud/reference/rest/v1/projects.locations.attachedClusters'
'Multicloud overview': 'https://cloud.google.com/anthos/clusters/docs/multi-cloud'
api: 'https://cloud.google.com/anthos/clusters/docs/multi-cloud/reference/rest'
docs:
id_format: 'projects/{{project}}/locations/{{location}}/attachedClusters/{{name}}'
base_url: 'projects/{{project}}/locations/{{location}}/attachedClusters'
self_link: 'projects/{{project}}/locations/{{location}}/attachedClusters/{{name}}'
create_url: 'projects/{{project}}/locations/{{location}}/attachedClusters?attached_cluster_id={{name}}'
update_url: 'projects/{{project}}/locations/{{location}}/attachedClusters/{{name}}'
update_verb: 'PATCH'
update_mask: true
delete_url: 'projects/{{project}}/locations/{{location}}/attachedClusters/{{name}}'
import_format:
- 'projects/{{project}}/locations/{{location}}/attachedClusters/{{name}}'
timeouts:
insert_minutes: 20
update_minutes: 20
delete_minutes: 20
async:
actions: ['create', 'delete', 'update']
type: 'OpAsync'
operation:
full_url: 'https://{{location}}-gkemulticloud.googleapis.com/v1/{{op_id}}'
result:
resource_inside_response: true
custom_code:
constants: 'templates/terraform/constants/containerattached_cluster_diff.go.tmpl'
pre_update: 'templates/terraform/pre_update/containerattached_update.go.tmpl'
pre_delete: 'templates/terraform/pre_delete/container_attached_deletion_policy.go.tmpl'
examples:
- name: 'container_attached_cluster_basic'
primary_resource_id: 'primary'
primary_resource_name: 'fmt.Sprintf("basic%s", context["random_suffix"])'
vars:
name: 'basic'
- name: 'container_attached_cluster_full'
primary_resource_id: 'primary'
primary_resource_name: 'fmt.Sprintf("basic%s", context["random_suffix"])'
vars:
name: 'basic'
- name: 'container_attached_cluster_ignore_errors'
primary_resource_id: 'primary'
primary_resource_name: 'fmt.Sprintf("basic%s", context["random_suffix"])'
vars:
name: 'basic'
ignore_read_extra:
- 'deletion_policy'
virtual_fields:
- name: 'deletion_policy'
description: 'Policy to determine what flags to send on delete. Possible values: DELETE, DELETE_IGNORE_ERRORS'
type: String
default_value: "DELETE"
parameters:
properties:
- name: 'location'
type: String
description: |
The location for the resource
url_param_only: true
required: true
immutable: true
- name: 'name'
type: String
description: |
The name of this resource.
required: true
immutable: true
custom_flatten: 'templates/terraform/custom_flatten/name_from_self_link.tmpl'
- name: 'description'
type: String
description: |
A human readable description of this attached cluster. Cannot be longer
than 255 UTF-8 encoded bytes.
- name: 'oidcConfig'
type: NestedObject
description: |
OIDC discovery information of the target cluster.
Kubernetes Service Account (KSA) tokens are JWT tokens signed by the cluster
API server. This fields indicates how GCP services
validate KSA tokens in order to allow system workloads (such as GKE Connect
and telemetry agents) to authenticate back to GCP.
Both clusters with public and private issuer URLs are supported.
Clusters with public issuers only need to specify the `issuer_url` field
while clusters with private issuers need to provide both
`issuer_url` and `jwks`.
required: true
properties:
- name: 'issuerUrl'
type: String
description: |
A JSON Web Token (JWT) issuer URI. `issuer` must start with `https://`
required: true
immutable: true
- name: 'jwks'
type: String
description: |
OIDC verification keys in JWKS format (RFC 7517).
immutable: true
- name: 'platformVersion'
type: String
description: |
The platform version for the cluster (e.g. `1.23.0-gke.1`).
required: true
- name: 'distribution'
type: String
description: |
The Kubernetes distribution of the underlying attached cluster. Supported values:
"eks", "aks", "generic". The generic distribution provides the ability to register
or migrate any CNCF conformant cluster.
required: true
immutable: true
- name: 'clusterRegion'
type: String
description: |
Output only. The region where this cluster runs.
For EKS clusters, this is an AWS region. For AKS clusters,
this is an Azure region.
output: true
- name: 'fleet'
type: NestedObject
description: |
Fleet configuration.
required: true
properties:
- name: 'membership'
type: String
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>.
output: true
- name: 'project'
type: String
description: |
The number of the Fleet host project where this cluster will be registered.
required: true
immutable: true
validation:
regex: '^projects/[0-9]+$'
- name: 'state'
type: String
description: |
The current state of the cluster. Possible values:
STATE_UNSPECIFIED, PROVISIONING, RUNNING, RECONCILING, STOPPING, ERROR,
DEGRADED
output: true
- name: 'uid'
type: String
description: |
A globally unique identifier for the cluster.
output: true
- name: 'reconciling'
type: Boolean
description: |
If set, there are currently changes in flight to the cluster.
output: true
- name: 'createTime'
type: String
description: |
Output only. The time at which this cluster was created.
output: true
- name: 'updateTime'
type: String
description: |
The time at which this cluster was last updated.
output: true
- name: 'kubernetesVersion'
type: String
description: |
The Kubernetes version of the cluster.
output: true
- name: 'annotations'
type: KeyValueAnnotations
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. Key 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.
- name: 'workloadIdentityConfig'
type: NestedObject
description: |
Workload Identity settings.
output: true
properties:
- name: 'identityProvider'
type: String
description: |
The ID of the OIDC Identity Provider (IdP) associated to
the Workload Identity Pool.
- name: 'issuerUri'
type: String
description: |
The OIDC issuer URL for this cluster.
- name: 'workloadPool'
type: String
description: |
The Workload Identity Pool associated to the cluster.
- name: 'loggingConfig'
type: NestedObject
description: |
Logging configuration.
# If the user doesn't specify a loggingConfig, the server will supply a default value. Instead of
# letting that happen and allowing the config and state to get mismatched, just manually send an
# empty object if the user doesn't set anything and require the user to explicitly set the field if a
# value is desired.
# If the loggingConfig passed to the server is empty, an empty object is returned, so the diff in that
# case needs to be ignored.
send_empty_value: true
allow_empty_object: true
diff_suppress_func: 'suppressAttachedClustersLoggingConfigDiff'
custom_expand: 'templates/terraform/custom_expand/containerattached_cluster_empty_logging.go.tmpl'
properties:
- name: 'componentConfig'
type: NestedObject
description: |
The configuration of the logging components
send_empty_value: true
allow_empty_object: true
properties:
- name: 'enableComponents'
type: Array
description: |
The components to be enabled.
send_empty_value: true
allow_empty_object: true
item_type:
type: Enum
description: |
The components of the logging configuration.
enum_values:
- 'SYSTEM_COMPONENTS'
- 'WORKLOADS'
- name: 'errors'
type: Array
description: |
A set of errors found in the cluster.
output: true
item_type:
description: |
Describes errors found on attached clusters.
type: NestedObject
properties:
- name: 'message'
type: String
description: |
Human-friendly description of the error.
- name: 'authorization'
type: NestedObject
description: |
Configuration related to the cluster RBAC settings.
custom_flatten: 'templates/terraform/custom_flatten/containerattached_cluster_authorization_user.go.tmpl'
custom_expand: 'templates/terraform/custom_expand/containerattached_cluster_authorization_user.go.tmpl'
properties:
- name: 'adminUsers'
type: Array
description: |
Users that can perform operations as a cluster admin. A managed
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
item_type:
type: String
- name: 'adminGroups'
type: Array
description: |
Groups that can perform operations as a cluster admin. A managed
ClusterRoleBinding will be created to grant the `cluster-admin` ClusterRole
to the groups. Up to ten admin groups can be provided.
For more info on RBAC, see
https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles
item_type:
type: String
- name: 'monitoringConfig'
type: NestedObject
description: |
Monitoring configuration.
default_from_api: true
allow_empty_object: true
properties:
- name: 'managedPrometheusConfig'
type: NestedObject
description: |
Enable Google Cloud Managed Service for Prometheus in the cluster.
allow_empty_object: true
properties:
- name: 'enabled'
type: Boolean
description: |
Enable Managed Collection.
- name: 'binaryAuthorization'
type: NestedObject
description: |
Binary Authorization configuration.
default_from_api: true
allow_empty_object: true
properties:
- name: 'evaluationMode'
type: Enum
description: |
Configure Binary Authorization evaluation mode.
enum_values:
- 'DISABLED'
- 'PROJECT_SINGLETON_POLICY_ENFORCE'
- name: 'proxyConfig'
type: NestedObject
description: |
Support for proxy configuration.
properties:
- name: 'kubernetesSecret'
type: NestedObject
description: |
The Kubernetes Secret resource that contains the HTTP(S) proxy configuration.
properties:
- name: 'name'
type: String
description: |
Name of the kubernetes secret containing the proxy config.
required: true
- name: 'namespace'
type: String
description: |
Namespace of the kubernetes secret containing the proxy config.
required: true
- name: 'securityPostureConfig'
type: NestedObject
description: |
Enable/Disable Security Posture API features for the cluster.
default_from_api: true
deprecation_message: '`security_posture_config` is deprecated and will be removed in a future major release.'
properties:
- name: 'vulnerabilityMode'
type: Enum
description: |
Sets the mode of the Kubernetes security posture API's workload vulnerability scanning.
required: true
enum_values:
- 'VULNERABILITY_DISABLED'
- 'VULNERABILITY_ENTERPRISE'