Skip to content

Commit 00e0d85

Browse files
committed
feat(k8s): version: add major_minor_only attribute for auto-upgrade
1 parent ff08324 commit 00e0d85

File tree

5 files changed

+968
-40
lines changed

5 files changed

+968
-40
lines changed

internal/services/k8s/cluster_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ func TestAccCluster_AutoUpgrade(t *testing.T) {
341341
),
342342
Steps: []resource.TestStep{
343343
{
344-
Config: testAccCheckK8SClusterAutoUpgrade(false, "any", 0, previousK8SVersion),
344+
Config: testAccCheckK8SClusterAutoUpgrade(false, "any", 0, fmt.Sprintf("%q", previousK8SVersion)),
345345
Check: resource.ComposeTestCheckFunc(
346346
testAccCheckK8SClusterExists(tt, "scaleway_k8s_cluster.auto_upgrade"),
347347
resource.TestCheckResourceAttr("scaleway_k8s_cluster.auto_upgrade", "version", previousK8SVersion),
@@ -351,7 +351,7 @@ func TestAccCluster_AutoUpgrade(t *testing.T) {
351351
),
352352
},
353353
{
354-
Config: testAccCheckK8SClusterAutoUpgrade(true, "any", 0, previousK8SVersionMinor),
354+
Config: testAccCheckK8SClusterAutoUpgrade(true, "any", 0, fmt.Sprintf("%q", previousK8SVersionMinor)),
355355
Check: resource.ComposeTestCheckFunc(
356356
testAccCheckK8SClusterExists(tt, "scaleway_k8s_cluster.auto_upgrade"),
357357
resource.TestCheckResourceAttr("scaleway_k8s_cluster.auto_upgrade", "version", previousK8SVersionMinor),
@@ -361,7 +361,7 @@ func TestAccCluster_AutoUpgrade(t *testing.T) {
361361
),
362362
},
363363
{
364-
Config: testAccCheckK8SClusterAutoUpgrade(true, "any", 0, latestK8SVersionMinor),
364+
Config: testAccCheckK8SClusterAutoUpgrade(true, "any", 0, fmt.Sprintf("%q", latestK8SVersionMinor)),
365365
Check: resource.ComposeTestCheckFunc(
366366
testAccCheckK8SClusterExists(tt, "scaleway_k8s_cluster.auto_upgrade"),
367367
resource.TestCheckResourceAttr("scaleway_k8s_cluster.auto_upgrade", "version", latestK8SVersionMinor),
@@ -371,7 +371,7 @@ func TestAccCluster_AutoUpgrade(t *testing.T) {
371371
),
372372
},
373373
{
374-
Config: testAccCheckK8SClusterAutoUpgrade(false, "any", 0, latestK8SVersion),
374+
Config: testAccCheckK8SClusterAutoUpgrade(false, "any", 0, fmt.Sprintf("%q", latestK8SVersion)),
375375
Check: resource.ComposeTestCheckFunc(
376376
testAccCheckK8SClusterExists(tt, "scaleway_k8s_cluster.auto_upgrade"),
377377
resource.TestCheckResourceAttr("scaleway_k8s_cluster.auto_upgrade", "version", latestK8SVersion),
@@ -381,7 +381,7 @@ func TestAccCluster_AutoUpgrade(t *testing.T) {
381381
),
382382
},
383383
{
384-
Config: testAccCheckK8SClusterAutoUpgrade(true, "tuesday", 3, latestK8SVersionMinor),
384+
Config: testAccCheckK8SClusterAutoUpgrade(true, "tuesday", 3, fmt.Sprintf("%q", latestK8SVersionMinor)),
385385
Check: resource.ComposeTestCheckFunc(
386386
testAccCheckK8SClusterExists(tt, "scaleway_k8s_cluster.auto_upgrade"),
387387
resource.TestCheckResourceAttr("scaleway_k8s_cluster.auto_upgrade", "version", latestK8SVersionMinor),
@@ -391,7 +391,7 @@ func TestAccCluster_AutoUpgrade(t *testing.T) {
391391
),
392392
},
393393
{
394-
Config: testAccCheckK8SClusterAutoUpgrade(true, "any", 0, latestK8SVersionMinor),
394+
Config: testAccCheckK8SClusterAutoUpgrade(true, "any", 0, fmt.Sprintf("%q", latestK8SVersionMinor)),
395395
Check: resource.ComposeTestCheckFunc(
396396
testAccCheckK8SClusterExists(tt, "scaleway_k8s_cluster.auto_upgrade"),
397397
resource.TestCheckResourceAttr("scaleway_k8s_cluster.auto_upgrade", "version", latestK8SVersionMinor),
@@ -789,7 +789,7 @@ resource "scaleway_vpc_private_network" "auto_upgrade" {
789789
790790
resource "scaleway_k8s_cluster" "auto_upgrade" {
791791
cni = "calico"
792-
version = "%s"
792+
version = %s
793793
name = "test-auto-upgrade"
794794
auto_upgrade {
795795
enable = %t

internal/services/k8s/k8s_version_data_source.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"errors"
66
"fmt"
7+
"strings"
78

89
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
910
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -19,7 +20,12 @@ func DataSourceVersion() *schema.Resource {
1920
"name": {
2021
Type: schema.TypeString,
2122
Required: true,
22-
Description: "Name of the Kubernetes version",
23+
Description: "Name of the Kubernetes version in the form x.y.z",
24+
},
25+
"major_minor_only": {
26+
Type: schema.TypeString,
27+
Computed: true,
28+
Description: "The name of the version in the form x.y (ignoring patch version)",
2329
},
2430
"available_cnis": {
2531
Type: schema.TypeList,
@@ -88,8 +94,11 @@ func DataSourceK8SVersionRead(ctx context.Context, d *schema.ResourceData, m any
8894
version = res
8995
}
9096

97+
withoutPatch := strings.Join(strings.Split(version.Name, ".")[:2], ".")
98+
9199
d.SetId(fmt.Sprintf("%s/%s", region, version.Name))
92100
_ = d.Set("name", version.Name)
101+
_ = d.Set("major_minor_only", withoutPatch)
93102
_ = d.Set("available_cnis", version.AvailableCnis)
94103
_ = d.Set("available_container_runtimes", version.AvailableContainerRuntimes)
95104
_ = d.Set("available_feature_gates", version.AvailableFeatureGates)

internal/services/k8s/k8s_version_data_source_test.go

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package k8s_test
22

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

78
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
@@ -15,19 +16,23 @@ func TestAccDataSourceVersion_Basic(t *testing.T) {
1516
tt := acctest.NewTestTools(t)
1617
defer tt.Cleanup()
1718

19+
version := "1.32.2"
20+
versionWithoutPatch := "1.32"
21+
1822
resource.ParallelTest(t, resource.TestCase{
1923
ProtoV6ProviderFactories: tt.ProviderFactories,
2024
CheckDestroy: testAccCheckK8SClusterDestroy(tt),
2125
Steps: []resource.TestStep{
2226
{
23-
Config: `
27+
Config: fmt.Sprintf(`
2428
data "scaleway_k8s_version" "by_name" {
25-
name = "1.32.2"
29+
name = %q
2630
}
27-
`,
31+
`, version),
2832
Check: resource.ComposeTestCheckFunc(
2933
testAccCheckK8SVersionExists(tt, "data.scaleway_k8s_version.by_name"),
30-
resource.TestCheckResourceAttrSet("data.scaleway_k8s_version.by_name", "name"),
34+
resource.TestCheckResourceAttr("data.scaleway_k8s_version.by_name", "name", version),
35+
resource.TestCheckResourceAttr("data.scaleway_k8s_version.by_name", "major_minor_only", versionWithoutPatch),
3136
resource.TestCheckResourceAttr("data.scaleway_k8s_version.by_name", "available_cnis.#", "4"),
3237
resource.TestCheckResourceAttr("data.scaleway_k8s_version.by_name", "available_cnis.0", "cilium"),
3338
resource.TestCheckResourceAttr("data.scaleway_k8s_version.by_name", "available_cnis.1", "calico"),
@@ -75,6 +80,38 @@ func TestAccDataSourceVersion_Latest(t *testing.T) {
7580
})
7681
}
7782

83+
func TestAccDataSourceVersion_WithAutoUpgrade(t *testing.T) {
84+
tt := acctest.NewTestTools(t)
85+
defer tt.Cleanup()
86+
87+
latestK8SVersion := testAccK8SClusterGetLatestK8SVersion(tt)
88+
latestK8SVersionWithoutPatch := strings.Join(strings.Split(latestK8SVersion, ".")[:2], ".")
89+
90+
resource.ParallelTest(t, resource.TestCase{
91+
ProtoV6ProviderFactories: tt.ProviderFactories,
92+
CheckDestroy: testAccCheckK8SClusterDestroy(tt),
93+
Steps: []resource.TestStep{
94+
{
95+
Config: `
96+
data "scaleway_k8s_version" "latest" {
97+
name = "latest"
98+
}
99+
` + testAccCheckK8SClusterAutoUpgrade(true, "any", 0, "data.scaleway_k8s_version.latest.major_minor_only"),
100+
Check: resource.ComposeTestCheckFunc(
101+
testAccCheckK8SVersionExists(tt, "data.scaleway_k8s_version.latest"),
102+
testAccCheckK8SClusterExists(tt, "scaleway_k8s_cluster.auto_upgrade"),
103+
resource.TestCheckResourceAttr("data.scaleway_k8s_version.latest", "name", latestK8SVersion),
104+
resource.TestCheckResourceAttr("data.scaleway_k8s_version.latest", "major_minor_only", latestK8SVersionWithoutPatch),
105+
resource.TestCheckResourceAttr("scaleway_k8s_cluster.auto_upgrade", "version", latestK8SVersionWithoutPatch),
106+
resource.TestCheckResourceAttr("scaleway_k8s_cluster.auto_upgrade", "auto_upgrade.0.enable", "true"),
107+
resource.TestCheckResourceAttr("scaleway_k8s_cluster.auto_upgrade", "auto_upgrade.0.maintenance_window_day", "any"),
108+
resource.TestCheckResourceAttr("scaleway_k8s_cluster.auto_upgrade", "auto_upgrade.0.maintenance_window_start_hour", "0"),
109+
),
110+
},
111+
},
112+
})
113+
}
114+
78115
func testAccCheckK8SVersionExists(tt *acctest.TestTools, n string) resource.TestCheckFunc {
79116
return func(s *terraform.State) error {
80117
rs, ok := s.RootModule().Resources[n]

0 commit comments

Comments
 (0)