@@ -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
5254 }
5355)
5456
57+ var requiredK8sVersion , _ = ver .NewConstraint (">= 1.10" )
58+
5559func 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+
184203func testNode (n v1.Node , req validationRequest ) []string {
185204 result := []string {}
186205
0 commit comments