mmv1/products/redis/Cluster.yaml (779 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 Google Cloud Redis Cluster instance.
references:
guides:
'Official Documentation': 'https://cloud.google.com/memorystore/docs/cluster/'
api: 'https://cloud.google.com/memorystore/docs/cluster/reference/rest/v1/projects.locations.clusters'
docs:
note: |
For [Multiple VPC Networking](https://cloud.google.com/memorystore/docs/cluster/about-multiple-vpc-networking) if you want to use
[User-registered PSC Connections](https://cloud.google.com/memorystore/docs/cluster/about-multiple-vpc-networking#psc_connection_types),
then please use `google_redis_cluster_user_created_connections` resource.
For [Cross Region Replication](https://cloud.google.com/memorystore/docs/cluster/about-cross-region-replication), please follow the instructions below for performing certain update and failover (switchover and detach) operations
**Cross Region Replication**
**Settings updated on primary and propagated to secondaries**
The settings listed [here](https://cloud.google.com/memorystore/docs/cluster/about-cross-region-replication#set_on_primary)
are only allowed to be updated on the primary cluster and the changes are automatically propagated to the secondary clusters.
To keep the Terraform configuration and state in sync for such settings, please follow the below steps to update them:
1. Update the setting on the primary cluster:
* Update the setting to its new desired value in the Terraform configuration file.
* Execute `terraform apply` to apply the change and wait for it to complete.
1. Detect configuration drift on the secondary cluster(s):
* Execute `terraform plan`. This should reveal a diff for the modified setting. The proposed value in the Terraform plan should align with the updated value applied to the primary cluster in the preceding step.
1. Reconcile secondary cluster(s) configuration:
* Manually edit the Terraform configuration file(s) for the secondary cluster(s) to update the setting with the latest value from the state.
* Execute `terraform plan` once again. This should not generate any diff, confirming the configuration is in sync with the infrastructure.
**Switchover**
To perform a [switchover](https://cloud.google.com/memorystore/docs/cluster/working-with-cross-region-replication#perform_a_switchover), please follow the below steps:
1. Ensure that the Terraform configuration file for the secondary cluster that needs to become the new primary has the `cross_cluster_replication_config` field. If it is not present:
* Add the `cross_cluster_replication_config` field to the configuration file to match the latest value in the state.
* Execute `terraform plan`. This should not generate any diff, confirming the configuration is in sync with the infrastructure.
1. Update the `cross_cluster_replication_config` field of the secondary that needs to become the new primary:
* Change `cross_cluster_replication_config.cluster_role` from `SECONDARY` to `PRIMARY`.
* Remove `cross_cluster_replication_config.primary_cluster` field.
* Set `cross_cluster_replication_config.secondary_clusters` list with the new secondaries. The new secondaries are the current primary and other secondary clusters(if any).
-> You can refer to the current value of `cross_cluster_replication_config.membership` field to lookup the current primary and secondary clusters.
1. Execute switchover:
* Execute`terraform apply` to apply the change and wait for it to complete.
1. Fix any configuration drifts on the previous primary and other secondary clusters:
* Execute `terraform plan`. If any diffs are reported for `cross_cluster_replication_config` field:
* Manually update `cross_cluster_replication_config` field in the configuration file(s) for those clusters with the latest value from the state.
* Execute `terraform plan` once again. This should not generate any diff, confirming the configuration is in sync with the infrastructure.
**Detach a secondary cluster**
To [detach](https://cloud.google.com/memorystore/docs/cluster/working-with-cross-region-replication#detach_secondary_clusters_option_1) a secondary cluster, please follow the below steps:
1. Ensure that the Terraform configuration file for the secondary cluster that needs to be detached has the `cross_cluster_replication_config` field. If it is not present:
* Add the `cross_cluster_replication_config` field to the configuration file to match the latest value in the state.
* Execute `terraform plan`. This should not generate any diff, confirming the configuration is in sync with the infrastructure.
1. Update the `cross_cluster_replication_config` field of the secondary that needs to be detached:
* Change `cross_cluster_replication_config.cluster_role` from `SECONDARY` to `NONE`.
* Remove `cross_cluster_replication_config.primary_cluster`.
1. Execute detach:
* Execute`terraform apply` to apply the change and wait for it to complete.
1. Fix any configuration drifts on the primary cluster:
* Execute `terraform plan`. If any diff is reported for `cross_cluster_replication_config` field:
* Manually update `cross_cluster_replication_config` field in the configuration file with the latest value from the state.
* Execute `terraform plan` once again. This should not generate any diff, confirming the configuration is in sync with the infrastructure.
**Detach secondary cluster(s) via primary cluster**
To [detach](https://cloud.google.com/memorystore/docs/cluster/working-with-cross-region-replication#detach_secondary_clusters_option_2) secondary clusters via primary, please follow the below steps:
1. Ensure that the Terraform configuration file for the primary cluster from which the secondary(ies) has(ve) to be detached has the `cross_cluster_replication_config` field. If it is not present:
* Add the `cross_cluster_replication_config` field to the configuration file to match the latest value in the state.
* Execute `terraform plan`. This should not generate any diff, confirming the configuration is in sync with the infrastructure.
1. Update the `cross_cluster_replication_config` field of the primary cluster:
* If you are detaching all secondaries from the primary:
* Change `cross_cluster_replication_config.cluster_role` from `PRIMARY` to `NONE`.
* Remove `cross_cluster_replication_config.secondary_clusters` list field.
* If you are detaching a subset of secondaries:
* Update `cross_cluster_replication_config.secondary_clusters` list field to remove the secondary clusters that need to be detached.
1. Execute detach:
* Execute `terraform apply` to apply the change and wait for it to complete.
1. Fix any configuration drifts on the secondary cluster(s) that was detached:
* Execute `terraform plan`. If any diffs are reported for `cross_cluster_replication_config` field:
* Manually update `cross_cluster_replication_config` field in the configuration file(s) for those clusters with the latest value from the state.
* Execute `terraform plan` once again. This should not generate any diff, confirming the configuration is in sync with the infrastructure.
base_url: 'projects/{{project}}/locations/{{region}}/clusters'
self_link: 'projects/{{project}}/locations/{{region}}/clusters/{{name}}'
create_url: 'projects/{{project}}/locations/{{region}}/clusters?clusterId={{name}}'
update_verb: 'PATCH'
update_mask: true
timeouts:
insert_minutes: 60
update_minutes: 120
delete_minutes: 30
autogen_async: true
async:
actions: ['create', 'delete', 'update']
type: 'OpAsync'
operation:
base_url: '{{op_id}}'
result:
resource_inside_response: false
custom_code:
encoder: 'templates/terraform/encoders/redis_cluster.go.tmpl'
sweeper:
ensure_value:
field: deletionProtectionEnabled
value: false
url_substitutions:
- region: "us-central1"
- region: "us-east1"
- region: "europe-west1"
examples:
- name: 'redis_cluster_ha'
primary_resource_id: 'cluster-ha'
vars:
cluster_name: 'ha-cluster'
policy_name: 'my-policy'
subnet_name: 'my-subnet'
network_name: 'my-network'
deletion_protection_enabled: 'true'
test_vars_overrides:
'deletion_protection_enabled': 'false'
oics_vars_overrides:
'deletion_protection_enabled': 'false'
- name: 'redis_cluster_ha_single_zone'
primary_resource_id: 'cluster-ha-single-zone'
vars:
cluster_name: 'ha-cluster-single-zone'
policy_name: 'my-policy'
subnet_name: 'my-subnet'
network_name: 'my-network'
deletion_protection_enabled: 'true'
test_vars_overrides:
'deletion_protection_enabled': 'false'
oics_vars_overrides:
'deletion_protection_enabled': 'false'
- name: 'redis_cluster_secondary'
primary_resource_id: 'secondary_cluster'
vars:
primary_cluster_name: 'my-primary-cluster'
primary_cluster_deletion_protection_enabled: 'true'
primary_cluster_policy_name: 'mypolicy-primary-cluster'
primary_cluster_subnet_name: 'mysubnet-primary-cluster'
secondary_cluster_name: 'my-secondary-cluster'
secondary_cluster_deletion_protection_enabled: 'true'
secondary_cluster_policy_name: 'mypolicy-secondary-cluster'
secondary_cluster_subnet_name: 'mysubnet-secondary-cluster'
network_name: 'mynetwork'
test_vars_overrides:
'primary_cluster_deletion_protection_enabled': 'false'
'secondary_cluster_deletion_protection_enabled': 'false'
oics_vars_overrides:
'primary_cluster_deletion_protection_enabled': 'false'
'secondary_cluster_deletion_protection_enabled': 'false'
- name: "redis_cluster_rdb"
primary_resource_id: "cluster-rdb"
vars:
cluster_name: "rdb-cluster"
policy_name: "my-policy"
subnet_name: "my-subnet"
network_name: "my-network"
deletion_protection_enabled: 'true'
test_vars_overrides:
'deletion_protection_enabled': 'false'
oics_vars_overrides:
'deletion_protection_enabled': 'false'
- name: "redis_cluster_aof"
primary_resource_id: "cluster-aof"
vars:
cluster_name: "aof-cluster"
policy_name: "my-policy"
subnet_name: "my-subnet"
network_name: "my-network"
deletion_protection_enabled: 'true'
test_vars_overrides:
'deletion_protection_enabled': 'false'
oics_vars_overrides:
'deletion_protection_enabled': 'false'
- name: "redis_cluster_cmek"
primary_resource_id: "cluster-cmek"
bootstrap_iam:
- member: "serviceAccount:service-{project_number}@cloud-redis.iam.gserviceaccount.com"
role: "roles/cloudkms.cryptoKeyEncrypterDecrypter"
vars:
cluster_name: "cmek-cluster"
policy_name: "my-policy"
subnet_name: "my-subnet"
network_name: "my-network"
kms_key_name: "my-key"
kms_ring_name: "my-key-ring"
deletion_protection_enabled: 'true'
test_vars_overrides:
'deletion_protection_enabled': 'false'
'kms_key_name': 'acctest.BootstrapKMSKeyInLocation(t, "us-central1").CryptoKey.Name'
oics_vars_overrides:
'deletion_protection_enabled': 'false'
parameters:
- name: 'name'
type: String
description: |
Unique name of the resource in this scope including project and location using the form:
projects/{projectId}/locations/{locationId}/clusters/{clusterId}
url_param_only: true
required: true
immutable: true
default_from_api: true
- name: 'region'
type: String
description: |
The name of the region of the Redis cluster.
url_param_only: true
required: false
immutable: true
ignore_read: true
default_from_api: true
properties:
- name: 'createTime'
type: Time
description: |
The timestamp associated with the cluster creation request. 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: 'state'
type: Enum
description: |
The current state of this cluster. Can be CREATING, READY, UPDATING, DELETING and SUSPENDED
immutable: true
output: true
enum_values:
- 'CREATING'
- 'READY'
- 'UPDATING'
- 'DELETING'
- 'SUSPENDED'
- name: 'uid'
type: String
description: |
System assigned, unique identifier for the cluster.
output: true
- name: 'gcsSource'
type: NestedObject
description: |
Backups stored in Cloud Storage buckets. The Cloud Storage buckets need to be the same region as the clusters.
immutable: true
ignore_read: true
conflicts:
- managedBackupSource
properties:
- name: 'uris'
type: Array
is_set: true
description: |
URIs of the GCS objects to import. Example: gs://bucket1/object1, gs://bucket2/folder2/object2
required: true
immutable: true
item_type:
type: String
- name: 'managedBackupSource'
type: NestedObject
description: "Backups that generated and managed by memorystore."
immutable: true
ignore_read: true
conflicts:
- gcsSource
properties:
- name: 'backup'
type: String
description: |
Example: //redis.googleapis.com/projects/{project}/locations/{location}/backupCollections/{collection}/backups/{backup} A shorter version (without the prefix) of the backup name is also supported,
like projects/{project}/locations/{location}/backupCollections/{collection}/backups/{backupId}. In this case, it assumes the backup is under redis.googleapis.com.
required: true
immutable: true
- name: 'backupCollection'
type: String
description: |
The backup collection full resource name.
Example: projects/{project}/locations/{location}/backupCollections/{collection}
output: true
- name: 'automatedBackupConfig'
type: NestedObject
description: "The automated backup config for a instance."
custom_flatten: 'templates/terraform/custom_flatten/redis_cluster_automated_backup_config.go.tmpl'
custom_expand: 'templates/terraform/custom_expand/redis_cluster_automated_backup_config.go.tmpl'
properties:
- name: 'fixedFrequencySchedule'
type: NestedObject
description: "Trigger automated backups at a fixed frequency."
required: true
properties:
- name: 'startTime'
type: NestedObject
description: |
The start time of every automated backup in UTC.
It must be set to the start of an hour. This field is required.
required: true
properties:
- name: 'hours'
type: Integer
description: |
Hours of a day in 24 hour format. Must be greater than or equal to 0 and typically must be less than or equal to 23.
An API may choose to allow the value "24:00:00" for scenarios like business closing time.
required: true
- name: 'retention'
type: String
description: |
How long to keep automated backups before the backups are deleted.
The value should be between 1 day and 365 days. If not specified, the default value is 35 days.
A duration in seconds with up to nine fractional digits, ending with 's'. Example: "3.5s".
required: true
- name: 'authorizationMode'
type: Enum
description: |
Optional. The authorization mode of the Redis cluster. If not provided, auth feature is disabled for the cluster.
required: false
immutable: true
default_value: "AUTH_MODE_DISABLED"
enum_values:
- 'AUTH_MODE_UNSPECIFIED'
- 'AUTH_MODE_IAM_AUTH'
- 'AUTH_MODE_DISABLED'
- name: 'transitEncryptionMode'
type: Enum
description: |
Optional. The in-transit encryption for the Redis cluster.
If not provided, encryption is disabled for the cluster.
required: false
immutable: true
default_value: "TRANSIT_ENCRYPTION_MODE_DISABLED"
enum_values:
- 'TRANSIT_ENCRYPTION_MODE_UNSPECIFIED'
- 'TRANSIT_ENCRYPTION_MODE_DISABLED'
- 'TRANSIT_ENCRYPTION_MODE_SERVER_AUTHENTICATION'
- name: 'nodeType'
type: Enum
description: |
The nodeType for the Redis cluster.
If not provided, REDIS_HIGHMEM_MEDIUM will be used as default
required: false
default_from_api: true
enum_values:
- 'REDIS_SHARED_CORE_NANO'
- 'REDIS_HIGHMEM_MEDIUM'
- 'REDIS_HIGHMEM_XLARGE'
- 'REDIS_STANDARD_SMALL'
- name: 'zoneDistributionConfig'
type: NestedObject
description: Immutable. Zone distribution config for Memorystore Redis cluster.
immutable: true
default_from_api: true
properties:
- name: 'mode'
type: Enum
description: |
Immutable. The mode for zone distribution for Memorystore Redis cluster.
If not provided, MULTI_ZONE will be used as default
default_from_api: true
enum_values:
- 'MULTI_ZONE'
- 'SINGLE_ZONE'
- name: 'zone'
type: String
description: |
Immutable. The zone for single zone Memorystore Redis cluster.
- name: 'pscConfigs'
type: Array
description: |
Required. Each PscConfig configures the consumer network where two
network addresses will be designated to the cluster for client access.
Currently, only one PscConfig is supported.
ignore_read: true
item_type:
type: NestedObject
properties:
- name: 'network'
type: String
description: |
Required. The consumer network where the network address of
the discovery endpoint will be reserved, in the form of
projects/{network_project_id_or_number}/global/networks/{network_id}.
required: true
- name: 'discoveryEndpoints'
type: Array
description: |
Output only. Endpoints created on each given network,
for Redis clients to connect to the cluster.
Currently only one endpoint is supported.
output: true
item_type:
type: NestedObject
properties:
- name: 'address'
type: String
description: |
Output only. Network address of the exposed Redis endpoint used by clients to connect to the service.
- name: 'port'
type: Integer
description: |
Output only. The port number of the exposed Redis endpoint.
- name: 'pscConfig'
type: NestedObject
description: |
Output only. Customer configuration for where the endpoint
is created and accessed from.
properties:
- name: 'network'
type: String
description: |
The consumer network where the network address of the discovery
endpoint will be reserved, in the form of
projects/{network_project_id}/global/networks/{network_id}.
- name: 'pscConnections'
type: Array
description: |
Output only. PSC connections for discovery of the cluster topology and accessing the cluster.
output: true
item_type:
type: NestedObject
properties:
- name: 'pscConnectionId'
type: String
description: |
Output only. The PSC connection id of the forwarding rule connected to the service attachment.
- name: 'address'
type: String
description: |
Output only. The IP allocated on the consumer network for the PSC forwarding rule.
- name: 'forwardingRule'
type: String
description: |
Output only. The URI of the consumer side forwarding rule. Example: projects/{projectNumOrId}/regions/us-east1/forwardingRules/{resourceId}.
- name: 'projectId'
type: String
description: |
Output only. The consumer projectId where the forwarding rule is created from.
- name: 'network'
type: String
description: |
The consumer network where the IP address resides, in the form of projects/{projectId}/global/networks/{network_id}.
- name: 'stateInfo'
type: NestedObject
description: Output only. Additional information about the current state of the cluster.
output: true
properties:
- name: 'updateInfo'
type: NestedObject
properties:
- name: 'targetShardCount'
type: Integer
description: Target number of shards for redis cluster.
- name: 'targetReplicaCount'
type: Integer
description: Target number of replica nodes per shard.
- name: 'replicaCount'
type: Integer
description: |
Optional. The number of replica nodes per shard.
required: false
send_empty_value: true
- name: 'sizeGb'
type: Integer
description: |
Output only. Redis memory size in GB for the entire cluster.
output: true
- name: 'preciseSizeGb'
type: Double
description: |
Output only. Redis memory precise size in GB for the entire cluster.
output: true
- name: 'shardCount'
type: Integer
description: |
Required. Number of shards for the Redis cluster.
required: true
- name: 'deletionProtectionEnabled'
type: Boolean
description: |
Optional. Indicates if the cluster is deletion protected or not.
If the value if set to true, any delete cluster operation will fail.
Default value is true.
required: false
default_value: true
- name: 'redisConfigs'
type: KeyValuePairs
description: |
Configure Redis Cluster behavior using a subset of native Redis configuration parameters.
Please check Memorystore documentation for the list of supported parameters:
https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations
- name: 'persistenceConfig'
type: NestedObject
description: Persistence config (RDB, AOF) for the cluster.
default_from_api: true
properties:
- name: 'mode'
type: Enum
description: |
Optional. Controls whether Persistence features are enabled. If not provided, the existing value will be used.
- DISABLED: Persistence (both backup and restore) is disabled for the cluster.
- RDB: RDB based Persistence is enabled.
- AOF: AOF based Persistence is enabled.
enum_values:
- 'PERSISTENCE_MODE_UNSPECIFIED'
- 'DISABLED'
- 'RDB'
- 'AOF'
default_from_api: true
- name: 'rdbConfig'
type: NestedObject
description: |
RDB configuration. This field will be ignored if mode is not RDB.
default_from_api: true
properties:
- name: 'rdbSnapshotPeriod'
type: Enum
default_from_api: true
description: |
Optional. Available snapshot periods for scheduling.
- ONE_HOUR: Snapshot every 1 hour.
- SIX_HOURS: Snapshot every 6 hours.
- TWELVE_HOURS: Snapshot every 12 hours.
- TWENTY_FOUR_HOURS: Snapshot every 24 hours.
enum_values:
- 'SNAPSHOT_PERIOD_UNSPECIFIED'
- 'ONE_HOUR'
- 'SIX_HOURS'
- 'TWELVE_HOURS'
- 'TWENTY_FOUR_HOURS'
- name: 'rdbSnapshotStartTime'
type: Time
description: |
The time that the first snapshot was/will be attempted, and to which
future snapshots will be aligned.
If not provided, the current time will be used.
default_from_api: true
- name: 'aofConfig'
type: NestedObject
description: |
AOF configuration. This field will be ignored if mode is not AOF.
default_from_api: true
properties:
- name: 'appendFsync'
type: Enum
default_from_api: true
description: |
Optional. Available fsync modes.
- NO - Do not explicitly call fsync(). Rely on OS defaults.
- EVERYSEC - Call fsync() once per second in a background thread. A balance between performance and durability.
- ALWAYS - Call fsync() for earch write command.
enum_values:
- 'APPEND_FSYNC_UNSPECIFIED'
- 'NO'
- 'EVERYSEC'
- 'ALWAYS'
- name: 'maintenancePolicy'
type: NestedObject
description: Maintenance policy for a cluster
properties:
- name: 'createTime'
type: String
description: |
Output only. The time when the policy was created.
A timestamp in RFC3339 UTC "Zulu" format, with nanosecond
resolution and up to nine fractional digits.
output: true
- name: 'updateTime'
type: String
description: |
Output only. The time when the policy was last updated.
A timestamp in RFC3339 UTC "Zulu" format, with nanosecond
resolution and up to nine fractional digits.
output: true
- name: 'weeklyMaintenanceWindow'
type: Array
description: |
Optional. Maintenance window that is applied to resources covered by this policy.
Minimum 1. For the current version, the maximum number
of weekly_window is expected to be one.
item_type:
type: NestedObject
properties:
- name: 'day'
type: Enum
description: |
Required. The day of week that maintenance updates occur.
- DAY_OF_WEEK_UNSPECIFIED: The day of the week is unspecified.
- MONDAY: Monday
- TUESDAY: Tuesday
- WEDNESDAY: Wednesday
- THURSDAY: Thursday
- FRIDAY: Friday
- SATURDAY: Saturday
- SUNDAY: Sunday
required: true
enum_values:
- 'DAY_OF_WEEK_UNSPECIFIED'
- 'MONDAY'
- 'TUESDAY'
- 'WEDNESDAY'
- 'THURSDAY'
- 'FRIDAY'
- 'SATURDAY'
- 'SUNDAY'
- name: 'duration'
type: String
description: |
Output only. Duration of the maintenance window.
The current window is fixed at 1 hour.
A duration in seconds with up to nine fractional digits,
terminated by 's'. Example: "3.5s".
output: true
- name: 'startTime'
type: NestedObject
description: |
Required. Start time of the window in UTC time.
required: true
send_empty_value: true
allow_empty_object: true
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.
validation:
function: 'validation.IntBetween(0,23)'
- name: 'minutes'
type: Integer
description: |
Minutes of hour of day. Must be from 0 to 59.
validation:
function: 'validation.IntBetween(0,59)'
- name: 'seconds'
type: Integer
description: |
Seconds of minutes of the time. Must normally be from 0 to 59.
An API may allow the value 60 if it allows leap-seconds.
validation:
function: 'validation.IntBetween(0,60)'
- name: 'nanos'
type: Integer
description: |
Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.
validation:
function: 'validation.IntBetween(0,999999999)'
- name: 'maintenanceSchedule'
type: NestedObject
description: Upcoming maintenance schedule.
output: true
properties:
- name: 'startTime'
type: String
description: |
Output only. The start time of any upcoming scheduled maintenance for this cluster.
A timestamp in RFC3339 UTC "Zulu" format, with nanosecond
resolution and up to nine fractional digits.
output: true
- name: 'endTime'
type: String
description: |
Output only. The end time of any upcoming scheduled maintenance for this cluster.
A timestamp in RFC3339 UTC "Zulu" format, with nanosecond
resolution and up to nine fractional digits.
output: true
- name: 'scheduleDeadlineTime'
type: String
description: |
Output only. The deadline that the maintenance schedule start time
can not go beyond, including reschedule.
A timestamp in RFC3339 UTC "Zulu" format, with nanosecond
resolution and up to nine fractional digits.
output: true
- name: 'crossClusterReplicationConfig'
type: NestedObject
description: Cross cluster replication config
default_from_api: true
properties:
- name: 'clusterRole'
type: Enum
description: |
The role of the cluster in cross cluster replication. Supported values are:
1. `CLUSTER_ROLE_UNSPECIFIED`: This is an independent cluster that has never participated in cross cluster replication. It allows both reads and writes.
1. `NONE`: This is an independent cluster that previously participated in cross cluster replication(either as a `PRIMARY` or `SECONDARY` cluster). It allows both reads and writes.
1. `PRIMARY`: This cluster serves as the replication source for secondary clusters that are replicating from it. Any data written to it is automatically replicated to its secondary clusters. It allows both reads and writes.
1. `SECONDARY`: This cluster replicates data from the primary cluster. It allows only reads.
enum_values:
- 'CLUSTER_ROLE_UNSPECIFIED'
- 'NONE'
- 'PRIMARY'
- 'SECONDARY'
- name: 'primaryCluster'
type: NestedObject
description: |
Details of the primary cluster that is used as the replication source for this secondary cluster. This is allowed to be set only for clusters whose cluster role is of type `SECONDARY`.
properties:
- name: 'cluster'
type: String
description: |
The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id}
- name: 'uid'
type: String
description: |
The unique id of the primary cluster.
output: true
- name: 'secondaryClusters'
type: Array
description: |
List of secondary clusters that are replicating from this primary cluster. This is allowed to be set only for clusters whose cluster role is of type `PRIMARY`.
item_type:
type: NestedObject
properties:
- name: 'cluster'
type: String
description: |
The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id}
- name: 'uid'
type: String
description: |
The unique id of the secondary cluster.
output: true
- name: 'membership'
type: NestedObject
description: |
An output only view of all the member clusters participating in cross cluster replication. This field is populated for all the member clusters irrespective of their cluster role.
output: true
properties:
- name: 'primaryCluster'
type: NestedObject
description: |
Details of the primary cluster that is used as the replication source for all the secondary clusters.
output: true
properties:
- name: 'cluster'
type: String
description: |
The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id}
output: true
- name: 'uid'
type: String
description: |
The unique id of the primary cluster.
output: true
- name: 'secondaryClusters'
type: Array
description: |
List of secondary clusters that are replicating from the primary cluster.
output: true
item_type:
type: NestedObject
properties:
- name: 'cluster'
type: String
description: |
The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id}
output: true
- name: 'uid'
type: String
description: |
The unique id of the secondary cluster.
output: true
- name: 'updateTime'
type: String
description: |
The last time cross cluster replication config was updated.
output: true
- name: 'pscServiceAttachments'
type: Array
description: Service attachment details to configure Psc connections.
output: true
item_type:
type: NestedObject
description: |
Configuration of a service attachment of the cluster, for creating PSC connections.
properties:
- name: 'serviceAttachment'
type: String
output: true
description: |
Service attachment URI which your self-created PscConnection should use as
- name: 'connectionType'
type: Enum
output: true
enum_values:
- 'CONNECTION_TYPE_READER'
- 'CONNECTION_TYPE_PRIMARY'
- 'CONNECTION_TYPE_DISCOVERY'
description: Type of a PSC connection targeting this service attachment.
- name: 'kmsKey'
type: String
description: The KMS key used to encrypt the at-rest data of the cluster.