From 0fde79df1cedf41f274d09e7600918ed9679c33d Mon Sep 17 00:00:00 2001 From: Kuba Mazurkiewicz <132581633+kuba-mazurkiewicz@users.noreply.github.com> Date: Thu, 27 Feb 2025 17:27:00 +0100 Subject: [PATCH] Add empty input warning to catalystcenter_*_settings resources (#181) --- gen/definitions/banner_settings.yaml | 1 + gen/definitions/dhcp_settings.yaml | 1 + gen/definitions/dns_settings.yaml | 1 + gen/definitions/ntp_settings.yaml | 1 + gen/definitions/timezone_settings.yaml | 4 ++-- gen/templates/resource.go | 14 +++++++++++++- .../resource_catalystcenter_aaa_settings.go | 11 +++++++++-- .../resource_catalystcenter_banner_settings.go | 11 +++++++++-- ...resource_catalystcenter_banner_settings_test.go | 6 ------ .../resource_catalystcenter_dhcp_settings.go | 11 +++++++++-- .../resource_catalystcenter_dhcp_settings_test.go | 6 ------ .../resource_catalystcenter_dns_settings.go | 11 +++++++++-- .../resource_catalystcenter_dns_settings_test.go | 6 ------ .../resource_catalystcenter_ntp_settings.go | 11 +++++++++-- .../resource_catalystcenter_ntp_settings_test.go | 6 ------ .../resource_catalystcenter_telemetry_settings.go | 11 +++++++++-- ...source_catalystcenter_timezone_settings_test.go | 6 ------ 17 files changed, 73 insertions(+), 45 deletions(-) diff --git a/gen/definitions/banner_settings.yaml b/gen/definitions/banner_settings.yaml index c8c53833..896b9d7b 100644 --- a/gen/definitions/banner_settings.yaml +++ b/gen/definitions/banner_settings.yaml @@ -9,6 +9,7 @@ delete_no_id: true get_extra_query_params: "?_inherited=true" put_create: true put_delete: true +skip_minimum_test: true doc_category: Network Settings attributes: - model_name: siteId diff --git a/gen/definitions/dhcp_settings.yaml b/gen/definitions/dhcp_settings.yaml index e7058884..75477aed 100644 --- a/gen/definitions/dhcp_settings.yaml +++ b/gen/definitions/dhcp_settings.yaml @@ -9,6 +9,7 @@ delete_no_id: true get_extra_query_params: "?_inherited=true" put_create: true put_delete: true +skip_minimum_test: true doc_category: Network Settings attributes: - model_name: siteId diff --git a/gen/definitions/dns_settings.yaml b/gen/definitions/dns_settings.yaml index 4a6cc8c6..e8b757c0 100644 --- a/gen/definitions/dns_settings.yaml +++ b/gen/definitions/dns_settings.yaml @@ -9,6 +9,7 @@ delete_no_id: true get_extra_query_params: "?_inherited=true" put_create: true put_delete: true +skip_minimum_test: true doc_category: Network Settings attributes: - model_name: siteId diff --git a/gen/definitions/ntp_settings.yaml b/gen/definitions/ntp_settings.yaml index 87c7f61d..2055df77 100644 --- a/gen/definitions/ntp_settings.yaml +++ b/gen/definitions/ntp_settings.yaml @@ -9,6 +9,7 @@ delete_no_id: true get_extra_query_params: "?_inherited=true" put_create: true put_delete: true +skip_minimum_test: true doc_category: Network Settings attributes: - model_name: siteId diff --git a/gen/definitions/timezone_settings.yaml b/gen/definitions/timezone_settings.yaml index 4c5cbd70..e5a98539 100644 --- a/gen/definitions/timezone_settings.yaml +++ b/gen/definitions/timezone_settings.yaml @@ -5,11 +5,11 @@ put_no_id: true get_no_id: true data_source_no_id: true import_no_id: true -no_delete: true #Internal error 500 on delete delete_no_id: true get_extra_query_params: "?_inherited=true" put_create: true -put_delete: true +no_delete: true +skip_minimum_test: true doc_category: Network Settings attributes: - model_name: siteId diff --git a/gen/templates/resource.go b/gen/templates/resource.go index c3c0ee53..a62e46e7 100644 --- a/gen/templates/resource.go +++ b/gen/templates/resource.go @@ -690,8 +690,20 @@ func (r *{{camelCase .Name}}Resource) Delete(ctx context.Context, req resource.D res, err := r.client.Put({{if .DeleteRestEndpoint}}state.getPathDelete(){{else}}state.getPath(){{end}} + "/" + url.QueryEscape(state.Id.ValueString()), "{}") {{- end}} if err != nil { + {{- if .PutDelete}} + errorCode := res.Get("response.errorCode").String() + if errorCode == "NCND01090" { + // Log a warning and continue execution when Empty input - the groupUuid is null or empty + failureReason := res.Get("response.failureReason").String() + resp.Diagnostics.AddWarning("Empty input Warning", fmt.Sprintf("Empty input detected (error code: %s, reason %s).", errorCode, failureReason)) + } else { + resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Failed to delete object (%s), got error: %s, %s", "PUT", err, res.String())) + return + } + {{- else}} resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Failed to delete object (PUT), got error: %s, %s", err, res.String())) return + {{- end}} } {{- else}} {{- if .DeleteNoId}} @@ -708,7 +720,7 @@ func (r *{{camelCase .Name}}Resource) Delete(ctx context.Context, req resource.D res, err := r.client.Delete({{if .DeleteRestEndpoint}}state.getPathDelete(){{else}}state.getPath(){{end}} + "/" + url.QueryEscape(state.Id.ValueString())) {{- end}} if err != nil { - {{- if .DeviceUnreachabilityWarning}} + {{- if .DeviceUnreachabilityWarning}} errorCode := res.Get("response.errorCode").String() if errorCode == "NCDP10000" { // Log a warning and continue execution when device is unreachable diff --git a/internal/provider/resource_catalystcenter_aaa_settings.go b/internal/provider/resource_catalystcenter_aaa_settings.go index b6667406..bd2bb2fa 100644 --- a/internal/provider/resource_catalystcenter_aaa_settings.go +++ b/internal/provider/resource_catalystcenter_aaa_settings.go @@ -270,8 +270,15 @@ func (r *AAASettingsResource) Delete(ctx context.Context, req resource.DeleteReq tflog.Debug(ctx, fmt.Sprintf("%s: Beginning Delete", state.Id.ValueString())) res, err := r.client.Put(state.getPath(), "{}") if err != nil { - resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Failed to delete object (PUT), got error: %s, %s", err, res.String())) - return + errorCode := res.Get("response.errorCode").String() + if errorCode == "NCND01090" { + // Log a warning and continue execution when Empty input - the groupUuid is null or empty + failureReason := res.Get("response.failureReason").String() + resp.Diagnostics.AddWarning("Empty input Warning", fmt.Sprintf("Empty input detected (error code: %s, reason %s).", errorCode, failureReason)) + } else { + resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Failed to delete object (%s), got error: %s, %s", "PUT", err, res.String())) + return + } } tflog.Debug(ctx, fmt.Sprintf("%s: Delete finished successfully", state.Id.ValueString())) diff --git a/internal/provider/resource_catalystcenter_banner_settings.go b/internal/provider/resource_catalystcenter_banner_settings.go index 334dd1fb..91c9b659 100644 --- a/internal/provider/resource_catalystcenter_banner_settings.go +++ b/internal/provider/resource_catalystcenter_banner_settings.go @@ -221,8 +221,15 @@ func (r *BannerSettingsResource) Delete(ctx context.Context, req resource.Delete tflog.Debug(ctx, fmt.Sprintf("%s: Beginning Delete", state.Id.ValueString())) res, err := r.client.Put(state.getPath(), "{}") if err != nil { - resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Failed to delete object (PUT), got error: %s, %s", err, res.String())) - return + errorCode := res.Get("response.errorCode").String() + if errorCode == "NCND01090" { + // Log a warning and continue execution when Empty input - the groupUuid is null or empty + failureReason := res.Get("response.failureReason").String() + resp.Diagnostics.AddWarning("Empty input Warning", fmt.Sprintf("Empty input detected (error code: %s, reason %s).", errorCode, failureReason)) + } else { + resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Failed to delete object (%s), got error: %s, %s", "PUT", err, res.String())) + return + } } tflog.Debug(ctx, fmt.Sprintf("%s: Delete finished successfully", state.Id.ValueString())) diff --git a/internal/provider/resource_catalystcenter_banner_settings_test.go b/internal/provider/resource_catalystcenter_banner_settings_test.go index 88d198d6..ceb1e16a 100644 --- a/internal/provider/resource_catalystcenter_banner_settings_test.go +++ b/internal/provider/resource_catalystcenter_banner_settings_test.go @@ -19,7 +19,6 @@ package provider // Section below is generated&owned by "gen/generator.go". //template:begin imports import ( - "os" "testing" "github.com/hashicorp/terraform-plugin-testing/helper/resource" @@ -34,11 +33,6 @@ func TestAccCcBannerSettings(t *testing.T) { checks = append(checks, resource.TestCheckResourceAttr("catalystcenter_banner_settings.test", "message", "Banner message")) var steps []resource.TestStep - if os.Getenv("SKIP_MINIMUM_TEST") == "" { - steps = append(steps, resource.TestStep{ - Config: testAccCcBannerSettingsPrerequisitesConfig + testAccCcBannerSettingsConfig_minimum(), - }) - } steps = append(steps, resource.TestStep{ Config: testAccCcBannerSettingsPrerequisitesConfig + testAccCcBannerSettingsConfig_all(), Check: resource.ComposeTestCheckFunc(checks...), diff --git a/internal/provider/resource_catalystcenter_dhcp_settings.go b/internal/provider/resource_catalystcenter_dhcp_settings.go index 2d29ddcc..2a23c44f 100644 --- a/internal/provider/resource_catalystcenter_dhcp_settings.go +++ b/internal/provider/resource_catalystcenter_dhcp_settings.go @@ -213,8 +213,15 @@ func (r *DHCPSettingsResource) Delete(ctx context.Context, req resource.DeleteRe tflog.Debug(ctx, fmt.Sprintf("%s: Beginning Delete", state.Id.ValueString())) res, err := r.client.Put(state.getPath(), "{}") if err != nil { - resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Failed to delete object (PUT), got error: %s, %s", err, res.String())) - return + errorCode := res.Get("response.errorCode").String() + if errorCode == "NCND01090" { + // Log a warning and continue execution when Empty input - the groupUuid is null or empty + failureReason := res.Get("response.failureReason").String() + resp.Diagnostics.AddWarning("Empty input Warning", fmt.Sprintf("Empty input detected (error code: %s, reason %s).", errorCode, failureReason)) + } else { + resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Failed to delete object (%s), got error: %s, %s", "PUT", err, res.String())) + return + } } tflog.Debug(ctx, fmt.Sprintf("%s: Delete finished successfully", state.Id.ValueString())) diff --git a/internal/provider/resource_catalystcenter_dhcp_settings_test.go b/internal/provider/resource_catalystcenter_dhcp_settings_test.go index f1c9645d..597baa50 100644 --- a/internal/provider/resource_catalystcenter_dhcp_settings_test.go +++ b/internal/provider/resource_catalystcenter_dhcp_settings_test.go @@ -19,7 +19,6 @@ package provider // Section below is generated&owned by "gen/generator.go". //template:begin imports import ( - "os" "testing" "github.com/hashicorp/terraform-plugin-testing/helper/resource" @@ -32,11 +31,6 @@ func TestAccCcDHCPSettings(t *testing.T) { var checks []resource.TestCheckFunc var steps []resource.TestStep - if os.Getenv("SKIP_MINIMUM_TEST") == "" { - steps = append(steps, resource.TestStep{ - Config: testAccCcDHCPSettingsPrerequisitesConfig + testAccCcDHCPSettingsConfig_minimum(), - }) - } steps = append(steps, resource.TestStep{ Config: testAccCcDHCPSettingsPrerequisitesConfig + testAccCcDHCPSettingsConfig_all(), Check: resource.ComposeTestCheckFunc(checks...), diff --git a/internal/provider/resource_catalystcenter_dns_settings.go b/internal/provider/resource_catalystcenter_dns_settings.go index fd1147af..4d1b93e2 100644 --- a/internal/provider/resource_catalystcenter_dns_settings.go +++ b/internal/provider/resource_catalystcenter_dns_settings.go @@ -217,8 +217,15 @@ func (r *DNSSettingsResource) Delete(ctx context.Context, req resource.DeleteReq tflog.Debug(ctx, fmt.Sprintf("%s: Beginning Delete", state.Id.ValueString())) res, err := r.client.Put(state.getPath(), "{}") if err != nil { - resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Failed to delete object (PUT), got error: %s, %s", err, res.String())) - return + errorCode := res.Get("response.errorCode").String() + if errorCode == "NCND01090" { + // Log a warning and continue execution when Empty input - the groupUuid is null or empty + failureReason := res.Get("response.failureReason").String() + resp.Diagnostics.AddWarning("Empty input Warning", fmt.Sprintf("Empty input detected (error code: %s, reason %s).", errorCode, failureReason)) + } else { + resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Failed to delete object (%s), got error: %s, %s", "PUT", err, res.String())) + return + } } tflog.Debug(ctx, fmt.Sprintf("%s: Delete finished successfully", state.Id.ValueString())) diff --git a/internal/provider/resource_catalystcenter_dns_settings_test.go b/internal/provider/resource_catalystcenter_dns_settings_test.go index ccdb9ad2..dd50c97f 100644 --- a/internal/provider/resource_catalystcenter_dns_settings_test.go +++ b/internal/provider/resource_catalystcenter_dns_settings_test.go @@ -19,7 +19,6 @@ package provider // Section below is generated&owned by "gen/generator.go". //template:begin imports import ( - "os" "testing" "github.com/hashicorp/terraform-plugin-testing/helper/resource" @@ -33,11 +32,6 @@ func TestAccCcDNSSettings(t *testing.T) { checks = append(checks, resource.TestCheckResourceAttr("catalystcenter_dns_settings.test", "domain_name", "myCompany.com")) var steps []resource.TestStep - if os.Getenv("SKIP_MINIMUM_TEST") == "" { - steps = append(steps, resource.TestStep{ - Config: testAccCcDNSSettingsPrerequisitesConfig + testAccCcDNSSettingsConfig_minimum(), - }) - } steps = append(steps, resource.TestStep{ Config: testAccCcDNSSettingsPrerequisitesConfig + testAccCcDNSSettingsConfig_all(), Check: resource.ComposeTestCheckFunc(checks...), diff --git a/internal/provider/resource_catalystcenter_ntp_settings.go b/internal/provider/resource_catalystcenter_ntp_settings.go index ad11d744..8a9e73cd 100644 --- a/internal/provider/resource_catalystcenter_ntp_settings.go +++ b/internal/provider/resource_catalystcenter_ntp_settings.go @@ -213,8 +213,15 @@ func (r *NTPSettingsResource) Delete(ctx context.Context, req resource.DeleteReq tflog.Debug(ctx, fmt.Sprintf("%s: Beginning Delete", state.Id.ValueString())) res, err := r.client.Put(state.getPath(), "{}") if err != nil { - resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Failed to delete object (PUT), got error: %s, %s", err, res.String())) - return + errorCode := res.Get("response.errorCode").String() + if errorCode == "NCND01090" { + // Log a warning and continue execution when Empty input - the groupUuid is null or empty + failureReason := res.Get("response.failureReason").String() + resp.Diagnostics.AddWarning("Empty input Warning", fmt.Sprintf("Empty input detected (error code: %s, reason %s).", errorCode, failureReason)) + } else { + resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Failed to delete object (%s), got error: %s, %s", "PUT", err, res.String())) + return + } } tflog.Debug(ctx, fmt.Sprintf("%s: Delete finished successfully", state.Id.ValueString())) diff --git a/internal/provider/resource_catalystcenter_ntp_settings_test.go b/internal/provider/resource_catalystcenter_ntp_settings_test.go index e23ffd8f..6ae59619 100644 --- a/internal/provider/resource_catalystcenter_ntp_settings_test.go +++ b/internal/provider/resource_catalystcenter_ntp_settings_test.go @@ -19,7 +19,6 @@ package provider // Section below is generated&owned by "gen/generator.go". //template:begin imports import ( - "os" "testing" "github.com/hashicorp/terraform-plugin-testing/helper/resource" @@ -32,11 +31,6 @@ func TestAccCcNTPSettings(t *testing.T) { var checks []resource.TestCheckFunc var steps []resource.TestStep - if os.Getenv("SKIP_MINIMUM_TEST") == "" { - steps = append(steps, resource.TestStep{ - Config: testAccCcNTPSettingsPrerequisitesConfig + testAccCcNTPSettingsConfig_minimum(), - }) - } steps = append(steps, resource.TestStep{ Config: testAccCcNTPSettingsPrerequisitesConfig + testAccCcNTPSettingsConfig_all(), Check: resource.ComposeTestCheckFunc(checks...), diff --git a/internal/provider/resource_catalystcenter_telemetry_settings.go b/internal/provider/resource_catalystcenter_telemetry_settings.go index 3c4bc7e5..9f6c3e7f 100644 --- a/internal/provider/resource_catalystcenter_telemetry_settings.go +++ b/internal/provider/resource_catalystcenter_telemetry_settings.go @@ -259,8 +259,15 @@ func (r *TelemetrySettingsResource) Delete(ctx context.Context, req resource.Del tflog.Debug(ctx, fmt.Sprintf("%s: Beginning Delete", state.Id.ValueString())) res, err := r.client.Put(state.getPath(), "{}") if err != nil { - resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Failed to delete object (PUT), got error: %s, %s", err, res.String())) - return + errorCode := res.Get("response.errorCode").String() + if errorCode == "NCND01090" { + // Log a warning and continue execution when Empty input - the groupUuid is null or empty + failureReason := res.Get("response.failureReason").String() + resp.Diagnostics.AddWarning("Empty input Warning", fmt.Sprintf("Empty input detected (error code: %s, reason %s).", errorCode, failureReason)) + } else { + resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Failed to delete object (%s), got error: %s, %s", "PUT", err, res.String())) + return + } } tflog.Debug(ctx, fmt.Sprintf("%s: Delete finished successfully", state.Id.ValueString())) diff --git a/internal/provider/resource_catalystcenter_timezone_settings_test.go b/internal/provider/resource_catalystcenter_timezone_settings_test.go index 2dee09b3..6699fb99 100644 --- a/internal/provider/resource_catalystcenter_timezone_settings_test.go +++ b/internal/provider/resource_catalystcenter_timezone_settings_test.go @@ -19,7 +19,6 @@ package provider // Section below is generated&owned by "gen/generator.go". //template:begin imports import ( - "os" "testing" "github.com/hashicorp/terraform-plugin-testing/helper/resource" @@ -33,11 +32,6 @@ func TestAccCcTimeZoneSettings(t *testing.T) { checks = append(checks, resource.TestCheckResourceAttr("catalystcenter_timezone_settings.test", "identifier", "GMT")) var steps []resource.TestStep - if os.Getenv("SKIP_MINIMUM_TEST") == "" { - steps = append(steps, resource.TestStep{ - Config: testAccCcTimeZoneSettingsPrerequisitesConfig + testAccCcTimeZoneSettingsConfig_minimum(), - }) - } steps = append(steps, resource.TestStep{ Config: testAccCcTimeZoneSettingsPrerequisitesConfig + testAccCcTimeZoneSettingsConfig_all(), Check: resource.ComposeTestCheckFunc(checks...),