mmv1/products/alloydb/Cluster.yaml (588 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' description: 'A managed alloydb cluster.' references: guides: 'AlloyDB': 'https://cloud.google.com/alloydb/docs/' api: 'https://cloud.google.com/alloydb/docs/reference/rest/v1/projects.locations.clusters/create' docs: note: | Users can promote a secondary cluster to a primary cluster with the help of `cluster_type`. To promote, users have to set the `cluster_type` property as `PRIMARY` and remove the `secondary_config` field from cluster configuration. [See Example](https://github.com/hashicorp/terraform-provider-google/pull/16413). Switchover is supported in terraform by refreshing the state of the terraform configurations. The switchover operation still needs to be called outside of terraform. After the switchover operation is completed successfully: 1. Refresh the state of the AlloyDB resources by running `terraform apply -refresh-only --auto-approve` . 2. Manually update the terraform configuration file(s) to match the actual state of the resources by modifying the `cluster_type` and `secondary_config` fields. 3. Verify the sync of terraform state by running `terraform plan` and ensure that the infrastructure matches the configuration and no changes are required. base_url: 'projects/{{project}}/locations/{{location}}/clusters' self_link: 'projects/{{project}}/locations/{{location}}/clusters/{{cluster_id}}' mutex: 'projects/{{project}}' create_url: 'projects/{{project}}/locations/{{location}}/clusters?clusterId={{cluster_id}}' update_verb: 'PATCH' update_mask: true import_format: - 'projects/{{project}}/locations/{{location}}/clusters/{{cluster_id}}' - '{{cluster_id}}' timeouts: insert_minutes: 120 update_minutes: 120 delete_minutes: 120 autogen_async: true async: actions: ['create', 'delete', 'update'] type: 'OpAsync' operation: base_url: '{{op_id}}' timeouts: insert_minutes: 120 update_minutes: 120 delete_minutes: 120 result: resource_inside_response: false custom_code: pre_create: 'templates/terraform/pre_create/alloydb_cluster.go.tmpl' pre_update: 'templates/terraform/pre_update/alloydb_cluster.go.tmpl' pre_delete: 'templates/terraform/pre_delete/alloydb_cluster.go.tmpl' # Skipping the sweeper because we need to force-delete clusters. exclude_sweeper: true examples: - name: 'alloydb_cluster_basic' primary_resource_id: 'default' vars: alloydb_cluster_name: 'alloydb-cluster' - name: 'alloydb_cluster_before_upgrade' primary_resource_id: 'default' vars: alloydb_cluster_name: 'alloydb-cluster' alloydb_instance_name: 'alloydb-instance' network_name: 'alloydb-network' - name: 'alloydb_cluster_after_upgrade' primary_resource_id: 'default' vars: alloydb_cluster_name: 'alloydb-cluster' alloydb_instance_name: 'alloydb-instance' network_name: 'alloydb-network' - name: 'alloydb_cluster_full' primary_resource_id: 'full' vars: alloydb_cluster_name: 'alloydb-cluster-full' - name: 'alloydb_cluster_restore' primary_resource_id: 'source' vars: alloydb_cluster_name: 'alloydb-source-cluster' alloydb_backup_restored_cluster_name: 'alloydb-backup-restored' alloydb_pitr_restored_cluster_name: 'alloydb-pitr-restored' alloydb_backup_id: 'alloydb-backup' alloydb_instance_name: 'alloydb-instance' network_name: 'alloydb-network' test_vars_overrides: 'network_name': 'acctest.BootstrapSharedTestNetwork(t, "alloydb-instance-basic")' ignore_read_extra: - 'reconciling' - 'update_time' exclude_test: true - name: 'alloydb_secondary_cluster_basic' primary_resource_id: 'secondary' vars: alloydb_primary_cluster_name: 'alloydb-primary-cluster' alloydb_primary_instance_name: 'alloydb-primary-instance' alloydb_secondary_cluster_name: 'alloydb-secondary-cluster' exclude_test: true - name: 'alloydb_secondary_cluster_basic_test' primary_resource_id: 'secondary' vars: alloydb_primary_cluster_name: 'alloydb-primary-cluster' alloydb_primary_instance_name: 'alloydb-primary-instance' alloydb_secondary_cluster_name: 'alloydb-secondary-cluster' network_name: 'alloydb-network' test_vars_overrides: 'network_name': 'acctest.BootstrapSharedServiceNetworkingConnection(t, "alloydbinstance-network-config-1")' exclude_docs: true virtual_fields: - name: 'deletion_policy' description: | Policy to determine if the cluster should be deleted forcefully. Deleting a cluster forcefully, deletes the cluster and all its associated instances within the cluster. Deleting a Secondary cluster with a secondary instance REQUIRES setting deletion_policy = "FORCE" otherwise an error is returned. This is needed as there is no support to delete just the secondary instance, and the only way to delete secondary instance is to delete the associated secondary cluster forcefully which also deletes the secondary instance. Possible values: DEFAULT, FORCE type: String default_value: "DEFAULT" - name: 'skip_await_major_version_upgrade' type: Boolean default_value: true description: | Set to true to skip awaiting on the major version upgrade of the cluster. Possible values: true, false Default value: "true" parameters: - name: 'clusterId' type: String description: | The ID of the alloydb cluster. url_param_only: true required: true immutable: true - name: 'location' type: String description: | The location where the alloydb cluster should reside. url_param_only: true required: true immutable: true properties: - name: 'name' type: String description: | The name of the cluster resource. output: true - name: 'uid' type: String description: | The system-generated UID of the resource. output: true - name: 'labels' type: KeyValueLabels description: 'User-defined labels for the alloydb cluster.' - name: 'encryptionConfig' type: NestedObject description: | EncryptionConfig describes the encryption config of a cluster or a backup that is encrypted with a CMEK (customer-managed encryption key). properties: - name: 'kmsKeyName' type: String description: | The fully-qualified resource name of the KMS key. Each Cloud KMS key is regionalized and has the following format: projects/[PROJECT]/locations/[REGION]/keyRings/[RING]/cryptoKeys/[KEY_NAME]. immutable: true - name: 'encryptionInfo' type: NestedObject description: | EncryptionInfo describes the encryption information of a cluster or a backup. output: true properties: - name: 'encryptionType' type: Enum description: 'Output only. Type of encryption.' output: true enum_values: - 'TYPE_UNSPECIFIED' - 'GOOGLE_DEFAULT_ENCRYPTION' - 'CUSTOMER_MANAGED_ENCRYPTION' - name: 'kmsKeyVersions' type: Array description: | Output only. Cloud KMS key versions that are being used to protect the database or the backup. output: true item_type: type: String - name: 'continuousBackupInfo' type: NestedObject description: | ContinuousBackupInfo describes the continuous backup properties of a cluster. output: true properties: - name: 'enabledTime' type: String description: | When ContinuousBackup was most recently enabled. Set to null if ContinuousBackup is not enabled. output: true - name: 'schedule' type: Array description: | Days of the week on which a continuous backup is taken. Output only field. Ignored if passed into the request. output: true item_type: type: String - name: 'earliestRestorableTime' type: String description: | The earliest restorable time that can be restored to. Output only field. output: true - name: 'encryptionInfo' type: NestedObject description: | Output only. The encryption information for the WALs and backups required for ContinuousBackup. output: true properties: - name: 'encryptionType' type: String description: 'Output only. Type of encryption.' output: true - name: 'kmsKeyVersions' type: Array description: | Output only. Cloud KMS key versions that are being used to protect the database or the backup. output: true item_type: type: String - name: 'networkConfig' type: NestedObject description: | Metadata related to network configuration. default_from_api: true properties: - name: 'network' type: String description: | The resource link for the VPC network in which cluster resources are created and from which they are accessible via Private IP. The network must belong to the same project as the cluster. It is specified in the form: "projects/{projectNumber}/global/networks/{network_id}". exactly_one_of: - 'network_config.0.network' - 'psc_config.0.psc_enabled' diff_suppress_func: 'tpgresource.ProjectNumberDiffSuppress' - name: 'allocatedIpRange' type: String description: | The name of the allocated IP range for the private IP AlloyDB cluster. For example: "google-managed-services-default". If set, the instance IPs for this cluster will be created in the allocated range. - name: 'displayName' type: String description: | User-settable and human-readable display name for the Cluster. - name: 'etag' type: String description: 'For Resource freshness validation (https://google.aip.dev/154)' - name: 'reconciling' type: Boolean description: | Output only. Reconciling (https://google.aip.dev/128#reconciliation). Set to true if the current state of Cluster does not match the user's intended state, and the service is actively updating the resource to reconcile them. This can happen due to user-triggered updates or system actions like failover or maintenance. output: true - name: 'state' type: String description: 'Output only. The current serving state of the cluster.' output: true - name: 'annotations' type: KeyValueAnnotations description: | Annotations to allow client tools to store small amount of arbitrary data. This is distinct from labels. https://google.aip.dev/128 An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. - name: 'databaseVersion' type: String description: | The database engine major version. This is an optional field and it's populated at the Cluster creation time. Note: Changing this field to a higer version results in upgrading the AlloyDB cluster which is an irreversible change. default_from_api: true - name: 'pscConfig' type: NestedObject description: 'Configuration for Private Service Connect (PSC) for the cluster.' properties: - name: 'pscEnabled' type: Boolean description: 'Create an instance that allows connections from Private Service Connect endpoints to the instance.' - name: 'serviceOwnedProjectNumber' type: Integer description: | The project number that needs to be allowlisted on the network attachment to enable outbound connectivity, if the network attachment is configured to ACCEPT_MANUAL connections. In case the network attachment is configured to ACCEPT_AUTOMATIC, this project number does not need to be allowlisted explicitly. output: true - name: 'initialUser' type: NestedObject description: | Initial user to setup during cluster creation. ignore_read: true custom_flatten: 'templates/terraform/custom_flatten/alloydb_cluster_input_user_flatten.go.tmpl' properties: - name: 'user' type: String description: | The database username. - name: 'password' type: String description: | The initial password for the user. required: true sensitive: true - name: 'restoreBackupSource' type: NestedObject description: | The source when restoring from a backup. Conflicts with 'restore_continuous_backup_source', both can't be set together. immutable: true ignore_read: true conflicts: - restore_continuous_backup_source properties: - name: 'backupName' type: String description: | The name of the backup that this cluster is restored from. required: true immutable: true - name: 'restoreContinuousBackupSource' type: NestedObject description: | The source when restoring via point in time recovery (PITR). Conflicts with 'restore_backup_source', both can't be set together. immutable: true ignore_read: true conflicts: - restore_backup_source properties: - name: 'cluster' type: String description: | The name of the source cluster that this cluster is restored from. required: true immutable: true - name: 'pointInTime' type: String description: | The point in time that this cluster is restored to, in RFC 3339 format. required: true immutable: true - name: 'continuousBackupConfig' type: NestedObject description: | The continuous backup config for this cluster. If no policy is provided then the default policy will be used. The default policy takes one backup a day and retains backups for 14 days. default_from_api: true properties: - name: 'enabled' type: Boolean description: | Whether continuous backup recovery is enabled. If not set, defaults to true. send_empty_value: true default_value: true - name: 'recoveryWindowDays' type: Integer description: | The numbers of days that are eligible to restore from using PITR. To support the entire recovery window, backups and logs are retained for one day more than the recovery window. If not set, defaults to 14 days. default_from_api: true - name: 'encryptionConfig' type: NestedObject description: | EncryptionConfig describes the encryption config of a cluster or a backup that is encrypted with a CMEK (customer-managed encryption key). properties: - name: 'kmsKeyName' type: String description: | The fully-qualified resource name of the KMS key. Each Cloud KMS key is regionalized and has the following format: projects/[PROJECT]/locations/[REGION]/keyRings/[RING]/cryptoKeys/[KEY_NAME]. - name: 'automatedBackupPolicy' type: NestedObject description: | The automated backup policy for this cluster. AutomatedBackupPolicy is disabled by default. default_from_api: true properties: - name: 'backupWindow' type: String description: | The length of the time window during which a backup can be taken. If a backup does not succeed within this time window, it will be canceled and considered failed. The backup window must be at least 5 minutes long. There is no upper bound on the window. If not set, it will default to 1 hour. A duration in seconds with up to nine fractional digits, terminated by 's'. Example: "3.5s". default_from_api: true - name: 'location' type: String description: | The location where the backup will be stored. Currently, the only supported option is to store the backup in the same region as the cluster. default_from_api: true - name: 'labels' type: KeyValuePairs description: 'Labels to apply to backups created using this configuration.' - name: 'encryptionConfig' type: NestedObject description: | EncryptionConfig describes the encryption config of a cluster or a backup that is encrypted with a CMEK (customer-managed encryption key). properties: - name: 'kmsKeyName' type: String description: | The fully-qualified resource name of the KMS key. Each Cloud KMS key is regionalized and has the following format: projects/[PROJECT]/locations/[REGION]/keyRings/[RING]/cryptoKeys/[KEY_NAME]. - name: 'weeklySchedule' type: NestedObject description: 'Weekly schedule for the Backup.' default_from_api: true properties: - name: 'daysOfWeek' type: Array description: 'The days of the week to perform a backup. At least one day of the week must be provided.' item_type: type: Enum description: 'The days of the week to perform a backup. At least one day of the week must be provided.' enum_values: - 'MONDAY' - 'TUESDAY' - 'WEDNESDAY' - 'THURSDAY' - 'FRIDAY' - 'SATURDAY' - 'SUNDAY' min_size: 1 - name: 'startTimes' type: Array description: | The times during the day to start a backup. At least one start time must be provided. The start times are assumed to be in UTC and to be an exact hour (e.g., 04:00:00). required: true custom_flatten: 'templates/terraform/custom_flatten/alloydb_cluster_input_automated_backup_policy_start_times_flatten.go.tmpl' item_type: type: NestedObject properties: - name: 'hours' type: Integer description: | Hours of day in 24 hour format. Should be from 0 to 23. An API may choose to allow the value "24:00:00" for scenarios like business closing time. - name: 'minutes' type: Integer description: | Minutes of hour of day. Currently, only the value 0 is supported. - name: 'seconds' type: Integer description: | Seconds of minutes of the time. Currently, only the value 0 is supported. - name: 'nanos' type: Integer description: | Fractions of seconds in nanoseconds. Currently, only the value 0 is supported. - name: 'timeBasedRetention' type: NestedObject description: | Time-based Backup retention policy. Conflicts with 'quantity_based_retention', both can't be set together. conflicts: - automated_backup_policy.0.quantity_based_retention properties: - name: 'retentionPeriod' type: String description: | The retention period. A duration in seconds with up to nine fractional digits, terminated by 's'. Example: "3.5s". - name: 'quantityBasedRetention' type: NestedObject description: | Quantity-based Backup retention policy to retain recent backups. Conflicts with 'time_based_retention', both can't be set together. conflicts: - automated_backup_policy.0.time_based_retention properties: - name: 'count' type: Integer description: | The number of backups to retain. - name: 'enabled' type: Boolean description: | Whether automated backups are enabled. default_from_api: true - name: 'backupSource' type: NestedObject description: 'Cluster created from backup.' output: true properties: - name: 'backupName' type: String description: 'The name of the backup resource.' - name: 'migrationSource' type: NestedObject description: 'Cluster created via DMS migration.' output: true properties: - name: 'hostPort' type: String description: 'The host and port of the on-premises instance in host:port format' - name: 'referenceId' type: String description: 'Place holder for the external source identifier(e.g DMS job name) that created the cluster.' - name: 'sourceType' type: String description: 'Type of migration source.' - name: 'clusterType' type: Enum description: | The type of cluster. If not set, defaults to PRIMARY. default_value: "PRIMARY" enum_values: - 'PRIMARY' - 'SECONDARY' - name: 'secondaryConfig' type: NestedObject description: | Configuration of the secondary cluster for Cross Region Replication. This should be set if and only if the cluster is of type SECONDARY. properties: - name: 'primaryClusterName' type: String description: | Name of the primary cluster must be in the format 'projects/{project}/locations/{location}/clusters/{cluster_id}' required: true - name: 'maintenanceUpdatePolicy' type: NestedObject description: | MaintenanceUpdatePolicy defines the policy for system updates. properties: - name: 'maintenanceWindows' type: Array description: | Preferred windows to perform maintenance. Currently limited to 1. item_type: description: | specifies a preferred day and time for maintenance. type: NestedObject properties: - name: 'day' type: Enum description: | Preferred day of the week for maintenance, e.g. MONDAY, TUESDAY, etc. required: true enum_values: - 'MONDAY' - 'TUESDAY' - 'WEDNESDAY' - 'THURSDAY' - 'FRIDAY' - 'SATURDAY' - 'SUNDAY' - name: 'startTime' type: NestedObject description: | Preferred time to start the maintenance operation on the specified day. Maintenance will start within 1 hour of this time. required: true properties: - name: 'hours' type: Integer description: | Hours of day in 24 hour format. Should be from 0 to 23. required: true - name: 'minutes' type: Integer description: | Minutes of hour of day. Currently, only the value 0 is supported. - name: 'seconds' type: Integer description: | Seconds of minutes of the time. Currently, only the value 0 is supported. - name: 'nanos' type: Integer description: | Fractions of seconds in nanoseconds. Currently, only the value 0 is supported. - name: 'subscriptionType' type: Enum description: | The subscrition type of cluster. default_from_api: true enum_values: - 'TRIAL' - 'STANDARD' - name: 'trialMetadata' type: NestedObject description: | Contains information and all metadata related to TRIAL clusters. output: true properties: - name: 'startTime' type: String description: | Start time of the trial cluster. - name: 'endTime' type: String description: | End time of the trial cluster. - name: 'upgradeTime' type: String description: | Upgrade time of the trial cluster to standard cluster. - name: 'graceEndTime' type: String description: | Grace end time of the trial cluster.