@@ -33,9 +33,11 @@ import (
33
33
"github.com/codefresh-io/venona/venonactl/pkg/logger"
34
34
templates "github.com/codefresh-io/venona/venonactl/pkg/templates/kubernetes"
35
35
36
+ ver "github.com/hashicorp/go-version"
36
37
"k8s.io/apimachinery/pkg/api/resource"
37
38
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
38
39
"k8s.io/apimachinery/pkg/runtime"
40
+ "k8s.io/apimachinery/pkg/version"
39
41
"k8s.io/client-go/kubernetes/scheme"
40
42
)
41
43
52
54
}
53
55
)
54
56
57
+ var requiredK8sVersion , _ = ver .NewConstraint (">= 1.10" )
58
+
55
59
func unescape (s string ) template.HTML {
56
60
return template .HTML (s )
57
61
}
@@ -149,8 +153,19 @@ func getKubeObjectsFromTempalte(values map[string]interface{}, pattern string, l
149
153
return KubeObjectsFromTemplates (templatesMap , values , pattern , logger )
150
154
}
151
155
152
- func ensureClusterRequirements (client * kubernetes.Clientset , req validationRequest ) (validationResult , error ) {
156
+ func ensureClusterRequirements (client * kubernetes.Clientset , req validationRequest , logger logger. Logger ) (validationResult , error ) {
153
157
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
+
154
169
nodes , err := client .CoreV1 ().Nodes ().List (metav1.ListOptions {})
155
170
if err != nil {
156
171
return result , err
@@ -159,7 +174,6 @@ func ensureClusterRequirements(client *kubernetes.Clientset, req validationReque
159
174
return result , errors .New ("Nodes not found" )
160
175
}
161
176
162
- result .isValid = true
163
177
if len (nodes .Items ) == 0 {
164
178
result .message = append (result .message , "No nodes in cluster" )
165
179
result .isValid = false
@@ -181,6 +195,11 @@ func ensureClusterRequirements(client *kubernetes.Clientset, req validationReque
181
195
return result , nil
182
196
}
183
197
198
+ func testKubernetesVersion (version * version.Info ) bool {
199
+ v , _ := ver .NewVersion (version .String ())
200
+ return requiredK8sVersion .Check (v )
201
+ }
202
+
184
203
func testNode (n v1.Node , req validationRequest ) []string {
185
204
result := []string {}
186
205
0 commit comments