From e6bcc73ec4bd53714dcce174883458c0ed921e47 Mon Sep 17 00:00:00 2001 From: Anna Khmelnitsky Date: Mon, 23 Sep 2024 20:10:03 +0000 Subject: [PATCH 1/2] Fix VPC external address importer In addition, remove unnecessary linter ignore comments Signed-off-by: Anna Khmelnitsky --- nsxt/policy_utils.go | 3 --- nsxt/resource_nsxt_vpc_external_address.go | 16 +++++++++++++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/nsxt/policy_utils.go b/nsxt/policy_utils.go index 5d2f5a5d3..baf286059 100644 --- a/nsxt/policy_utils.go +++ b/nsxt/policy_utils.go @@ -73,7 +73,6 @@ func getOrGenerateID(d *schema.ResourceData, m interface{}, presenceChecker func return id, nil } -//lint:ignore U1000 Ignore unused function temporarily until used in autogenerated resource func getOrGenerateIDWithParent(d *schema.ResourceData, m interface{}, presenceChecker func(utl.SessionContext, string, string, client.Connector) (bool, error)) (string, error) { connector := getPolicyConnector(m) @@ -440,7 +439,6 @@ func nsxtPolicyPathResourceImporterHelper(d *schema.ResourceData, m interface{}) return []*schema.ResourceData{d}, ErrNotAPolicyPath } -//lint:ignore U1000 Ignore unused function temporarily until used in autogenerated resource func nsxtParentPathResourceImporter(d *schema.ResourceData, m interface{}) ([]*schema.ResourceData, error) { importID := d.Id() if isSpaceString(importID) { @@ -665,7 +663,6 @@ func getPolicyLbMonitorPortSchema() *schema.Schema { } } -//lint:ignore U1000 Ignore unused function temporarily until used in autogenerated resource func getVpcParentsFromContext(context utl.SessionContext) []string { return []string{utl.DefaultOrgID, context.ProjectID, context.VPCID} } diff --git a/nsxt/resource_nsxt_vpc_external_address.go b/nsxt/resource_nsxt_vpc_external_address.go index 6e1578158..095cf0407 100644 --- a/nsxt/resource_nsxt_vpc_external_address.go +++ b/nsxt/resource_nsxt_vpc_external_address.go @@ -16,7 +16,7 @@ func resourceNsxtVpcExternalAddress() *schema.Resource { Update: resourceNsxtVpcExternalAddressUpdate, Delete: resourceNsxtVpcExternalAddressDelete, Importer: &schema.ResourceImporter{ - State: nsxtParentPathResourceImporter, + State: nsxtVpcExternalAddressImporter, }, Schema: map[string]*schema.Schema{ "parent_path": getPolicyPathSchema(true, true, "port path for address binding"), @@ -107,3 +107,17 @@ func resourceNsxtVpcExternalAddressUpdate(d *schema.ResourceData, m interface{}) func resourceNsxtVpcExternalAddressDelete(d *schema.ResourceData, m interface{}) error { return updatePort(d, m, true) } + +func nsxtVpcExternalAddressImporter(d *schema.ResourceData, m interface{}) ([]*schema.ResourceData, error) { + importID := d.Id() + if isSpaceString(importID) { + return []*schema.ResourceData{d}, ErrEmptyImportID + } + if isPolicyPath(importID) { + // Since external address is part of Port API, parent path is the port URL + d.SetId(newUUID()) + d.Set("parent_path", importID) + return []*schema.ResourceData{d}, nil + } + return []*schema.ResourceData{d}, ErrNotAPolicyPath +} From cde746465c1eb71c6ae0c9a1a26bc74cba15a634 Mon Sep 17 00:00:00 2001 From: Anna Khmelnitsky Date: Tue, 24 Sep 2024 22:46:44 +0000 Subject: [PATCH 2/2] Avoid sending empty dhcp relay path in VPC subnet NSX errors out in this scenario for certain configuration. In addition, fix metadata library for cases where OmitIfEmpty is defined for nested block Signed-off-by: Anna Khmelnitsky --- nsxt/metadata/metadata.go | 6 +++++- nsxt/resource_nsxt_vpc_subnet.go | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/nsxt/metadata/metadata.go b/nsxt/metadata/metadata.go index cc47d6dd3..e3d66ef11 100644 --- a/nsxt/metadata/metadata.go +++ b/nsxt/metadata/metadata.go @@ -307,7 +307,11 @@ func SchemaToStruct(elem reflect.Value, d *schema.ResourceData, metadata map[str exists := false if len(parent) > 0 && parentMap[key] != nil { value = parentMap[key].(string) - exists = true + // For nested maps, value is initialized to zero string even if not + // specified by user explicitly + if len(value) > 0 { + exists = true + } } else { var v interface{} v, exists = d.GetOk(key) diff --git a/nsxt/resource_nsxt_vpc_subnet.go b/nsxt/resource_nsxt_vpc_subnet.go index 7502716ef..fb192c749 100644 --- a/nsxt/resource_nsxt_vpc_subnet.go +++ b/nsxt/resource_nsxt_vpc_subnet.go @@ -298,6 +298,7 @@ var vpcSubnetSchema = map[string]*metadata.ExtendedSchema{ Metadata: metadata.Metadata{ SchemaType: "string", SdkFieldName: "DhcpRelayConfigPath", + OmitIfEmpty: true, }, }, "excluded_ips": {