Skip to content

Commit 2556547

Browse files
yfodilremyleone
andauthored
feat(vpcgw): add support for type upgrade (#2666)
* feat(vpcgw): add support for type upgrade * update cassettes --------- Co-authored-by: Rémy Léone <[email protected]>
1 parent a24c42a commit 2556547

5 files changed

+1615
-429
lines changed

internal/services/vpcgw/public_gateway.go

+19-4
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ func ResourcePublicGateway() *schema.Resource {
4242
"type": {
4343
Type: schema.TypeString,
4444
Required: true,
45-
ForceNew: true,
4645
Description: "gateway type",
4746
DiffSuppressFunc: dsf.IgnoreCase,
4847
},
@@ -229,6 +228,16 @@ func ResourceVPCPublicGatewayUpdate(ctx context.Context, d *schema.ResourceData,
229228
updateRequest.UpstreamDNSServers = types.ExpandUpdatedStringsPtr(d.Get("upstream_dns_servers"))
230229
}
231230

231+
_, err = api.UpdateGateway(updateRequest, scw.WithContext(ctx))
232+
if err != nil {
233+
return diag.FromErr(err)
234+
}
235+
236+
_, err = waitForVPCPublicGateway(ctx, api, zone, id, d.Timeout(schema.TimeoutUpdate))
237+
if err != nil {
238+
return diag.FromErr(err)
239+
}
240+
232241
if d.HasChange("refresh_ssh_keys") {
233242
_, err := api.RefreshSSHKeys(&vpcgw.RefreshSSHKeysRequest{
234243
Zone: gateway.Zone,
@@ -244,9 +253,15 @@ func ResourceVPCPublicGatewayUpdate(ctx context.Context, d *schema.ResourceData,
244253
return diag.FromErr(err)
245254
}
246255

247-
_, err = api.UpdateGateway(updateRequest, scw.WithContext(ctx))
248-
if err != nil {
249-
return diag.FromErr(err)
256+
if d.HasChange("type") {
257+
_, err := api.UpgradeGateway(&vpcgw.UpgradeGatewayRequest{
258+
Zone: gateway.Zone,
259+
GatewayID: gateway.ID,
260+
Type: types.ExpandUpdatedStringPtr(d.Get("type")),
261+
}, scw.WithContext(ctx))
262+
if err != nil {
263+
return diag.FromErr(err)
264+
}
250265
}
251266

252267
_, err = waitForVPCPublicGateway(ctx, api, zone, id, d.Timeout(schema.TimeoutUpdate))

internal/services/vpcgw/public_gateway_test.go

+37
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,43 @@ func TestAccVPCPublicGateway_AttachToIP(t *testing.T) {
174174
})
175175
}
176176

177+
func TestAccVPCPublicGateway_Upgrade(t *testing.T) {
178+
tt := acctest.NewTestTools(t)
179+
defer tt.Cleanup()
180+
publicGatewayName := "public-gateway-upgrade-test"
181+
resource.ParallelTest(t, resource.TestCase{
182+
PreCheck: func() { acctest.PreCheck(t) },
183+
ProviderFactories: tt.ProviderFactories,
184+
CheckDestroy: vpcgwchecks.IsGatewayDestroyed(tt),
185+
Steps: []resource.TestStep{
186+
{
187+
Config: fmt.Sprintf(`
188+
resource scaleway_vpc_public_gateway main {
189+
name = "%s"
190+
type = "VPC-GW-S"
191+
}
192+
`, publicGatewayName),
193+
Check: resource.ComposeTestCheckFunc(
194+
testAccCheckVPCPublicGatewayExists(tt, "scaleway_vpc_public_gateway.main"),
195+
resource.TestCheckResourceAttr("scaleway_vpc_public_gateway.main", "type", "VPC-GW-S"),
196+
),
197+
},
198+
{
199+
Config: fmt.Sprintf(`
200+
resource scaleway_vpc_public_gateway main {
201+
name = "%s"
202+
type = "VPC-GW-M"
203+
}
204+
`, publicGatewayName),
205+
Check: resource.ComposeTestCheckFunc(
206+
testAccCheckVPCPublicGatewayExists(tt, "scaleway_vpc_public_gateway.main"),
207+
resource.TestCheckResourceAttr("scaleway_vpc_public_gateway.main", "type", "VPC-GW-M"),
208+
),
209+
},
210+
},
211+
})
212+
}
213+
177214
func testAccCheckVPCPublicGatewayExists(tt *acctest.TestTools, n string) resource.TestCheckFunc {
178215
return func(s *terraform.State) error {
179216
rs, ok := s.RootModule().Resources[n]

0 commit comments

Comments
 (0)