@@ -2,10 +2,12 @@ package scaleway
22
33import (
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+
366485func testAccCheckScalewayK8SPoolDestroy (tt * TestTools , n string ) resource.TestCheckFunc {
367486 return func (s * terraform.State ) error {
368487 rs , ok := s .RootModule ().Resources [n ]
0 commit comments