Skip to content

Commit 6e092c9

Browse files
authored
test(k8s): add a private network to every kapsule cluster in the tests (#2172)
1 parent 59a5902 commit 6e092c9

21 files changed

+26580
-9672
lines changed

scaleway/data_source_k8s_cluster_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,17 @@ func TestAccScalewayDataSourceK8SCluster_Basic(t *testing.T) {
1919
Steps: []resource.TestStep{
2020
{
2121
Config: fmt.Sprintf(`
22+
resource "scaleway_vpc_private_network" "main" {
23+
name = "test-data-source-cluster"
24+
}
25+
2226
resource "scaleway_k8s_cluster" "main" {
2327
name = "%s"
2428
version = "%s"
2529
cni = "cilium"
2630
tags = [ "terraform-test", "data_scaleway_k8s_cluster", "basic" ]
2731
delete_additional_resources = true
32+
private_network_id = scaleway_vpc_private_network.main.id
2833
}
2934
3035
resource "scaleway_k8s_pool" "default" {

scaleway/resource_k8s_cluster.go

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -245,30 +245,40 @@ func resourceScalewayK8SCluster() *schema.Resource {
245245
},
246246
func(ctx context.Context, diff *schema.ResourceDiff, i interface{}) error {
247247
if diff.HasChange("private_network_id") {
248-
clusterType := diff.Get("type")
249-
isKapsule := clusterType == "" || strings.HasPrefix(clusterType.(string), "kapsule")
250-
if !isKapsule {
251-
return fmt.Errorf("only Kapsule clusters support private networks")
252-
}
253248
actual, planned := diff.GetChange("private_network_id")
254-
if actual == "" {
255-
// If no private network has been set yet, migrate the cluster in the Update function
256-
return nil
257-
}
258-
if planned != "" {
259-
_, plannedPNID, err := parseLocalizedID(planned.(string))
260-
if err != nil {
261-
return err
249+
clusterType := diff.Get("type").(string)
250+
251+
switch {
252+
// For Kosmos clusters
253+
case strings.HasPrefix(clusterType, "multicloud"):
254+
if planned != "" {
255+
return fmt.Errorf("only Kapsule clusters support private networks")
262256
}
263-
if plannedPNID == actual {
264-
// If the private network ID is the same, do nothing
257+
258+
// For Kapsule clusters
259+
case clusterType == "" || strings.HasPrefix(clusterType, "kapsule"):
260+
if actual == "" {
261+
// If no private network has been set yet, migrate the cluster in the Update function
265262
return nil
266263
}
267-
}
268-
// Any other change will result in ForceNew
269-
err := diff.ForceNew("private_network_id")
270-
if err != nil {
271-
return err
264+
if planned != "" {
265+
_, plannedPNID, err := parseLocalizedID(planned.(string))
266+
if err != nil {
267+
return err
268+
}
269+
if plannedPNID == actual {
270+
// If the private network ID is the same, do nothing
271+
return nil
272+
}
273+
}
274+
// Any other change will result in ForceNew
275+
err := diff.ForceNew("private_network_id")
276+
if err != nil {
277+
return err
278+
}
279+
280+
default:
281+
return fmt.Errorf("unknown cluster type %q", clusterType)
272282
}
273283
}
274284
return nil
@@ -779,7 +789,11 @@ func resourceScalewayK8SClusterUpdate(ctx context.Context, d *schema.ResourceDat
779789
// Private Network changes
780790
////
781791
if d.HasChange("private_network_id") {
782-
actual, _ := d.GetChange("private_network_id")
792+
actual, planned := d.GetChange("private_network_id")
793+
if planned == "" && actual != "" {
794+
// It's not possible to remove the private network anymore
795+
return diag.FromErr(fmt.Errorf("it is only possible to change the private network attached to the cluster, but not to remove it"))
796+
}
783797
if actual == "" {
784798
err = migrateToPrivateNetworkCluster(ctx, d, meta)
785799
if err != nil {

scaleway/resource_k8s_cluster_test.go

Lines changed: 70 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,8 @@ func TestAccScalewayK8SCluster_PrivateNetwork(t *testing.T) {
391391

392392
latestK8SVersion := testAccScalewayK8SClusterGetLatestK8SVersion(tt)
393393

394+
clusterID := ""
395+
394396
resource.ParallelTest(t, resource.TestCase{
395397
PreCheck: func() {
396398
testAccPreCheck(t)
@@ -399,31 +401,24 @@ func TestAccScalewayK8SCluster_PrivateNetwork(t *testing.T) {
399401
CheckDestroy: testAccCheckScalewayK8SClusterDestroy(tt),
400402
Steps: []resource.TestStep{
401403
{
402-
Config: testAccCheckScalewayK8SClusterConfigPrivateNetworkNotLinked(latestK8SVersion),
404+
Config: testAccCheckScalewayK8SClusterConfigPrivateNetworkLinked(latestK8SVersion),
403405
Check: resource.ComposeTestCheckFunc(
404406
testAccCheckScalewayK8SClusterExists(tt, "scaleway_k8s_cluster.private_network"),
405407
testAccCheckScalewayVPCPrivateNetworkExists(tt, "scaleway_vpc_private_network.private_network"),
406-
resource.TestCheckResourceAttr("scaleway_k8s_cluster.private_network", "private_network_id", ""),
408+
testAccCheckScalewayK8sClusterPrivateNetworkID(tt, "scaleway_k8s_cluster.private_network", "scaleway_vpc_private_network.private_network"),
409+
testAccCheckScalewayResourceIDPersisted("scaleway_k8s_cluster.private_network", &clusterID),
407410
),
408411
},
409412
{
410-
Config: testAccCheckScalewayK8SClusterConfigPrivateNetworkLinked(latestK8SVersion),
413+
Config: testAccCheckScalewayK8SClusterConfigPrivateNetworkChange(latestK8SVersion),
411414
Check: resource.ComposeTestCheckFunc(
412415
testAccCheckScalewayK8SClusterExists(tt, "scaleway_k8s_cluster.private_network"),
413416
testAccCheckScalewayVPCPrivateNetworkExists(tt, "scaleway_vpc_private_network.private_network"),
414-
testAccCheckScalewayK8sClusterPrivateNetworkID(tt, "scaleway_k8s_cluster.private_network", "scaleway_vpc_private_network.private_network"),
417+
testAccCheckScalewayVPCPrivateNetworkExists(tt, "scaleway_vpc_private_network.private_network_2"),
418+
testAccCheckScalewayK8sClusterPrivateNetworkID(tt, "scaleway_k8s_cluster.private_network", "scaleway_vpc_private_network.private_network_2"),
419+
testAccCheckScalewayResourceIDChanged("scaleway_k8s_cluster.private_network", &clusterID),
415420
),
416421
},
417-
{
418-
Config: testAccCheckScalewayK8SClusterConfigPrivateNetworkChange(latestK8SVersion),
419-
PlanOnly: true,
420-
ExpectNonEmptyPlan: true,
421-
},
422-
{
423-
Config: testAccCheckScalewayK8SClusterConfigPrivateNetworkNotLinked(latestK8SVersion),
424-
PlanOnly: true,
425-
ExpectNonEmptyPlan: true,
426-
},
427422
},
428423
})
429424
}
@@ -478,7 +473,7 @@ func TestAccScalewayK8SCluster_TypeChange(t *testing.T) {
478473
},
479474
{
480475
// 2 : Upgrade to a dedicated Kapsule --> should migrate
481-
Config: testAccCheckScalewayK8SClusterTypeChange("kapsule-dedicated-4", "cilium", latestK8SVersion), // + testAccCheckScalewayK8SClusterTypeChangeCopy(latestK8SVersion),
476+
Config: testAccCheckScalewayK8SClusterTypeChange("kapsule-dedicated-4", "cilium", latestK8SVersion),
482477
Check: resource.ComposeTestCheckFunc(
483478
testAccCheckScalewayK8SClusterExists(tt, "scaleway_k8s_cluster.type-change"),
484479
resource.TestCheckResourceAttr("scaleway_k8s_cluster.type-change", "type", "kapsule-dedicated-4"),
@@ -487,7 +482,7 @@ func TestAccScalewayK8SCluster_TypeChange(t *testing.T) {
487482
},
488483
{
489484
// 3 : Upgrade to an even bigger dedicated Kapsule --> should migrate
490-
Config: testAccCheckScalewayK8SClusterTypeChange("kapsule-dedicated-16", "cilium", latestK8SVersion), // + testAccCheckScalewayK8SClusterTypeChangeCopy(latestK8SVersion),
485+
Config: testAccCheckScalewayK8SClusterTypeChange("kapsule-dedicated-16", "cilium", latestK8SVersion),
491486
Check: resource.ComposeTestCheckFunc(
492487
testAccCheckScalewayK8SClusterExists(tt, "scaleway_k8s_cluster.type-change"),
493488
resource.TestCheckResourceAttr("scaleway_k8s_cluster.type-change", "type", "kapsule-dedicated-16"),
@@ -496,7 +491,7 @@ func TestAccScalewayK8SCluster_TypeChange(t *testing.T) {
496491
},
497492
{
498493
// 4 : Downgrade to a smaller dedicated Kapsule --> should recreate
499-
Config: testAccCheckScalewayK8SClusterTypeChange("kapsule-dedicated-8", "cilium", latestK8SVersion), // + testAccCheckScalewayK8SClusterTypeChangeCopy(latestK8SVersion),
494+
Config: testAccCheckScalewayK8SClusterTypeChange("kapsule-dedicated-8", "cilium", latestK8SVersion),
500495
Check: resource.ComposeTestCheckFunc(
501496
testAccCheckScalewayK8SClusterExists(tt, "scaleway_k8s_cluster.type-change"),
502497
resource.TestCheckResourceAttr("scaleway_k8s_cluster.type-change", "type", "kapsule-dedicated-8"),
@@ -505,7 +500,7 @@ func TestAccScalewayK8SCluster_TypeChange(t *testing.T) {
505500
},
506501
{
507502
// 5 : Change to a dedicated Kosmos --> should recreate
508-
Config: testAccCheckScalewayK8SClusterTypeChange("multicloud-dedicated-4", "kilo", latestK8SVersion), // + testAccCheckScalewayK8SClusterTypeChangeCopy(latestK8SVersion),
503+
Config: testAccCheckScalewayK8SClusterTypeChange("multicloud-dedicated-4", "kilo", latestK8SVersion),
509504
Check: resource.ComposeTestCheckFunc(
510505
testAccCheckScalewayK8SClusterExists(tt, "scaleway_k8s_cluster.type-change"),
511506
resource.TestCheckResourceAttr("scaleway_k8s_cluster.type-change", "type", "multicloud-dedicated-4"),
@@ -514,7 +509,7 @@ func TestAccScalewayK8SCluster_TypeChange(t *testing.T) {
514509
},
515510
{
516511
// 6 : Upgrade to a bigger dedicated Kosmos --> should migrate
517-
Config: testAccCheckScalewayK8SClusterTypeChange("multicloud-dedicated-8", "kilo", latestK8SVersion), // + testAccCheckScalewayK8SClusterTypeChangeCopy(latestK8SVersion),
512+
Config: testAccCheckScalewayK8SClusterTypeChange("multicloud-dedicated-8", "kilo", latestK8SVersion),
518513
Check: resource.ComposeTestCheckFunc(
519514
testAccCheckScalewayK8SClusterExists(tt, "scaleway_k8s_cluster.type-change"),
520515
resource.TestCheckResourceAttr("scaleway_k8s_cluster.type-change", "type", "multicloud-dedicated-8"),
@@ -523,7 +518,7 @@ func TestAccScalewayK8SCluster_TypeChange(t *testing.T) {
523518
},
524519
{
525520
// 7 : Downgrade to a mutualized Kosmos --> should recreate
526-
Config: testAccCheckScalewayK8SClusterTypeChange("multicloud", "kilo", latestK8SVersion), // + testAccCheckScalewayK8SClusterTypeChangeCopy(latestK8SVersion),
521+
Config: testAccCheckScalewayK8SClusterTypeChange("multicloud", "kilo", latestK8SVersion),
527522
Check: resource.ComposeTestCheckFunc(
528523
testAccCheckScalewayK8SClusterExists(tt, "scaleway_k8s_cluster.type-change"),
529524
resource.TestCheckResourceAttr("scaleway_k8s_cluster.type-change", "type", "multicloud"),
@@ -639,21 +634,29 @@ func testAccCheckScalewayK8sClusterPrivateNetworkID(tt *TestTools, clusterName,
639634

640635
func testAccCheckScalewayK8SClusterConfigMinimal(version string) string {
641636
return fmt.Sprintf(`
637+
resource "scaleway_vpc_private_network" "minimal" {
638+
name = "test-minimal"
639+
}
642640
resource "scaleway_k8s_cluster" "minimal" {
643641
cni = "calico"
644642
version = "%s"
645-
name = "ClusterConfigMinimal"
643+
name = "test-minimal"
646644
tags = [ "terraform-test", "scaleway_k8s_cluster", "minimal" ]
647645
delete_additional_resources = true
646+
private_network_id = scaleway_vpc_private_network.minimal.id
648647
}`, version)
649648
}
650649

651650
func testAccCheckScalewayK8SClusterConfigAutoscaler(version string) string {
652651
return fmt.Sprintf(`
652+
resource "scaleway_vpc_private_network" "autoscaler" {
653+
name = "test-autoscaler"
654+
region = "nl-ams"
655+
}
653656
resource "scaleway_k8s_cluster" "autoscaler" {
654657
cni = "calico"
655658
version = "%s"
656-
name = "autoscaler-01"
659+
name = "test-autoscaler-01"
657660
region = "nl-ams"
658661
autoscaler_config {
659662
disable_scale_down = true
@@ -669,15 +672,20 @@ resource "scaleway_k8s_cluster" "autoscaler" {
669672
}
670673
tags = [ "terraform-test", "scaleway_k8s_cluster", "autoscaler-config" ]
671674
delete_additional_resources = true
675+
private_network_id = scaleway_vpc_private_network.autoscaler.id
672676
}`, version)
673677
}
674678

675679
func testAccCheckScalewayK8SClusterConfigAutoscalerChange(version string) string {
676680
return fmt.Sprintf(`
681+
resource "scaleway_vpc_private_network" "autoscaler" {
682+
name = "test-autoscaler"
683+
region = "nl-ams"
684+
}
677685
resource "scaleway_k8s_cluster" "autoscaler" {
678686
cni = "calico"
679687
version = "%s"
680-
name = "autoscaler-02"
688+
name = "test-autoscaler-02"
681689
region = "nl-ams"
682690
autoscaler_config {
683691
disable_scale_down = false
@@ -691,15 +699,19 @@ resource "scaleway_k8s_cluster" "autoscaler" {
691699
}
692700
tags = [ "terraform-test", "scaleway_k8s_cluster", "autoscaler-config" ]
693701
delete_additional_resources = true
702+
private_network_id = scaleway_vpc_private_network.autoscaler.id
694703
}`, version)
695704
}
696705

697706
func testAccCheckScalewayK8SClusterConfigOIDC(version string) string {
698707
return fmt.Sprintf(`
708+
resource "scaleway_vpc_private_network" "oidc" {
709+
name = "test-oidc"
710+
}
699711
resource "scaleway_k8s_cluster" "oidc" {
700712
cni = "cilium"
701713
version = "%s"
702-
name = "oidc"
714+
name = "test-oidc"
703715
open_id_connect_config {
704716
issuer_url = "https://accounts.google.com"
705717
client_id = "my-super-id"
@@ -709,16 +721,20 @@ resource "scaleway_k8s_cluster" "oidc" {
709721
}
710722
tags = [ "terraform-test", "scaleway_k8s_cluster", "oidc-config" ]
711723
delete_additional_resources = true
724+
private_network_id = scaleway_vpc_private_network.oidc.id
712725
}
713726
`, version)
714727
}
715728

716729
func testAccCheckScalewayK8SClusterConfigOIDCChange(version string) string {
717730
return fmt.Sprintf(`
731+
resource "scaleway_vpc_private_network" "oidc" {
732+
name = "test-oidc"
733+
}
718734
resource "scaleway_k8s_cluster" "oidc" {
719735
cni = "cilium"
720736
version = "%s"
721-
name = "oidc"
737+
name = "test-oidc"
722738
open_id_connect_config {
723739
issuer_url = "https://gitlab.com"
724740
client_id = "my-even-more-awesome-id"
@@ -728,41 +744,31 @@ resource "scaleway_k8s_cluster" "oidc" {
728744
}
729745
tags = [ "terraform-test", "scaleway_k8s_cluster", "oidc-config" ]
730746
delete_additional_resources = true
747+
private_network_id = scaleway_vpc_private_network.oidc.id
731748
}
732749
`, version)
733750
}
734751

735752
func testAccCheckScalewayK8SClusterAutoUpgrade(enable bool, day string, hour uint64, version string) string {
736753
return fmt.Sprintf(`
754+
resource "scaleway_vpc_private_network" "auto_upgrade" {
755+
name = "test-auto-upgrade"
756+
}
737757
resource "scaleway_k8s_cluster" "auto_upgrade" {
738758
cni = "calico"
739759
version = "%s"
740-
name = "default-pool"
760+
name = "test-auto-upgrade"
741761
auto_upgrade {
742762
enable = %t
743763
maintenance_window_start_hour = %d
744764
maintenance_window_day = "%s"
745765
}
746766
tags = [ "terraform-test", "scaleway_k8s_cluster", "auto_upgrade" ]
747767
delete_additional_resources = true
768+
private_network_id = scaleway_vpc_private_network.auto_upgrade.id
748769
}`, version, enable, hour, day)
749770
}
750771

751-
func testAccCheckScalewayK8SClusterConfigPrivateNetworkNotLinked(version string) string {
752-
return fmt.Sprintf(`
753-
resource "scaleway_vpc_private_network" "private_network" {
754-
name = "k8s-private-network"
755-
}
756-
resource "scaleway_k8s_cluster" "private_network" {
757-
cni = "calico"
758-
version = "%s"
759-
name = "k8s-private-network-cluster"
760-
tags = [ "terraform-test", "scaleway_k8s_cluster", "private_network" ]
761-
delete_additional_resources = true
762-
depends_on = [scaleway_vpc_private_network.private_network]
763-
}`, version)
764-
}
765-
766772
func testAccCheckScalewayK8SClusterConfigPrivateNetworkLinked(version string) string {
767773
return fmt.Sprintf(`
768774
resource "scaleway_vpc_private_network" "private_network" {
@@ -772,10 +778,10 @@ resource "scaleway_k8s_cluster" "private_network" {
772778
cni = "calico"
773779
version = "%s"
774780
name = "k8s-private-network-cluster"
775-
private_network_id = scaleway_vpc_private_network.private_network.id
776781
tags = [ "terraform-test", "scaleway_k8s_cluster", "private_network" ]
777-
delete_additional_resources = true
782+
delete_additional_resources = false
778783
depends_on = [scaleway_vpc_private_network.private_network]
784+
private_network_id = scaleway_vpc_private_network.private_network.id
779785
}`, version)
780786
}
781787

@@ -791,10 +797,10 @@ resource "scaleway_k8s_cluster" "private_network" {
791797
cni = "calico"
792798
version = "%s"
793799
name = "k8s-private-network-cluster"
794-
private_network_id = scaleway_vpc_private_network.private_network_2.id
795800
tags = [ "terraform-test", "scaleway_k8s_cluster", "private_network" ]
796-
delete_additional_resources = true
801+
delete_additional_resources = false
797802
depends_on = [scaleway_vpc_private_network.private_network_2]
803+
private_network_id = scaleway_vpc_private_network.private_network_2.id
798804
}`, version)
799805
}
800806

@@ -818,13 +824,29 @@ resource "scaleway_k8s_pool" "multicloud" {
818824
}
819825

820826
func testAccCheckScalewayK8SClusterTypeChange(clusterType, cni, version string) string {
821-
return fmt.Sprintf(`
827+
config := ""
828+
isKapsule := strings.HasPrefix(clusterType, "kapsule")
829+
if isKapsule {
830+
config = `
831+
resource "scaleway_vpc_private_network" "type-change" {
832+
name = "test-type-change"
833+
}`
834+
}
835+
836+
config += fmt.Sprintf(`
822837
resource "scaleway_k8s_cluster" "type-change" {
823838
type = "%s"
824839
cni = "%s"
825840
version = "%s"
826841
name = "test-type-change"
827842
tags = [ "terraform-test", "scaleway_k8s_cluster", "type-change" ]
828-
delete_additional_resources = true
829-
}`, clusterType, cni, version)
843+
delete_additional_resources = false`, clusterType, cni, version)
844+
845+
if isKapsule {
846+
config += "\nprivate_network_id = scaleway_vpc_private_network.type-change.id\n}"
847+
} else {
848+
config += "\n}"
849+
}
850+
851+
return config
830852
}

0 commit comments

Comments
 (0)