Skip to content

Commit

Permalink
Transit Gateway: Adding new connection type Redundant GRE to the tran…
Browse files Browse the repository at this point in the history
…site gateway (#5433)

* chore: Adding new connection type Redundant GRE to the transite gateway  dependency:none

* chore: Adding new connection type Redundant GRE to the transite gateway  dependency:none

---------

Co-authored-by: sushmitha M <sushmitham@sushmithas-MacBook-Pro.local>
  • Loading branch information
sushmitha1506 and sushmitha M authored Jun 21, 2024
1 parent c288690 commit 161915d
Show file tree
Hide file tree
Showing 12 changed files with 1,390 additions and 81 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ require (
github.com/IBM/ibm-hpcs-uko-sdk v0.0.20-beta
github.com/IBM/keyprotect-go-client v0.14.0
github.com/IBM/logs-go-sdk v0.2.1
github.com/IBM/networking-go-sdk v0.46.1
github.com/IBM/networking-go-sdk v0.47.0
github.com/IBM/platform-services-go-sdk v0.62.11
github.com/IBM/project-go-sdk v0.3.4
github.com/IBM/push-notifications-go-sdk v0.0.0-20210310100607-5790b96c47f5
Expand Down
317 changes: 315 additions & 2 deletions go.sum

Large diffs are not rendered by default.

47 changes: 21 additions & 26 deletions ibm/provider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ import (
"sync"
"time"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"

"github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns"
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex"
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/apigateway"
Expand Down Expand Up @@ -62,8 +65,6 @@ import (
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/vmware"
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/vpc"
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/validate"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)

// Provider returns a *schema.Provider.
Expand Down Expand Up @@ -522,26 +523,22 @@ func Provider() *schema.Provider {
"ibm_is_virtual_network_interface_ip": vpc.DataSourceIBMIsVirtualNetworkInterfaceIP(),
"ibm_is_virtual_network_interface_ips": vpc.DataSourceIBMIsVirtualNetworkInterfaceIPs(),

"ibm_is_share_mount_target": vpc.DataSourceIBMIsShareTarget(),
"ibm_is_share_mount_targets": vpc.DataSourceIBMIsShareTargets(),
"ibm_is_volume": vpc.DataSourceIBMISVolume(),
"ibm_is_volumes": vpc.DataSourceIBMIsVolumes(),
"ibm_is_volume_profile": vpc.DataSourceIBMISVolumeProfile(),
"ibm_is_volume_profiles": vpc.DataSourceIBMISVolumeProfiles(),
"ibm_is_vpc": vpc.DataSourceIBMISVPC(),
"ibm_is_vpc_dns_resolution_binding": vpc.DataSourceIBMIsVPCDnsResolutionBinding(),
"ibm_is_vpc_dns_resolution_bindings": vpc.DataSourceIBMIsVPCDnsResolutionBindings(),
"ibm_is_vpcs": vpc.DataSourceIBMISVPCs(),
"ibm_is_vpn_gateway": vpc.DataSourceIBMISVPNGateway(),
"ibm_is_vpn_gateways": vpc.DataSourceIBMISVPNGateways(),
"ibm_is_vpc_address_prefixes": vpc.DataSourceIbmIsVpcAddressPrefixes(),
"ibm_is_vpc_address_prefix": vpc.DataSourceIBMIsVPCAddressPrefix(),
"ibm_is_vpn_gateway_connection": vpc.DataSourceIBMISVPNGatewayConnection(),
"ibm_is_vpn_gateway_connections": vpc.DataSourceIBMISVPNGatewayConnections(),

"ibm_is_vpn_gateway_connection_local_cidrs": vpc.DataSourceIBMIsVPNGatewayConnectionLocalCidrs(),
"ibm_is_vpn_gateway_connection_peer_cidrs": vpc.DataSourceIBMIsVPNGatewayConnectionPeerCidrs(),

"ibm_is_share_mount_target": vpc.DataSourceIBMIsShareTarget(),
"ibm_is_share_mount_targets": vpc.DataSourceIBMIsShareTargets(),
"ibm_is_volume": vpc.DataSourceIBMISVolume(),
"ibm_is_volumes": vpc.DataSourceIBMIsVolumes(),
"ibm_is_volume_profile": vpc.DataSourceIBMISVolumeProfile(),
"ibm_is_volume_profiles": vpc.DataSourceIBMISVolumeProfiles(),
"ibm_is_vpc": vpc.DataSourceIBMISVPC(),
"ibm_is_vpc_dns_resolution_binding": vpc.DataSourceIBMIsVPCDnsResolutionBinding(),
"ibm_is_vpc_dns_resolution_bindings": vpc.DataSourceIBMIsVPCDnsResolutionBindings(),
"ibm_is_vpcs": vpc.DataSourceIBMISVPCs(),
"ibm_is_vpn_gateway": vpc.DataSourceIBMISVPNGateway(),
"ibm_is_vpn_gateways": vpc.DataSourceIBMISVPNGateways(),
"ibm_is_vpc_address_prefixes": vpc.DataSourceIbmIsVpcAddressPrefixes(),
"ibm_is_vpc_address_prefix": vpc.DataSourceIBMIsVPCAddressPrefix(),
"ibm_is_vpn_gateway_connection": vpc.DataSourceIBMISVPNGatewayConnection(),
"ibm_is_vpn_gateway_connections": vpc.DataSourceIBMISVPNGatewayConnections(),
"ibm_is_vpc_default_routing_table": vpc.DataSourceIBMISVPCDefaultRoutingTable(),
"ibm_is_vpc_routing_table": vpc.DataSourceIBMIBMIsVPCRoutingTable(),
"ibm_is_vpc_routing_tables": vpc.DataSourceIBMISVPCRoutingTables(),
Expand Down Expand Up @@ -784,7 +781,6 @@ func Provider() *schema.Provider {
"ibm_metrics_router_routes": metricsrouter.DataSourceIBMMetricsRouterRoutes(),

// MQ on Cloud
"ibm_mqcloud_queue_manager_options": mqcloud.DataSourceIbmMqcloudQueueManagerOptions(),
"ibm_mqcloud_queue_manager": mqcloud.DataSourceIbmMqcloudQueueManager(),
"ibm_mqcloud_queue_manager_status": mqcloud.DataSourceIbmMqcloudQueueManagerStatus(),
"ibm_mqcloud_application": mqcloud.DataSourceIbmMqcloudApplication(),
Expand Down Expand Up @@ -945,7 +941,6 @@ func Provider() *schema.Provider {
"ibm_logs_view_folders": logs.AddLogsInstanceFields(logs.DataSourceIbmLogsViewFolders()),
"ibm_logs_view": logs.AddLogsInstanceFields(logs.DataSourceIbmLogsView()),
"ibm_logs_views": logs.AddLogsInstanceFields(logs.DataSourceIbmLogsViews()),
"ibm_logs_dashboard_folders": logs.AddLogsInstanceFields(logs.DataSourceIbmLogsDashboardFolders()),
},

ResourcesMap: map[string]*schema.Resource{
Expand Down Expand Up @@ -1303,6 +1298,7 @@ func Provider() *schema.Provider {
"ibm_tg_connection_action": transitgateway.ResourceIBMTransitGatewayConnectionAction(),
"ibm_tg_connection_prefix_filter": transitgateway.ResourceIBMTransitGatewayConnectionPrefixFilter(),
"ibm_tg_route_report": transitgateway.ResourceIBMTransitGatewayRouteReport(),
"ibm_tg_connection_rgre_tunnel": transitgateway.ResourceIBMTransitGatewayConnectionRgreTunnel(),

// Catalog related resources
"ibm_cm_offering_instance": catalogmanagement.ResourceIBMCmOfferingInstance(),
Expand Down Expand Up @@ -1512,7 +1508,6 @@ func Provider() *schema.Provider {
"ibm_logs_outgoing_webhook": logs.AddLogsInstanceFields(logs.ResourceIbmLogsOutgoingWebhook()),
"ibm_logs_view_folder": logs.AddLogsInstanceFields(logs.ResourceIbmLogsViewFolder()),
"ibm_logs_view": logs.AddLogsInstanceFields(logs.ResourceIbmLogsView()),
"ibm_logs_dashboard_folder": logs.AddLogsInstanceFields(logs.ResourceIbmLogsDashboardFolder()),
},

ConfigureFunc: providerConfigure,
Expand Down Expand Up @@ -1729,6 +1724,7 @@ func Validator() validate.ValidatorDict {
"ibm_tg_connection": transitgateway.ResourceIBMTransitGatewayConnectionValidator(),
"ibm_tg_connection_action": transitgateway.ResourceIBMTransitGatewayConnectionActionValidator(),
"ibm_tg_connection_prefix_filter": transitgateway.ResourceIBMTransitGatewayConnectionPrefixFilterValidator(),
"ibm_tg_connection_rgre_tunnel": transitgateway.ResourceIBMTransitGatewayConnectionRgreTunnelValidator(),
"ibm_dl_virtual_connection": directlink.ResourceIBMDLGatewayVCValidator(),
"ibm_dl_gateway": directlink.ResourceIBMDLGatewayValidator(),
"ibm_dl_provider_gateway": directlink.ResourceIBMDLProviderGatewayValidator(),
Expand Down Expand Up @@ -1950,7 +1946,6 @@ func Validator() validate.ValidatorDict {
"ibm_logs_e2m": logs.ResourceIbmLogsE2mValidator(),
"ibm_logs_view": logs.ResourceIbmLogsViewValidator(),
"ibm_logs_view_folder": logs.ResourceIbmLogsViewFolderValidator(),
"ibm_logs_dashboard_folder": logs.ResourceIbmLogsDashboardFolderValidator(),
},
DataSourceValidatorDictionary: map[string]*validate.ResourceValidator{
"ibm_is_subnet": vpc.DataSourceIBMISSubnetValidator(),
Expand Down
199 changes: 158 additions & 41 deletions ibm/service/transitgateway/data_source_ibm_tg_gateway.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright IBM Corp. 2017, 2021 All Rights Reserved.
// Copyright IBM Corp. 2017, 2021, 2024 All Rights Reserved.
// Licensed under the Mozilla Public License v2.0

package transitgateway
Expand Down Expand Up @@ -146,6 +146,79 @@ func DataSourceIBMTransitGateway() *schema.Resource {
ValidateFunc: validate.InvokeValidator("ibm_tg_connection_prefix_filter", tgAction),
Description: "Whether to permit or deny the prefix filter",
},
tgrGREtunnels: {
Type: schema.TypeList,
Computed: true,
Description: "List of GRE tunnels for a transit gateway redundant GRE tunnel connection. This field is required for 'redundant_gre' connections",
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
tgconTunnelName: {
Type: schema.TypeString,
Computed: true,
Description: "The user-defined name for this rGRE tunnel.",
},
tgLocalGatewayIp: {
Type: schema.TypeString,
Computed: true,
Description: "The local gateway IP address.",
},
tgLocalTunnelIp: {
Type: schema.TypeString,
Computed: true,
Description: "The local tunnel IP address.",
},
tgRemoteGatewayIp: {
Type: schema.TypeString,
Computed: true,
Description: "The remote gateway IP address.",
},
tgRemoteTunnelIp: {
Type: schema.TypeString,
Computed: true,
Description: "The remote tunnel IP address.",
},
tgZone: {
Type: schema.TypeString,
Computed: true,
Description: "Location of GRE tunnel.",
},
tgCreatedAt: {
Type: schema.TypeString,
Computed: true,
Description: "The date and time that this connection was created",
},
tgUpdatedAt: {
Type: schema.TypeString,
Computed: true,
Description: "The date and time that this connection was last updated",
},
tgGreTunnelStatus: {
Type: schema.TypeString,
Computed: true,
Description: "What is the current configuration state of this connection. Possible values: [attached,failed,pending,deleting,detaching,detached]",
},
tgGreTunnelId: {
Type: schema.TypeString,
Computed: true,
Description: "The Transit Gateway Connection identifier",
},
tgMtu: {
Type: schema.TypeInt,
Computed: true,
},
tgLocalBgpAsn: {
Type: schema.TypeInt,
Computed: true,
Description: "The local network BGP ASN. ",
},
tgRemoteBgpAsn: {
Type: schema.TypeInt,
Computed: true,
Description: "The remote network BGP ASN.",
},
},
},
},
},
},
},
Expand Down Expand Up @@ -239,47 +312,10 @@ func dataSourceIBMTransitGatewayConnectionsRead(d *schema.ResourceData, meta int
if instance.NetworkAccountID != nil {
tgConn[tgNetworkAccountID] = *instance.NetworkAccountID
}

if instance.BaseConnectionID != nil {
tgConn[tgBaseConnectionId] = *instance.BaseConnectionID
}

if instance.BaseNetworkType != nil {
tgConn[tgBaseNetworkType] = *instance.BaseNetworkType
}

if instance.LocalBgpAsn != nil {
tgConn[tgLocalBgpAsn] = *instance.LocalBgpAsn
}

if instance.LocalGatewayIp != nil {
tgConn[tgLocalGatewayIp] = *instance.LocalGatewayIp
}

if instance.LocalTunnelIp != nil {
tgConn[tgLocalTunnelIp] = *instance.LocalTunnelIp
}

if instance.RemoteBgpAsn != nil {
tgConn[tgRemoteBgpAsn] = *instance.RemoteBgpAsn
}

if instance.RemoteGatewayIp != nil {
tgConn[tgRemoteGatewayIp] = *instance.RemoteGatewayIp
}

if instance.RemoteTunnelIp != nil {
tgConn[tgRemoteTunnelIp] = *instance.RemoteTunnelIp
}

if instance.Zone != nil {
tgConn[tgZone] = *instance.Zone.Name
}

if instance.Mtu != nil {
tgConn[tgMtu] = *instance.Mtu
}

if instance.CreatedAt != nil {
tgConn[tgConectionCreatedAt] = instance.CreatedAt.String()

Expand All @@ -291,12 +327,93 @@ func dataSourceIBMTransitGatewayConnectionsRead(d *schema.ResourceData, meta int
if instance.Status != nil {
tgConn[tgConnectionStatus] = *instance.Status
}
if instance.PrefixFiltersDefault != nil {
tgConn[tgDefaultPrefixFilter] = *instance.PrefixFiltersDefault

if *instance.NetworkType != "redundant_gre" {

if instance.BaseConnectionID != nil {
tgConn[tgBaseConnectionId] = *instance.BaseConnectionID
}
if instance.LocalBgpAsn != nil {
tgConn[tgLocalBgpAsn] = *instance.LocalBgpAsn
}
if instance.LocalGatewayIp != nil {
tgConn[tgLocalGatewayIp] = *instance.LocalGatewayIp
}
if instance.LocalTunnelIp != nil {
tgConn[tgLocalTunnelIp] = *instance.LocalTunnelIp
}
if instance.RemoteBgpAsn != nil {
tgConn[tgRemoteBgpAsn] = *instance.RemoteBgpAsn
}
if instance.RemoteGatewayIp != nil {
tgConn[tgRemoteGatewayIp] = *instance.RemoteGatewayIp
}
if instance.RemoteTunnelIp != nil {
tgConn[tgRemoteTunnelIp] = *instance.RemoteTunnelIp
}
if instance.Zone != nil {
tgConn[tgZone] = *instance.Zone.Name
}
if instance.Mtu != nil {
tgConn[tgMtu] = *instance.Mtu
}
if instance.PrefixFiltersDefault != nil {
tgConn[tgDefaultPrefixFilter] = *instance.PrefixFiltersDefault
}
}

if instance.Tunnels != nil {
// read the tunnels
rGREtunnels := make([]map[string]interface{}, 0)
for _, rGREtunnel := range instance.Tunnels {

tunnel := map[string]interface{}{}
if rGREtunnel.ID != nil {
tunnel[tgGreTunnelId] = *rGREtunnel.ID
}
if rGREtunnel.LocalGatewayIp != nil {
tunnel[tgLocalGatewayIp] = *rGREtunnel.LocalGatewayIp
}
if rGREtunnel.LocalTunnelIp != nil {
tunnel[tgLocalTunnelIp] = *rGREtunnel.LocalTunnelIp
}
if rGREtunnel.RemoteGatewayIp != nil {
tunnel[tgRemoteGatewayIp] = *rGREtunnel.RemoteGatewayIp
}
if rGREtunnel.RemoteTunnelIp != nil {
tunnel[tgRemoteTunnelIp] = *rGREtunnel.RemoteTunnelIp
}
if rGREtunnel.Mtu != nil {
tunnel[tgMtu] = *rGREtunnel.Mtu
}
if rGREtunnel.RemoteBgpAsn != nil {
tunnel[tgRemoteBgpAsn] = *rGREtunnel.RemoteBgpAsn
}
if rGREtunnel.Name != nil {
tunnel[tgconTunnelName] = *rGREtunnel.Name
}
if rGREtunnel.Zone.Name != nil {
tunnel[tgZone] = *rGREtunnel.Zone.Name
}
if rGREtunnel.LocalBgpAsn != nil {
tunnel[tgLocalBgpAsn] = *rGREtunnel.LocalBgpAsn
}
if rGREtunnel.Status != nil {
tunnel[tgGreTunnelStatus] = *rGREtunnel.Status
}
if rGREtunnel.CreatedAt != nil {
tunnel[tgCreatedAt] = rGREtunnel.CreatedAt.String()
}
if rGREtunnel.UpdatedAt != nil {
tunnel[tgUpdatedAt] = rGREtunnel.UpdatedAt.String()
}
rGREtunnels = append(rGREtunnels, tunnel)
}
if len(rGREtunnels) > 0 {
tgConn[tgrGREtunnels] = rGREtunnels
}
}
connections = append(connections, tgConn)

}
startSub = flex.GetNext(listTGConnections.Next)
if startSub == "" {
Expand Down
7 changes: 4 additions & 3 deletions ibm/service/transitgateway/resource_ibm_tg_gateway.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,14 @@ import (
"os"
"time"

"github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns"
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex"
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/validate"
"github.com/IBM/networking-go-sdk/transitgatewayapisv1"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"

"github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns"
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex"
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/validate"
)

const (
Expand Down
Loading

0 comments on commit 161915d

Please sign in to comment.