From b7fe5be06ba2d9755ff08727b063255bc3e53b63 Mon Sep 17 00:00:00 2001 From: FirstName LastName Date: Sat, 28 Dec 2024 13:29:53 +0000 Subject: [PATCH 01/12] add new resource netapp volumes quotaRules --- mmv1/products/netapp/VolumeQuotaRule.yaml | 105 +++++++++++++++ .../netapp_volume_quotaRule_basic.tf.tmpl | 27 ++++ ...esource_netapp_volume_quotaRule_sweeper.go | 127 ++++++++++++++++++ .../resource_netapp_volume_quotaRule_test.go | 121 +++++++++++++++++ 4 files changed, 380 insertions(+) create mode 100644 mmv1/products/netapp/VolumeQuotaRule.yaml create mode 100644 mmv1/templates/terraform/examples/netapp_volume_quotaRule_basic.tf.tmpl create mode 100644 mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_sweeper.go create mode 100644 mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go diff --git a/mmv1/products/netapp/VolumeQuotaRule.yaml b/mmv1/products/netapp/VolumeQuotaRule.yaml new file mode 100644 index 000000000000..7158f7ddfe3f --- /dev/null +++ b/mmv1/products/netapp/VolumeQuotaRule.yaml @@ -0,0 +1,105 @@ +# 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: 'VolumeQuotaRule' +api_resource_type_kind: QuotaRule +description: | + +references: + guides: + 'Documentation': + api: +docs: +base_url: 'projects/{{project}}/locations/{{location}}/volumes/{{volume_name}}/quotaRules' +self_link: 'projects/{{project}}/locations/{{location}}/volumes/{{volume_name}}/quotaRules/{{name}}' +create_url: 'projects/{{project}}/locations/{{location}}/volumes/{{volume_name}}/quotaRules?QuotaRuleId={{name}}' +update_url: 'projects/{{project}}/locations/{{location}}/volumes/{{volume_name}}/quotaRules/{{name}}' +update_verb: 'PATCH' +update_mask: true +delete_url: 'projects/{{project}}/locations/{{location}}/volumes/{{volume_name}}/quotaRules/{{name}}' +timeouts: + insert_minutes: 20 + update_minutes: 20 + delete_minutes: 20 +autogen_async: true +async: + actions: ['create', 'delete', 'update'] + type: 'OpAsync' + operation: + base_url: '{{op_id}}' + result: + resource_inside_response: false +custom_code: +# Skipping the sweeper since we need to sweep multiple regions +exclude_sweeper: true +examples: + - name: 'netapp_volume_quotaRule_basic' + primary_resource_id: 'test_quotaRule' + vars: + volume_name: 'test-volume' + pool_name: 'test-pool' + network_name: 'test-network' + quotaRule_name: 'testvolumequotaRule' + test_vars_overrides: + 'network_name': 'acctest.BootstrapSharedServiceNetworkingConnection(t, "gcnv-network-config-1", acctest.ServiceNetworkWithParentService("netapp.servicenetworking.goog"))' +parameters: + - name: 'location' + type: String + description: | + Loction of the quotaRule. QuotaRules are child resources of volumes and live in the same location. + url_param_only: true + required: true + immutable: true + - name: 'volume_name' + type: String + description: | + Name of the volume to create the quotaRule in. + url_param_only: true + required: true + immutable: true + - name: 'name' + type: String + description: + The resource name of the quotaRule. + url_param_only: true + required: true + immutable: true +properties: + - name: 'target' + type: String + description: | + The quota rule applies to the specified user or group, identified by a Unix UID/GID, Windows SID, or null for default. + - name: 'state' + type: String + description: | + The state of the quota rule. Possible Values : [STATE_UNSPECIFIED, CREATING, UPDATING, READY, DELETING, ERROR] + output: true + - name: 'stateDetails' + type: String + description: | + State details of the quota rule + output: true + - name: 'createTime' + type: String + description: | + Create time of the quota rule. A timestamp in RFC3339 UTC "Zulu" format. Examples: "2023-06-22T09:13:01.617Z". + output: true + - name: 'description' + type: String + description: | + Description for the quota rule. + - name: 'labels' + type: KeyValueLabels + description: | + Labels as key value pairs of the quota rule. Example: `{ "owner": "Bob", "department": "finance", "purpose": "testing" }`. diff --git a/mmv1/templates/terraform/examples/netapp_volume_quotaRule_basic.tf.tmpl b/mmv1/templates/terraform/examples/netapp_volume_quotaRule_basic.tf.tmpl new file mode 100644 index 000000000000..92a3028efa83 --- /dev/null +++ b/mmv1/templates/terraform/examples/netapp_volume_quotaRule_basic.tf.tmpl @@ -0,0 +1,27 @@ +resource "google_netapp_storage_pool" "default" { + name = "{{index $.Vars "pool_name"}}" + location = "us-west2" + service_level = "PREMIUM" + capacity_gib = 2048 + network = data.google_compute_network.default.id +} + +resource "google_netapp_volume" "default" { + location = google_netapp_storage_pool.default.location + name = "{{index $.Vars "volume_name"}}" + capacity_gib = 100 + share_name = "{{index $.Vars "volume_name"}}" + storage_pool = google_netapp_storage_pool.default.name + protocols = ["NFSV3"] +} + +resource "google_netapp_volume_quota_rule" "{{$.PrimaryResourceId}}" { + depends_on = [google_netapp_volume.default] + location = google_netapp_volume.default.location + volume_name = google_netapp_volume.default.name + name = "{{index $.Vars "quotaRule_name"}}" +} + +data "google_compute_network" "default" { + name = "{{index $.Vars "network_name"}}" +} \ No newline at end of file diff --git a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_sweeper.go b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_sweeper.go new file mode 100644 index 000000000000..9f8b9abf43e1 --- /dev/null +++ b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_sweeper.go @@ -0,0 +1,127 @@ +package netapp + +import ( + "context" + "log" + "strings" + "testing" + + "github.com/hashicorp/terraform-provider-google/google/envvar" + "github.com/hashicorp/terraform-provider-google/google/sweeper" + "github.com/hashicorp/terraform-provider-google/google/tpgresource" + transport_tpg "github.com/hashicorp/terraform-provider-google/google/transport" +) + +func init() { + sweeper.AddTestSweepers("NetappVolumeQuotaRule", testSweepNetappVolumeQuotaRule) +} + +// At the time of writing, the CI only passes us-central1 as the region +func testSweepNetappVolumeQuotaRule(region string) error { + resourceName := "NetappVolumeQuotaRule" + log.Printf("[INFO][SWEEPER_LOG] Starting sweeper for %s", resourceName) + + config, err := sweeper.SharedConfigForRegion(region) + if err != nil { + log.Printf("[INFO][SWEEPER_LOG] error getting shared config for region: %s", err) + return err + } + + err = config.LoadAndValidate(context.Background()) + if err != nil { + log.Printf("[INFO][SWEEPER_LOG] error loading: %s", err) + return err + } + + t := &testing.T{} + billingId := envvar.GetTestBillingAccountFromEnv(t) + + regions := []string{"us-central1", "us-west2", "us-east4"} + for _, r := range regions { + log.Printf("[INFO][SWEEPER_LOG] Starting sweeper for %s in %s", resourceName, r) + + // Setup variables to replace in list template + d := &tpgresource.ResourceDataMock{ + FieldsInSchema: map[string]interface{}{ + "project": config.Project, + "region": r, + "location": r, + "zone": "-", + "billing_account": billingId, + }, + } + + listTemplate := strings.Split("https://netapp.googleapis.com/v1/projects/{{project}}/locations/{{location}}/volumes/{{volume_name}}/quotaRules", "?")[0] + listUrl, err := tpgresource.ReplaceVars(d, config, listTemplate) + if err != nil { + log.Printf("[INFO][SWEEPER_LOG] error preparing sweeper list url: %s", err) + continue + } + + res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{ + Config: config, + Method: "GET", + Project: config.Project, + RawURL: listUrl, + UserAgent: config.UserAgent, + }) + if err != nil { + log.Printf("[INFO][SWEEPER_LOG] Error in response from request %s: %s", listUrl, err) + continue + } + + resourceList, ok := res["volumeQuotaRules"] + if !ok { + log.Printf("[INFO][SWEEPER_LOG] Nothing found in response.") + continue + } + + rl := resourceList.([]interface{}) + + log.Printf("[INFO][SWEEPER_LOG] Found %d items in %s list response.", len(rl), resourceName) + // Keep count of items that aren't sweepable for logging. + nonPrefixCount := 0 + for _, ri := range rl { + obj := ri.(map[string]interface{}) + if obj["name"] == nil { + log.Printf("[INFO][SWEEPER_LOG] %s resource name was nil", resourceName) + continue + } + + name := tpgresource.GetResourceNameFromSelfLink(obj["name"].(string)) + // Skip resources that shouldn't be sweeped + if !sweeper.IsSweepableTestResource(name) { + nonPrefixCount++ + continue + } + + deleteTemplate := "https://netapp.googleapis.com/v1/projects/{{project}}/locations/{{location}}/volumes/{{volume_name}}/quotaRules/{{name}}" + deleteUrl, err := tpgresource.ReplaceVars(d, config, deleteTemplate) + if err != nil { + log.Printf("[INFO][SWEEPER_LOG] error preparing delete url: %s", err) + continue + } + deleteUrl = deleteUrl + name + + // Don't wait on operations as we may have a lot to delete + _, err = transport_tpg.SendRequest(transport_tpg.SendRequestOptions{ + Config: config, + Method: "DELETE", + Project: config.Project, + RawURL: deleteUrl, + UserAgent: config.UserAgent, + }) + if err != nil { + log.Printf("[INFO][SWEEPER_LOG] Error deleting for url %s : %s", deleteUrl, err) + } else { + log.Printf("[INFO][SWEEPER_LOG] Sent delete request for %s resource: %s", resourceName, name) + } + } + + if nonPrefixCount > 0 { + log.Printf("[INFO][SWEEPER_LOG] %d items were non-sweepable and skipped.", nonPrefixCount) + } + } + + return nil +} diff --git a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go new file mode 100644 index 000000000000..e827af8792e0 --- /dev/null +++ b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go @@ -0,0 +1,121 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package netapp_test + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + + "github.com/hashicorp/terraform-provider-google/google/acctest" +) + +func TestAccNetappVolumeQuotaRule_netappVolumeQuotaRuleBasicExample(t *testing.T) { + t.Parallel() + + context := map[string]interface{}{ + "network_name": acctest.BootstrapSharedServiceNetworkingConnection(t, "gcnv-network-config-1", acctest.ServiceNetworkWithParentService("netapp.servicenetworking.goog")), + "random_suffix": acctest.RandString(t, 10), + } + + acctest.VcrTest(t, resource.TestCase{ + PreCheck: func() { acctest.AccTestPreCheck(t) }, + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t), + CheckDestroy: testAccCheckNetappVolumeQuotaRuleDestroyProducer(t), + Steps: []resource.TestStep{ + { + Config: testAccNetappVolumeQuotaRule_netappVolumeQuotaRuleBasicExample(context), + }, + { + ResourceName: "google_netapp_volume_quota_rule.test_quotaRule", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"labels", "location", "name", "terraform_labels", "volume_name"}, + }, + { + Config: testAccNetappVolumeQuotaRule_netappVolumeQuotaRuleBasicExample_update(context), + }, + { + ResourceName: "google_netapp_volume_quota_rule.test_quotaRule", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"labels", "location", "name", "terraform_labels", "volume_name"}, + }, + }, + }) +} + +func testAccNetappVolumeQuotaRule_netappVolumeQuotaRuleBasicExample(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_volume" "default" { + location = google_netapp_storage_pool.default.location + 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"] +} + +resource "google_netapp_volume_quota_rule" "test_quotaRule" { + depends_on = [google_netapp_volume.default] + location = google_netapp_volume.default.location + volume_name = google_netapp_volume.default.name + name = "testvolumequotaRule%{random_suffix}" + description = "This is a test description" + labels = { + key= "test" + value= "quota_rule" + } +} + +data "google_compute_network" "default" { + name = "%{network_name}" +} +`, context) +} + +func testAccNetappVolumeQuotaRule_netappVolumeQuotaRuleBasicExample_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 +} + +resource "google_netapp_volume" "default" { + location = google_netapp_storage_pool.default.location + 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"] +} + +resource "google_netapp_volume_quota_rule" "test_quotaRule" { + depends_on = [google_netapp_volume.default] + location = google_netapp_volume.default.location + volume_name = google_netapp_volume.default.name + name = "testvolumequotaRule%{random_suffix}" + description = "This is a updated description" + labels = { + key= "test" + value= "quota_rule_update" + } +} + +data "google_compute_network" "default" { + name = "%{network_name}" +} +`, context) +} From decf2e5e4cebb908df43db0952479e707e6245d3 Mon Sep 17 00:00:00 2001 From: FirstName LastName Date: Sat, 28 Dec 2024 19:40:18 +0000 Subject: [PATCH 02/12] add remaining fields and tests to netapp volumes quota rules resource --- mmv1/products/netapp/VolumeQuotaRule.yaml | 16 ++++++++++++++++ .../netapp_volume_quotaRule_basic.tf.tmpl | 2 ++ .../resource_netapp_volume_quotaRule_test.go | 16 +++++++++++----- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/mmv1/products/netapp/VolumeQuotaRule.yaml b/mmv1/products/netapp/VolumeQuotaRule.yaml index 7158f7ddfe3f..025fd6617962 100644 --- a/mmv1/products/netapp/VolumeQuotaRule.yaml +++ b/mmv1/products/netapp/VolumeQuotaRule.yaml @@ -80,6 +80,22 @@ properties: type: String description: | The quota rule applies to the specified user or group, identified by a Unix UID/GID, Windows SID, or null for default. + - name: 'type' + type: Enum + description: | + Types of Quota Rule. + required: true + enum_values: + - 'INDIVIDUAL_USER_QUOTA' + - 'INDIVIDUAL_GROUP_QUOTA' + - 'DEFAULT_USER_QUOTA' + - 'DEFAULT_GROUP_QUOTA' + required: true + - name: 'diskLimitMib' + type: String + description: + The maximum allowed disk space in MiB. + required: true - name: 'state' type: String description: | diff --git a/mmv1/templates/terraform/examples/netapp_volume_quotaRule_basic.tf.tmpl b/mmv1/templates/terraform/examples/netapp_volume_quotaRule_basic.tf.tmpl index 92a3028efa83..84bd9af50055 100644 --- a/mmv1/templates/terraform/examples/netapp_volume_quotaRule_basic.tf.tmpl +++ b/mmv1/templates/terraform/examples/netapp_volume_quotaRule_basic.tf.tmpl @@ -19,6 +19,8 @@ resource "google_netapp_volume_quota_rule" "{{$.PrimaryResourceId}}" { depends_on = [google_netapp_volume.default] location = google_netapp_volume.default.location volume_name = google_netapp_volume.default.name + type = "DEFAULT_USER_QUOTA" + disk_limit_mib = 50 name = "{{index $.Vars "quotaRule_name"}}" } diff --git a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go index e827af8792e0..aa949cb0da75 100644 --- a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go +++ b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go @@ -11,7 +11,7 @@ import ( "github.com/hashicorp/terraform-provider-google/google/acctest" ) -func TestAccNetappVolumeQuotaRule_netappVolumeQuotaRuleBasicExample(t *testing.T) { +func TestAccNetappVolumeQuotaRule_netappVolumeQuotaRuleBasicExample_update(t *testing.T) { t.Parallel() context := map[string]interface{}{ @@ -25,7 +25,7 @@ func TestAccNetappVolumeQuotaRule_netappVolumeQuotaRuleBasicExample(t *testing.T CheckDestroy: testAccCheckNetappVolumeQuotaRuleDestroyProducer(t), Steps: []resource.TestStep{ { - Config: testAccNetappVolumeQuotaRule_netappVolumeQuotaRuleBasicExample(context), + Config: testAccNetappVolumeQuotaRule_netappVolumeQuotaRuleFull(context), }, { ResourceName: "google_netapp_volume_quota_rule.test_quotaRule", @@ -34,7 +34,7 @@ func TestAccNetappVolumeQuotaRule_netappVolumeQuotaRuleBasicExample(t *testing.T ImportStateVerifyIgnore: []string{"labels", "location", "name", "terraform_labels", "volume_name"}, }, { - Config: testAccNetappVolumeQuotaRule_netappVolumeQuotaRuleBasicExample_update(context), + Config: testAccNetappVolumeQuotaRule_netappVolumeQuotaRuleFull_update(context), }, { ResourceName: "google_netapp_volume_quota_rule.test_quotaRule", @@ -46,7 +46,7 @@ func TestAccNetappVolumeQuotaRule_netappVolumeQuotaRuleBasicExample(t *testing.T }) } -func testAccNetappVolumeQuotaRule_netappVolumeQuotaRuleBasicExample(context map[string]interface{}) string { +func testAccNetappVolumeQuotaRule_netappVolumeQuotaRuleFull(context map[string]interface{}) string { return acctest.Nprintf(` resource "google_netapp_storage_pool" "default" { name = "tf-test-test-pool%{random_suffix}" @@ -71,6 +71,9 @@ resource "google_netapp_volume_quota_rule" "test_quotaRule" { volume_name = google_netapp_volume.default.name name = "testvolumequotaRule%{random_suffix}" description = "This is a test description" + type = 'DEFAULT_USER_QUOTA' + disk_limit_mib = 50 + target = "user1" labels = { key= "test" value= "quota_rule" @@ -83,7 +86,7 @@ data "google_compute_network" "default" { `, context) } -func testAccNetappVolumeQuotaRule_netappVolumeQuotaRuleBasicExample_update(context map[string]interface{}) string { +func testAccNetappVolumeQuotaRule_netappVolumeQuotaRuleFull_update(context map[string]interface{}) string { return acctest.Nprintf(` resource "google_netapp_storage_pool" "default" { name = "tf-test-test-pool%{random_suffix}" @@ -108,6 +111,9 @@ resource "google_netapp_volume_quota_rule" "test_quotaRule" { volume_name = google_netapp_volume.default.name name = "testvolumequotaRule%{random_suffix}" description = "This is a updated description" + type = 'DEFAULT_USER_QUOTA' + disk_limit_mib = 50 + target = "user1" labels = { key= "test" value= "quota_rule_update" From 2d5fe66097015288be71ab32fdcfb10f95103d1f Mon Sep 17 00:00:00 2001 From: FirstName LastName Date: Sat, 28 Dec 2024 19:42:37 +0000 Subject: [PATCH 03/12] remove duplicate requried tag on quota rule yaml config --- mmv1/products/netapp/VolumeQuotaRule.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/mmv1/products/netapp/VolumeQuotaRule.yaml b/mmv1/products/netapp/VolumeQuotaRule.yaml index 025fd6617962..2abe2eeb1742 100644 --- a/mmv1/products/netapp/VolumeQuotaRule.yaml +++ b/mmv1/products/netapp/VolumeQuotaRule.yaml @@ -90,7 +90,6 @@ properties: - 'INDIVIDUAL_GROUP_QUOTA' - 'DEFAULT_USER_QUOTA' - 'DEFAULT_GROUP_QUOTA' - required: true - name: 'diskLimitMib' type: String description: From 6fd79403dc4e89065e60acc001ab7ac218b2563c Mon Sep 17 00:00:00 2001 From: FirstName LastName Date: Sat, 28 Dec 2024 20:59:38 +0000 Subject: [PATCH 04/12] update quota_rule_id parameter for create request --- mmv1/products/netapp/VolumeQuotaRule.yaml | 2 +- .../services/netapp/resource_netapp_volume_quotaRule_test.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mmv1/products/netapp/VolumeQuotaRule.yaml b/mmv1/products/netapp/VolumeQuotaRule.yaml index 2abe2eeb1742..68bb03d25c2e 100644 --- a/mmv1/products/netapp/VolumeQuotaRule.yaml +++ b/mmv1/products/netapp/VolumeQuotaRule.yaml @@ -23,7 +23,7 @@ references: docs: base_url: 'projects/{{project}}/locations/{{location}}/volumes/{{volume_name}}/quotaRules' self_link: 'projects/{{project}}/locations/{{location}}/volumes/{{volume_name}}/quotaRules/{{name}}' -create_url: 'projects/{{project}}/locations/{{location}}/volumes/{{volume_name}}/quotaRules?QuotaRuleId={{name}}' +create_url: 'projects/{{project}}/locations/{{location}}/volumes/{{volume_name}}/quotaRules?quotaRuleId={{name}}' update_url: 'projects/{{project}}/locations/{{location}}/volumes/{{volume_name}}/quotaRules/{{name}}' update_verb: 'PATCH' update_mask: true diff --git a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go index aa949cb0da75..084cf6553719 100644 --- a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go +++ b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go @@ -71,7 +71,7 @@ resource "google_netapp_volume_quota_rule" "test_quotaRule" { volume_name = google_netapp_volume.default.name name = "testvolumequotaRule%{random_suffix}" description = "This is a test description" - type = 'DEFAULT_USER_QUOTA' + type = "DEFAULT_USER_QUOTA" disk_limit_mib = 50 target = "user1" labels = { @@ -111,7 +111,7 @@ resource "google_netapp_volume_quota_rule" "test_quotaRule" { volume_name = google_netapp_volume.default.name name = "testvolumequotaRule%{random_suffix}" description = "This is a updated description" - type = 'DEFAULT_USER_QUOTA' + type = "DEFAULT_USER_QUOTA" disk_limit_mib = 50 target = "user1" labels = { From 34ee9fb0e68eab3417ad0020c1e73c603b4981a0 Mon Sep 17 00:00:00 2001 From: FirstName LastName Date: Wed, 22 Jan 2025 09:16:46 +0000 Subject: [PATCH 05/12] add update tests for all quota types --- mmv1/products/netapp/VolumeQuotaRule.yaml | 2 +- .../resource_netapp_volume_quotaRule_test.go | 82 +++++++++++++++---- 2 files changed, 69 insertions(+), 15 deletions(-) diff --git a/mmv1/products/netapp/VolumeQuotaRule.yaml b/mmv1/products/netapp/VolumeQuotaRule.yaml index 68bb03d25c2e..515cf9c1483b 100644 --- a/mmv1/products/netapp/VolumeQuotaRule.yaml +++ b/mmv1/products/netapp/VolumeQuotaRule.yaml @@ -91,7 +91,7 @@ properties: - 'DEFAULT_USER_QUOTA' - 'DEFAULT_GROUP_QUOTA' - name: 'diskLimitMib' - type: String + type: Integer description: The maximum allowed disk space in MiB. required: true diff --git a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go index 084cf6553719..965b284d72c1 100644 --- a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go +++ b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go @@ -65,19 +65,46 @@ resource "google_netapp_volume" "default" { protocols = ["NFSV3"] } -resource "google_netapp_volume_quota_rule" "test_quotaRule" { +resource "google_netapp_volume_quota_rule" "test_default_user_quotaRule" { depends_on = [google_netapp_volume.default] location = google_netapp_volume.default.location volume_name = google_netapp_volume.default.name name = "testvolumequotaRule%{random_suffix}" description = "This is a test description" type = "DEFAULT_USER_QUOTA" - disk_limit_mib = 50 - target = "user1" - labels = { - key= "test" - value= "quota_rule" - } + disk_limit_mib = 15 +} + +resource "google_netapp_volume_quota_rule" "test_default_group_quotaRule" { + depends_on = [google_netapp_volume.default] + location = google_netapp_volume.default.location + volume_name = google_netapp_volume.default.name + name = "testvolumequotaRule%{random_suffix}" + description = "This is a test description" + type = "DEFAULT_GROUP_QUOTA" + disk_limit_mib = 20 +} + +resource "google_netapp_volume_quota_rule" "test_individual_user_quotaRule" { + depends_on = [google_netapp_volume.default] + location = google_netapp_volume.default.location + volume_name = google_netapp_volume.default.name + name = "testvolumequotaRule%{random_suffix}" + description = "This is a test description" + type = "INDIVIDUAL_USER_QUOTA" + disk_limit_mib = 25 + target = "001" +} + +resource "google_netapp_volume_quota_rule" "test_individual_group_quotaRule" { + depends_on = [google_netapp_volume.default] + location = google_netapp_volume.default.location + volume_name = google_netapp_volume.default.name + name = "testvolumequotaRule%{random_suffix}" + description = "This is a test description" + type = "INDIVIDUAL_GROUP_QUOTA" + disk_limit_mib = 30 + target = "011" } data "google_compute_network" "default" { @@ -105,19 +132,46 @@ resource "google_netapp_volume" "default" { protocols = ["NFSV3"] } -resource "google_netapp_volume_quota_rule" "test_quotaRule" { +resource "google_netapp_volume_quota_rule" "test_default_user_quotaRule" { depends_on = [google_netapp_volume.default] location = google_netapp_volume.default.location volume_name = google_netapp_volume.default.name name = "testvolumequotaRule%{random_suffix}" - description = "This is a updated description" + description = "This is a test description" type = "DEFAULT_USER_QUOTA" + disk_limit_mib = 35 +} + +resource "google_netapp_volume_quota_rule" "test_default_group_quotaRule" { + depends_on = [google_netapp_volume.default] + location = google_netapp_volume.default.location + volume_name = google_netapp_volume.default.name + name = "testvolumequotaRule%{random_suffix}" + description = "This is a test description" + type = "DEFAULT_GROUP_QUOTA" + disk_limit_mib = 40 +} + +resource "google_netapp_volume_quota_rule" "test_individual_user_quotaRule" { + depends_on = [google_netapp_volume.default] + location = google_netapp_volume.default.location + volume_name = google_netapp_volume.default.name + name = "testvolumequotaRule%{random_suffix}" + description = "This is a test description" + type = "INDIVIDUAL_USER_QUOTA" + disk_limit_mib = 45 + target = "001" +} + +resource "google_netapp_volume_quota_rule" "test_individual_group_quotaRule" { + depends_on = [google_netapp_volume.default] + location = google_netapp_volume.default.location + volume_name = google_netapp_volume.default.name + name = "testvolumequotaRule%{random_suffix}" + description = "This is a test description" + type = "INDIVIDUAL_GROUP_QUOTA" disk_limit_mib = 50 - target = "user1" - labels = { - key= "test" - value= "quota_rule_update" - } + target = "011" } data "google_compute_network" "default" { From 491c934135c84dcfed19db940301ae7e723c0246 Mon Sep 17 00:00:00 2001 From: FirstName LastName Date: Fri, 31 Jan 2025 09:12:08 +0000 Subject: [PATCH 06/12] add descriptions and api docs for Quota Rules --- mmv1/products/netapp/VolumeQuotaRule.yaml | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/mmv1/products/netapp/VolumeQuotaRule.yaml b/mmv1/products/netapp/VolumeQuotaRule.yaml index 515cf9c1483b..0af04d5d03f1 100644 --- a/mmv1/products/netapp/VolumeQuotaRule.yaml +++ b/mmv1/products/netapp/VolumeQuotaRule.yaml @@ -15,11 +15,11 @@ name: 'VolumeQuotaRule' api_resource_type_kind: QuotaRule description: | - + QuotaRule specifies the maximum capacity a user or group can use within a volume. They can be used for creating default and individual quota rules. references: guides: - 'Documentation': - api: + 'Documentation': https://cloud.google.com/netapp/volumes/docs/configure-and-use/volumes/overview#volume_user_and_group_quotas + api: https://cloud.google.com/netapp/volumes/docs/reference/rest/v1/projects.locations.volumes.quotaRules docs: base_url: 'projects/{{project}}/locations/{{location}}/volumes/{{volume_name}}/quotaRules' self_link: 'projects/{{project}}/locations/{{location}}/volumes/{{volume_name}}/quotaRules/{{name}}' @@ -79,7 +79,18 @@ properties: - name: 'target' type: String description: | - The quota rule applies to the specified user or group, identified by a Unix UID/GID, Windows SID, or null for default. + The quota rule applies to the specified user or group. + Valid targets for volumes with NFS protocol enabled: + + - UNIX UID for individual user quota + - UNIX GID for individual group quota + + Valid targets for volumes with SMB protocol enabled: + - Windows SID for individual user quota + + Leave empty for default quotas +Valid targets for volumes with SMB protocol enabled: +Windows SID for individual user quota - name: 'type' type: Enum description: | @@ -93,7 +104,7 @@ properties: - name: 'diskLimitMib' type: Integer description: - The maximum allowed disk space in MiB. + The maximum allowed capacity in MiB. required: true - name: 'state' type: String From 8b055de63a7e3ecd44e322a18ce9fa52fd1d9e02 Mon Sep 17 00:00:00 2001 From: FirstName LastName Date: Fri, 31 Jan 2025 10:07:15 +0000 Subject: [PATCH 07/12] fix lint errors in QuotaRule.yaml file --- mmv1/products/netapp/VolumeQuotaRule.yaml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/mmv1/products/netapp/VolumeQuotaRule.yaml b/mmv1/products/netapp/VolumeQuotaRule.yaml index 0af04d5d03f1..23087da767fc 100644 --- a/mmv1/products/netapp/VolumeQuotaRule.yaml +++ b/mmv1/products/netapp/VolumeQuotaRule.yaml @@ -81,16 +81,11 @@ properties: description: | The quota rule applies to the specified user or group. Valid targets for volumes with NFS protocol enabled: - - UNIX UID for individual user quota - UNIX GID for individual group quota - Valid targets for volumes with SMB protocol enabled: - Windows SID for individual user quota - Leave empty for default quotas -Valid targets for volumes with SMB protocol enabled: -Windows SID for individual user quota - name: 'type' type: Enum description: | From ba41fc7ce6981c10274c588d5c592bd5686d4171 Mon Sep 17 00:00:00 2001 From: FirstName LastName Date: Sat, 1 Feb 2025 10:00:06 +0000 Subject: [PATCH 08/12] Changed the quota_rule resource name to not conatina CAPITAL letters --- mmv1/products/netapp/VolumeQuotaRule.yaml | 6 ++-- .../resource_netapp_volume_quotaRule_test.go | 36 +++++++++---------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/mmv1/products/netapp/VolumeQuotaRule.yaml b/mmv1/products/netapp/VolumeQuotaRule.yaml index 23087da767fc..9c9b0a037001 100644 --- a/mmv1/products/netapp/VolumeQuotaRule.yaml +++ b/mmv1/products/netapp/VolumeQuotaRule.yaml @@ -44,13 +44,13 @@ custom_code: # Skipping the sweeper since we need to sweep multiple regions exclude_sweeper: true examples: - - name: 'netapp_volume_quotaRule_basic' - primary_resource_id: 'test_quotaRule' + - name: 'netapp_volume_quota_rule_basic' + primary_resource_id: 'test_quota_rule' vars: volume_name: 'test-volume' pool_name: 'test-pool' network_name: 'test-network' - quotaRule_name: 'testvolumequotaRule' + quotaRule_name: 'testvolume-quotarule' test_vars_overrides: 'network_name': 'acctest.BootstrapSharedServiceNetworkingConnection(t, "gcnv-network-config-1", acctest.ServiceNetworkWithParentService("netapp.servicenetworking.goog"))' parameters: diff --git a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go index 965b284d72c1..205f25e6d04a 100644 --- a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go +++ b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go @@ -28,7 +28,7 @@ func TestAccNetappVolumeQuotaRule_netappVolumeQuotaRuleBasicExample_update(t *te Config: testAccNetappVolumeQuotaRule_netappVolumeQuotaRuleFull(context), }, { - ResourceName: "google_netapp_volume_quota_rule.test_quotaRule", + ResourceName: "google_netapp_volume_quota_rule.test_quota_rule", ImportState: true, ImportStateVerify: true, ImportStateVerifyIgnore: []string{"labels", "location", "name", "terraform_labels", "volume_name"}, @@ -37,7 +37,7 @@ func TestAccNetappVolumeQuotaRule_netappVolumeQuotaRuleBasicExample_update(t *te Config: testAccNetappVolumeQuotaRule_netappVolumeQuotaRuleFull_update(context), }, { - ResourceName: "google_netapp_volume_quota_rule.test_quotaRule", + ResourceName: "google_netapp_volume_quota_rule.test_quota_rule", ImportState: true, ImportStateVerify: true, ImportStateVerifyIgnore: []string{"labels", "location", "name", "terraform_labels", "volume_name"}, @@ -65,42 +65,42 @@ resource "google_netapp_volume" "default" { protocols = ["NFSV3"] } -resource "google_netapp_volume_quota_rule" "test_default_user_quotaRule" { +resource "google_netapp_volume_quota_rule" "test_default_user_quota_rule" { depends_on = [google_netapp_volume.default] location = google_netapp_volume.default.location volume_name = google_netapp_volume.default.name - name = "testvolumequotaRule%{random_suffix}" + name = "testvolumequotarule%{random_suffix}" description = "This is a test description" type = "DEFAULT_USER_QUOTA" disk_limit_mib = 15 } -resource "google_netapp_volume_quota_rule" "test_default_group_quotaRule" { +resource "google_netapp_volume_quota_rule" "test_default_group_quota_rule" { depends_on = [google_netapp_volume.default] location = google_netapp_volume.default.location volume_name = google_netapp_volume.default.name - name = "testvolumequotaRule%{random_suffix}" + name = "testvolumequotarule%{random_suffix}" description = "This is a test description" type = "DEFAULT_GROUP_QUOTA" disk_limit_mib = 20 } -resource "google_netapp_volume_quota_rule" "test_individual_user_quotaRule" { +resource "google_netapp_volume_quota_rule" "test_individual_user_quota_rule" { depends_on = [google_netapp_volume.default] location = google_netapp_volume.default.location volume_name = google_netapp_volume.default.name - name = "testvolumequotaRule%{random_suffix}" + name = "testvolumequotarule%{random_suffix}" description = "This is a test description" type = "INDIVIDUAL_USER_QUOTA" disk_limit_mib = 25 target = "001" } -resource "google_netapp_volume_quota_rule" "test_individual_group_quotaRule" { +resource "google_netapp_volume_quota_rule" "test_individual_group_quota_rule" { depends_on = [google_netapp_volume.default] location = google_netapp_volume.default.location volume_name = google_netapp_volume.default.name - name = "testvolumequotaRule%{random_suffix}" + name = "testvolumequotarule%{random_suffix}" description = "This is a test description" type = "INDIVIDUAL_GROUP_QUOTA" disk_limit_mib = 30 @@ -132,42 +132,42 @@ resource "google_netapp_volume" "default" { protocols = ["NFSV3"] } -resource "google_netapp_volume_quota_rule" "test_default_user_quotaRule" { +resource "google_netapp_volume_quota_rule" "test_default_user_quota_rule" { depends_on = [google_netapp_volume.default] location = google_netapp_volume.default.location volume_name = google_netapp_volume.default.name - name = "testvolumequotaRule%{random_suffix}" + name = "testvolumequotarule%{random_suffix}" description = "This is a test description" type = "DEFAULT_USER_QUOTA" disk_limit_mib = 35 } -resource "google_netapp_volume_quota_rule" "test_default_group_quotaRule" { +resource "google_netapp_volume_quota_rule" "test_default_group_quota_rule" { depends_on = [google_netapp_volume.default] location = google_netapp_volume.default.location volume_name = google_netapp_volume.default.name - name = "testvolumequotaRule%{random_suffix}" + name = "testvolumequotarule%{random_suffix}" description = "This is a test description" type = "DEFAULT_GROUP_QUOTA" disk_limit_mib = 40 } -resource "google_netapp_volume_quota_rule" "test_individual_user_quotaRule" { +resource "google_netapp_volume_quota_rule" "test_individual_user_quota_rule" { depends_on = [google_netapp_volume.default] location = google_netapp_volume.default.location volume_name = google_netapp_volume.default.name - name = "testvolumequotaRule%{random_suffix}" + name = "testvolumequotarule%{random_suffix}" description = "This is a test description" type = "INDIVIDUAL_USER_QUOTA" disk_limit_mib = 45 target = "001" } -resource "google_netapp_volume_quota_rule" "test_individual_group_quotaRule" { +resource "google_netapp_volume_quota_rule" "test_individual_group_quota_rule" { depends_on = [google_netapp_volume.default] location = google_netapp_volume.default.location volume_name = google_netapp_volume.default.name - name = "testvolumequotaRule%{random_suffix}" + name = "testvolumequotarule%{random_suffix}" description = "This is a test description" type = "INDIVIDUAL_GROUP_QUOTA" disk_limit_mib = 50 From e9b77b236dd0f66d8e4a50b9614745ad200218ec Mon Sep 17 00:00:00 2001 From: FirstName LastName Date: Sat, 1 Feb 2025 14:05:09 +0000 Subject: [PATCH 09/12] rename the examples file --- mmv1/products/netapp/VolumeQuotaRule.yaml | 2 +- ...ule_basic.tf.tmpl => netapp_volume_quota_rule_basic.tf.tmpl} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename mmv1/templates/terraform/examples/{netapp_volume_quotaRule_basic.tf.tmpl => netapp_volume_quota_rule_basic.tf.tmpl} (94%) diff --git a/mmv1/products/netapp/VolumeQuotaRule.yaml b/mmv1/products/netapp/VolumeQuotaRule.yaml index 9c9b0a037001..9e5367fc5e3a 100644 --- a/mmv1/products/netapp/VolumeQuotaRule.yaml +++ b/mmv1/products/netapp/VolumeQuotaRule.yaml @@ -50,7 +50,7 @@ examples: volume_name: 'test-volume' pool_name: 'test-pool' network_name: 'test-network' - quotaRule_name: 'testvolume-quotarule' + quota_rule_name: 'test-volume-quota_rule' test_vars_overrides: 'network_name': 'acctest.BootstrapSharedServiceNetworkingConnection(t, "gcnv-network-config-1", acctest.ServiceNetworkWithParentService("netapp.servicenetworking.goog"))' parameters: diff --git a/mmv1/templates/terraform/examples/netapp_volume_quotaRule_basic.tf.tmpl b/mmv1/templates/terraform/examples/netapp_volume_quota_rule_basic.tf.tmpl similarity index 94% rename from mmv1/templates/terraform/examples/netapp_volume_quotaRule_basic.tf.tmpl rename to mmv1/templates/terraform/examples/netapp_volume_quota_rule_basic.tf.tmpl index 84bd9af50055..119b89dcd642 100644 --- a/mmv1/templates/terraform/examples/netapp_volume_quotaRule_basic.tf.tmpl +++ b/mmv1/templates/terraform/examples/netapp_volume_quota_rule_basic.tf.tmpl @@ -21,7 +21,7 @@ resource "google_netapp_volume_quota_rule" "{{$.PrimaryResourceId}}" { volume_name = google_netapp_volume.default.name type = "DEFAULT_USER_QUOTA" disk_limit_mib = 50 - name = "{{index $.Vars "quotaRule_name"}}" + name = "{{index $.Vars "quota_rule_name"}}" } data "google_compute_network" "default" { From 8646aa64fd3b88abbf8cd28049eee6fa8045fa55 Mon Sep 17 00:00:00 2001 From: FirstName LastName Date: Mon, 3 Feb 2025 05:12:00 +0000 Subject: [PATCH 10/12] correct quotaRule name for differnet resources --- mmv1/products/netapp/VolumeQuotaRule.yaml | 2 +- .../resource_netapp_volume_quotaRule_test.go | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/mmv1/products/netapp/VolumeQuotaRule.yaml b/mmv1/products/netapp/VolumeQuotaRule.yaml index 9e5367fc5e3a..6e77c48e99d5 100644 --- a/mmv1/products/netapp/VolumeQuotaRule.yaml +++ b/mmv1/products/netapp/VolumeQuotaRule.yaml @@ -50,7 +50,7 @@ examples: volume_name: 'test-volume' pool_name: 'test-pool' network_name: 'test-network' - quota_rule_name: 'test-volume-quota_rule' + quota_rule_name: 'test-volume-quota-rule' test_vars_overrides: 'network_name': 'acctest.BootstrapSharedServiceNetworkingConnection(t, "gcnv-network-config-1", acctest.ServiceNetworkWithParentService("netapp.servicenetworking.goog"))' parameters: diff --git a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go index 205f25e6d04a..33e6f1073285 100644 --- a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go +++ b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go @@ -69,17 +69,17 @@ resource "google_netapp_volume_quota_rule" "test_default_user_quota_rule" { depends_on = [google_netapp_volume.default] location = google_netapp_volume.default.location volume_name = google_netapp_volume.default.name - name = "testvolumequotarule%{random_suffix}" + name = "tf-default-user-quota-rule%{random_suffix}" description = "This is a test description" type = "DEFAULT_USER_QUOTA" disk_limit_mib = 15 } - + resource "google_netapp_volume_quota_rule" "test_default_group_quota_rule" { depends_on = [google_netapp_volume.default] location = google_netapp_volume.default.location volume_name = google_netapp_volume.default.name - name = "testvolumequotarule%{random_suffix}" + name = "tf-default-group-quota-rule%{random_suffix}" description = "This is a test description" type = "DEFAULT_GROUP_QUOTA" disk_limit_mib = 20 @@ -89,7 +89,7 @@ resource "google_netapp_volume_quota_rule" "test_individual_user_quota_rule" { depends_on = [google_netapp_volume.default] location = google_netapp_volume.default.location volume_name = google_netapp_volume.default.name - name = "testvolumequotarule%{random_suffix}" + name = "tf-individual-user-quota-rule%{random_suffix}" description = "This is a test description" type = "INDIVIDUAL_USER_QUOTA" disk_limit_mib = 25 @@ -100,7 +100,7 @@ resource "google_netapp_volume_quota_rule" "test_individual_group_quota_rule" { depends_on = [google_netapp_volume.default] location = google_netapp_volume.default.location volume_name = google_netapp_volume.default.name - name = "testvolumequotarule%{random_suffix}" + name = "tf-individual-group-quota-rule%{random_suffix}" description = "This is a test description" type = "INDIVIDUAL_GROUP_QUOTA" disk_limit_mib = 30 @@ -136,7 +136,7 @@ resource "google_netapp_volume_quota_rule" "test_default_user_quota_rule" { depends_on = [google_netapp_volume.default] location = google_netapp_volume.default.location volume_name = google_netapp_volume.default.name - name = "testvolumequotarule%{random_suffix}" + name = "tf-default-user-quota-rule%{random_suffix}" description = "This is a test description" type = "DEFAULT_USER_QUOTA" disk_limit_mib = 35 @@ -146,7 +146,7 @@ resource "google_netapp_volume_quota_rule" "test_default_group_quota_rule" { depends_on = [google_netapp_volume.default] location = google_netapp_volume.default.location volume_name = google_netapp_volume.default.name - name = "testvolumequotarule%{random_suffix}" + name = "tf-default-group-quota-rule%{random_suffix}" description = "This is a test description" type = "DEFAULT_GROUP_QUOTA" disk_limit_mib = 40 @@ -156,7 +156,7 @@ resource "google_netapp_volume_quota_rule" "test_individual_user_quota_rule" { depends_on = [google_netapp_volume.default] location = google_netapp_volume.default.location volume_name = google_netapp_volume.default.name - name = "testvolumequotarule%{random_suffix}" + name = "tf-individual-user-quota-rule%{random_suffix}" description = "This is a test description" type = "INDIVIDUAL_USER_QUOTA" disk_limit_mib = 45 @@ -167,7 +167,7 @@ resource "google_netapp_volume_quota_rule" "test_individual_group_quota_rule" { depends_on = [google_netapp_volume.default] location = google_netapp_volume.default.location volume_name = google_netapp_volume.default.name - name = "testvolumequotarule%{random_suffix}" + name = "tf-individual-group-quota-rule%{random_suffix}" description = "This is a test description" type = "INDIVIDUAL_GROUP_QUOTA" disk_limit_mib = 50 From 003227c0d747c25ca6f262bcf5936d86ab2f8ae8 Mon Sep 17 00:00:00 2001 From: FirstName LastName Date: Mon, 3 Feb 2025 07:18:52 +0000 Subject: [PATCH 11/12] add resourceName for each type of quota rule --- .../resource_netapp_volume_quotaRule_test.go | 40 ++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go index 33e6f1073285..8d29a41721b7 100644 --- a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go +++ b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go @@ -28,7 +28,25 @@ func TestAccNetappVolumeQuotaRule_netappVolumeQuotaRuleBasicExample_update(t *te Config: testAccNetappVolumeQuotaRule_netappVolumeQuotaRuleFull(context), }, { - ResourceName: "google_netapp_volume_quota_rule.test_quota_rule", + ResourceName: "google_netapp_volume_quota_rule.test_default_user_quota_rule", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"labels", "location", "name", "terraform_labels", "volume_name"}, + }, + { + ResourceName: "google_netapp_volume_quota_rule.test_default_group_quota_rule", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"labels", "location", "name", "terraform_labels", "volume_name"}, + }, + { + ResourceName: "google_netapp_volume_quota_rule.test_individual_user_quota_rule", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"labels", "location", "name", "terraform_labels", "volume_name"}, + }, + { + ResourceName: "google_netapp_volume_quota_rule.test_individual_group_quota_rule", ImportState: true, ImportStateVerify: true, ImportStateVerifyIgnore: []string{"labels", "location", "name", "terraform_labels", "volume_name"}, @@ -37,7 +55,25 @@ func TestAccNetappVolumeQuotaRule_netappVolumeQuotaRuleBasicExample_update(t *te Config: testAccNetappVolumeQuotaRule_netappVolumeQuotaRuleFull_update(context), }, { - ResourceName: "google_netapp_volume_quota_rule.test_quota_rule", + ResourceName: "google_netapp_volume_quota_rule.test_default_user_quota_rule", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"labels", "location", "name", "terraform_labels", "volume_name"}, + }, + { + ResourceName: "google_netapp_volume_quota_rule.test_default_group_quota_rule", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"labels", "location", "name", "terraform_labels", "volume_name"}, + }, + { + ResourceName: "google_netapp_volume_quota_rule.test_individual_user_quota_rule", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"labels", "location", "name", "terraform_labels", "volume_name"}, + }, + { + ResourceName: "google_netapp_volume_quota_rule.test_individual_group_quota_rule", ImportState: true, ImportStateVerify: true, ImportStateVerifyIgnore: []string{"labels", "location", "name", "terraform_labels", "volume_name"}, From 9222a31dda0f9f4bcaf76089a136bbe5cbfe7714 Mon Sep 17 00:00:00 2001 From: FirstName LastName Date: Wed, 5 Feb 2025 04:04:23 +0000 Subject: [PATCH 12/12] remove required:true from location in the API, add lables to tests --- mmv1/products/netapp/VolumeQuotaRule.yaml | 1 - .../netapp/resource_netapp_volume_quotaRule_test.go | 8 ++++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/mmv1/products/netapp/VolumeQuotaRule.yaml b/mmv1/products/netapp/VolumeQuotaRule.yaml index 6e77c48e99d5..930ef3c0e7eb 100644 --- a/mmv1/products/netapp/VolumeQuotaRule.yaml +++ b/mmv1/products/netapp/VolumeQuotaRule.yaml @@ -59,7 +59,6 @@ parameters: description: | Loction of the quotaRule. QuotaRules are child resources of volumes and live in the same location. url_param_only: true - required: true immutable: true - name: 'volume_name' type: String diff --git a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go index 8d29a41721b7..804dcb37b292 100644 --- a/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go +++ b/mmv1/third_party/terraform/services/netapp/resource_netapp_volume_quotaRule_test.go @@ -117,6 +117,10 @@ resource "google_netapp_volume_quota_rule" "test_default_group_quota_rule" { volume_name = google_netapp_volume.default.name name = "tf-default-group-quota-rule%{random_suffix}" description = "This is a test description" + labels = { + key = "test" + value = "quota_rule" + } type = "DEFAULT_GROUP_QUOTA" disk_limit_mib = 20 } @@ -184,6 +188,10 @@ resource "google_netapp_volume_quota_rule" "test_default_group_quota_rule" { volume_name = google_netapp_volume.default.name name = "tf-default-group-quota-rule%{random_suffix}" description = "This is a test description" + labels = { + key = "test" + value = "quota_rule" + } type = "DEFAULT_GROUP_QUOTA" disk_limit_mib = 40 }