Skip to content

Commit b68b585

Browse files
committed
tests
1 parent 5b6a601 commit b68b585

File tree

6 files changed

+3475
-11
lines changed

6 files changed

+3475
-11
lines changed

internal/services/applesilicon/clients.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,13 @@ func NewAPIWithZoneAndID(m interface{}, id string) (*applesilicon.API, scw.Zone,
3131

3232
return asAPI, zone, ID, nil
3333
}
34+
35+
func newPrivateNetworkAPIWithZone(d *schema.ResourceData, m interface{}) (*applesilicon.PrivateNetworkAPI, scw.Zone, error) {
36+
privateNetworkAPI := applesilicon.NewPrivateNetworkAPI(meta.ExtractScwClient(m))
37+
38+
zone, err := meta.ExtractZone(d, m)
39+
if err != nil {
40+
return nil, "", err
41+
}
42+
return privateNetworkAPI, zone, nil
43+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package applesilicon
2+
3+
import (
4+
"context"
5+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
6+
applesilicon "github.com/scaleway/scaleway-sdk-go/api/applesilicon/v1alpha1"
7+
"github.com/scaleway/scaleway-sdk-go/scw"
8+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/httperrors"
9+
)
10+
11+
func detachAllPrivateNetworkFromServer(ctx context.Context, d *schema.ResourceData, m interface{}, serverID string) error {
12+
privateNetworkAPI, zone, err := newPrivateNetworkAPIWithZone(d, m)
13+
if err != nil {
14+
return err
15+
}
16+
listPrivateNetwork, err := privateNetworkAPI.ListServerPrivateNetworks(&applesilicon.PrivateNetworkAPIListServerPrivateNetworksRequest{
17+
Zone: zone,
18+
ServerID: &serverID,
19+
}, scw.WithContext(ctx))
20+
if err != nil {
21+
return err
22+
}
23+
24+
for _, pn := range listPrivateNetwork.ServerPrivateNetworks {
25+
err := privateNetworkAPI.DeleteServerPrivateNetwork(&applesilicon.PrivateNetworkAPIDeleteServerPrivateNetworkRequest{
26+
Zone: zone,
27+
ServerID: serverID,
28+
PrivateNetworkID: pn.PrivateNetworkID,
29+
}, scw.WithContext(ctx))
30+
if err != nil {
31+
return err
32+
}
33+
}
34+
35+
_, err = waitForAppleSiliconPrivateNetworkServer(ctx, privateNetworkAPI, zone, serverID, d.Timeout(schema.TimeoutDelete))
36+
if err != nil && !httperrors.Is404(err) {
37+
return err
38+
}
39+
return nil
40+
}

internal/services/applesilicon/server.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,11 @@ func ResourceAppleSiliconServerUpdate(ctx context.Context, d *schema.ResourceDat
243243
return diag.FromErr(err)
244244
}
245245

246+
appleSilisonPrivateNetworkAPI, zone, err := newPrivateNetworkAPIWithZone(d, m)
247+
if err != nil {
248+
return diag.FromErr(err)
249+
}
250+
246251
req := &applesilicon.UpdateServerRequest{
247252
Zone: zone,
248253
ServerID: ID,
@@ -257,6 +262,23 @@ func ResourceAppleSiliconServerUpdate(ctx context.Context, d *schema.ResourceDat
257262
req.EnableVpc = &enableVpc
258263
}
259264

265+
if d.HasChange("private_network") {
266+
privateNetwork := d.Get("private_network")
267+
268+
req := &applesilicon.PrivateNetworkAPISetServerPrivateNetworksRequest{
269+
Zone: zone,
270+
ServerID: ID,
271+
PerPrivateNetworkIpamIPIDs: expandPrivateNetworks(privateNetwork),
272+
}
273+
274+
_, err := appleSilisonPrivateNetworkAPI.SetServerPrivateNetworks(req, scw.WithContext(ctx))
275+
if err != nil {
276+
return diag.FromErr(err)
277+
}
278+
279+
_, err = waitForAppleSiliconPrivateNetworkServer(ctx, appleSilisonPrivateNetworkAPI, zone, ID, d.Timeout(schema.TimeoutCreate))
280+
}
281+
260282
_, err = asAPI.UpdateServer(req, scw.WithContext(ctx))
261283
if err != nil {
262284
return diag.FromErr(err)
@@ -271,6 +293,11 @@ func ResourceAppleSiliconServerDelete(ctx context.Context, d *schema.ResourceDat
271293
return diag.FromErr(err)
272294
}
273295

296+
err = detachAllPrivateNetworkFromServer(ctx, d, m, ID)
297+
if err != nil {
298+
return diag.FromErr(err)
299+
}
300+
274301
err = asAPI.DeleteServer(&applesilicon.DeleteServerRequest{
275302
Zone: zone,
276303
ServerID: ID,

internal/services/applesilicon/server_test.go

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@ func TestAccServer_Basic(t *testing.T) {
2525
{
2626
Config: `
2727
resource scaleway_apple_silicon_server main {
28-
name = "test-m1"
28+
name = "test-m2"
2929
type = "M2-M"
3030
}
3131
`,
3232
Check: resource.ComposeTestCheckFunc(
3333
isServerPresent(tt, "scaleway_apple_silicon_server.main"),
34-
resource.TestCheckResourceAttr("scaleway_apple_silicon_server.main", "name", "test-m1"),
34+
resource.TestCheckResourceAttr("scaleway_apple_silicon_server.main", "name", "test-m2"),
3535
resource.TestCheckResourceAttr("scaleway_apple_silicon_server.main", "type", "M2-M"),
3636
// Computed
3737
resource.TestCheckResourceAttrSet("scaleway_apple_silicon_server.main", "ip"),
@@ -56,11 +56,11 @@ func TestAccServer_EnableVPC(t *testing.T) {
5656
{
5757
Config: `
5858
resource "scaleway_vpc" "vpc01" {
59-
name = "TestAccScalewayBaremetalIPAM"
59+
name = "TestAccServer_EnableVPC"
6060
}
6161
6262
resource "scaleway_vpc_private_network" "pn01" {
63-
name = "TestAccScalewayBaremetalIPAM"
63+
name = "TestAccServer_EnableVPC"
6464
ipv4_subnet {
6565
subnet = "172.16.64.0/22"
6666
}
@@ -85,10 +85,6 @@ func TestAccServer_EnableVPC(t *testing.T) {
8585
name = "test-m2"
8686
type = "M2-M"
8787
enable_vpc = true
88-
private_network {
89-
id = scaleway_vpc_private_network.pn01.id
90-
ipam_ip_ids = [scaleway_ipam_ip.ip01.id]
91-
}
9288
}
9389
`,
9490
Check: resource.ComposeTestCheckFunc(
@@ -114,13 +110,14 @@ func TestAccServer_EnableVPC(t *testing.T) {
114110
Check: resource.ComposeTestCheckFunc(
115111
isServerPresent(tt, "scaleway_apple_silicon_server.main"),
116112
resource.TestCheckResourceAttr("scaleway_apple_silicon_server.main", "name", "test-m2"),
117-
resource.TestCheckResourceAttr("scaleway_apple_silicon_server.main", "type", "M1-M"),
113+
resource.TestCheckResourceAttr("scaleway_apple_silicon_server.main", "type", "M2-M"),
118114
// Computed
119115
resource.TestCheckResourceAttrSet("scaleway_apple_silicon_server.main", "ip"),
120116
resource.TestCheckResourceAttrSet("scaleway_apple_silicon_server.main", "vnc_url"),
121117
resource.TestCheckResourceAttrSet("scaleway_apple_silicon_server.main", "created_at"),
122118
resource.TestCheckResourceAttrSet("scaleway_apple_silicon_server.main", "deletable_at"),
123-
resource.TestCheckResourceAttr("scaleway_apple_silicon_server.main", "vpc_status", "vpc_disabled"),
119+
resource.TestCheckResourceAttr("scaleway_apple_silicon_server.main", "vpc_status", "vpc_updating"),
120+
resource.TestCheckNoResourceAttr("scaleway_apple_silicon_server.main", "vpc_id"),
124121
),
125122
},
126123
},

0 commit comments

Comments
 (0)