Skip to content

Commit b305a8b

Browse files
committed
feat(is): support for endpoint gateway resource bindings
1 parent 75b41aa commit b305a8b

20 files changed

+1861
-33
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ require (
3838
github.com/IBM/secrets-manager-go-sdk/v2 v2.0.15
3939
github.com/IBM/vmware-go-sdk v0.1.5
4040
github.com/IBM/vpc-beta-go-sdk v0.8.0
41-
github.com/IBM/vpc-go-sdk v0.75.0
41+
github.com/IBM/vpc-go-sdk v0.76.0
4242
github.com/ScaleFT/sshkeys v0.0.0-20200327173127-6142f742bca5
4343
github.com/akamai/AkamaiOPEN-edgegrid-golang v1.2.2
4444
github.com/akamai/AkamaiOPEN-edgegrid-golang/v5 v5.0.0

go.sum

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,10 +168,8 @@ github.com/IBM/vmware-go-sdk v0.1.5 h1:aQbwcJBceaaauuIoJ0OJn+ttwjb+QTX6XV9Jbrdpj
168168
github.com/IBM/vmware-go-sdk v0.1.5/go.mod h1:OyQKRInGGsBaOyE5LIZCqH7b1DZ01BvIYa8BgGy+wWo=
169169
github.com/IBM/vpc-beta-go-sdk v0.8.0 h1:cEPpv4iw3Ba5W2d0AWg3TIbKeJ8y1nPuUuibR5Jt9eE=
170170
github.com/IBM/vpc-beta-go-sdk v0.8.0/go.mod h1:hORgIyTFRzXrZIK9IohaWmCRBBlYiDRagsufi7M6akE=
171-
github.com/IBM/vpc-go-sdk v0.74.1 h1:qkWwdlILx3ZVNWht96CdlPKwhKL/y3ItN6XmwJ1rShM=
172-
github.com/IBM/vpc-go-sdk v0.74.1/go.mod h1:8lX6TpeYBbx1Vd4KTgM3PPQ4y3auGOPuD6qq3UBDdug=
173-
github.com/IBM/vpc-go-sdk v0.75.0 h1:8s11vR30n0eY9ptf6Osh9Bw13okhMVasb/KX9M52LEg=
174-
github.com/IBM/vpc-go-sdk v0.75.0/go.mod h1:8lX6TpeYBbx1Vd4KTgM3PPQ4y3auGOPuD6qq3UBDdug=
171+
github.com/IBM/vpc-go-sdk v0.76.0 h1:iuiUaGPs9ngfMZ4HkT9fVz/GX/03S2vB9BZ7Rgj+/4U=
172+
github.com/IBM/vpc-go-sdk v0.76.0/go.mod h1:8lX6TpeYBbx1Vd4KTgM3PPQ4y3auGOPuD6qq3UBDdug=
175173
github.com/Logicalis/asn1 v0.0.0-20190312173541-d60463189a56 h1:vuquMR410psHNax14XKNWa0Ae/kYgWJcXi0IFuX60N0=
176174
github.com/Logicalis/asn1 v0.0.0-20190312173541-d60463189a56/go.mod h1:Zb3OT4l0mf7P/GOs2w2Ilj5sdm5Whoq3pa24dAEBHFc=
177175
github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0=

ibm/acctest/acctest.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,13 @@ var (
143143
trustedMachineType string
144144
)
145145

146+
// For VPC Endpoint Gateway
147+
var (
148+
IsResourceBindingCRN string
149+
IsEndpointGatewayTargetCRN string
150+
IsEndpointGatewayTargetType string
151+
)
152+
146153
// MQ on Cloud
147154
var (
148155
MqcloudConfigEndpoint string
@@ -809,6 +816,19 @@ func init() {
809816
fmt.Println("[INFO] Set the environment variable SL_REGION for testing ibm_is_region datasource else it is set to default value 'us-south'")
810817
}
811818

819+
IsResourceBindingCRN = os.Getenv("IBM_IS_RESOURCE_BINDING_CRN")
820+
if IsResourceBindingCRN == "" {
821+
fmt.Println("[WARN] Set the environment variable IBM_IS_RESOURCE_BINDING_CRN for testing IBM VPC Endpoint gateway resources, the tests will fail if this is not set")
822+
}
823+
IsEndpointGatewayTargetCRN = os.Getenv("IBM_IS_ENDPOINT_BINDING_TARGET_CRN")
824+
if IsEndpointGatewayTargetCRN == "" {
825+
fmt.Println("[WARN] Set the environment variable IBM_IS_ENDPOINT_BINDING_TARGET_CRN for testing IBM VPC Endpoint gateway resources, the tests will fail if this is not set")
826+
}
827+
IsEndpointGatewayTargetType = os.Getenv("IBM_IS_ENDPOINT_BINDING_TARGET_TYPE")
828+
if IsEndpointGatewayTargetType == "" {
829+
fmt.Println("[WARN] Set the environment variable IBM_IS_ENDPOINT_BINDING_TARGET_TYPE for testing IBM VPC Endpoint gateway resources, the tests will fail if this is not set")
830+
}
831+
812832
ISZoneName = os.Getenv("SL_ZONE")
813833
if ISZoneName == "" {
814834
ISZoneName = "us-south-1"

ibm/provider/provider.go

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -539,21 +539,25 @@ func Provider() *schema.Provider {
539539
"ibm_is_instance_group_manager_policy": vpc.DataSourceIBMISInstanceGroupManagerPolicy(),
540540
"ibm_is_instance_group_manager_action": vpc.DataSourceIBMISInstanceGroupManagerAction(),
541541
"ibm_is_instance_group_manager_actions": vpc.DataSourceIBMISInstanceGroupManagerActions(),
542-
"ibm_is_virtual_endpoint_gateways": vpc.DataSourceIBMISEndpointGateways(),
543-
"ibm_is_virtual_endpoint_gateway_ips": vpc.DataSourceIBMISEndpointGatewayIPs(),
544-
"ibm_is_virtual_endpoint_gateway": vpc.DataSourceIBMISEndpointGateway(),
545-
"ibm_is_instance_template": vpc.DataSourceIBMISInstanceTemplate(),
546-
"ibm_is_instance_templates": vpc.DataSourceIBMISInstanceTemplates(),
547-
"ibm_is_instance_profile": vpc.DataSourceIBMISInstanceProfile(),
548-
"ibm_is_instance_profiles": vpc.DataSourceIBMISInstanceProfiles(),
549-
"ibm_is_instance": vpc.DataSourceIBMISInstance(),
550-
"ibm_is_instances": vpc.DataSourceIBMISInstances(),
551-
"ibm_is_instance_network_attachment": vpc.DataSourceIBMIsInstanceNetworkAttachment(),
552-
"ibm_is_instance_network_attachments": vpc.DataSourceIBMIsInstanceNetworkAttachments(),
553-
"ibm_is_instance_network_interface": vpc.DataSourceIBMIsInstanceNetworkInterface(),
554-
"ibm_is_instance_network_interfaces": vpc.DataSourceIBMIsInstanceNetworkInterfaces(),
555-
"ibm_is_instance_disk": vpc.DataSourceIbmIsInstanceDisk(),
556-
"ibm_is_instance_disks": vpc.DataSourceIbmIsInstanceDisks(),
542+
// vpe resource bindings
543+
"ibm_is_virtual_endpoint_gateway_resource_binding": vpc.DataSourceIBMIsVirtualEndpointGatewayResourceBinding(),
544+
"ibm_is_virtual_endpoint_gateway_resource_bindings": vpc.DataSourceIBMIsVirtualEndpointGatewayResourceBindings(),
545+
546+
"ibm_is_virtual_endpoint_gateways": vpc.DataSourceIBMISEndpointGateways(),
547+
"ibm_is_virtual_endpoint_gateway_ips": vpc.DataSourceIBMISEndpointGatewayIPs(),
548+
"ibm_is_virtual_endpoint_gateway": vpc.DataSourceIBMISEndpointGateway(),
549+
"ibm_is_instance_template": vpc.DataSourceIBMISInstanceTemplate(),
550+
"ibm_is_instance_templates": vpc.DataSourceIBMISInstanceTemplates(),
551+
"ibm_is_instance_profile": vpc.DataSourceIBMISInstanceProfile(),
552+
"ibm_is_instance_profiles": vpc.DataSourceIBMISInstanceProfiles(),
553+
"ibm_is_instance": vpc.DataSourceIBMISInstance(),
554+
"ibm_is_instances": vpc.DataSourceIBMISInstances(),
555+
"ibm_is_instance_network_attachment": vpc.DataSourceIBMIsInstanceNetworkAttachment(),
556+
"ibm_is_instance_network_attachments": vpc.DataSourceIBMIsInstanceNetworkAttachments(),
557+
"ibm_is_instance_network_interface": vpc.DataSourceIBMIsInstanceNetworkInterface(),
558+
"ibm_is_instance_network_interfaces": vpc.DataSourceIBMIsInstanceNetworkInterfaces(),
559+
"ibm_is_instance_disk": vpc.DataSourceIbmIsInstanceDisk(),
560+
"ibm_is_instance_disks": vpc.DataSourceIbmIsInstanceDisks(),
557561

558562
// reserved ips
559563
"ibm_is_instance_network_interface_reserved_ip": vpc.DataSourceIBMISInstanceNICReservedIP(),
@@ -1367,6 +1371,7 @@ func Provider() *schema.Provider {
13671371
"ibm_is_instance_group_manager_policy": vpc.ResourceIBMISInstanceGroupManagerPolicy(),
13681372
"ibm_is_instance_group_manager_action": vpc.ResourceIBMISInstanceGroupManagerAction(),
13691373
"ibm_is_instance_volume_attachment": vpc.ResourceIBMISInstanceVolumeAttachment(),
1374+
"ibm_is_virtual_endpoint_gateway_resource_binding": vpc.ResourceIBMIsVirtualEndpointGatewayResourceBinding(),
13701375
"ibm_is_virtual_endpoint_gateway": vpc.ResourceIBMISEndpointGateway(),
13711376
"ibm_is_virtual_endpoint_gateway_ip": vpc.ResourceIBMISEndpointGatewayIP(),
13721377
"ibm_is_instance_template": vpc.ResourceIBMISInstanceTemplate(),
@@ -2161,6 +2166,7 @@ func Validator() validate.ValidatorDict {
21612166
"ibm_schematics_policy": schematics.ResourceIbmSchematicsPolicyValidator(),
21622167
"ibm_resource_instance": resourcecontroller.ResourceIBMResourceInstanceValidator(),
21632168
"ibm_resource_key": resourcecontroller.ResourceIBMResourceKeyValidator(),
2169+
"ibm_is_virtual_endpoint_gateway_resource_binding": vpc.ResourceIBMIsVirtualEndpointGatewayResourceBindingValidator(),
21642170
"ibm_is_virtual_endpoint_gateway": vpc.ResourceIBMISEndpointGatewayValidator(),
21652171
"ibm_resource_tag": globaltagging.ResourceIBMResourceTagValidator(),
21662172
"ibm_iam_access_tag": globaltagging.ResourceIBMIamAccessTagValidator(),

ibm/service/vpc/data_source_ibm_is_virtual_endpoint_gateway.go

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,14 @@ func DataSourceIBMISEndpointGateway() *schema.Resource {
9999
isVirtualEndpointGatewayAllowDnsResolutionBinding: {
100100
Type: schema.TypeBool,
101101
Computed: true,
102+
Deprecated: "This property has been deprecated in favor of dns_resolution_binding_mode.",
102103
Description: "Indicates whether to allow this endpoint gateway to participate in DNS resolution bindings with a VPC that has dns.enable_hub set to true.",
103104
},
105+
"dns_resolution_binding_mode": &schema.Schema{
106+
Type: schema.TypeString,
107+
Computed: true,
108+
Description: "The DNS resolution binding mode used for this endpoint gateway:- `disabled`: The endpoint gateway is not participating in [DNS sharing for VPE gateways](/docs/vpc?topic=vpc-vpe-dns-sharing).- `primary`: The endpoint gateway is participating in [DNS sharing for VPE gateways] (/docs/vpc?topic=vpc-vpe-dns-sharing) if the VPC this endpoint gateway resides in has a DNS resolution binding to another VPC.- `per_resource_binding`: The endpoint gateway is participating in [DNS sharing for VPE gateways](/docs/vpc?topic=vpc-vpe-dns-sharing) if the VPC this endpoint gateway resides in has a DNS resolution binding to another VPC, and resource binding is enabled for the `target` service.",
109+
},
104110
isVirtualEndpointGatewayIPs: {
105111
Type: schema.TypeList,
106112
Computed: true,
@@ -209,7 +215,20 @@ func dataSourceIBMISEndpointGatewayRead(
209215
result := allrecs[0]
210216
d.SetId(*result.ID)
211217
d.Set(isVirtualEndpointGatewayName, result.Name)
212-
d.Set(isVirtualEndpointGatewayAllowDnsResolutionBinding, result.AllowDnsResolutionBinding)
218+
// Handle the new dns_resolution_binding_mode field
219+
// Handle the new dns_resolution_binding_mode field (API now only returns this field)
220+
if result.DnsResolutionBindingMode != nil && *result.DnsResolutionBindingMode != "" {
221+
if err = d.Set("dns_resolution_binding_mode", *result.DnsResolutionBindingMode); err != nil {
222+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting dns_resolution_binding_mode: %s", err), "(Data) ibm_is_virtual_endpoint_gateway", "read", "set-dns_resolution_binding_mode").GetDiag()
223+
}
224+
225+
// Compute and set deprecated field for backward compatibility in Terraform state
226+
allowDnsResolutionBinding := mapDnsResolutionBindingModeToBoolean(*result.DnsResolutionBindingMode)
227+
if err = d.Set(isVirtualEndpointGatewayAllowDnsResolutionBinding, allowDnsResolutionBinding); err != nil {
228+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting allow_dns_resolution_binding: %s", err), "(Data) ibm_is_virtual_endpoint_gateway", "read", "set-allow_dns_resolution_binding").GetDiag()
229+
}
230+
}
231+
213232
d.Set(isVirtualEndpointGatewayCRN, result.CRN)
214233
d.Set(isVirtualEndpointGatewayHealthState, result.HealthState)
215234
d.Set(isVirtualEndpointGatewayCreatedAt, result.CreatedAt.String())
@@ -243,3 +262,16 @@ func dataSourceIBMISEndpointGatewayRead(
243262
}
244263
return nil
245264
}
265+
266+
// Helper functions for field mapping during migration period
267+
func mapDnsResolutionBindingModeToBoolean(mode string) bool {
268+
switch mode {
269+
case "disabled":
270+
return false
271+
case "primary", "per_resource_binding":
272+
return true
273+
default:
274+
// Default to false for unknown values
275+
return false
276+
}
277+
}

0 commit comments

Comments
 (0)