blob: bc5eb49306bb04735c352c8e3aae6529f81a19d5 [file] [log] [blame] [edit]
---
# ----------------------------------------------------------------------------
#
# *** AUTO GENERATED CODE *** Type: MMv1 ***
#
# ----------------------------------------------------------------------------
#
# This file is automatically generated by Magic Modules and manual
# changes will be clobbered when the file is regenerated.
#
# Please read more about how to change this file in
# .github/CONTRIBUTING.md.
#
# ----------------------------------------------------------------------------
subcategory: "Google Cloud NetApp Volumes"
description: |-
Volume replication creates an asynchronous mirror of a volume in a different location.
---
# google_netapp_volume_replication
Volume replication creates an asynchronous mirror of a volume in a different location. This capability
lets you use the replicated volume for critical application activity in case of a location-wide outage
or disaster.
A new destination volume is created as part of the replication resource. It's content is updated on a
schedule with content of the source volume. It can be used as a read-only copy while the mirror is
enabled, or as an independent read-write volume while the mirror is stopped. A destination volume will
also contain the snapshots of the source volume. Resuming a mirror will overwrite all changes on the
destination volume with the content of the source volume. While is mirror is enabled, all configuration
changes done to source or destination volumes are automatically done to both. Please note that the
destination volume is not a resource managed by Terraform.
Reversing the replication direction is not supported through the provider.
To get more information about VolumeReplication, see:
* [API documentation](https://cloud.google.com/netapp/volumes/docs/reference/rest/v1/projects.locations.volumes.replications)
* How-to Guides
* [Documentation](https://cloud.google.com/netapp/volumes/docs/protect-data/about-volume-replication)
<div class = "oics-button" style="float: right; margin: 0 0 -15px">
<a href="https://console.cloud.google.com/cloudshell/open?cloudshell_git_repo=https%3A%2F%2Fgithub.com%2Fterraform-google-modules%2Fdocs-examples.git&cloudshell_image=gcr.io%2Fcloudshell-images%2Fcloudshell%3Alatest&cloudshell_print=.%2Fmotd&cloudshell_tutorial=.%2Ftutorial.md&cloudshell_working_dir=netapp_volume_replication_create&open_in_editor=main.tf" target="_blank">
<img alt="Open in Cloud Shell" src="//gstatic.com/cloudssh/images/open-btn.svg" style="max-height: 44px; margin: 32px auto; max-width: 100%;">
</a>
</div>
## Example Usage - Netapp Volume Replication Create
```hcl
data "google_compute_network" "default" {
name = "test-network"
}
resource "google_netapp_storage_pool" "source_pool" {
name = "source-pool"
location = "us-central1"
service_level = "PREMIUM"
capacity_gib = 2048
network = data.google_compute_network.default.id
}
resource "google_netapp_storage_pool" "destination_pool" {
name = "destination-pool"
location = "us-west2"
service_level = "PREMIUM"
capacity_gib = 2048
network = data.google_compute_network.default.id
}
resource "google_netapp_volume" "source_volume" {
location = google_netapp_storage_pool.source_pool.location
name = "source-volume"
capacity_gib = 100
share_name = "source-volume"
storage_pool = google_netapp_storage_pool.source_pool.name
protocols = [
"NFSV3"
]
deletion_policy = "FORCE"
}
resource "google_netapp_volume_replication" "test_replication" {
depends_on = [google_netapp_volume.source_volume]
location = google_netapp_volume.source_volume.location
volume_name = google_netapp_volume.source_volume.name
name = "test-replication"
replication_schedule = "EVERY_10_MINUTES"
description = "This is a replication resource"
destination_volume_parameters {
storage_pool = google_netapp_storage_pool.destination_pool.id
volume_id = "destination-volume"
# Keeping the share_name of source and destination the same
# simplifies implementing client failover concepts
share_name = "source-volume"
description = "This is a replicated volume"
}
# WARNING: Setting delete_destination_volume to true, will delete the
# CURRENT destination volume if the replication is deleted. Omit the field
# or set delete_destination_volume=false to avoid accidental volume deletion.
delete_destination_volume = true
wait_for_mirror = true
}
```
## Argument Reference
The following arguments are supported:
* `replication_schedule` -
(Required)
Specifies the replication interval.
Possible values are: `EVERY_10_MINUTES`, `HOURLY`, `DAILY`.
* `location` -
(Required)
Name of region for this resource. The resource needs to be created in the region of the destination volume.
* `volume_name` -
(Required)
The name of the existing source volume.
* `name` -
(Required)
The name of the replication. Needs to be unique per location.
- - -
* `labels` -
(Optional)
Labels as key value pairs. Example: `{ "owner": "Bob", "department": "finance", "purpose": "testing" }`
**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
Please refer to the field `effective_labels` for all of the labels present on the resource.
* `destination_volume_parameters` -
(Optional)
Destination volume parameters.
Structure is [documented below](#nested_destination_volume_parameters).
* `description` -
(Optional)
An description of this resource.
* `project` - (Optional) The ID of the project in which the resource belongs.
If it is not provided, the provider project is used.
* `delete_destination_volume` - (Optional) A destination volume is created as part of replication creation. The destination volume will not became
under Terraform management unless you import it manually. If you delete the replication, this volume
will remain.
Setting this parameter to true will delete the *current* destination volume when destroying the
replication. If you reversed the replication direction, this will be your former source volume!
For production use, it is recommended to keep this parameter false to avoid accidental volume
deletion. Handle with care. Default is false.
* `replication_enabled` - (Optional) Set to false to stop/break the mirror. Stopping the mirror makes the destination volume read-write
and act independently from the source volume.
Set to true to enable/resume the mirror. WARNING: Resuming a mirror overwrites any changes
done to the destination volume with the content of the source volume.
* `force_stopping` - (Optional) Only replications with mirror_state=MIRRORED can be stopped. A replication in mirror_state=TRANSFERRING
currently receives an update and stopping the update might be undesirable. Set this parameter to true
to stop anyway. All data transferred to the destination will be discarded and content of destination
volume will remain at the state of the last successful update. Default is false.
* `wait_for_mirror` - (Optional) Replication resource state is independent of mirror_state. With enough data, it can take many hours
for mirror_state to reach MIRRORED. If you want Terraform to wait for the mirror to finish on
create/stop/resume operations, set this parameter to true. Default is false.
<a name="nested_destination_volume_parameters"></a>The `destination_volume_parameters` block supports:
* `storage_pool` -
(Required)
Name of an existing storage pool for the destination volume with format: `projects/{{project}}/locations/{{location}}/storagePools/{{poolId}}`
* `volume_id` -
(Optional)
Name for the destination volume to be created. If not specified, the name of the source volume will be used.
* `share_name` -
(Optional)
Share name for destination volume. If not specified, name of source volume's share name will be used.
* `description` -
(Optional)
Description for the destination volume.
## Attributes Reference
In addition to the arguments listed above, the following computed attributes are exported:
* `id` - an identifier for the resource with format `projects/{{project}}/locations/{{location}}/volumes/{{volume_name}}/replications/{{name}}`
* `state` -
Indicates the state of replication resource. State of the mirror itself is indicated in mirrorState.
* `state_details` -
State details of the replication resource.
* `role` -
Reverting a replication can swap source and destination volume roles. This field indicates if the `location` hosts
the source or destination volume. For resume and revert and resume operations it is critical to understand
which volume is the source volume, since it will overwrite changes done to the destination volume.
* `mirror_state` -
Indicates the state of the mirror between source and destination volumes. Depending on the amount of data
in your source volume, PREPARING phase can take hours or days. mirrorState = MIRRORED indicates your baseline
transfer ended and destination volume became accessible read-only. TRANSFERRING means a MIRRORED volume
currently receives an update. Updated every 5 minutes.
* `create_time` -
Create time of the active directory. A timestamp in RFC3339 UTC "Zulu" format. Examples: "2023-06-22T09:13:01.617Z".
* `destination_volume` -
Full resource name of destination volume with format: `projects/{{project}}/locations/{{location}}/volumes/{{volumeId}}`
* `transfer_stats` -
Replication transfer statistics. All statistics are updated every 5 minutes.
Structure is [documented below](#nested_transfer_stats).
* `source_volume` -
Full resource name of source volume with format: `projects/{{project}}/locations/{{location}}/volumes/{{volumeId}}`
* `healthy` -
Condition of the relationship. Can be one of the following:
- true: The replication relationship is healthy. It has not missed the most recent scheduled transfer.
- false: The replication relationship is not healthy. It has missed the most recent scheduled transfer.
* `terraform_labels` -
The combination of labels configured directly on the resource
and default labels configured on the provider.
* `effective_labels` -
All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Terraform, other clients and services.
<a name="nested_transfer_stats"></a>The `transfer_stats` block contains:
* `transfer_bytes` -
(Output)
Cumulative bytes transferred so far for the replication relationship.
* `total_transfer_duration` -
(Output)
Cumulative time taken across all transfers for the replication relationship.
* `last_transfer_bytes` -
(Output)
Size of last completed transfer in bytes.
* `last_transfer_duration` -
(Output)
Time taken during last completed transfer.
* `lag_duration` -
(Output)
The elapsed time since the creation of the snapshot on the source volume that was last replicated
to the destination volume. Lag time represents the difference in age of the destination volume
data in relation to the source volume data.
* `update_time` -
(Output)
Time when progress was updated last. A timestamp in RFC3339 UTC "Zulu" format. Examples: "2023-06-22T09:13:01.617Z".
* `last_transfer_end_time` -
(Output)
Time when last transfer completed. A timestamp in RFC3339 UTC "Zulu" format. Examples: "2023-06-22T09:13:01.617Z".
* `last_transfer_error` -
(Output)
A message describing the cause of the last transfer failure.
## Timeouts
This resource provides the following
[Timeouts](https://developer.hashicorp.com/terraform/plugin/sdkv2/resources/retries-and-customizable-timeouts) configuration options:
- `create` - Default is 20 minutes.
- `update` - Default is 20 minutes.
- `delete` - Default is 20 minutes.
## Import
VolumeReplication can be imported using any of these accepted formats:
* `projects/{{project}}/locations/{{location}}/volumes/{{volume_name}}/replications/{{name}}`
* `{{project}}/{{location}}/{{volume_name}}/{{name}}`
* `{{location}}/{{volume_name}}/{{name}}`
In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import VolumeReplication using one of the formats above. For example:
```tf
import {
id = "projects/{{project}}/locations/{{location}}/volumes/{{volume_name}}/replications/{{name}}"
to = google_netapp_volume_replication.default
}
```
When using the [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import), VolumeReplication can be imported using one of the formats above. For example:
```
$ terraform import google_netapp_volume_replication.default projects/{{project}}/locations/{{location}}/volumes/{{volume_name}}/replications/{{name}}
$ terraform import google_netapp_volume_replication.default {{project}}/{{location}}/{{volume_name}}/{{name}}
$ terraform import google_netapp_volume_replication.default {{location}}/{{volume_name}}/{{name}}
```
## User Project Overrides
This resource supports [User Project Overrides](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference#user_project_override).