mmv1/products/gkehub2/Feature.yaml (526 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: 'Feature'
description: |
Feature represents the settings and status of any Hub Feature.
references:
guides:
'Registering a Cluster': 'https://cloud.google.com/anthos/multicluster-management/connect/registering-a-cluster#register_cluster'
api: 'https://cloud.google.com/anthos/fleet-management/docs/reference/rest/v1/projects.locations.features'
docs:
id_format: 'projects/{{project}}/locations/{{location}}/features/{{name}}'
base_url: 'projects/{{project}}/locations/{{location}}/features'
self_link: 'projects/{{project}}/locations/{{location}}/features/{{name}}?return_partial_success=true'
create_url: 'projects/{{project}}/locations/{{location}}/features?featureId={{name}}'
delete_url: 'projects/{{project}}/locations/{{location}}/features/{{name}}'
update_url: 'projects/{{project}}/locations/{{location}}/features/{{name}}'
update_verb: 'PATCH'
update_mask: true
import_format:
- 'projects/{{project}}/locations/{{location}}/features/{{name}}'
timeouts:
insert_minutes: 20
update_minutes: 20
delete_minutes: 20
autogen_async: true
async:
actions: ['create', 'delete', 'update']
type: 'OpAsync'
operation:
base_url: '{{op_id}}'
result:
resource_inside_response: true
iam_policy:
method_name_separator: ':'
parent_resource_attribute: 'name'
base_url: 'projects/{{project}}/locations/{{location}}/features/{{name}}'
example_config_body: 'templates/terraform/iam/iam_attributes.go.tmpl'
import_format:
- 'projects/{{project}}/locations/{{location}}/features/{{name}}'
- '{{name}}'
custom_code:
# Skip sweeper gen since this is a child resource.
exclude_sweeper: true
legacy_long_form_project: true
examples:
- name: 'gkehub_feature_multi_cluster_ingress'
primary_resource_id: 'feature'
primary_resource_name: 'fmt.Sprint("multiclusteringress")'
exclude_test: true
- name: 'gkehub_feature_multi_cluster_service_discovery'
primary_resource_id: 'feature'
primary_resource_name: 'fmt.Sprint("multiclusterservicediscovery")'
exclude_test: true
- name: 'gkehub_feature_anthos_service_mesh'
primary_resource_id: 'feature'
primary_resource_name: 'fmt.Sprint("servicemesh")'
exclude_test: true
- name: 'enable_fleet_observability_for_default_logs_with_COPY'
primary_resource_id: 'feature'
primary_resource_name: 'fmt.Sprint("fleetobservability")'
exclude_test: true
- name: 'enable_fleet_observability_for_scope_logs_with_MOVE'
primary_resource_id: 'feature'
primary_resource_name: 'fmt.Sprint("fleetobservability")'
exclude_test: true
- name: 'enable_fleet_observability_for_both_default_and_scope_logs'
primary_resource_id: 'feature'
primary_resource_name: 'fmt.Sprint("fleetobservability")'
exclude_test: true
- name: 'enable_fleet_default_member_config_service_mesh'
primary_resource_id: 'feature'
primary_resource_name: 'fmt.Sprintf("servicemesh")'
exclude_test: true
- name: 'enable_fleet_default_member_config_configmanagement'
primary_resource_id: 'feature'
primary_resource_name: 'fmt.Sprintf("configmanagement")'
exclude_test: true
- name: 'enable_fleet_default_member_config_policycontroller'
primary_resource_id: 'feature'
primary_resource_name: 'fmt.Sprintf("policycontroller")'
exclude_test: true
- name: 'enable_fleet_default_member_config_policycontroller_full'
primary_resource_id: 'feature'
primary_resource_name: 'fmt.Sprintf("policycontroller")'
exclude_test: true
- name: 'enable_fleet_default_member_config_policycontroller_minimal'
primary_resource_id: 'feature'
primary_resource_name: 'fmt.Sprintf("policycontroller")'
exclude_test: true
- name: 'gkehub_feature_clusterupgrade'
primary_resource_id: 'feature'
primary_resource_name: 'fmt.Sprint("clusterupgrade")'
exclude_test: true
parameters:
- name: 'location'
type: String
description: The location for the resource
url_param_only: true
required: true
immutable: true
properties:
- name: 'name'
type: String
description: The full, unique name of this Feature resource
url_param_only: true
immutable: true
diff_suppress_func: 'tpgresource.CompareSelfLinkOrResourceName'
custom_flatten: 'templates/terraform/custom_flatten/name_from_self_link.tmpl'
custom_expand: 'templates/terraform/custom_expand/resource_from_self_link.go.tmpl'
- name: 'labels'
type: KeyValueLabels
description: GCP labels for this Feature.
- name: 'resourceState'
type: NestedObject
description: State of the Feature resource itself.
output: true
properties:
- name: 'state'
type: Enum
description: The current state of the Feature resource in the Hub API.
output: true
enum_values:
- 'STATE_UNSPECIFIED'
- 'ENABLING'
- 'ACTIVE'
- 'DISABLING'
- 'UPDATING'
- 'SERVICE_UPDATING'
- name: 'hasResources'
type: Boolean
description: Whether this Feature has outstanding resources that need to be cleaned up before it can be disabled.
output: true
- name: 'spec'
type: NestedObject
description: Optional. Hub-wide Feature configuration. If this Feature does not support any Hub-wide configuration, this field may be unused.
properties:
- name: 'multiclusteringress'
type: NestedObject
description: Multicluster Ingress-specific spec.
properties:
- name: 'configMembership'
type: String
description: 'Fully-qualified Membership name which hosts the MultiClusterIngress CRD. Example: `projects/foo-proj/locations/global/memberships/bar`'
required: true
- name: 'fleetobservability'
type: NestedObject
description: Fleet Observability feature spec.
properties:
- name: 'loggingConfig'
type: NestedObject
description: 'Specified if fleet logging feature is enabled for the entire fleet. If UNSPECIFIED, fleet logging feature is disabled for the entire fleet.'
properties:
- name: 'defaultConfig'
type: NestedObject
description: 'Specified if applying the default routing config to logs not specified in other configs.'
properties:
- name: 'mode'
type: Enum
description: Specified if fleet logging feature is enabled.
enum_values:
- 'MODE_UNSPECIFIED'
- 'COPY'
- 'MOVE'
- name: 'fleetScopeLogsConfig'
type: NestedObject
description: 'Specified if applying the routing config to all logs for all fleet scopes.'
properties:
- name: 'mode'
type: Enum
description: Specified if fleet logging feature is enabled.
enum_values:
- 'MODE_UNSPECIFIED'
- 'COPY'
- 'MOVE'
- name: 'clusterupgrade'
type: NestedObject
description: Clusterupgrade feature spec.
properties:
- name: 'upstreamFleets'
type: Array
description: |
Specified if other fleet should be considered as a source of upgrades. Currently, at most one upstream fleet is allowed. The fleet name should be either fleet project number or id.
required: true
item_type:
type: String
- name: 'postConditions'
type: NestedObject
description: |
Post conditions to override for the specified upgrade.
required: true
default_from_api: true
properties:
- name: 'soaking'
type: String
description: |
Amount of time to "soak" after a rollout has been finished before marking it COMPLETE. Cannot exceed 30 days.
required: true
- name: 'gkeUpgradeOverrides'
type: Array
description: |
Configuration overrides for individual upgrades.
item_type:
type: NestedObject
properties:
- name: 'upgrade'
type: NestedObject
description: |
Which upgrade to override.
required: true
properties:
- name: 'name'
type: String
description: |
Name of the upgrade, e.g., "k8s_control_plane". It should be a valid upgrade name. It must not exceet 99 characters.
required: true
- name: 'version'
type: String
description: |
Version of the upgrade, e.g., "1.22.1-gke.100". It should be a valid version. It must not exceet 99 characters.
required: true
- name: 'postConditions'
type: NestedObject
description: |
Post conditions to override for the specified upgrade.
required: true
properties:
- name: 'soaking'
type: String
description: |
Amount of time to "soak" after a rollout has been finished before marking it COMPLETE. Cannot exceed 30 days.
required: true
- name: 'fleetDefaultMemberConfig'
type: NestedObject
description: Optional. Fleet Default Membership Configuration.
send_empty_value: true
properties:
- name: 'mesh'
type: NestedObject
description: Service Mesh spec
properties:
- name: 'management'
type: Enum
description: 'Whether to automatically manage Service Mesh'
required: true
enum_values:
- 'MANAGEMENT_UNSPECIFIED'
- 'MANAGEMENT_AUTOMATIC'
- 'MANAGEMENT_MANUAL'
- name: 'configmanagement'
type: NestedObject
description: Config Management spec
properties:
- name: 'version'
type: String
description: 'Version of Config Sync installed'
- name: 'management'
type: Enum
description: 'Set this field to MANAGEMENT_AUTOMATIC to enable Config Sync auto-upgrades, and set this field to MANAGEMENT_MANUAL or MANAGEMENT_UNSPECIFIED to disable Config Sync auto-upgrades.'
enum_values:
- 'MANAGEMENT_UNSPECIFIED'
- 'MANAGEMENT_AUTOMATIC'
- 'MANAGEMENT_MANUAL'
- name: 'configSync'
type: NestedObject
description: 'ConfigSync configuration for the cluster'
properties:
- name: 'sourceFormat'
type: String
description: 'Specifies whether the Config Sync Repo is in hierarchical or unstructured mode'
- name: 'enabled'
type: Boolean
description: 'Enables the installation of ConfigSync. If set to true, ConfigSync resources will be created and the other ConfigSync fields will be applied if exist. If set to false, all other ConfigSync fields will be ignored, ConfigSync resources will be deleted. If omitted, ConfigSync resources will be managed depends on the presence of the git or oci field.'
- name: 'preventDrift'
type: Boolean
description: 'Set to true to enable the Config Sync admission webhook to prevent drifts. If set to `false`, disables the Config Sync admission webhook and does not prevent drifts.'
- name: 'metricsGcpServiceAccountEmail'
type: String
description: 'The Email of the Google Cloud Service Account (GSA) used for exporting Config Sync metrics to Cloud Monitoring. The GSA should have the Monitoring Metric Writer(roles/monitoring.metricWriter) IAM role. The Kubernetes ServiceAccount `default` in the namespace `config-management-monitoring` should be bound to the GSA.'
- name: 'git'
type: NestedObject
description: 'Git repo configuration for the cluster'
properties:
- name: 'syncRepo'
type: String
description: 'The URL of the Git repository to use as the source of truth'
- name: 'syncBranch'
type: String
description: 'The branch of the repository to sync from. Default: master'
- name: 'policyDir'
type: String
description: 'The path within the Git repository that represents the top level of the repo to sync'
- name: 'syncRev'
type: String
description: 'Git revision (tag or hash) to check out. Default HEAD'
- name: 'secretType'
type: String
description: 'Type of secret configured for access to the Git repo'
required: true
- name: 'httpsProxy'
type: String
description: 'URL for the HTTPS Proxy to be used when communicating with the Git repo'
- name: 'gcpServiceAccountEmail'
type: String
description: 'The Google Cloud Service Account Email used for auth when secretType is gcpServiceAccount'
- name: 'syncWaitSecs'
type: String
description: 'Period in seconds between consecutive syncs. Default: 15'
- name: 'oci'
type: NestedObject
description: 'OCI repo configuration for the cluster'
properties:
- name: 'syncRepo'
type: String
description: 'The OCI image repository URL for the package to sync from'
- name: 'policyDir'
type: String
description: 'The absolute path of the directory that contains the local resources. Default: the root directory of the image'
- name: 'secretType'
type: String
description: 'Type of secret configured for access to the Git repo'
required: true
- name: 'gcpServiceAccountEmail'
type: String
description: 'The Google Cloud Service Account Email used for auth when secretType is gcpServiceAccount'
- name: 'syncWaitSecs'
type: String
description: 'Period in seconds between consecutive syncs. Default: 15'
- name: 'version'
type: String
description: 'Version of Config Sync installed'
deprecation_message: 'The `configmanagement.config_sync.oci.version` field is deprecated and will be removed in a future major release. Please use `configmanagement.version` field to specify the version of Config Sync installed instead.'
- name: 'policycontroller'
type: NestedObject
description: Policy Controller spec
properties:
- name: 'version'
type: String
description: 'Configures the version of Policy Controller'
default_from_api: true
- name: 'policyControllerHubConfig'
type: NestedObject
description: 'Configuration of Policy Controller'
required: true
properties:
- name: 'installSpec'
type: Enum
description: 'Configures the mode of the Policy Controller installation'
required: true
enum_values:
- 'INSTALL_SPEC_UNSPECIFIED'
- 'INSTALL_SPEC_NOT_INSTALLED'
- 'INSTALL_SPEC_ENABLED'
- 'INSTALL_SPEC_SUSPENDED'
- 'INSTALL_SPEC_DETACHED'
- name: 'auditIntervalSeconds'
type: Integer
description: 'Interval for Policy Controller Audit scans (in seconds). When set to 0, this disables audit functionality altogether.'
- name: 'exemptableNamespaces'
type: Array
description: 'The set of namespaces that are excluded from Policy Controller checks. Namespaces do not need to currently exist on the cluster.'
item_type:
type: String
- name: 'logDeniesEnabled'
type: Boolean
description: 'Logs all denies and dry run failures.'
- name: 'mutationEnabled'
type: Boolean
description: 'Enables the ability to mutate resources using Policy Controller.'
- name: 'referentialRulesEnabled'
type: Boolean
description: 'Enables the ability to use Constraint Templates that reference to objects other than the object currently being evaluated.'
- name: 'monitoring'
type: NestedObject
description: 'Monitoring specifies the configuration of monitoring Policy Controller.'
default_from_api: true
properties:
- name: 'backends'
type: Array
description: 'Specifies the list of backends Policy Controller will export to. An empty list would effectively disable metrics export.'
default_from_api: true
item_type:
type: Enum
description: 'required but unused'
enum_values:
- 'MONITORING_BACKEND_UNSPECIFIED'
- 'PROMETHEUS'
- 'CLOUD_MONITORING'
- name: 'constraintViolationLimit'
type: Integer
description: 'The maximum number of audit violations to be stored in a constraint. If not set, the internal default of 20 will be used.'
- name: 'deploymentConfigs'
type: Map
description: 'Map of deployment configs to deployments ("admission", "audit", "mutation").'
default_from_api: true
key_name: 'component'
key_description: 'Specifies which component to apply the deployment config to. Accepted values are "admission", "audit" and "mutation".'
value_type:
description: 'Configures deployment-specific options, such as high availability.'
name: deploymentConfig
type: NestedObject
properties:
- name: 'replicaCount'
type: Integer
description: 'Pod replica count.'
default_from_api: true
send_empty_value: false
- name: 'containerResources'
type: NestedObject
description: 'Container resource requirements.'
properties:
- name: 'limits'
type: NestedObject
description: 'Limits describes the maximum amount of compute resources allowed for use by the running container.'
properties:
- name: 'memory'
type: String
description: 'Memory requirement expressed in Kubernetes resource units.'
- name: 'cpu'
type: String
description: 'CPU requirement expressed in Kubernetes resource units.'
- name: 'requests'
type: NestedObject
description: 'Requests describes the amount of compute resources reserved for the container by the kube-scheduler.'
properties:
- name: 'memory'
type: String
description: 'Memory requirement expressed in Kubernetes resource units.'
- name: 'cpu'
type: String
description: 'CPU requirement expressed in Kubernetes resource units.'
- name: 'podAffinity'
type: Enum
description: 'Pod affinity configuration.'
default_from_api: true
enum_values:
- 'AFFINITY_UNSPECIFIED'
- 'NO_AFFINITY'
- 'ANTI_AFFINITY'
- name: 'podToleration'
type: Array
description: 'Pod tolerations of node taints.'
api_name: podTolerations
item_type:
description: 'required but unused'
type: NestedObject
properties:
- name: 'key'
type: String
description: 'Matches a taint key (not necessarily unique).'
- name: 'operator'
type: String
description: 'Matches a taint operator.'
- name: 'value'
type: String
description: 'Matches a taint value.'
- name: 'effect'
type: String
description: 'Matches a taint effect.'
- name: 'policyContent'
type: NestedObject
description: 'Specifies the desired policy content on the cluster.'
# default_from_api: true
properties:
- name: 'templateLibrary'
type: NestedObject
description: 'Configures the installation of the Template Library.'
default_from_api: true
properties:
- name: 'installation'
type: Enum
description: 'Configures the manner in which the template library is installed on the cluster.'
enum_values:
- 'INSTALLATION_UNSPECIFIED'
- 'NOT_INSTALLED'
- 'ALL'
- name: 'bundles'
type: Map
description: 'Configures which bundles to install and their corresponding install specs.'
key_name: 'bundle'
key_description: 'A bundle name supported in this version. Values configure the exempted namespaces for this bundle.'
value_type:
description: 'The specification configuration for a single managed bundle.'
name: bundleInstallSpec
type: NestedObject
properties:
- name: 'exemptedNamespaces'
type: Array
description: 'The set of namespaces to be exempted from the bundle.'
item_type:
type: String
- name: 'state'
type: NestedObject
description: Output only. The Hub-wide Feature state
output: true
properties:
- name: 'state'
type: NestedObject
description: Output only. The "running state" of the Feature in this Hub.
output: true
properties:
- name: 'code'
type: Enum
description: The high-level, machine-readable status of this Feature.
output: true
enum_values:
- 'CODE_UNSPECIFIED'
- 'OK'
- 'WARNING'
- 'ERROR'
- name: 'description'
type: String
description: A human-readable description of the current status.
output: true
- name: 'updateTime'
type: String
description: 'The time this status and any related Feature-specific details were updated. A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z"'
output: true
- name: 'createTime'
type: String
description: Output only. When the Feature resource was created.
output: true
- name: 'updateTime'
type: String
description: Output only. When the Feature resource was last updated.
output: true
- name: 'deleteTime'
type: String
description: Output only. When the Feature resource was deleted.
output: true