Skip to content

Commit c67642e

Browse files
Mia-Crossremyleonequantumsheep
authored
feat(k8s): k8s version datasource supports "latest" as a value (#1809)
* feat(k8s): k8s version datasource supports "latest" as a value * Update scaleway/data_source_k8s_version.go Co-authored-by: Nathanael Demacon <[email protected]> --------- Co-authored-by: Rémy Léone <[email protected]> Co-authored-by: Nathanael Demacon <[email protected]>
1 parent 6bf166a commit c67642e

File tree

4 files changed

+333
-12
lines changed

4 files changed

+333
-12
lines changed

docs/data-sources/k8s_version.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,17 @@ You can also use the [scaleway-cli](https://github.com/scaleway/scaleway-cli) wi
1313

1414
## Example Usage
1515

16+
### Use the latest version
17+
18+
```hcl
19+
data "scaleway_k8s_version" "latest" {
20+
name = "latest"
21+
}
22+
```
23+
24+
### Use a specific version
25+
1626
```hcl
17-
# Get info by os name
1827
data "scaleway_k8s_version" "by_name" {
1928
name = "1.26.0"
2029
}
@@ -29,6 +38,10 @@ data "scaleway_k8s_version" "by_name" {
2938

3039
In addition to all above arguments, the following attributes are exported:
3140

41+
- `id` - The ID of the version.
42+
43+
~> **Important:** Kubernetes versions' IDs are [regional](../guides/regions_and_zones.md#resource-ids), which means they are of the form `{region}/{name}`, e.g. `fr-par/1.1.1`
44+
3245
- `available_cnis` - The list of supported Container Network Interface (CNI) plugins for this version.
3346
- `available_container_runtimes` - The list of supported container runtimes for this version.
3447
- `available_feature_gates` - The list of supported feature gates for this version.

scaleway/data_source_k8s_version.go

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -58,19 +58,37 @@ func dataSourceScalewayK8SVersionRead(ctx context.Context, d *schema.ResourceDat
5858
if !ok {
5959
return diag.FromErr(fmt.Errorf("could not find version %q", name))
6060
}
61-
res, err := k8sAPI.GetVersion(&k8s.GetVersionRequest{
62-
Region: region,
63-
VersionName: name.(string),
64-
}, scw.WithContext(ctx))
65-
if err != nil {
66-
return diag.FromErr(err)
61+
62+
var version *k8s.Version
63+
64+
if name == "latest" {
65+
res, err := k8sAPI.ListVersions(&k8s.ListVersionsRequest{
66+
Region: region,
67+
}, scw.WithContext(ctx))
68+
if err != nil {
69+
return diag.FromErr(err)
70+
}
71+
if len(res.Versions) == 0 {
72+
return diag.FromErr(fmt.Errorf("could not find the latest version"))
73+
}
74+
75+
version = res.Versions[0]
76+
} else {
77+
res, err := k8sAPI.GetVersion(&k8s.GetVersionRequest{
78+
Region: region,
79+
VersionName: name.(string),
80+
}, scw.WithContext(ctx))
81+
if err != nil {
82+
return diag.FromErr(err)
83+
}
84+
version = res
6785
}
6886

69-
d.SetId(fmt.Sprintf("%s/%s", region, res.Name))
70-
_ = d.Set("name", res.Name)
71-
_ = d.Set("available_cnis", res.AvailableCnis)
72-
_ = d.Set("available_container_runtimes", res.AvailableContainerRuntimes)
73-
_ = d.Set("available_feature_gates", res.AvailableFeatureGates)
87+
d.SetId(fmt.Sprintf("%s/%s", region, version.Name))
88+
_ = d.Set("name", version.Name)
89+
_ = d.Set("available_cnis", version.AvailableCnis)
90+
_ = d.Set("available_container_runtimes", version.AvailableContainerRuntimes)
91+
_ = d.Set("available_feature_gates", version.AvailableFeatureGates)
7492
_ = d.Set("region", region)
7593

7694
return nil

scaleway/data_source_k8s_version_test.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,31 @@ func TestAccScalewayDataSourceK8SVersion_Basic(t *testing.T) {
4242
})
4343
}
4444

45+
func TestAccScalewayDataSourceK8SVersion_Latest(t *testing.T) {
46+
tt := NewTestTools(t)
47+
defer tt.Cleanup()
48+
49+
resource.ParallelTest(t, resource.TestCase{
50+
PreCheck: func() { testAccPreCheck(t) },
51+
ProviderFactories: tt.ProviderFactories,
52+
CheckDestroy: testAccCheckScalewayK8SClusterDestroy(tt),
53+
Steps: []resource.TestStep{
54+
{
55+
Config: `
56+
data "scaleway_k8s_version" "latest" {
57+
name = "latest"
58+
}
59+
`,
60+
Check: resource.ComposeTestCheckFunc(
61+
testAccCheckScalewayK8SVersionExists(tt, "data.scaleway_k8s_version.latest"),
62+
resource.TestCheckResourceAttrSet("data.scaleway_k8s_version.latest", "name"),
63+
resource.TestCheckResourceAttr("data.scaleway_k8s_version.latest", "name", testAccScalewayK8SClusterGetLatestK8SVersion(tt)),
64+
),
65+
},
66+
},
67+
})
68+
}
69+
4570
func testAccCheckScalewayK8SVersionExists(tt *TestTools, n string) resource.TestCheckFunc {
4671
return func(s *terraform.State) error {
4772
rs, ok := s.RootModule().Resources[n]

0 commit comments

Comments
 (0)