Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions internal/services/k8s/cluster_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@ func TestAccCluster_AutoUpgrade(t *testing.T) {
),
Steps: []resource.TestStep{
{
Config: testAccCheckK8SClusterAutoUpgrade(false, "any", 0, previousK8SVersion),
Config: testAccCheckK8SClusterAutoUpgrade(false, "any", 0, fmt.Sprintf("%q", previousK8SVersion)),
Check: resource.ComposeTestCheckFunc(
testAccCheckK8SClusterExists(tt, "scaleway_k8s_cluster.auto_upgrade"),
resource.TestCheckResourceAttr("scaleway_k8s_cluster.auto_upgrade", "version", previousK8SVersion),
Expand All @@ -351,7 +351,7 @@ func TestAccCluster_AutoUpgrade(t *testing.T) {
),
},
{
Config: testAccCheckK8SClusterAutoUpgrade(true, "any", 0, previousK8SVersionMinor),
Config: testAccCheckK8SClusterAutoUpgrade(true, "any", 0, fmt.Sprintf("%q", previousK8SVersionMinor)),
Check: resource.ComposeTestCheckFunc(
testAccCheckK8SClusterExists(tt, "scaleway_k8s_cluster.auto_upgrade"),
resource.TestCheckResourceAttr("scaleway_k8s_cluster.auto_upgrade", "version", previousK8SVersionMinor),
Expand All @@ -361,7 +361,7 @@ func TestAccCluster_AutoUpgrade(t *testing.T) {
),
},
{
Config: testAccCheckK8SClusterAutoUpgrade(true, "any", 0, latestK8SVersionMinor),
Config: testAccCheckK8SClusterAutoUpgrade(true, "any", 0, fmt.Sprintf("%q", latestK8SVersionMinor)),
Check: resource.ComposeTestCheckFunc(
testAccCheckK8SClusterExists(tt, "scaleway_k8s_cluster.auto_upgrade"),
resource.TestCheckResourceAttr("scaleway_k8s_cluster.auto_upgrade", "version", latestK8SVersionMinor),
Expand All @@ -371,7 +371,7 @@ func TestAccCluster_AutoUpgrade(t *testing.T) {
),
},
{
Config: testAccCheckK8SClusterAutoUpgrade(false, "any", 0, latestK8SVersion),
Config: testAccCheckK8SClusterAutoUpgrade(false, "any", 0, fmt.Sprintf("%q", latestK8SVersion)),
Check: resource.ComposeTestCheckFunc(
testAccCheckK8SClusterExists(tt, "scaleway_k8s_cluster.auto_upgrade"),
resource.TestCheckResourceAttr("scaleway_k8s_cluster.auto_upgrade", "version", latestK8SVersion),
Expand All @@ -381,7 +381,7 @@ func TestAccCluster_AutoUpgrade(t *testing.T) {
),
},
{
Config: testAccCheckK8SClusterAutoUpgrade(true, "tuesday", 3, latestK8SVersionMinor),
Config: testAccCheckK8SClusterAutoUpgrade(true, "tuesday", 3, fmt.Sprintf("%q", latestK8SVersionMinor)),
Check: resource.ComposeTestCheckFunc(
testAccCheckK8SClusterExists(tt, "scaleway_k8s_cluster.auto_upgrade"),
resource.TestCheckResourceAttr("scaleway_k8s_cluster.auto_upgrade", "version", latestK8SVersionMinor),
Expand All @@ -391,7 +391,7 @@ func TestAccCluster_AutoUpgrade(t *testing.T) {
),
},
{
Config: testAccCheckK8SClusterAutoUpgrade(true, "any", 0, latestK8SVersionMinor),
Config: testAccCheckK8SClusterAutoUpgrade(true, "any", 0, fmt.Sprintf("%q", latestK8SVersionMinor)),
Check: resource.ComposeTestCheckFunc(
testAccCheckK8SClusterExists(tt, "scaleway_k8s_cluster.auto_upgrade"),
resource.TestCheckResourceAttr("scaleway_k8s_cluster.auto_upgrade", "version", latestK8SVersionMinor),
Expand Down Expand Up @@ -789,7 +789,7 @@ resource "scaleway_vpc_private_network" "auto_upgrade" {

resource "scaleway_k8s_cluster" "auto_upgrade" {
cni = "calico"
version = "%s"
version = %s
name = "test-auto-upgrade"
auto_upgrade {
enable = %t
Expand Down
23 changes: 22 additions & 1 deletion internal/services/k8s/k8s_version_data_source.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"errors"
"fmt"
"strings"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
Expand All @@ -19,7 +20,12 @@ func DataSourceVersion() *schema.Resource {
"name": {
Type: schema.TypeString,
Required: true,
Description: "Name of the Kubernetes version",
Description: "Name of the Kubernetes version in the form x.y.z",
},
"major_minor_only": {
Type: schema.TypeString,
Computed: true,
Description: "The name of the version in the form x.y (ignoring patch version)",
},
"available_cnis": {
Type: schema.TypeList,
Expand Down Expand Up @@ -88,12 +94,27 @@ func DataSourceK8SVersionRead(ctx context.Context, d *schema.ResourceData, m any
version = res
}

majorMinor, err := VersionNameWithoutPatch(version.Name)
if err != nil {
return diag.FromErr(err)
}

d.SetId(fmt.Sprintf("%s/%s", region, version.Name))
_ = d.Set("name", version.Name)
_ = d.Set("major_minor_only", majorMinor)
_ = d.Set("available_cnis", version.AvailableCnis)
_ = d.Set("available_container_runtimes", version.AvailableContainerRuntimes)
_ = d.Set("available_feature_gates", version.AvailableFeatureGates)
_ = d.Set("region", region)

return nil
}

func VersionNameWithoutPatch(version string) (string, error) {
versionSplit := strings.Split(version, ".")
if len(versionSplit) != 3 {
return "", fmt.Errorf("version name must contain 3 parts, got %q", version)
}

return strings.Join(versionSplit[:2], "."), nil
}
89 changes: 82 additions & 7 deletions internal/services/k8s/k8s_version_data_source_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,28 +6,35 @@ import (

"github.com/hashicorp/terraform-plugin-testing/helper/resource"
"github.com/hashicorp/terraform-plugin-testing/terraform"
"github.com/scaleway/scaleway-sdk-go/api/k8s/v1"
k8sSDK "github.com/scaleway/scaleway-sdk-go/api/k8s/v1"
"github.com/scaleway/terraform-provider-scaleway/v2/internal/acctest"
"github.com/scaleway/terraform-provider-scaleway/v2/internal/locality/regional"
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/k8s"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func TestAccDataSourceVersion_Basic(t *testing.T) {
tt := acctest.NewTestTools(t)
defer tt.Cleanup()

version := "1.32.2"
versionWithoutPatch := "1.32"

resource.ParallelTest(t, resource.TestCase{
ProtoV6ProviderFactories: tt.ProviderFactories,
CheckDestroy: testAccCheckK8SClusterDestroy(tt),
Steps: []resource.TestStep{
{
Config: `
Config: fmt.Sprintf(`
data "scaleway_k8s_version" "by_name" {
name = "1.32.2"
name = %q
}
`,
`, version),
Check: resource.ComposeTestCheckFunc(
testAccCheckK8SVersionExists(tt, "data.scaleway_k8s_version.by_name"),
resource.TestCheckResourceAttrSet("data.scaleway_k8s_version.by_name", "name"),
resource.TestCheckResourceAttr("data.scaleway_k8s_version.by_name", "name", version),
resource.TestCheckResourceAttr("data.scaleway_k8s_version.by_name", "major_minor_only", versionWithoutPatch),
resource.TestCheckResourceAttr("data.scaleway_k8s_version.by_name", "available_cnis.#", "4"),
resource.TestCheckResourceAttr("data.scaleway_k8s_version.by_name", "available_cnis.0", "cilium"),
resource.TestCheckResourceAttr("data.scaleway_k8s_version.by_name", "available_cnis.1", "calico"),
Expand Down Expand Up @@ -75,6 +82,42 @@ func TestAccDataSourceVersion_Latest(t *testing.T) {
})
}

func TestAccDataSourceVersion_WithAutoUpgrade(t *testing.T) {
tt := acctest.NewTestTools(t)
defer tt.Cleanup()

latestK8SVersion := testAccK8SClusterGetLatestK8SVersion(tt)

latestK8SVersionWithoutPatch, err := k8s.VersionNameWithoutPatch(latestK8SVersion)
if err != nil {
t.Fatal(err)
}

resource.ParallelTest(t, resource.TestCase{
ProtoV6ProviderFactories: tt.ProviderFactories,
CheckDestroy: testAccCheckK8SClusterDestroy(tt),
Steps: []resource.TestStep{
{
Config: `
data "scaleway_k8s_version" "latest" {
name = "latest"
}
` + testAccCheckK8SClusterAutoUpgrade(true, "any", 0, "data.scaleway_k8s_version.latest.major_minor_only"),
Check: resource.ComposeTestCheckFunc(
testAccCheckK8SVersionExists(tt, "data.scaleway_k8s_version.latest"),
testAccCheckK8SClusterExists(tt, "scaleway_k8s_cluster.auto_upgrade"),
resource.TestCheckResourceAttr("data.scaleway_k8s_version.latest", "name", latestK8SVersion),
resource.TestCheckResourceAttr("data.scaleway_k8s_version.latest", "major_minor_only", latestK8SVersionWithoutPatch),
resource.TestCheckResourceAttr("scaleway_k8s_cluster.auto_upgrade", "version", latestK8SVersionWithoutPatch),
resource.TestCheckResourceAttr("scaleway_k8s_cluster.auto_upgrade", "auto_upgrade.0.enable", "true"),
resource.TestCheckResourceAttr("scaleway_k8s_cluster.auto_upgrade", "auto_upgrade.0.maintenance_window_day", "any"),
resource.TestCheckResourceAttr("scaleway_k8s_cluster.auto_upgrade", "auto_upgrade.0.maintenance_window_start_hour", "0"),
),
},
},
})
}

func testAccCheckK8SVersionExists(tt *acctest.TestTools, n string) resource.TestCheckFunc {
return func(s *terraform.State) error {
rs, ok := s.RootModule().Resources[n]
Expand All @@ -88,9 +131,9 @@ func testAccCheckK8SVersionExists(tt *acctest.TestTools, n string) resource.Test
return err
}

k8sAPI := k8s.NewAPI(tt.Meta.ScwClient())
k8sAPI := k8sSDK.NewAPI(tt.Meta.ScwClient())

_, err = k8sAPI.GetVersion(&k8s.GetVersionRequest{
_, err = k8sAPI.GetVersion(&k8sSDK.GetVersionRequest{
Region: region,
VersionName: name,
})
Expand All @@ -101,3 +144,35 @@ func testAccCheckK8SVersionExists(tt *acctest.TestTools, n string) resource.Test
return nil
}
}

func TestVersionNameWithoutPatch(t *testing.T) {
tt := acctest.NewTestTools(t)
defer tt.Cleanup()

t.Run("ok-without-prefix", func(t *testing.T) {
version := "1.32.3"
expected := "1.32"
actual, err := k8s.VersionNameWithoutPatch(version)
require.NoError(t, err)
assert.Equal(t, expected, actual)
})
t.Run("ok-with-prefix", func(t *testing.T) {
version := "v2.57.9"
expected := "v2.57"
actual, err := k8s.VersionNameWithoutPatch(version)
require.NoError(t, err)
assert.Equal(t, expected, actual)
})
t.Run("errors", func(t *testing.T) {
versionsToTest := []string{
"1.32.3.4",
"1.32",
"",
}
for _, version := range versionsToTest {
expectedError := "version name must contain 3 parts"
_, err := k8s.VersionNameWithoutPatch(version)
assert.ErrorContains(t, err, expectedError)
}
})
}
Loading
Loading