@@ -452,6 +452,88 @@ func TestAccScalewayK8SCluster_Multicloud(t *testing.T) {
452452 })
453453}
454454
455+ func TestAccScalewayK8SCluster_TypeChange (t * testing.T ) {
456+ tt := NewTestTools (t )
457+ defer tt .Cleanup ()
458+
459+ latestK8SVersion := testAccScalewayK8SClusterGetLatestK8SVersion (tt )
460+
461+ clusterID := ""
462+
463+ resource .ParallelTest (t , resource.TestCase {
464+ PreCheck : func () {
465+ testAccPreCheck (t )
466+ },
467+ ProviderFactories : tt .ProviderFactories ,
468+ CheckDestroy : testAccCheckScalewayK8SClusterDestroy (tt ),
469+ Steps : []resource.TestStep {
470+ {
471+ // 1 : Start with a mutualized Kapsule cluster
472+ Config : testAccCheckScalewayK8SClusterTypeChange ("kapsule" , "cilium" , latestK8SVersion ),
473+ Check : resource .ComposeTestCheckFunc (
474+ testAccCheckScalewayK8SClusterExists (tt , "scaleway_k8s_cluster.type-change" ),
475+ resource .TestCheckResourceAttr ("scaleway_k8s_cluster.type-change" , "type" , "kapsule" ),
476+ testAccCheckScalewayResourceIDPersisted ("scaleway_k8s_cluster.type-change" , & clusterID ),
477+ ),
478+ },
479+ {
480+ // 2 : Upgrade to a dedicated Kapsule --> should migrate
481+ Config : testAccCheckScalewayK8SClusterTypeChange ("kapsule-dedicated-4" , "cilium" , latestK8SVersion ), // + testAccCheckScalewayK8SClusterTypeChangeCopy(latestK8SVersion),
482+ Check : resource .ComposeTestCheckFunc (
483+ testAccCheckScalewayK8SClusterExists (tt , "scaleway_k8s_cluster.type-change" ),
484+ resource .TestCheckResourceAttr ("scaleway_k8s_cluster.type-change" , "type" , "kapsule-dedicated-4" ),
485+ testAccCheckScalewayResourceIDPersisted ("scaleway_k8s_cluster.type-change" , & clusterID ),
486+ ),
487+ },
488+ {
489+ // 3 : Upgrade to an even bigger dedicated Kapsule --> should migrate
490+ Config : testAccCheckScalewayK8SClusterTypeChange ("kapsule-dedicated-16" , "cilium" , latestK8SVersion ), // + testAccCheckScalewayK8SClusterTypeChangeCopy(latestK8SVersion),
491+ Check : resource .ComposeTestCheckFunc (
492+ testAccCheckScalewayK8SClusterExists (tt , "scaleway_k8s_cluster.type-change" ),
493+ resource .TestCheckResourceAttr ("scaleway_k8s_cluster.type-change" , "type" , "kapsule-dedicated-16" ),
494+ testAccCheckScalewayResourceIDPersisted ("scaleway_k8s_cluster.type-change" , & clusterID ),
495+ ),
496+ },
497+ {
498+ // 4 : Downgrade to a smaller dedicated Kapsule --> should recreate
499+ Config : testAccCheckScalewayK8SClusterTypeChange ("kapsule-dedicated-8" , "cilium" , latestK8SVersion ), // + testAccCheckScalewayK8SClusterTypeChangeCopy(latestK8SVersion),
500+ Check : resource .ComposeTestCheckFunc (
501+ testAccCheckScalewayK8SClusterExists (tt , "scaleway_k8s_cluster.type-change" ),
502+ resource .TestCheckResourceAttr ("scaleway_k8s_cluster.type-change" , "type" , "kapsule-dedicated-8" ),
503+ testAccCheckScalewayResourceIDChanged ("scaleway_k8s_cluster.type-change" , & clusterID ),
504+ ),
505+ },
506+ {
507+ // 5 : Change to a dedicated Kosmos --> should recreate
508+ Config : testAccCheckScalewayK8SClusterTypeChange ("multicloud-dedicated-4" , "kilo" , latestK8SVersion ), // + testAccCheckScalewayK8SClusterTypeChangeCopy(latestK8SVersion),
509+ Check : resource .ComposeTestCheckFunc (
510+ testAccCheckScalewayK8SClusterExists (tt , "scaleway_k8s_cluster.type-change" ),
511+ resource .TestCheckResourceAttr ("scaleway_k8s_cluster.type-change" , "type" , "multicloud-dedicated-4" ),
512+ testAccCheckScalewayResourceIDChanged ("scaleway_k8s_cluster.type-change" , & clusterID ),
513+ ),
514+ },
515+ {
516+ // 6 : Upgrade to a bigger dedicated Kosmos --> should migrate
517+ Config : testAccCheckScalewayK8SClusterTypeChange ("multicloud-dedicated-8" , "kilo" , latestK8SVersion ), // + testAccCheckScalewayK8SClusterTypeChangeCopy(latestK8SVersion),
518+ Check : resource .ComposeTestCheckFunc (
519+ testAccCheckScalewayK8SClusterExists (tt , "scaleway_k8s_cluster.type-change" ),
520+ resource .TestCheckResourceAttr ("scaleway_k8s_cluster.type-change" , "type" , "multicloud-dedicated-8" ),
521+ testAccCheckScalewayResourceIDPersisted ("scaleway_k8s_cluster.type-change" , & clusterID ),
522+ ),
523+ },
524+ {
525+ // 7 : Downgrade to a mutualized Kosmos --> should recreate
526+ Config : testAccCheckScalewayK8SClusterTypeChange ("multicloud" , "kilo" , latestK8SVersion ), // + testAccCheckScalewayK8SClusterTypeChangeCopy(latestK8SVersion),
527+ Check : resource .ComposeTestCheckFunc (
528+ testAccCheckScalewayK8SClusterExists (tt , "scaleway_k8s_cluster.type-change" ),
529+ resource .TestCheckResourceAttr ("scaleway_k8s_cluster.type-change" , "type" , "multicloud" ),
530+ testAccCheckScalewayResourceIDChanged ("scaleway_k8s_cluster.type-change" , & clusterID ),
531+ ),
532+ },
533+ },
534+ })
535+ }
536+
455537func testAccCheckScalewayK8SClusterDestroy (tt * TestTools ) resource.TestCheckFunc {
456538 return func (state * terraform.State ) error {
457539 for _ , rs := range state .RootModule ().Resources {
@@ -734,3 +816,15 @@ resource "scaleway_k8s_pool" "multicloud" {
734816}
735817` , version )
736818}
819+
820+ func testAccCheckScalewayK8SClusterTypeChange (clusterType , cni , version string ) string {
821+ return fmt .Sprintf (`
822+ resource "scaleway_k8s_cluster" "type-change" {
823+ type = "%s"
824+ cni = "%s"
825+ version = "%s"
826+ name = "test-type-change"
827+ tags = [ "terraform-test", "scaleway_k8s_cluster", "type-change" ]
828+ delete_additional_resources = true
829+ }` , clusterType , cni , version )
830+ }
0 commit comments