Skip to content

Commit e486966

Browse files
daemon4d-usBBBmau
andauthored
kubernetes_server_version data source (#2306)
* kubernetes_server_version data source * Review comments fix * Changelog and copyright headers * add docs using tfplugindocs --------- Co-authored-by: Mauricio Alvarez Leon <[email protected]> Co-authored-by: BBBmau <[email protected]>
1 parent 6e046d4 commit e486966

File tree

6 files changed

+205
-0
lines changed

6 files changed

+205
-0
lines changed

.changelog/2306.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:feature
2+
New data source: `kubernetes_server_version`
3+
```
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
---
2+
subcategory: "core/v1"
3+
page_title: "Kubernetes: kubernetes_server_version"
4+
description: |-
5+
Retrieves and parses the server's version (git version).
6+
---
7+
8+
# kubernetes_server_version
9+
10+
This data source reads the versioning information of the server and makes specific attributes available to Terraform. Read more at [version info reference](https://pkg.go.dev/k8s.io/apimachinery/pkg/version#Info)
11+
12+
<!-- schema generated by tfplugindocs -->
13+
## Schema
14+
15+
### Read-Only
16+
17+
- `build_date` (String) Kubernetes server build date
18+
- `compiler` (String) Compiler used to build Kubernetes
19+
- `git_commit` (String) Git commit SHA
20+
- `git_tree_state` (String) Git commit tree state
21+
- `git_version` (String) Composite version and git commit sha
22+
- `go_version` (String) Go compiler version
23+
- `id` (String) The ID of this resource.
24+
- `major` (String) Major Kubernetes version
25+
- `minor` (String) Minor Kubernetes version
26+
- `platform` (String) Platform
27+
- `version` (String) Composite Kubernetes server version
28+
29+
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
4+
package kubernetes
5+
6+
import (
7+
"context"
8+
9+
gversion "github.com/hashicorp/go-version"
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
11+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
12+
)
13+
14+
func dataSourceKubernetesServerVersion() *schema.Resource {
15+
return &schema.Resource{
16+
ReadContext: dataSourceKubernetesServerVersionRead,
17+
Description: "This data source reads the versioning information of the server and makes specific attributes available to Terraform. Read more at [version info reference](https://pkg.go.dev/k8s.io/apimachinery/pkg/version#Info)",
18+
Schema: map[string]*schema.Schema{
19+
"version": {
20+
Type: schema.TypeString,
21+
Description: "Composite Kubernetes server version",
22+
Computed: true,
23+
},
24+
"build_date": {
25+
Type: schema.TypeString,
26+
Description: "Kubernetes server build date",
27+
Computed: true,
28+
},
29+
"compiler": {
30+
Type: schema.TypeString,
31+
Description: "Compiler used to build Kubernetes",
32+
Computed: true,
33+
},
34+
"git_commit": {
35+
Type: schema.TypeString,
36+
Description: "Git commit SHA",
37+
Computed: true,
38+
},
39+
"git_tree_state": {
40+
Type: schema.TypeString,
41+
Description: "Git commit tree state",
42+
Computed: true,
43+
},
44+
"git_version": {
45+
Type: schema.TypeString,
46+
Description: "Composite version and git commit sha",
47+
Computed: true,
48+
},
49+
"major": {
50+
Type: schema.TypeString,
51+
Description: "Major Kubernetes version",
52+
Computed: true,
53+
},
54+
"minor": {
55+
Type: schema.TypeString,
56+
Description: "Minor Kubernetes version",
57+
Computed: true,
58+
},
59+
"platform": {
60+
Type: schema.TypeString,
61+
Description: "Platform",
62+
Computed: true,
63+
},
64+
"go_version": {
65+
Type: schema.TypeString,
66+
Description: "Go compiler version",
67+
Computed: true,
68+
},
69+
},
70+
}
71+
}
72+
73+
func dataSourceKubernetesServerVersionRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
74+
conn, err := meta.(KubeClientsets).MainClientset()
75+
if err != nil {
76+
return diag.FromErr(err)
77+
}
78+
sv, err := conn.ServerVersion()
79+
if err != nil {
80+
return diag.FromErr(err)
81+
}
82+
83+
gv, err := gversion.NewVersion(sv.String())
84+
if err != nil {
85+
return diag.FromErr(err)
86+
}
87+
d.SetId(gv.String())
88+
d.Set("version", gv.String())
89+
d.Set("build_date", sv.BuildDate)
90+
d.Set("compiler", sv.Compiler)
91+
d.Set("git_commit", sv.GitCommit)
92+
d.Set("git_tree_state", sv.GitTreeState)
93+
d.Set("git_version", sv.GitVersion)
94+
d.Set("go_version", sv.GoVersion)
95+
d.Set("major", sv.Major)
96+
d.Set("minor", sv.Minor)
97+
d.Set("platform", sv.Platform)
98+
return nil
99+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
4+
package kubernetes
5+
6+
import (
7+
"fmt"
8+
"testing"
9+
10+
gversion "github.com/hashicorp/go-version"
11+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
12+
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
13+
)
14+
15+
func TestAccKubernetesDataSourceServerVersion_basic(t *testing.T) {
16+
dataSourceName := "data.kubernetes_server_version.test"
17+
18+
resource.ParallelTest(t, resource.TestCase{
19+
PreCheck: func() { testAccPreCheck(t) },
20+
ProviderFactories: testAccProviderFactories,
21+
Steps: []resource.TestStep{
22+
{
23+
Config: testAccKubernetesDataSourceServerVersionConfig_basic(),
24+
Check: func(st *terraform.State) error {
25+
meta := testAccProvider.Meta()
26+
if meta == nil {
27+
return fmt.Errorf("Provider not initialized, unable to check cluster version")
28+
}
29+
conn, err := meta.(KubeClientsets).MainClientset()
30+
if err != nil {
31+
return err
32+
}
33+
ver, err := conn.ServerVersion()
34+
if err != nil {
35+
return err
36+
}
37+
gver, err := gversion.NewVersion(ver.String())
38+
if err != nil {
39+
return err
40+
}
41+
return resource.ComposeAggregateTestCheckFunc(
42+
resource.TestCheckResourceAttr(dataSourceName, "version", gver.String()),
43+
resource.TestCheckResourceAttr(dataSourceName, "build_date", ver.BuildDate),
44+
resource.TestCheckResourceAttr(dataSourceName, "compiler", ver.Compiler),
45+
resource.TestCheckResourceAttr(dataSourceName, "git_commit", ver.GitCommit),
46+
resource.TestCheckResourceAttr(dataSourceName, "git_tree_state", ver.GitTreeState),
47+
resource.TestCheckResourceAttr(dataSourceName, "git_version", ver.GitVersion),
48+
resource.TestCheckResourceAttr(dataSourceName, "major", ver.Major),
49+
resource.TestCheckResourceAttr(dataSourceName, "minor", ver.Minor),
50+
resource.TestCheckResourceAttr(dataSourceName, "platform", ver.Platform),
51+
resource.TestCheckResourceAttr(dataSourceName, "go_version", ver.GoVersion),
52+
)(st)
53+
},
54+
},
55+
},
56+
})
57+
}
58+
59+
func testAccKubernetesDataSourceServerVersionConfig_basic() string {
60+
return `data "kubernetes_server_version" "test" {}`
61+
}

kubernetes/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ func Provider() *schema.Provider {
235235
"kubernetes_persistent_volume_claim": dataSourceKubernetesPersistentVolumeClaimV1(),
236236
"kubernetes_persistent_volume_claim_v1": dataSourceKubernetesPersistentVolumeClaimV1(),
237237
"kubernetes_nodes": dataSourceKubernetesNodes(),
238+
"kubernetes_server_version": dataSourceKubernetesServerVersion(),
238239

239240
// networking
240241
"kubernetes_ingress": dataSourceKubernetesIngress(),
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
subcategory: "core/v1"
3+
page_title: "Kubernetes: kubernetes_server_version"
4+
description: |-
5+
Retrieves and parses the server's version (git version).
6+
---
7+
8+
# {{ .Name }}
9+
10+
{{ .Description }}
11+
12+
{{ .SchemaMarkdown }}

0 commit comments

Comments
 (0)