Skip to content

Commit 26995c7

Browse files
Saas-7194 validate k8s version (#126)
1 parent e9ace09 commit 26995c7

File tree

7 files changed

+28
-6
lines changed

7 files changed

+28
-6
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "venona",
3-
"version": "1.2.5",
3+
"version": "1.2.6",
44
"description": "Codefresh agent to run on Codefresh's runtime environment and execute pipeline",
55
"main": "index.js",
66
"scripts": {

venonactl/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.2.5
1+
1.2.6

venonactl/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ require (
1010
github.com/codefresh-io/go-sdk v0.18.0
1111
github.com/dustin/go-humanize v1.0.0
1212
github.com/gophercloud/gophercloud v0.8.0 // indirect
13+
github.com/hashicorp/go-version v1.2.0
1314
github.com/huandu/xstrings v1.3.0 // indirect
1415
github.com/imdario/mergo v0.3.8 // indirect
1516
github.com/inconshreveable/log15 v0.0.0-20200109203555-b30bc20e4fd1

venonactl/go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t
253253
github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
254254
github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
255255
github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I=
256+
github.com/hashicorp/go-version v1.2.0 h1:3vNe/fWF5CBgRIguda1meWhsZHy3m8gCJ5wx+dIzX/E=
257+
github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
256258
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
257259
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
258260
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=

venonactl/pkg/plugins/helper.go

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,11 @@ import (
3333
"github.com/codefresh-io/venona/venonactl/pkg/logger"
3434
templates "github.com/codefresh-io/venona/venonactl/pkg/templates/kubernetes"
3535

36+
ver "github.com/hashicorp/go-version"
3637
"k8s.io/apimachinery/pkg/api/resource"
3738
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3839
"k8s.io/apimachinery/pkg/runtime"
40+
"k8s.io/apimachinery/pkg/version"
3941
"k8s.io/client-go/kubernetes/scheme"
4042
)
4143

@@ -52,6 +54,8 @@ type (
5254
}
5355
)
5456

57+
var requiredK8sVersion, _ = ver.NewConstraint(">= 1.10")
58+
5559
func unescape(s string) template.HTML {
5660
return template.HTML(s)
5761
}
@@ -149,8 +153,19 @@ func getKubeObjectsFromTempalte(values map[string]interface{}, pattern string, l
149153
return KubeObjectsFromTemplates(templatesMap, values, pattern, logger)
150154
}
151155

152-
func ensureClusterRequirements(client *kubernetes.Clientset, req validationRequest) (validationResult, error) {
156+
func ensureClusterRequirements(client *kubernetes.Clientset, req validationRequest, logger logger.Logger) (validationResult, error) {
153157
result := validationResult{}
158+
result.isValid = true
159+
160+
v, err := client.ServerVersion()
161+
if err != nil {
162+
// should not fail if can't validate version
163+
logger.Warn("Failed to validate kubernetes version", "cause", err)
164+
} else if res := testKubernetesVersion(v); !res {
165+
result.isValid = false
166+
result.message = append(result.message, "Cluster does not meet the kubernetes version requirements")
167+
}
168+
154169
nodes, err := client.CoreV1().Nodes().List(metav1.ListOptions{})
155170
if err != nil {
156171
return result, err
@@ -159,7 +174,6 @@ func ensureClusterRequirements(client *kubernetes.Clientset, req validationReque
159174
return result, errors.New("Nodes not found")
160175
}
161176

162-
result.isValid = true
163177
if len(nodes.Items) == 0 {
164178
result.message = append(result.message, "No nodes in cluster")
165179
result.isValid = false
@@ -181,6 +195,11 @@ func ensureClusterRequirements(client *kubernetes.Clientset, req validationReque
181195
return result, nil
182196
}
183197

198+
func testKubernetesVersion(version *version.Info) bool {
199+
v, _ := ver.NewVersion(version.String())
200+
return requiredK8sVersion.Check(v)
201+
}
202+
184203
func testNode(n v1.Node, req validationRequest) []string {
185204
result := []string{}
186205

venonactl/pkg/plugins/runtime-environment.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ func (u *runtimeEnvironmentPlugin) Install(opt *InstallOptions, v Values) (Value
8989
res, err := ensureClusterRequirements(cs, validationRequest{
9090
cpu: "1",
9191
momorySize: "1Gi",
92-
})
92+
}, u.logger)
9393
if err != nil {
9494
return nil, err
9595
}

venonactl/pkg/plugins/venona.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func (u *venonaPlugin) Install(opt *InstallOptions, v Values) (Values, error) {
7878
res, err := ensureClusterRequirements(cs, validationRequest{
7979
cpu: "500m",
8080
momorySize: "1Gi",
81-
})
81+
}, u.logger)
8282
if err != nil {
8383
return nil, err
8484
}

0 commit comments

Comments
 (0)