From c26e36b7de58c6da534b1810cf842802786ec79f Mon Sep 17 00:00:00 2001 From: Oliver Krause <3621164+okrause@users.noreply.github.com> Date: Fri, 19 Jan 2024 18:46:01 +0100 Subject: [PATCH 01/16] Add force delete to delete volumes with nested snapshots --- mmv1/products/netapp/volume.yaml | 13 +++++++++++++ .../pre_delete/netapp_volume_force_delete.go.erb | 4 ++++ .../services/netapp/resource_netapp_volume_test.go | 3 ++- 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 mmv1/templates/terraform/pre_delete/netapp_volume_force_delete.go.erb diff --git a/mmv1/products/netapp/volume.yaml b/mmv1/products/netapp/volume.yaml index f15009d66e8a..4e9819fbe1f5 100644 --- a/mmv1/products/netapp/volume.yaml +++ b/mmv1/products/netapp/volume.yaml @@ -414,3 +414,16 @@ properties: # description: |- # Full name of the snapshot resource. Format: `projects/{{project}}/locations/{{location}}/volumes/{{volume}}/snapshots/{{snapshot}}`. # required: true +virtual_fields: + - !ruby/object:Api::Type::Enum + name: 'deletion_policy' + description: | + Policy to determine if the volume should be deleted forcefully. + Volumes may have nested snapshot resources. Deleting such a volume will fail. + Setting this parameter to FORCE will delete volumes including nested snapshots. + values: + - :DEFAULT + - :FORCE + default_value: :DEFAULT +custom_code: !ruby/object:Provider::Terraform::CustomCode + pre_delete: templates/terraform/pre_delete/netapp_volume_force_delete.go.erb \ No newline at end of file diff --git a/mmv1/templates/terraform/pre_delete/netapp_volume_force_delete.go.erb b/mmv1/templates/terraform/pre_delete/netapp_volume_force_delete.go.erb new file mode 100644 index 000000000000..d8fd2927332f --- /dev/null +++ b/mmv1/templates/terraform/pre_delete/netapp_volume_force_delete.go.erb @@ -0,0 +1,4 @@ +// Delete volume even when nested snapshots do exist +if deletionPolicy := d.Get("deletion_policy"); deletionPolicy == "FORCE" { + url = url + "?force=true" +} \ No newline at end of file diff --git a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go index e402dd0d9d9c..1571c89591fe 100644 --- a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go +++ b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go @@ -319,7 +319,8 @@ resource "google_netapp_volume" "test_volume" { } } restricted_actions = ["DELETE"] - } + deletion_policy = "FORCE" +} data "google_compute_network" "default" { name = "%{network_name}" From cbf790f68377bb151d5e786b7481acfb4469f854 Mon Sep 17 00:00:00 2001 From: Oliver Krause <3621164+okrause@users.noreply.github.com> Date: Tue, 23 Jan 2024 10:56:52 +0100 Subject: [PATCH 02/16] few cleanups --- mmv1/products/netapp/volume.yaml | 5 +++-- mmv1/templates/terraform/examples/volume_basic.tf.erb | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/mmv1/products/netapp/volume.yaml b/mmv1/products/netapp/volume.yaml index 4e9819fbe1f5..b2f1c74b4592 100644 --- a/mmv1/products/netapp/volume.yaml +++ b/mmv1/products/netapp/volume.yaml @@ -203,7 +203,7 @@ properties: name: 'description' description: | An optional description of this resource. - # We want to get rid of this. Please don't expose. + # Use of snapReserve is depricated. We don't expose it intentially. # - !ruby/object:Api::Type::Integer # name: 'snapReserve' # description: | @@ -425,5 +425,6 @@ virtual_fields: - :DEFAULT - :FORCE default_value: :DEFAULT + ignore_read_extra: true custom_code: !ruby/object:Provider::Terraform::CustomCode - pre_delete: templates/terraform/pre_delete/netapp_volume_force_delete.go.erb \ No newline at end of file + pre_delete: templates/terraform/pre_delete/netapp_volume_force_delete.go.erb diff --git a/mmv1/templates/terraform/examples/volume_basic.tf.erb b/mmv1/templates/terraform/examples/volume_basic.tf.erb index 3f34bf06b56a..54702e41c441 100644 --- a/mmv1/templates/terraform/examples/volume_basic.tf.erb +++ b/mmv1/templates/terraform/examples/volume_basic.tf.erb @@ -13,6 +13,7 @@ resource "google_netapp_volume" "<%= ctx[:primary_resource_id] %>" { share_name = "<%= ctx[:vars]['volume_name'] %>" storage_pool = google_netapp_storage_pool.default.name protocols = ["NFSV3"] + deletion_policy = "DEFAULT" } data "google_compute_network" "default" { From e785eb85c9472c3f33dba2565be9c7e20f2cf142 Mon Sep 17 00:00:00 2001 From: Oliver Krause <3621164+okrause@users.noreply.github.com> Date: Tue, 23 Jan 2024 11:12:32 +0100 Subject: [PATCH 03/16] Make virtual field verifies happy --- mmv1/products/netapp/volume.yaml | 4 +++- .../services/netapp/resource_netapp_volume_test.go | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/mmv1/products/netapp/volume.yaml b/mmv1/products/netapp/volume.yaml index b2f1c74b4592..d07b6ae41dbf 100644 --- a/mmv1/products/netapp/volume.yaml +++ b/mmv1/products/netapp/volume.yaml @@ -59,6 +59,8 @@ examples: volume_name: 'test-volume' pool_name: 'test-pool' network_name: 'test-network' + ignore_read_extra: + - "deletion_policy" test_vars_overrides: network_name: 'acctest.BootstrapSharedServiceNetworkingConnection(t, "gcnv-network-config-1", acctest.ServiceNetworkWithParentService("netapp.servicenetworking.goog"))' properties: @@ -425,6 +427,6 @@ virtual_fields: - :DEFAULT - :FORCE default_value: :DEFAULT - ignore_read_extra: true + ignore_read: true custom_code: !ruby/object:Provider::Terraform::CustomCode pre_delete: templates/terraform/pre_delete/netapp_volume_force_delete.go.erb diff --git a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go index 1571c89591fe..27266475c32c 100644 --- a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go +++ b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go @@ -45,7 +45,7 @@ func TestAccNetappVolume_volumeBasicExample_update(t *testing.T) { ResourceName: "google_netapp_volume.test_volume", ImportState: true, ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"location", "name", "labels", "terraform_labels"}, + ImportStateVerifyIgnore: []string{"location", "name", "labels", "terraform_labels", "deletion_policy"}, }, { Config: testAccNetappVolume_volumeBasicExample_full(context), }, @@ -53,7 +53,7 @@ func TestAccNetappVolume_volumeBasicExample_update(t *testing.T) { ResourceName: "google_netapp_volume.test_volume", ImportState: true, ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"location", "name", "labels", "terraform_labels"}, + ImportStateVerifyIgnore: []string{"location", "name", "labels", "terraform_labels", "deletion_policy"}, }, { Config: testAccNetappVolume_volumeBasicExample_update(context), @@ -62,7 +62,7 @@ func TestAccNetappVolume_volumeBasicExample_update(t *testing.T) { ResourceName: "google_netapp_volume.test_volume", ImportState: true, ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"location", "name", "labels", "terraform_labels"}, + ImportStateVerifyIgnore: []string{"location", "name", "labels", "terraform_labels", "deletion_policy"}, }, { Config: testAccNetappVolume_volumeBasicExample_updatesnapshot(context), @@ -71,7 +71,7 @@ func TestAccNetappVolume_volumeBasicExample_update(t *testing.T) { ResourceName: "google_netapp_volume.test_volume", ImportState: true, ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"location", "name", "labels", "terraform_labels"}, + ImportStateVerifyIgnore: []string{"location", "name", "labels", "terraform_labels", "deletion_policy"}, }, }, }) From 7c1ed3f7542d9a775dc761283a548791b2aa1cec Mon Sep 17 00:00:00 2001 From: Oliver Krause <3621164+okrause@users.noreply.github.com> Date: Tue, 23 Jan 2024 11:34:48 +0100 Subject: [PATCH 04/16] Minor test improvements --- .../services/netapp/resource_netapp_volume_test.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go index 27266475c32c..386e29eb7f42 100644 --- a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go +++ b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go @@ -318,10 +318,22 @@ resource "google_netapp_volume" "test_volume" { nfsv4 = false } } + # Delete protection only gets active after an NFS client mounts. + # Setting it here is save, volume can still be deleted. restricted_actions = ["DELETE"] deletion_policy = "FORCE" } +# Add the following snapshot block to the test as soon as snapshot resoruce +# is added to the provider. It will make the test cleanup require +# deletion_policy = "FORCE" on the volume for successful delete. +# resource "google_netapp_volumesnapshot" "test-snapshot" { +# depends_on = [google_netapp_volume.test_volume] +# location = google_netapp_volume.test_volume.location +# volume_name = google_netapp_volume.test_volume.name +# name = "test-snapshot%{random_suffix}" +# } + data "google_compute_network" "default" { name = "%{network_name}" } From 8937f05e8aee12fdee2e69c4d127625ab9878d25 Mon Sep 17 00:00:00 2001 From: Oliver Krause <3621164+okrause@users.noreply.github.com> Date: Thu, 25 Jan 2024 21:55:33 +0100 Subject: [PATCH 05/16] Remove ignore_read for deletion_policy --- mmv1/products/netapp/volume.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/mmv1/products/netapp/volume.yaml b/mmv1/products/netapp/volume.yaml index d07b6ae41dbf..4f617b3ab27c 100644 --- a/mmv1/products/netapp/volume.yaml +++ b/mmv1/products/netapp/volume.yaml @@ -427,6 +427,5 @@ virtual_fields: - :DEFAULT - :FORCE default_value: :DEFAULT - ignore_read: true custom_code: !ruby/object:Provider::Terraform::CustomCode pre_delete: templates/terraform/pre_delete/netapp_volume_force_delete.go.erb From d540112f4225b8941a61a9a1a78603799a7b8c41 Mon Sep 17 00:00:00 2001 From: Oliver Krause <3621164+okrause@users.noreply.github.com> Date: Mon, 29 Jan 2024 12:40:02 +0100 Subject: [PATCH 06/16] Fix typos in snapRestore comment --- mmv1/products/netapp/volume.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mmv1/products/netapp/volume.yaml b/mmv1/products/netapp/volume.yaml index 4f617b3ab27c..8350c8934c2b 100644 --- a/mmv1/products/netapp/volume.yaml +++ b/mmv1/products/netapp/volume.yaml @@ -205,7 +205,7 @@ properties: name: 'description' description: | An optional description of this resource. - # Use of snapReserve is depricated. We don't expose it intentially. + # Use of snapReserve is depricated. We don't expose it intentionally. # - !ruby/object:Api::Type::Integer # name: 'snapReserve' # description: | From 4d23511b91ac6b430387f69e0f0e7138c21a81b0 Mon Sep 17 00:00:00 2001 From: Oliver Krause <3621164+okrause@users.noreply.github.com> Date: Mon, 29 Jan 2024 15:21:21 +0100 Subject: [PATCH 07/16] Adding missing fields state, StateDetails, backupConfig --- mmv1/products/netapp/volume.yaml | 39 ++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/mmv1/products/netapp/volume.yaml b/mmv1/products/netapp/volume.yaml index 8350c8934c2b..4d4c1f779998 100644 --- a/mmv1/products/netapp/volume.yaml +++ b/mmv1/products/netapp/volume.yaml @@ -64,6 +64,25 @@ examples: test_vars_overrides: network_name: 'acctest.BootstrapSharedServiceNetworkingConnection(t, "gcnv-network-config-1", acctest.ServiceNetworkWithParentService("netapp.servicenetworking.goog"))' properties: + - !ruby/object:Api::Type::Enum + name: 'state' + description: | + State of the volume. + values: + - STATE_UNSPECIFIED + - READY + - CREATING + - DELETING + - UPDATING + - RESTORING + - DISABLED + - ERROR + output: true + - !ruby/object:Api::Type::String + name: 'stateDetails' + description: | + State details of the volume. + output: true - !ruby/object:Api::Type::String name: 'shareName' description: | @@ -416,6 +435,26 @@ properties: # description: |- # Full name of the snapshot resource. Format: `projects/{{project}}/locations/{{location}}/volumes/{{volume}}/snapshots/{{snapshot}}`. # required: true + - !ruby/object:Api::Type::NestedObject + name: 'backupConfig' + description: |- + Backup configuration for the volume. + properties: + - !ruby/object:Api::Type::Array + name: 'backupPolicies' + description: |- + Optionally specify one or more backup policies for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}`` + item_type: Api::Type::String + - !ruby/object:Api::Type::String + name: 'backupVault' + description: |- + ID of the backup vault to use. Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}`` + - !ruby/object:Api::Type::Boolean + name: 'scheduledBackupEnabled' + description: |- + When set to true, scheduled backup is enabled on the volume. + send_empty_value: true + default_value: false virtual_fields: - !ruby/object:Api::Type::Enum name: 'deletion_policy' From 9f0011dce70df99af3c2aa8546eed7a3d1e5969a Mon Sep 17 00:00:00 2001 From: Oliver Krause <3621164+okrause@users.noreply.github.com> Date: Tue, 30 Jan 2024 10:41:40 +0100 Subject: [PATCH 08/16] BackupConfig is work in progress --- mmv1/products/netapp/volume.yaml | 38 ++++++++++++++++---------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/mmv1/products/netapp/volume.yaml b/mmv1/products/netapp/volume.yaml index 4d4c1f779998..a539301bbe3f 100644 --- a/mmv1/products/netapp/volume.yaml +++ b/mmv1/products/netapp/volume.yaml @@ -435,26 +435,26 @@ properties: # description: |- # Full name of the snapshot resource. Format: `projects/{{project}}/locations/{{location}}/volumes/{{volume}}/snapshots/{{snapshot}}`. # required: true - - !ruby/object:Api::Type::NestedObject - name: 'backupConfig' + - !ruby/object:Api::Type::NestedObject + name: 'backupConfig' + description: |- + Backup configuration for the volume. + properties: + - !ruby/object:Api::Type::Array + name: 'backupPolicies' description: |- - Backup configuration for the volume. - properties: - - !ruby/object:Api::Type::Array - name: 'backupPolicies' - description: |- - Optionally specify one or more backup policies for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}`` - item_type: Api::Type::String - - !ruby/object:Api::Type::String - name: 'backupVault' - description: |- - ID of the backup vault to use. Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}`` - - !ruby/object:Api::Type::Boolean - name: 'scheduledBackupEnabled' - description: |- - When set to true, scheduled backup is enabled on the volume. - send_empty_value: true - default_value: false + Optionally specify one or more backup policies for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}`` + item_type: Api::Type::String + - !ruby/object:Api::Type::String + name: 'backupVault' + description: |- + ID of the backup vault to use. Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}`` + - !ruby/object:Api::Type::Boolean + name: 'scheduledBackupEnabled' + description: |- + When set to true, scheduled backup is enabled on the volume. + send_empty_value: true + default_value: false virtual_fields: - !ruby/object:Api::Type::Enum name: 'deletion_policy' From bc6bfd80d3a7853ce3fef208ffd38376bf9e5a7c Mon Sep 17 00:00:00 2001 From: Oliver Krause <3621164+okrause@users.noreply.github.com> Date: Fri, 2 Feb 2024 19:02:00 +0100 Subject: [PATCH 09/16] Implemented restoreParameters - added parameters state and state_details. Needs discussion if they are to be included. Currently they are deactivated - added restore_parameters. - added test for restore_parameters.source_snapshot - adding a test for restore_parameters.sourceBackup required currently non-existing backup resoruce and would have long runtime - renamed the example file to follow format of other peer resources --- mmv1/products/netapp/volume.yaml | 65 +++++++--- ...asic.tf.erb => netapp_volume_basic.tf.erb} | 0 .../netapp/resource_netapp_volume_test.go | 118 ++++++++++++++---- 3 files changed, 140 insertions(+), 43 deletions(-) rename mmv1/templates/terraform/examples/{volume_basic.tf.erb => netapp_volume_basic.tf.erb} (100%) diff --git a/mmv1/products/netapp/volume.yaml b/mmv1/products/netapp/volume.yaml index a539301bbe3f..8d3b590ebc89 100644 --- a/mmv1/products/netapp/volume.yaml +++ b/mmv1/products/netapp/volume.yaml @@ -53,7 +53,7 @@ parameters: url_param_only: true examples: - !ruby/object:Provider::Terraform::Examples - name: 'volume_basic' + name: 'netapp_volume_basic' primary_resource_id: 'test_volume' vars: volume_name: 'test-volume' @@ -64,25 +64,25 @@ examples: test_vars_overrides: network_name: 'acctest.BootstrapSharedServiceNetworkingConnection(t, "gcnv-network-config-1", acctest.ServiceNetworkWithParentService("netapp.servicenetworking.goog"))' properties: - - !ruby/object:Api::Type::Enum - name: 'state' - description: | - State of the volume. - values: - - STATE_UNSPECIFIED - - READY - - CREATING - - DELETING - - UPDATING - - RESTORING - - DISABLED - - ERROR - output: true - - !ruby/object:Api::Type::String - name: 'stateDetails' - description: | - State details of the volume. - output: true + # - !ruby/object:Api::Type::Enum + # name: 'state' + # description: | + # State of the volume. + # values: + # - STATE_UNSPECIFIED + # - READY + # - CREATING + # - DELETING + # - UPDATING + # - RESTORING + # - DISABLED + # - ERROR + # output: true + # - !ruby/object:Api::Type::String + # name: 'stateDetails' + # description: | + # State details of the volume. + # output: true - !ruby/object:Api::Type::String name: 'shareName' description: | @@ -264,6 +264,31 @@ properties: description: | Reports the resource name of the Active Directory policy being used. Inherited from storage pool. output: true + - !ruby/object:Api::Type::NestedObject + name: 'restoreParameters' + description: |- + Used to create this volume from a snapshot (= cloning) or an backup. + # This parameter is only used at CREATE. READs will omit it. + ignore_read: true + properties: + - !ruby/object:Api::Type::String + name: 'sourceSnapshot' + description: |- + Full name of the snapshot to use for creating this volume. + Format: `projects/{{project}}/locations/{{location}}/volumes/{{volume}}/snapshots/{{snapshot}}` + conflicts: + - restoreParameters.sourceBackup + # This parameter is only used at CREATE. READs will omit it. + ignore_read: true + - !ruby/object:Api::Type::String + name: 'sourceBackup' + description: |- + Full name of the snapshot to use for creating this volume. + Format: `projects/{{project}}/locations/{{location}}/backupVaults/{{backupVaultId}}/backups/{{backup}}` + conflicts: + - restoreParameters.sourceSnapshot + # This parameter is only used at CREATE. READs will omit it. + ignore_read: true - !ruby/object:Api::Type::String name: 'kmsConfig' description: | diff --git a/mmv1/templates/terraform/examples/volume_basic.tf.erb b/mmv1/templates/terraform/examples/netapp_volume_basic.tf.erb similarity index 100% rename from mmv1/templates/terraform/examples/volume_basic.tf.erb rename to mmv1/templates/terraform/examples/netapp_volume_basic.tf.erb diff --git a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go index 386e29eb7f42..1fd362dfeddf 100644 --- a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go +++ b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go @@ -1,20 +1,6 @@ // Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0 -// ---------------------------------------------------------------------------- -// -// *** 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. -// -// ---------------------------------------------------------------------------- - package netapp_test import ( @@ -73,6 +59,15 @@ func TestAccNetappVolume_volumeBasicExample_update(t *testing.T) { ImportStateVerify: true, ImportStateVerifyIgnore: []string{"location", "name", "labels", "terraform_labels", "deletion_policy"}, }, + { + Config: testAccNetappVolume_volumeBasicExample_createclonevolume(context), + }, + { + ResourceName: "google_netapp_volume.test_volume_clone", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"location", "name", "labels", "terraform_labels", "deletion_policy", "restore_parameters"}, + }, }, }) } @@ -324,15 +319,92 @@ resource "google_netapp_volume" "test_volume" { deletion_policy = "FORCE" } -# Add the following snapshot block to the test as soon as snapshot resoruce -# is added to the provider. It will make the test cleanup require -# deletion_policy = "FORCE" on the volume for successful delete. -# resource "google_netapp_volumesnapshot" "test-snapshot" { -# depends_on = [google_netapp_volume.test_volume] -# location = google_netapp_volume.test_volume.location -# volume_name = google_netapp_volume.test_volume.name -# name = "test-snapshot%{random_suffix}" -# } +resource "google_netapp_volume_snapshot" "test-snapshot" { + depends_on = [google_netapp_volume.test_volume] + location = google_netapp_volume.test_volume.location + volume_name = google_netapp_volume.test_volume.name + name = "test-snapshot" +} + +data "google_compute_network" "default" { + name = "%{network_name}" +} + `, context) +} + +func testAccNetappVolume_volumeBasicExample_createclonevolume(context map[string]interface{}) string { + return acctest.Nprintf(` + +resource "google_netapp_storage_pool" "default" { + name = "tf-test-test-pool%{random_suffix}" + location = "us-west2" + service_level = "PREMIUM" + capacity_gib = "2048" + network = data.google_compute_network.default.id +} + +resource "google_netapp_storage_pool" "default2" { + name = "tf-test-pool%{random_suffix}" + location = "us-west2" + service_level = "EXTREME" + capacity_gib = "2048" + network = data.google_compute_network.default.id +} + +resource "google_netapp_volume" "test_volume" { + location = "us-west2" + name = "tf-test-test-volume%{random_suffix}" + capacity_gib = "200" + share_name = "tf-test-test-volume%{random_suffix}" + storage_pool = google_netapp_storage_pool.default2.name + protocols = ["NFSV3"] + smb_settings = [] + unix_permissions = "0740" + labels = {} + description = "" + snapshot_directory = true + security_style = "UNIX" + kerberos_enabled = false + export_policy { + rules { + access_type = "READ_WRITE" + allowed_clients = "0.0.0.0/0" + has_root_access = "true" + kerberos5_read_only = false + kerberos5_read_write = false + kerberos5i_read_only = false + kerberos5i_read_write = false + kerberos5p_read_only = false + kerberos5p_read_write = false + nfsv3 = true + nfsv4 = false + } + } + # Delete protection only gets active after an NFS client mounts. + # Setting it here is save, volume can still be deleted. + restricted_actions = ["DELETE"] + deletion_policy = "FORCE" +} + +resource "google_netapp_volume_snapshot" "test-snapshot" { + depends_on = [google_netapp_volume.test_volume] + location = google_netapp_volume.test_volume.location + volume_name = google_netapp_volume.test_volume.name + name = "test-snapshot" +} + +resource "google_netapp_volume" "test_volume_clone" { + location = "us-west2" + name = "tf-test-test-volume-clone%{random_suffix}" + capacity_gib = "200" + share_name = "tf-test-test-volume-clone%{random_suffix}" + storage_pool = google_netapp_storage_pool.default2.name + protocols = ["NFSV3"] + deletion_policy = "FORCE" + restore_parameters { + source_snapshot = google_netapp_volume_snapshot.test-snapshot.id + } +} data "google_compute_network" "default" { name = "%{network_name}" From aa9f798042f188b8500e4a5a8c4d3f159d273284 Mon Sep 17 00:00:00 2001 From: Oliver Krause <3621164+okrause@users.noreply.github.com> Date: Mon, 5 Feb 2024 10:54:36 +0100 Subject: [PATCH 10/16] More improvements on restore_parameters --- mmv1/products/netapp/volume.yaml | 15 +++++++++------ .../netapp/resource_netapp_volume_test.go | 12 ++++++------ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/mmv1/products/netapp/volume.yaml b/mmv1/products/netapp/volume.yaml index 8d3b590ebc89..dd213337d507 100644 --- a/mmv1/products/netapp/volume.yaml +++ b/mmv1/products/netapp/volume.yaml @@ -269,26 +269,29 @@ properties: description: |- Used to create this volume from a snapshot (= cloning) or an backup. # This parameter is only used at CREATE. READs will omit it. + immutable: true ignore_read: true properties: - !ruby/object:Api::Type::String name: 'sourceSnapshot' description: |- Full name of the snapshot to use for creating this volume. - Format: `projects/{{project}}/locations/{{location}}/volumes/{{volume}}/snapshots/{{snapshot}}` + Format: `projects/{{project}}/locations/{{location}}/volumes/{{volume}}/snapshots/{{snapshot}}`. + source_snapshot and source_backup cannot be used simultaneously. conflicts: - - restoreParameters.sourceBackup + - restore_parameters.0.source_backup # This parameter is only used at CREATE. READs will omit it. - ignore_read: true + immutable: true - !ruby/object:Api::Type::String name: 'sourceBackup' description: |- Full name of the snapshot to use for creating this volume. - Format: `projects/{{project}}/locations/{{location}}/backupVaults/{{backupVaultId}}/backups/{{backup}}` + Format: `projects/{{project}}/locations/{{location}}/backupVaults/{{backupVaultId}}/backups/{{backup}}`. + source_snapshot and source_backup cannot be used simultaneously. conflicts: - - restoreParameters.sourceSnapshot + - restore_parameters.0.source_snapshot # This parameter is only used at CREATE. READs will omit it. - ignore_read: true + immutable: true - !ruby/object:Api::Type::String name: 'kmsConfig' description: | diff --git a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go index 1fd362dfeddf..ebb5a9cd4333 100644 --- a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go +++ b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go @@ -11,7 +11,7 @@ import ( "github.com/hashicorp/terraform-provider-google/google/acctest" ) -func TestAccNetappVolume_volumeBasicExample_update(t *testing.T) { +func TestAccNetappVolume_netappVolumeBasicExample_update(t *testing.T) { t.Parallel() context := map[string]interface{}{ @@ -31,7 +31,7 @@ func TestAccNetappVolume_volumeBasicExample_update(t *testing.T) { ResourceName: "google_netapp_volume.test_volume", ImportState: true, ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"location", "name", "labels", "terraform_labels", "deletion_policy"}, + ImportStateVerifyIgnore: []string{"restore_parameters", "location", "name", "deletion_policy", "labels", "terraform_labels"}, }, { Config: testAccNetappVolume_volumeBasicExample_full(context), }, @@ -39,7 +39,7 @@ func TestAccNetappVolume_volumeBasicExample_update(t *testing.T) { ResourceName: "google_netapp_volume.test_volume", ImportState: true, ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"location", "name", "labels", "terraform_labels", "deletion_policy"}, + ImportStateVerifyIgnore: []string{"restore_parameters", "location", "name", "deletion_policy", "labels", "terraform_labels"}, }, { Config: testAccNetappVolume_volumeBasicExample_update(context), @@ -48,7 +48,7 @@ func TestAccNetappVolume_volumeBasicExample_update(t *testing.T) { ResourceName: "google_netapp_volume.test_volume", ImportState: true, ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"location", "name", "labels", "terraform_labels", "deletion_policy"}, + ImportStateVerifyIgnore: []string{"restore_parameters", "location", "name", "deletion_policy", "labels", "terraform_labels"}, }, { Config: testAccNetappVolume_volumeBasicExample_updatesnapshot(context), @@ -57,7 +57,7 @@ func TestAccNetappVolume_volumeBasicExample_update(t *testing.T) { ResourceName: "google_netapp_volume.test_volume", ImportState: true, ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"location", "name", "labels", "terraform_labels", "deletion_policy"}, + ImportStateVerifyIgnore: []string{"restore_parameters", "location", "name", "deletion_policy", "labels", "terraform_labels"}, }, { Config: testAccNetappVolume_volumeBasicExample_createclonevolume(context), @@ -66,7 +66,7 @@ func TestAccNetappVolume_volumeBasicExample_update(t *testing.T) { ResourceName: "google_netapp_volume.test_volume_clone", ImportState: true, ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"location", "name", "labels", "terraform_labels", "deletion_policy", "restore_parameters"}, + ImportStateVerifyIgnore: []string{"restore_parameters", "location", "name", "deletion_policy", "labels", "terraform_labels"}, }, }, }) From 0cdf2c7f58a22052af60d03cbc53f7821f070459 Mon Sep 17 00:00:00 2001 From: Oliver Krause <3621164+okrause@users.noreply.github.com> Date: Mon, 5 Feb 2024 11:07:09 +0100 Subject: [PATCH 11/16] Comment cleanups --- mmv1/products/netapp/volume.yaml | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/mmv1/products/netapp/volume.yaml b/mmv1/products/netapp/volume.yaml index dd213337d507..c267bb641cee 100644 --- a/mmv1/products/netapp/volume.yaml +++ b/mmv1/products/netapp/volume.yaml @@ -224,11 +224,11 @@ properties: name: 'description' description: | An optional description of this resource. - # Use of snapReserve is depricated. We don't expose it intentionally. + # Use of snapReserve is deprecated. Here aa a comment to express intention. # - !ruby/object:Api::Type::Integer # name: 'snapReserve' # description: | - # Snap_reserve specifies percentage of volume storage reserved for snapshot storage. Default is 0 percent. Use is deprecated. + # snap_reserve specifies percentage of volume storage reserved for snapshot storage. Default is 0 percent. Use is deprecated. - !ruby/object:Api::Type::Boolean name: 'snapshotDirectory' description: | @@ -268,8 +268,8 @@ properties: name: 'restoreParameters' description: |- Used to create this volume from a snapshot (= cloning) or an backup. - # This parameter is only used at CREATE. READs will omit it. immutable: true + # This parameter is only used at CREATE. READs will omit it. ignore_read: true properties: - !ruby/object:Api::Type::String @@ -280,7 +280,6 @@ properties: source_snapshot and source_backup cannot be used simultaneously. conflicts: - restore_parameters.0.source_backup - # This parameter is only used at CREATE. READs will omit it. immutable: true - !ruby/object:Api::Type::String name: 'sourceBackup' @@ -290,7 +289,6 @@ properties: source_snapshot and source_backup cannot be used simultaneously. conflicts: - restore_parameters.0.source_snapshot - # This parameter is only used at CREATE. READs will omit it. immutable: true - !ruby/object:Api::Type::String name: 'kmsConfig' @@ -452,17 +450,6 @@ properties: description: |- Set the day or days of the month to make a snapshot (1-31). Accepts a comma separated number of days. Defaults to '1'. default_value: '1' -# This is disabled until we have support for backup resource and can test it. -# - !ruby/object:Api::Type::NestedObject -# name: restoreParameters -# description: Specifies the source information to create a volume from. -# immutable: true -# properties: -# - !ruby/object:Api::Type::String -# name: 'sourceSnapshot' -# description: |- -# Full name of the snapshot resource. Format: `projects/{{project}}/locations/{{location}}/volumes/{{volume}}/snapshots/{{snapshot}}`. -# required: true - !ruby/object:Api::Type::NestedObject name: 'backupConfig' description: |- From 9b852a91b8644807e1e7309bb1081ef0eaae4cbe Mon Sep 17 00:00:00 2001 From: Oliver Krause <3621164+okrause@users.noreply.github.com> Date: Mon, 5 Feb 2024 12:10:42 +0100 Subject: [PATCH 12/16] Remove backupConfig support for now. --- mmv1/products/netapp/volume.yaml | 46 ++++++++++++++++---------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/mmv1/products/netapp/volume.yaml b/mmv1/products/netapp/volume.yaml index c267bb641cee..8c8b27b37575 100644 --- a/mmv1/products/netapp/volume.yaml +++ b/mmv1/products/netapp/volume.yaml @@ -276,8 +276,8 @@ properties: name: 'sourceSnapshot' description: |- Full name of the snapshot to use for creating this volume. + `source_snapshot` and `source_backup` cannot be used simultaneously. Format: `projects/{{project}}/locations/{{location}}/volumes/{{volume}}/snapshots/{{snapshot}}`. - source_snapshot and source_backup cannot be used simultaneously. conflicts: - restore_parameters.0.source_backup immutable: true @@ -285,11 +285,11 @@ properties: name: 'sourceBackup' description: |- Full name of the snapshot to use for creating this volume. + `source_snapshot` and `source_backup` cannot be used simultaneously. Format: `projects/{{project}}/locations/{{location}}/backupVaults/{{backupVaultId}}/backups/{{backup}}`. - source_snapshot and source_backup cannot be used simultaneously. conflicts: - restore_parameters.0.source_snapshot - immutable: true + immutable: true - !ruby/object:Api::Type::String name: 'kmsConfig' description: | @@ -450,26 +450,26 @@ properties: description: |- Set the day or days of the month to make a snapshot (1-31). Accepts a comma separated number of days. Defaults to '1'. default_value: '1' - - !ruby/object:Api::Type::NestedObject - name: 'backupConfig' - description: |- - Backup configuration for the volume. - properties: - - !ruby/object:Api::Type::Array - name: 'backupPolicies' - description: |- - Optionally specify one or more backup policies for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}`` - item_type: Api::Type::String - - !ruby/object:Api::Type::String - name: 'backupVault' - description: |- - ID of the backup vault to use. Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}`` - - !ruby/object:Api::Type::Boolean - name: 'scheduledBackupEnabled' - description: |- - When set to true, scheduled backup is enabled on the volume. - send_empty_value: true - default_value: false + # backupConfig is an upcoming feature. Needs more work/testing before release. + # - !ruby/object:Api::Type::NestedObject + # name: 'backupConfig' + # description: |- + # Backup configuration for the volume. + # properties: + # - !ruby/object:Api::Type::Array + # name: 'backupPolicies' + # description: |- + # Optionally specify one or more backup policies for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}`` + # item_type: Api::Type::String + # - !ruby/object:Api::Type::String + # name: 'backupVault' + # description: |- + # ID of the backup vault to use. A backup vault is reqired to create manual or scheduled backups. + # Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}`` + # - !ruby/object:Api::Type::Boolean + # name: 'scheduledBackupEnabled' + # description: |- + # When set to true, scheduled backup is enabled on the volume. Omit if no backup_policy is specified. virtual_fields: - !ruby/object:Api::Type::Enum name: 'deletion_policy' From 2e66ef20b55f13c9087adcd7b0362c2f013b7257 Mon Sep 17 00:00:00 2001 From: Oliver Krause <3621164+okrause@users.noreply.github.com> Date: Mon, 5 Feb 2024 12:16:28 +0100 Subject: [PATCH 13/16] Fix small typos --- mmv1/products/netapp/volume.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mmv1/products/netapp/volume.yaml b/mmv1/products/netapp/volume.yaml index 8c8b27b37575..bbb250015928 100644 --- a/mmv1/products/netapp/volume.yaml +++ b/mmv1/products/netapp/volume.yaml @@ -224,11 +224,11 @@ properties: name: 'description' description: | An optional description of this resource. - # Use of snapReserve is deprecated. Here aa a comment to express intention. + # Use of snapReserve is deprecated. Here as a comment to express intention. # - !ruby/object:Api::Type::Integer # name: 'snapReserve' # description: | - # snap_reserve specifies percentage of volume storage reserved for snapshot storage. Default is 0 percent. Use is deprecated. + # `snap_reserve` specifies percentage of volume storage reserved for snapshot storage. Default is 0 percent. Use is deprecated. - !ruby/object:Api::Type::Boolean name: 'snapshotDirectory' description: | From 1b9f077cdb04c2f7781112b8296b7a0bddca1081 Mon Sep 17 00:00:00 2001 From: Oliver Krause <3621164+okrause@users.noreply.github.com> Date: Wed, 7 Feb 2024 16:00:43 +0100 Subject: [PATCH 14/16] - Adding state, state_details and create_time fields - make backup_config parameters "exactly_one_of" - some work on backup_config, but still disabled - added tests for backup_config, but still disabled - made tests more compact by removing resources and fields which did their job earlier but aren't required later anymore. --- mmv1/products/netapp/volume.yaml | 55 ++++--- .../netapp/resource_netapp_volume_test.go | 146 ++++++++++++++++-- 2 files changed, 162 insertions(+), 39 deletions(-) diff --git a/mmv1/products/netapp/volume.yaml b/mmv1/products/netapp/volume.yaml index bbb250015928..fead11c9907c 100644 --- a/mmv1/products/netapp/volume.yaml +++ b/mmv1/products/netapp/volume.yaml @@ -64,25 +64,30 @@ examples: test_vars_overrides: network_name: 'acctest.BootstrapSharedServiceNetworkingConnection(t, "gcnv-network-config-1", acctest.ServiceNetworkWithParentService("netapp.servicenetworking.goog"))' properties: - # - !ruby/object:Api::Type::Enum - # name: 'state' - # description: | - # State of the volume. - # values: - # - STATE_UNSPECIFIED - # - READY - # - CREATING - # - DELETING - # - UPDATING - # - RESTORING - # - DISABLED - # - ERROR - # output: true - # - !ruby/object:Api::Type::String - # name: 'stateDetails' - # description: | - # State details of the volume. - # output: true + - !ruby/object:Api::Type::Enum + name: 'state' + description: | + State of the volume. + values: + - STATE_UNSPECIFIED + - READY + - CREATING + - DELETING + - UPDATING + - RESTORING + - DISABLED + - ERROR + output: true + - !ruby/object:Api::Type::String + name: 'stateDetails' + description: | + State details of the volume. + output: true + - !ruby/object:Api::Type::String + name: 'createTime' + description: | + Create time of the volume. A timestamp in RFC3339 UTC "Zulu" format. Examples: "2023-06-22T09:13:01.617Z". + output: true - !ruby/object:Api::Type::String name: 'shareName' description: | @@ -278,8 +283,9 @@ properties: Full name of the snapshot to use for creating this volume. `source_snapshot` and `source_backup` cannot be used simultaneously. Format: `projects/{{project}}/locations/{{location}}/volumes/{{volume}}/snapshots/{{snapshot}}`. - conflicts: + exactly_one_of: - restore_parameters.0.source_backup + - restore_parameters.0.source_snapshot immutable: true - !ruby/object:Api::Type::String name: 'sourceBackup' @@ -287,7 +293,8 @@ properties: Full name of the snapshot to use for creating this volume. `source_snapshot` and `source_backup` cannot be used simultaneously. Format: `projects/{{project}}/locations/{{location}}/backupVaults/{{backupVaultId}}/backups/{{backup}}`. - conflicts: + exactly_one_of: + - restore_parameters.0.source_backup - restore_parameters.0.source_snapshot immutable: true - !ruby/object:Api::Type::String @@ -455,11 +462,15 @@ properties: # name: 'backupConfig' # description: |- # Backup configuration for the volume. + # update_mask_fields: + # - 'backup_config.backup_policies' + # - 'backup_config.backup_vault' + # - 'backup_config.scheduled_backup_enabled' # properties: # - !ruby/object:Api::Type::Array # name: 'backupPolicies' # description: |- - # Optionally specify one or more backup policies for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}`` + # Specify a single backup policy ID for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}`` # item_type: Api::Type::String # - !ruby/object:Api::Type::String # name: 'backupVault' diff --git a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go index ebb5a9cd4333..47f7bd02f572 100644 --- a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go +++ b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go @@ -68,6 +68,25 @@ func TestAccNetappVolume_netappVolumeBasicExample_update(t *testing.T) { ImportStateVerify: true, ImportStateVerifyIgnore: []string{"restore_parameters", "location", "name", "deletion_policy", "labels", "terraform_labels"}, }, + // backupConfig is an upcoming feature. Needs more work/testing before release. + // { + // Config: testAccNetappVolume_volumeBasicExample_setupBackup(context), + // }, + // { + // ResourceName: "google_netapp_volume.test_volume", + // ImportState: true, + // ImportStateVerify: true, + // ImportStateVerifyIgnore: []string{"restore_parameters", "location", "name", "deletion_policy", "labels", "terraform_labels"}, + // }, + // { + // Config: testAccNetappVolume_volumeBasicExample_updateBackup(context), + // }, + // { + // ResourceName: "google_netapp_volume.test_volume", + // ImportState: true, + // ImportStateVerify: true, + // ImportStateVerifyIgnore: []string{"restore_parameters", "location", "name", "deletion_policy", "labels", "terraform_labels"}, + // }, }, }) } @@ -232,7 +251,9 @@ resource "google_netapp_volume" "test_volume" { nfsv4 = false } } - restricted_actions = ["DELETE"] + # Delete protection only gets active after an NFS client mounts. + # Setting it here is save, volume can still be deleted. + deletion_policy = "FORCE" snapshot_policy { enabled = true daily_schedule { @@ -268,14 +289,6 @@ data "google_compute_network" "default" { func testAccNetappVolume_volumeBasicExample_updatesnapshot(context map[string]interface{}) string { return acctest.Nprintf(` -resource "google_netapp_storage_pool" "default" { - name = "tf-test-test-pool%{random_suffix}" - location = "us-west2" - service_level = "PREMIUM" - capacity_gib = "2048" - network = data.google_compute_network.default.id -} - resource "google_netapp_storage_pool" "default2" { name = "tf-test-pool%{random_suffix}" location = "us-west2" @@ -332,17 +345,10 @@ data "google_compute_network" "default" { `, context) } +// Tests creating a new volume (clone) from a snapshot created from existing volume func testAccNetappVolume_volumeBasicExample_createclonevolume(context map[string]interface{}) string { return acctest.Nprintf(` -resource "google_netapp_storage_pool" "default" { - name = "tf-test-test-pool%{random_suffix}" - location = "us-west2" - service_level = "PREMIUM" - capacity_gib = "2048" - network = data.google_compute_network.default.id -} - resource "google_netapp_storage_pool" "default2" { name = "tf-test-pool%{random_suffix}" location = "us-west2" @@ -411,3 +417,109 @@ data "google_compute_network" "default" { } `, context) } + +// Tests adding backup vault and policy to the volume +func testAccNetappVolume_volumeBasicExample_setupBackup(context map[string]interface{}) string { + return acctest.Nprintf(` + +resource "google_netapp_storage_pool" "default2" { + name = "tf-test-pool%{random_suffix}" + location = "us-west2" + service_level = "EXTREME" + capacity_gib = "2048" + network = data.google_compute_network.default.id +} + +resource "google_netapp_volume" "test_volume" { + location = "us-west2" + name = "tf-test-test-volume%{random_suffix}" + capacity_gib = "200" + share_name = "tf-test-test-volume%{random_suffix}" + storage_pool = google_netapp_storage_pool.default2.name + protocols = ["NFSV3"] + security_style = "UNIX" + # Delete protection only gets active after an NFS client mounts. + # Setting it here is save, volume can still be deleted. + restricted_actions = ["DELETE"] + deletion_policy = "FORCE" + backup_config { + backup_policies = [ + google_netapp_backup_policy.backup-policy.id + ] + backup_vault = google_netapp_backup_vault.backup-vault.id + scheduled_backup_enabled = true + } +} + +resource "google_netapp_backup_vault" "backup-vault" { + location = "us-west2" + name = "tf-test-vault%{random_suffix}" +} + +resource "google_netapp_backup_policy" "backup-policy" { + name = "tf-test-backup-policy%{random_suffix}" + location = "us-west2" + daily_backup_limit = 2 + weekly_backup_limit = 1 + monthly_backup_limit = 1 + enabled = true +} + +data "google_compute_network" "default" { + name = "%{network_name}" +} + `, context) +} + +// Updates backup settings. Cannot update backup vault, since only one allowed per location +func testAccNetappVolume_volumeBasicExample_updateBackup(context map[string]interface{}) string { + return acctest.Nprintf(` + +resource "google_netapp_storage_pool" "default2" { + name = "tf-test-pool%{random_suffix}" + location = "us-west2" + service_level = "EXTREME" + capacity_gib = "2048" + network = data.google_compute_network.default.id +} + +resource "google_netapp_volume" "test_volume" { + location = "us-west2" + name = "tf-test-test-volume%{random_suffix}" + capacity_gib = "200" + share_name = "tf-test-test-volume%{random_suffix}" + storage_pool = google_netapp_storage_pool.default2.name + protocols = ["NFSV3"] + security_style = "UNIX" + # Delete protection only gets active after an NFS client mounts. + # Setting it here is save, volume can still be deleted. + restricted_actions = ["DELETE"] + deletion_policy = "FORCE" + backup_config { + backup_policies = [ + google_netapp_backup_policy.backup-policy2.id + ] + backup_vault = google_netapp_backup_vault.backup-vault.id + scheduled_backup_enabled = false + } +} + +resource "google_netapp_backup_vault" "backup-vault" { + location = "us-west2" + name = "tf-test-vault%{random_suffix}" +} + +resource "google_netapp_backup_policy" "backup-policy2" { + name = "tf-test-backup-policy2%{random_suffix}" + location = "us-west2" + daily_backup_limit = 4 + weekly_backup_limit = 2 + monthly_backup_limit = 2 + enabled = true +} + +data "google_compute_network" "default" { + name = "%{network_name}" +} + `, context) +} From 7a0b6584bbcc95b92492d4e99bcc72c2ae12453e Mon Sep 17 00:00:00 2001 From: Oliver Krause <3621164+okrause@users.noreply.github.com> Date: Tue, 13 Feb 2024 13:31:52 +0100 Subject: [PATCH 15/16] convert tabs to spaces in test resource blocks --- .../netapp/resource_netapp_volume_test.go | 635 +++++++++--------- 1 file changed, 315 insertions(+), 320 deletions(-) diff --git a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go index 47f7bd02f572..47fa2db516d8 100644 --- a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go +++ b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go @@ -94,24 +94,24 @@ func TestAccNetappVolume_netappVolumeBasicExample_update(t *testing.T) { func testAccNetappVolume_volumeBasicExample_basic(context map[string]interface{}) string { return acctest.Nprintf(` resource "google_netapp_storage_pool" "default" { - name = "tf-test-test-pool%{random_suffix}" - location = "us-west2" - service_level = "PREMIUM" - capacity_gib = "2048" - network = data.google_compute_network.default.id + name = "tf-test-test-pool%{random_suffix}" + location = "us-west2" + service_level = "PREMIUM" + capacity_gib = "2048" + network = data.google_compute_network.default.id } resource "google_netapp_volume" "test_volume" { - location = "us-west2" - name = "tf-test-test-volume%{random_suffix}" - capacity_gib = "100" - share_name = "tf-test-test-volume%{random_suffix}" - storage_pool = google_netapp_storage_pool.default.name - protocols = ["NFSV3"] + location = "us-west2" + name = "tf-test-test-volume%{random_suffix}" + capacity_gib = "100" + share_name = "tf-test-test-volume%{random_suffix}" + storage_pool = google_netapp_storage_pool.default.name + protocols = ["NFSV3"] } data "google_compute_network" "default" { - name = "%{network_name}" + name = "%{network_name}" } `, context) } @@ -119,228 +119,226 @@ data "google_compute_network" "default" { func testAccNetappVolume_volumeBasicExample_full(context map[string]interface{}) string { return acctest.Nprintf(` resource "google_netapp_storage_pool" "default" { - name = "tf-test-test-pool%{random_suffix}" - location = "us-west2" - service_level = "PREMIUM" - capacity_gib = "2048" - network = data.google_compute_network.default.id + name = "tf-test-test-pool%{random_suffix}" + location = "us-west2" + service_level = "PREMIUM" + capacity_gib = "2048" + network = data.google_compute_network.default.id } - + resource "google_netapp_storage_pool" "default2" { - name = "tf-test-pool%{random_suffix}" - location = "us-west2" - service_level = "EXTREME" - capacity_gib = "2048" - network = data.google_compute_network.default.id + name = "tf-test-pool%{random_suffix}" + location = "us-west2" + service_level = "EXTREME" + capacity_gib = "2048" + network = data.google_compute_network.default.id } - + resource "google_netapp_volume" "test_volume" { - location = "us-west2" - name = "tf-test-test-volume%{random_suffix}" - capacity_gib = "100" - share_name = "tf-test-test-volume%{random_suffix}" - storage_pool = google_netapp_storage_pool.default.name - protocols = ["NFSV3"] - smb_settings = [] - unix_permissions = "0770" - labels = { - key= "test" - value= "pool" - } - description = "This is a test description" - snapshot_directory = false - security_style = "UNIX" - kerberos_enabled = false - export_policy { - rules { - access_type = "READ_ONLY" - allowed_clients = "0.0.0.0/0" - has_root_access = "false" - kerberos5_read_only = false - kerberos5_read_write = false - kerberos5i_read_only = false - kerberos5i_read_write = false - kerberos5p_read_only = false - kerberos5p_read_write = false - nfsv3 = true - nfsv4 = false - } - rules { - access_type = "READ_WRITE" - allowed_clients = "10.2.3.4,10.2.3.5" - has_root_access = "true" - kerberos5_read_only = false - kerberos5_read_write = false - kerberos5i_read_only = false - kerberos5i_read_write = false - kerberos5p_read_only = false - kerberos5p_read_write = false - nfsv3 = true - nfsv4 = false - } - } - restricted_actions = [] - snapshot_policy { - daily_schedule { - snapshots_to_keep = 2 - } - enabled = true - hourly_schedule { - snapshots_to_keep = 2 - } - monthly_schedule { - snapshots_to_keep = 4 - } - weekly_schedule { - snapshots_to_keep = 2 - } - } + location = "us-west2" + name = "tf-test-test-volume%{random_suffix}" + capacity_gib = "100" + share_name = "tf-test-test-volume%{random_suffix}" + storage_pool = google_netapp_storage_pool.default.name + protocols = ["NFSV3"] + smb_settings = [] + unix_permissions = "0770" + labels = { + key= "test" + value= "pool" + } + description = "This is a test description" + snapshot_directory = false + security_style = "UNIX" + kerberos_enabled = false + export_policy { + rules { + access_type = "READ_ONLY" + allowed_clients = "0.0.0.0/0" + has_root_access = "false" + kerberos5_read_only = false + kerberos5_read_write = false + kerberos5i_read_only = false + kerberos5i_read_write = false + kerberos5p_read_only = false + kerberos5p_read_write = false + nfsv3 = true + nfsv4 = false + } + rules { + access_type = "READ_WRITE" + allowed_clients = "10.2.3.4,10.2.3.5" + has_root_access = "true" + kerberos5_read_only = false + kerberos5_read_write = false + kerberos5i_read_only = false + kerberos5i_read_write = false + kerberos5p_read_only = false + kerberos5p_read_write = false + nfsv3 = true + nfsv4 = false + } + } + restricted_actions = [] + snapshot_policy { + daily_schedule { + snapshots_to_keep = 2 + } + enabled = true + hourly_schedule { + snapshots_to_keep = 2 + } + monthly_schedule { + snapshots_to_keep = 4 + } + weekly_schedule { + snapshots_to_keep = 2 + } + } } data "google_compute_network" "default" { - name = "%{network_name}" + name = "%{network_name}" } `, context) } func testAccNetappVolume_volumeBasicExample_update(context map[string]interface{}) string { return acctest.Nprintf(` - resource "google_netapp_storage_pool" "default" { - name = "tf-test-test-pool%{random_suffix}" - location = "us-west2" - service_level = "PREMIUM" - capacity_gib = "2048" - network = data.google_compute_network.default.id + name = "tf-test-test-pool%{random_suffix}" + location = "us-west2" + service_level = "PREMIUM" + capacity_gib = "2048" + network = data.google_compute_network.default.id } - + resource "google_netapp_storage_pool" "default2" { - name = "tf-test-pool%{random_suffix}" - location = "us-west2" - service_level = "EXTREME" - capacity_gib = "2048" - network = data.google_compute_network.default.id + name = "tf-test-pool%{random_suffix}" + location = "us-west2" + service_level = "EXTREME" + capacity_gib = "2048" + network = data.google_compute_network.default.id } resource "google_netapp_volume" "test_volume" { - location = "us-west2" - name = "tf-test-test-volume%{random_suffix}" - capacity_gib = "200" - share_name = "tf-test-test-volume%{random_suffix}" - storage_pool = google_netapp_storage_pool.default2.name - protocols = ["NFSV3"] - smb_settings = [] - unix_permissions = "0740" - labels = {} - description = "" - snapshot_directory = true - security_style = "UNIX" - kerberos_enabled = false - export_policy { - rules { - access_type = "READ_WRITE" - allowed_clients = "0.0.0.0/0" - has_root_access = "true" - kerberos5_read_only = false - kerberos5_read_write = false - kerberos5i_read_only = false - kerberos5i_read_write = false - kerberos5p_read_only = false - kerberos5p_read_write = false - nfsv3 = true - nfsv4 = false - } - } - # Delete protection only gets active after an NFS client mounts. - # Setting it here is save, volume can still be deleted. - deletion_policy = "FORCE" - snapshot_policy { - enabled = true - daily_schedule { - hour = 1 - minute = 2 - snapshots_to_keep = 1 - } - hourly_schedule { - minute = 10 - snapshots_to_keep = 1 - } - monthly_schedule { - days_of_month = "2" - hour = 3 - minute = 4 - snapshots_to_keep = 1 - } - weekly_schedule { - day = "Monday" - hour = 5 - minute = 6 - snapshots_to_keep = 1 - } - } + location = "us-west2" + name = "tf-test-test-volume%{random_suffix}" + capacity_gib = "200" + share_name = "tf-test-test-volume%{random_suffix}" + storage_pool = google_netapp_storage_pool.default2.name + protocols = ["NFSV3"] + smb_settings = [] + unix_permissions = "0740" + labels = {} + description = "" + snapshot_directory = true + security_style = "UNIX" + kerberos_enabled = false + export_policy { + rules { + access_type = "READ_WRITE" + allowed_clients = "0.0.0.0/0" + has_root_access = "true" + kerberos5_read_only = false + kerberos5_read_write = false + kerberos5i_read_only = false + kerberos5i_read_write = false + kerberos5p_read_only = false + kerberos5p_read_write = false + nfsv3 = true + nfsv4 = false + } + } + # Delete protection only gets active after an NFS client mounts. + # Setting it here is save, volume can still be deleted. + deletion_policy = "FORCE" + snapshot_policy { + enabled = true + daily_schedule { + hour = 1 + minute = 2 + snapshots_to_keep = 1 + } + hourly_schedule { + minute = 10 + snapshots_to_keep = 1 + } + monthly_schedule { + days_of_month = "2" + hour = 3 + minute = 4 + snapshots_to_keep = 1 + } + weekly_schedule { + day = "Monday" + hour = 5 + minute = 6 + snapshots_to_keep = 1 + } + } } data "google_compute_network" "default" { - name = "%{network_name}" + name = "%{network_name}" } `, context) } func testAccNetappVolume_volumeBasicExample_updatesnapshot(context map[string]interface{}) string { return acctest.Nprintf(` - resource "google_netapp_storage_pool" "default2" { - name = "tf-test-pool%{random_suffix}" - location = "us-west2" - service_level = "EXTREME" - capacity_gib = "2048" - network = data.google_compute_network.default.id + name = "tf-test-pool%{random_suffix}" + location = "us-west2" + service_level = "EXTREME" + capacity_gib = "2048" + network = data.google_compute_network.default.id } - + resource "google_netapp_volume" "test_volume" { - location = "us-west2" - name = "tf-test-test-volume%{random_suffix}" - capacity_gib = "200" - share_name = "tf-test-test-volume%{random_suffix}" - storage_pool = google_netapp_storage_pool.default2.name - protocols = ["NFSV3"] - smb_settings = [] - unix_permissions = "0740" - labels = {} - description = "" - snapshot_directory = true - security_style = "UNIX" - kerberos_enabled = false - export_policy { - rules { - access_type = "READ_WRITE" - allowed_clients = "0.0.0.0/0" - has_root_access = "true" - kerberos5_read_only = false - kerberos5_read_write = false - kerberos5i_read_only = false - kerberos5i_read_write = false - kerberos5p_read_only = false - kerberos5p_read_write = false - nfsv3 = true - nfsv4 = false - } - } - # Delete protection only gets active after an NFS client mounts. - # Setting it here is save, volume can still be deleted. - restricted_actions = ["DELETE"] - deletion_policy = "FORCE" + location = "us-west2" + name = "tf-test-test-volume%{random_suffix}" + capacity_gib = "200" + share_name = "tf-test-test-volume%{random_suffix}" + storage_pool = google_netapp_storage_pool.default2.name + protocols = ["NFSV3"] + smb_settings = [] + unix_permissions = "0740" + labels = {} + description = "" + snapshot_directory = true + security_style = "UNIX" + kerberos_enabled = false + export_policy { + rules { + access_type = "READ_WRITE" + allowed_clients = "0.0.0.0/0" + has_root_access = "true" + kerberos5_read_only = false + kerberos5_read_write = false + kerberos5i_read_only = false + kerberos5i_read_write = false + kerberos5p_read_only = false + kerberos5p_read_write = false + nfsv3 = true + nfsv4 = false + } + } + # Delete protection only gets active after an NFS client mounts. + # Setting it here is save, volume can still be deleted. + restricted_actions = ["DELETE"] + deletion_policy = "FORCE" } resource "google_netapp_volume_snapshot" "test-snapshot" { - depends_on = [google_netapp_volume.test_volume] - location = google_netapp_volume.test_volume.location - volume_name = google_netapp_volume.test_volume.name - name = "test-snapshot" + depends_on = [google_netapp_volume.test_volume] + location = google_netapp_volume.test_volume.location + volume_name = google_netapp_volume.test_volume.name + name = "test-snapshot" } data "google_compute_network" "default" { - name = "%{network_name}" + name = "%{network_name}" } `, context) } @@ -348,72 +346,71 @@ data "google_compute_network" "default" { // Tests creating a new volume (clone) from a snapshot created from existing volume func testAccNetappVolume_volumeBasicExample_createclonevolume(context map[string]interface{}) string { return acctest.Nprintf(` - resource "google_netapp_storage_pool" "default2" { - name = "tf-test-pool%{random_suffix}" - location = "us-west2" - service_level = "EXTREME" - capacity_gib = "2048" - network = data.google_compute_network.default.id + name = "tf-test-pool%{random_suffix}" + location = "us-west2" + service_level = "EXTREME" + capacity_gib = "2048" + network = data.google_compute_network.default.id } - + resource "google_netapp_volume" "test_volume" { - location = "us-west2" - name = "tf-test-test-volume%{random_suffix}" - capacity_gib = "200" - share_name = "tf-test-test-volume%{random_suffix}" - storage_pool = google_netapp_storage_pool.default2.name - protocols = ["NFSV3"] - smb_settings = [] - unix_permissions = "0740" - labels = {} - description = "" - snapshot_directory = true - security_style = "UNIX" - kerberos_enabled = false - export_policy { - rules { - access_type = "READ_WRITE" - allowed_clients = "0.0.0.0/0" - has_root_access = "true" - kerberos5_read_only = false - kerberos5_read_write = false - kerberos5i_read_only = false - kerberos5i_read_write = false - kerberos5p_read_only = false - kerberos5p_read_write = false - nfsv3 = true - nfsv4 = false - } - } - # Delete protection only gets active after an NFS client mounts. - # Setting it here is save, volume can still be deleted. - restricted_actions = ["DELETE"] - deletion_policy = "FORCE" + location = "us-west2" + name = "tf-test-test-volume%{random_suffix}" + capacity_gib = "200" + share_name = "tf-test-test-volume%{random_suffix}" + storage_pool = google_netapp_storage_pool.default2.name + protocols = ["NFSV3"] + smb_settings = [] + unix_permissions = "0740" + labels = {} + description = "" + snapshot_directory = true + security_style = "UNIX" + kerberos_enabled = false + export_policy { + rules { + access_type = "READ_WRITE" + allowed_clients = "0.0.0.0/0" + has_root_access = "true" + kerberos5_read_only = false + kerberos5_read_write = false + kerberos5i_read_only = false + kerberos5i_read_write = false + kerberos5p_read_only = false + kerberos5p_read_write = false + nfsv3 = true + nfsv4 = false + } + } + # Delete protection only gets active after an NFS client mounts. + # Setting it here is save, volume can still be deleted. + restricted_actions = ["DELETE"] + deletion_policy = "FORCE" } resource "google_netapp_volume_snapshot" "test-snapshot" { - depends_on = [google_netapp_volume.test_volume] - location = google_netapp_volume.test_volume.location - volume_name = google_netapp_volume.test_volume.name - name = "test-snapshot" + depends_on = [google_netapp_volume.test_volume] + location = google_netapp_volume.test_volume.location + volume_name = google_netapp_volume.test_volume.name + name = "test-snapshot" } resource "google_netapp_volume" "test_volume_clone" { - location = "us-west2" - name = "tf-test-test-volume-clone%{random_suffix}" - capacity_gib = "200" - share_name = "tf-test-test-volume-clone%{random_suffix}" - storage_pool = google_netapp_storage_pool.default2.name - protocols = ["NFSV3"] - deletion_policy = "FORCE" - restore_parameters { - source_snapshot = google_netapp_volume_snapshot.test-snapshot.id - } + location = "us-west2" + name = "tf-test-test-volume-clone%{random_suffix}" + capacity_gib = "200" + share_name = "tf-test-test-volume-clone%{random_suffix}" + storage_pool = google_netapp_storage_pool.default2.name + protocols = ["NFSV3"] + deletion_policy = "FORCE" + restore_parameters { + source_snapshot = google_netapp_volume_snapshot.test-snapshot.id + } } data "google_compute_network" "default" { - name = "%{network_name}" + name = "%{network_name}" } `, context) } @@ -421,52 +418,51 @@ data "google_compute_network" "default" { // Tests adding backup vault and policy to the volume func testAccNetappVolume_volumeBasicExample_setupBackup(context map[string]interface{}) string { return acctest.Nprintf(` - resource "google_netapp_storage_pool" "default2" { - name = "tf-test-pool%{random_suffix}" - location = "us-west2" - service_level = "EXTREME" - capacity_gib = "2048" - network = data.google_compute_network.default.id + name = "tf-test-pool%{random_suffix}" + location = "us-west2" + service_level = "EXTREME" + capacity_gib = "2048" + network = data.google_compute_network.default.id } - + resource "google_netapp_volume" "test_volume" { - location = "us-west2" - name = "tf-test-test-volume%{random_suffix}" - capacity_gib = "200" - share_name = "tf-test-test-volume%{random_suffix}" - storage_pool = google_netapp_storage_pool.default2.name - protocols = ["NFSV3"] - security_style = "UNIX" - # Delete protection only gets active after an NFS client mounts. - # Setting it here is save, volume can still be deleted. - restricted_actions = ["DELETE"] - deletion_policy = "FORCE" - backup_config { - backup_policies = [ - google_netapp_backup_policy.backup-policy.id - ] - backup_vault = google_netapp_backup_vault.backup-vault.id - scheduled_backup_enabled = true - } + location = "us-west2" + name = "tf-test-test-volume%{random_suffix}" + capacity_gib = "200" + share_name = "tf-test-test-volume%{random_suffix}" + storage_pool = google_netapp_storage_pool.default2.name + protocols = ["NFSV3"] + security_style = "UNIX" + # Delete protection only gets active after an NFS client mounts. + # Setting it here is save, volume can still be deleted. + restricted_actions = ["DELETE"] + deletion_policy = "FORCE" + backup_config { + backup_policies = [ + google_netapp_backup_policy.backup-policy.id + ] + backup_vault = google_netapp_backup_vault.backup-vault.id + scheduled_backup_enabled = true + } } resource "google_netapp_backup_vault" "backup-vault" { - location = "us-west2" - name = "tf-test-vault%{random_suffix}" + location = "us-west2" + name = "tf-test-vault%{random_suffix}" } - + resource "google_netapp_backup_policy" "backup-policy" { - name = "tf-test-backup-policy%{random_suffix}" - location = "us-west2" - daily_backup_limit = 2 - weekly_backup_limit = 1 - monthly_backup_limit = 1 - enabled = true + name = "tf-test-backup-policy%{random_suffix}" + location = "us-west2" + daily_backup_limit = 2 + weekly_backup_limit = 1 + monthly_backup_limit = 1 + enabled = true } data "google_compute_network" "default" { - name = "%{network_name}" + name = "%{network_name}" } `, context) } @@ -474,52 +470,51 @@ data "google_compute_network" "default" { // Updates backup settings. Cannot update backup vault, since only one allowed per location func testAccNetappVolume_volumeBasicExample_updateBackup(context map[string]interface{}) string { return acctest.Nprintf(` - resource "google_netapp_storage_pool" "default2" { - name = "tf-test-pool%{random_suffix}" - location = "us-west2" - service_level = "EXTREME" - capacity_gib = "2048" - network = data.google_compute_network.default.id + name = "tf-test-pool%{random_suffix}" + location = "us-west2" + service_level = "EXTREME" + capacity_gib = "2048" + network = data.google_compute_network.default.id } - + resource "google_netapp_volume" "test_volume" { - location = "us-west2" - name = "tf-test-test-volume%{random_suffix}" - capacity_gib = "200" - share_name = "tf-test-test-volume%{random_suffix}" - storage_pool = google_netapp_storage_pool.default2.name - protocols = ["NFSV3"] - security_style = "UNIX" - # Delete protection only gets active after an NFS client mounts. - # Setting it here is save, volume can still be deleted. - restricted_actions = ["DELETE"] - deletion_policy = "FORCE" - backup_config { - backup_policies = [ - google_netapp_backup_policy.backup-policy2.id - ] - backup_vault = google_netapp_backup_vault.backup-vault.id - scheduled_backup_enabled = false - } + location = "us-west2" + name = "tf-test-test-volume%{random_suffix}" + capacity_gib = "200" + share_name = "tf-test-test-volume%{random_suffix}" + storage_pool = google_netapp_storage_pool.default2.name + protocols = ["NFSV3"] + security_style = "UNIX" + # Delete protection only gets active after an NFS client mounts. + # Setting it here is save, volume can still be deleted. + restricted_actions = ["DELETE"] + deletion_policy = "FORCE" + backup_config { + backup_policies = [ + google_netapp_backup_policy.backup-policy2.id + ] + backup_vault = google_netapp_backup_vault.backup-vault.id + scheduled_backup_enabled = false + } } resource "google_netapp_backup_vault" "backup-vault" { - location = "us-west2" - name = "tf-test-vault%{random_suffix}" + location = "us-west2" + name = "tf-test-vault%{random_suffix}" } resource "google_netapp_backup_policy" "backup-policy2" { - name = "tf-test-backup-policy2%{random_suffix}" - location = "us-west2" - daily_backup_limit = 4 - weekly_backup_limit = 2 - monthly_backup_limit = 2 - enabled = true + name = "tf-test-backup-policy2%{random_suffix}" + location = "us-west2" + daily_backup_limit = 4 + weekly_backup_limit = 2 + monthly_backup_limit = 2 + enabled = true } data "google_compute_network" "default" { - name = "%{network_name}" + name = "%{network_name}" } `, context) } From 50c53e62ab71f86a26ff66c816e5ced6c0ddd317 Mon Sep 17 00:00:00 2001 From: Oliver Krause <3621164+okrause@users.noreply.github.com> Date: Tue, 13 Feb 2024 13:37:05 +0100 Subject: [PATCH 16/16] remove backupConfig. Will PR later --- mmv1/products/netapp/volume.yaml | 24 ---- .../netapp/resource_netapp_volume_test.go | 123 ------------------ 2 files changed, 147 deletions(-) diff --git a/mmv1/products/netapp/volume.yaml b/mmv1/products/netapp/volume.yaml index fead11c9907c..698f8ab4906b 100644 --- a/mmv1/products/netapp/volume.yaml +++ b/mmv1/products/netapp/volume.yaml @@ -457,30 +457,6 @@ properties: description: |- Set the day or days of the month to make a snapshot (1-31). Accepts a comma separated number of days. Defaults to '1'. default_value: '1' - # backupConfig is an upcoming feature. Needs more work/testing before release. - # - !ruby/object:Api::Type::NestedObject - # name: 'backupConfig' - # description: |- - # Backup configuration for the volume. - # update_mask_fields: - # - 'backup_config.backup_policies' - # - 'backup_config.backup_vault' - # - 'backup_config.scheduled_backup_enabled' - # properties: - # - !ruby/object:Api::Type::Array - # name: 'backupPolicies' - # description: |- - # Specify a single backup policy ID for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}`` - # item_type: Api::Type::String - # - !ruby/object:Api::Type::String - # name: 'backupVault' - # description: |- - # ID of the backup vault to use. A backup vault is reqired to create manual or scheduled backups. - # Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}`` - # - !ruby/object:Api::Type::Boolean - # name: 'scheduledBackupEnabled' - # description: |- - # When set to true, scheduled backup is enabled on the volume. Omit if no backup_policy is specified. virtual_fields: - !ruby/object:Api::Type::Enum name: 'deletion_policy' diff --git a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go index 47fa2db516d8..81574ec62d00 100644 --- a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go +++ b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go @@ -68,25 +68,6 @@ func TestAccNetappVolume_netappVolumeBasicExample_update(t *testing.T) { ImportStateVerify: true, ImportStateVerifyIgnore: []string{"restore_parameters", "location", "name", "deletion_policy", "labels", "terraform_labels"}, }, - // backupConfig is an upcoming feature. Needs more work/testing before release. - // { - // Config: testAccNetappVolume_volumeBasicExample_setupBackup(context), - // }, - // { - // ResourceName: "google_netapp_volume.test_volume", - // ImportState: true, - // ImportStateVerify: true, - // ImportStateVerifyIgnore: []string{"restore_parameters", "location", "name", "deletion_policy", "labels", "terraform_labels"}, - // }, - // { - // Config: testAccNetappVolume_volumeBasicExample_updateBackup(context), - // }, - // { - // ResourceName: "google_netapp_volume.test_volume", - // ImportState: true, - // ImportStateVerify: true, - // ImportStateVerifyIgnore: []string{"restore_parameters", "location", "name", "deletion_policy", "labels", "terraform_labels"}, - // }, }, }) } @@ -414,107 +395,3 @@ data "google_compute_network" "default" { } `, context) } - -// Tests adding backup vault and policy to the volume -func testAccNetappVolume_volumeBasicExample_setupBackup(context map[string]interface{}) string { - return acctest.Nprintf(` -resource "google_netapp_storage_pool" "default2" { - name = "tf-test-pool%{random_suffix}" - location = "us-west2" - service_level = "EXTREME" - capacity_gib = "2048" - network = data.google_compute_network.default.id -} - -resource "google_netapp_volume" "test_volume" { - location = "us-west2" - name = "tf-test-test-volume%{random_suffix}" - capacity_gib = "200" - share_name = "tf-test-test-volume%{random_suffix}" - storage_pool = google_netapp_storage_pool.default2.name - protocols = ["NFSV3"] - security_style = "UNIX" - # Delete protection only gets active after an NFS client mounts. - # Setting it here is save, volume can still be deleted. - restricted_actions = ["DELETE"] - deletion_policy = "FORCE" - backup_config { - backup_policies = [ - google_netapp_backup_policy.backup-policy.id - ] - backup_vault = google_netapp_backup_vault.backup-vault.id - scheduled_backup_enabled = true - } -} - -resource "google_netapp_backup_vault" "backup-vault" { - location = "us-west2" - name = "tf-test-vault%{random_suffix}" -} - -resource "google_netapp_backup_policy" "backup-policy" { - name = "tf-test-backup-policy%{random_suffix}" - location = "us-west2" - daily_backup_limit = 2 - weekly_backup_limit = 1 - monthly_backup_limit = 1 - enabled = true -} - -data "google_compute_network" "default" { - name = "%{network_name}" -} - `, context) -} - -// Updates backup settings. Cannot update backup vault, since only one allowed per location -func testAccNetappVolume_volumeBasicExample_updateBackup(context map[string]interface{}) string { - return acctest.Nprintf(` -resource "google_netapp_storage_pool" "default2" { - name = "tf-test-pool%{random_suffix}" - location = "us-west2" - service_level = "EXTREME" - capacity_gib = "2048" - network = data.google_compute_network.default.id -} - -resource "google_netapp_volume" "test_volume" { - location = "us-west2" - name = "tf-test-test-volume%{random_suffix}" - capacity_gib = "200" - share_name = "tf-test-test-volume%{random_suffix}" - storage_pool = google_netapp_storage_pool.default2.name - protocols = ["NFSV3"] - security_style = "UNIX" - # Delete protection only gets active after an NFS client mounts. - # Setting it here is save, volume can still be deleted. - restricted_actions = ["DELETE"] - deletion_policy = "FORCE" - backup_config { - backup_policies = [ - google_netapp_backup_policy.backup-policy2.id - ] - backup_vault = google_netapp_backup_vault.backup-vault.id - scheduled_backup_enabled = false - } -} - -resource "google_netapp_backup_vault" "backup-vault" { - location = "us-west2" - name = "tf-test-vault%{random_suffix}" -} - -resource "google_netapp_backup_policy" "backup-policy2" { - name = "tf-test-backup-policy2%{random_suffix}" - location = "us-west2" - daily_backup_limit = 4 - weekly_backup_limit = 2 - monthly_backup_limit = 2 - enabled = true -} - -data "google_compute_network" "default" { - name = "%{network_name}" -} - `, context) -}