Skip to content

Commit f9222a6

Browse files
authored
fix(vpc-routing-table): support removing of advertise routes and accept routes from array (#5039)
* fix(vpc-routing-table): support removing of advertise routes and accept routes from arrays * updated test cases
1 parent f4f9e05 commit f9222a6

File tree

2 files changed

+96
-14
lines changed

2 files changed

+96
-14
lines changed

ibm/service/vpc/resource_ibm_is_vpc_routing_table.go

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -334,26 +334,37 @@ func resourceIBMISVPCRoutingTableUpdate(d *schema.ResourceData, meta interface{}
334334
routingTablePatchModel.Name = core.StringPtr(name)
335335
hasChange = true
336336
}
337+
removeAcceptRoutesFromFilter := false
337338
if d.HasChange("accept_routes_from_resource_type") {
338339
var aroutes []vpcv1.ResourceFilter
339340
acptRoutes := d.Get("accept_routes_from_resource_type").(*schema.Set)
340-
for _, val := range acptRoutes.List() {
341-
value := val.(string)
342-
resourceFilter := vpcv1.ResourceFilter{
343-
ResourceType: &value,
341+
if len(acptRoutes.List()) == 0 {
342+
removeAcceptRoutesFromFilter = true
343+
} else {
344+
for _, val := range acptRoutes.List() {
345+
value := val.(string)
346+
resourceFilter := vpcv1.ResourceFilter{
347+
ResourceType: &value,
348+
}
349+
aroutes = append(aroutes, resourceFilter)
344350
}
345-
aroutes = append(aroutes, resourceFilter)
346351
}
347352
routingTablePatchModel.AcceptRoutesFrom = aroutes
348353
hasChange = true
349354
}
355+
removeAdvertiseRoutesTo := false
350356
if d.HasChange("advertise_routes_to") {
351357
var advertiseRoutesToList []string
352358
advertiseRoutesTo := d.Get("advertise_routes_to").(*schema.Set)
353359

354-
for _, val := range advertiseRoutesTo.List() {
355-
advertiseRoutesToList = append(advertiseRoutesToList, val.(string))
360+
if len(advertiseRoutesTo.List()) == 0 {
361+
removeAdvertiseRoutesTo = true
362+
} else {
363+
for _, val := range advertiseRoutesTo.List() {
364+
advertiseRoutesToList = append(advertiseRoutesToList, val.(string))
365+
}
356366
}
367+
357368
routingTablePatchModel.AdvertiseRoutesTo = advertiseRoutesToList
358369
hasChange = true
359370
}
@@ -385,6 +396,12 @@ func resourceIBMISVPCRoutingTableUpdate(d *schema.ResourceData, meta interface{}
385396
return fmt.Errorf("[ERROR] Error calling asPatch for RoutingTablePatchModel: %s", asPatchErr)
386397
}
387398

399+
if removeAdvertiseRoutesTo {
400+
routingTablePatchModelAsPatch["advertise_routes_to"] = []string{}
401+
}
402+
if removeAcceptRoutesFromFilter {
403+
routingTablePatchModelAsPatch["accept_routes_from"] = []vpcv1.ResourceFilter{}
404+
}
388405
updateVpcRoutingTableOptions.RoutingTablePatch = routingTablePatchModelAsPatch
389406
_, response, err := sess.UpdateVPCRoutingTable(updateVpcRoutingTableOptions)
390407
if err != nil {

ibm/service/vpc/resource_ibm_is_vpc_routing_table_test.go

Lines changed: 72 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -94,27 +94,45 @@ func TestAccIBMISVPCRoutingTable_advertiseRoutesTO(t *testing.T) {
9494
var vpcRouteTables string
9595
name1 := fmt.Sprintf("tfvpc-create-%d", acctest.RandIntRange(10, 100))
9696
routeTableName := fmt.Sprintf("tfvpcrt-create-%d", acctest.RandIntRange(10, 100))
97-
routeTableName1 := fmt.Sprintf("tfvpcrt-up-create-%d", acctest.RandIntRange(10, 100))
9897

98+
advertiseRoutesToDirectLink := "direct_link"
99+
advertiseRoutesToTransit_gateway := "transit_gateway"
100+
acceptRoutesFromVPNServer := "vpn_server"
99101
resource.Test(t, resource.TestCase{
100102
PreCheck: func() { acc.TestAccPreCheck(t) },
101103
Providers: acc.TestAccProviders,
102104
CheckDestroy: testAccCheckIBMISVPCRouteTableDestroy,
103105
Steps: []resource.TestStep{
104106
{
105-
Config: testAccCheckIBMISVPCRouteTableConfig(routeTableName, name1),
107+
Config: testAccCheckIBMISVPCRouteTableAdvertiseRoutesToConfig(routeTableName, name1, acceptRoutesFromVPNServer, advertiseRoutesToDirectLink, advertiseRoutesToTransit_gateway),
106108
Check: resource.ComposeTestCheckFunc(
107109
testAccCheckIBMISVPCRouteTableExists("ibm_is_vpc_routing_table.test_ibm_is_vpc_routing_table", vpcRouteTables),
108-
resource.TestCheckResourceAttrSet(
109-
"ibm_is_vpc_routing_table.test_ibm_is_vpc_routing_table", "advertise_routes_to"),
110+
resource.TestCheckResourceAttr(
111+
"ibm_is_vpc_routing_table.test_ibm_is_vpc_routing_table", "advertise_routes_to.0", advertiseRoutesToDirectLink),
112+
resource.TestCheckResourceAttr(
113+
"ibm_is_vpc_routing_table.test_ibm_is_vpc_routing_table", "advertise_routes_to.1", advertiseRoutesToTransit_gateway),
114+
resource.TestCheckResourceAttr(
115+
"ibm_is_vpc_routing_table.test_ibm_is_vpc_routing_table", "accept_routes_from_resource_type.0", acceptRoutesFromVPNServer),
110116
),
111117
},
112118
{
113-
Config: testAccCheckIBMISVPCRouteTableConfig(routeTableName1, name1),
119+
Config: testAccCheckIBMISVPCRouteTableAdvertiseRoutesToDLConfig(routeTableName, name1, acceptRoutesFromVPNServer, advertiseRoutesToDirectLink),
114120
Check: resource.ComposeTestCheckFunc(
115121
testAccCheckIBMISVPCRouteTableExists("ibm_is_vpc_routing_table.test_ibm_is_vpc_routing_table", vpcRouteTables),
116-
resource.TestCheckResourceAttrSet(
117-
"ibm_is_vpc_routing_table.test_ibm_is_vpc_routing_table", "advertise_routes_to"),
122+
resource.TestCheckResourceAttr(
123+
"ibm_is_vpc_routing_table.test_ibm_is_vpc_routing_table", "advertise_routes_to.0", advertiseRoutesToDirectLink),
124+
resource.TestCheckResourceAttr(
125+
"ibm_is_vpc_routing_table.test_ibm_is_vpc_routing_table", "accept_routes_from_resource_type.0", acceptRoutesFromVPNServer),
126+
),
127+
},
128+
{
129+
Config: testAccCheckIBMISVPCRouteTableAdvertiseRoutesToRemovalConfig(routeTableName, name1),
130+
Check: resource.ComposeTestCheckFunc(
131+
testAccCheckIBMISVPCRouteTableExists("ibm_is_vpc_routing_table.test_ibm_is_vpc_routing_table", vpcRouteTables),
132+
resource.TestCheckResourceAttr(
133+
"ibm_is_vpc_routing_table.test_ibm_is_vpc_routing_table", "advertise_routes_to.#", "0"),
134+
resource.TestCheckResourceAttr(
135+
"ibm_is_vpc_routing_table.test_ibm_is_vpc_routing_table", "accept_routes_from_resource_type.#", "0"),
118136
),
119137
},
120138
},
@@ -206,3 +224,50 @@ resource "ibm_is_vpc_routing_table" "test_ibm_is_vpc_routing_table" {
206224
accept_routes_from_resource_type=["%s"]
207225
}`, name, rtName, acceptRoutesFromVPNServer)
208226
}
227+
228+
func testAccCheckIBMISVPCRouteTableAdvertiseRoutesToConfig(rtName, name, acceptRoutesFromVPNServer, advertiseRoutesTo1, advertiseRoutesTo2 string) string {
229+
return fmt.Sprintf(`
230+
resource "ibm_is_vpc" "testacc_vpc" {
231+
name = "%s"
232+
}
233+
resource "ibm_is_vpc_routing_table" "test_ibm_is_vpc_routing_table" {
234+
depends_on = [ibm_is_vpc.testacc_vpc]
235+
route_direct_link_ingress = true
236+
route_transit_gateway_ingress = true
237+
vpc = ibm_is_vpc.testacc_vpc.id
238+
name = "%s"
239+
accept_routes_from_resource_type=["%s"]
240+
advertise_routes_to=["%s","%s"]
241+
}`, name, rtName, acceptRoutesFromVPNServer, advertiseRoutesTo1, advertiseRoutesTo2)
242+
}
243+
244+
func testAccCheckIBMISVPCRouteTableAdvertiseRoutesToDLConfig(rtName, name, acceptRoutesFromVPNServer, advertiseRoutesTo1 string) string {
245+
return fmt.Sprintf(`
246+
resource "ibm_is_vpc" "testacc_vpc" {
247+
name = "%s"
248+
}
249+
resource "ibm_is_vpc_routing_table" "test_ibm_is_vpc_routing_table" {
250+
depends_on = [ibm_is_vpc.testacc_vpc]
251+
route_direct_link_ingress = true
252+
route_transit_gateway_ingress = true
253+
vpc = ibm_is_vpc.testacc_vpc.id
254+
name = "%s"
255+
accept_routes_from_resource_type=["%s"]
256+
advertise_routes_to=["%s"]
257+
}`, name, rtName, acceptRoutesFromVPNServer, advertiseRoutesTo1)
258+
}
259+
260+
func testAccCheckIBMISVPCRouteTableAdvertiseRoutesToRemovalConfig(rtName, name string) string {
261+
return fmt.Sprintf(`
262+
resource "ibm_is_vpc" "testacc_vpc" {
263+
name = "%s"
264+
}
265+
resource "ibm_is_vpc_routing_table" "test_ibm_is_vpc_routing_table" {
266+
depends_on = [ibm_is_vpc.testacc_vpc]
267+
route_direct_link_ingress = true
268+
vpc = ibm_is_vpc.testacc_vpc.id
269+
name = "%s"
270+
accept_routes_from_resource_type=[]
271+
advertise_routes_to=[]
272+
}`, name, rtName)
273+
}

0 commit comments

Comments
 (0)