Skip to content

Commit d8d5a98

Browse files
authored
test(k8s): add test K8SCluster_PoolPrivateNetwork (#1885)
1 parent 638ead7 commit d8d5a98

File tree

2 files changed

+4563
-0
lines changed

2 files changed

+4563
-0
lines changed

scaleway/resource_k8s_pool_test.go

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ package scaleway
22

33
import (
44
"fmt"
5+
"strings"
56
"testing"
67

78
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
89
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
10+
"github.com/scaleway/scaleway-sdk-go/api/instance/v1"
911
"github.com/scaleway/scaleway-sdk-go/api/k8s/v1"
1012
)
1113

@@ -363,6 +365,123 @@ func TestAccScalewayK8SCluster_PoolSize(t *testing.T) {
363365
})
364366
}
365367

368+
func TestAccScalewayK8SCluster_PoolPrivateNetwork(t *testing.T) {
369+
tt := NewTestTools(t)
370+
defer tt.Cleanup()
371+
372+
latestK8SVersion := testAccScalewayK8SClusterGetLatestK8SVersion(tt)
373+
374+
resource.ParallelTest(t, resource.TestCase{
375+
PreCheck: func() { testAccPreCheck(t) },
376+
ProviderFactories: tt.ProviderFactories,
377+
CheckDestroy: testAccCheckScalewayK8SClusterDestroy(tt),
378+
Steps: []resource.TestStep{
379+
{
380+
Config: fmt.Sprintf(`
381+
resource "scaleway_vpc_private_network" "private_network" {
382+
name = "k8s-private-network"
383+
}
384+
385+
resource "scaleway_k8s_cluster" "private_network" {
386+
name = "k8s-private-network-cluster"
387+
version = "%s"
388+
cni = "cilium"
389+
private_network_id = scaleway_vpc_private_network.private_network.id
390+
tags = [ "terraform-test", "scaleway_k8s_cluster", "private_network" ]
391+
delete_additional_resources = true
392+
depends_on = [scaleway_vpc_private_network.private_network]
393+
}
394+
395+
resource "scaleway_k8s_pool" "private_network" {
396+
cluster_id = scaleway_k8s_cluster.private_network.id
397+
name = "pool"
398+
node_type = "gp1_xs"
399+
size = 2
400+
autoscaling = false
401+
autohealing = true
402+
wait_for_pool_ready = true
403+
}`, latestK8SVersion),
404+
Check: resource.ComposeTestCheckFunc(
405+
testAccCheckScalewayK8SClusterExists(tt, "scaleway_k8s_cluster.private_network"),
406+
testAccCheckScalewayVPCPrivateNetworkExists(tt, "scaleway_vpc_private_network.private_network"),
407+
testAccCheckScalewayK8SPoolExists(tt, "scaleway_k8s_pool.private_network"),
408+
testAccCheckScalewayK8sClusterPrivateNetworkID(tt, "scaleway_k8s_cluster.private_network", "scaleway_vpc_private_network.private_network"),
409+
testAccCheckScalewayK8SPoolServersAreInPrivateNetwork(tt, "scaleway_k8s_cluster.private_network", "scaleway_k8s_pool.private_network", "scaleway_vpc_private_network.private_network"),
410+
),
411+
},
412+
},
413+
})
414+
}
415+
416+
func testAccCheckScalewayK8SPoolServersAreInPrivateNetwork(tt *TestTools, clusterTFName, poolTFName, pnTFName string) resource.TestCheckFunc {
417+
return func(s *terraform.State) error {
418+
rs, ok := s.RootModule().Resources[clusterTFName]
419+
if !ok {
420+
return fmt.Errorf("resource not found: %s", clusterTFName)
421+
}
422+
k8sAPI, region, clusterID, err := k8sAPIWithRegionAndID(tt.Meta, rs.Primary.ID)
423+
if err != nil {
424+
return err
425+
}
426+
427+
rs, ok = s.RootModule().Resources[poolTFName]
428+
if !ok {
429+
return fmt.Errorf("resource not found: %s", poolTFName)
430+
}
431+
_, _, poolID, err := k8sAPIWithRegionAndID(tt.Meta, rs.Primary.ID)
432+
if err != nil {
433+
return err
434+
}
435+
436+
rs, ok = s.RootModule().Resources[pnTFName]
437+
if !ok {
438+
return fmt.Errorf("resource not found: %s", pnTFName)
439+
}
440+
_, zone, pnID, err := vpcAPIWithZoneAndID(tt.Meta, rs.Primary.ID)
441+
if err != nil {
442+
return err
443+
}
444+
445+
nodes, err := k8sAPI.ListNodes(&k8s.ListNodesRequest{
446+
Region: region,
447+
PoolID: &poolID,
448+
ClusterID: clusterID,
449+
})
450+
if err != nil {
451+
return err
452+
}
453+
454+
instanceAPI := instance.NewAPI(tt.Meta.scwClient)
455+
456+
for _, node := range nodes.Nodes {
457+
providerIDSplit := strings.SplitN(node.ProviderID, "/", 5)
458+
if len(providerIDSplit) < 5 {
459+
return fmt.Errorf("unexpected format for ProviderID in node %s", node.ID)
460+
}
461+
462+
server, err := instanceAPI.GetServer(&instance.GetServerRequest{
463+
Zone: zone,
464+
ServerID: providerIDSplit[4],
465+
})
466+
if err != nil {
467+
return err
468+
}
469+
470+
pnfound := false
471+
for _, privateNic := range server.Server.PrivateNics {
472+
if privateNic.PrivateNetworkID == pnID {
473+
pnfound = true
474+
}
475+
}
476+
if pnfound == false {
477+
return fmt.Errorf("node %s is not in linked to private network %s", node.ID, pnID)
478+
}
479+
}
480+
481+
return nil
482+
}
483+
}
484+
366485
func testAccCheckScalewayK8SPoolDestroy(tt *TestTools, n string) resource.TestCheckFunc {
367486
return func(s *terraform.State) error {
368487
rs, ok := s.RootModule().Resources[n]

0 commit comments

Comments
 (0)