diff --git a/cmd/common.go b/cmd/common.go index 89f45bc4883faec29db8af16b60f7f5411408827..1200d4ec52ca5c3c44a9647c7df430d54627d453 100644 --- a/cmd/common.go +++ b/cmd/common.go @@ -90,7 +90,9 @@ func runChecks(t check.NodeType) { file = federatedFile } - in, err := ioutil.ReadFile(file) + ver := getKubeVersion() + path := fmt.Sprintf("%s/%s/%s", cfgDir, ver.Server, file) + in, err := ioutil.ReadFile(path) if err != nil { exitWithError(fmt.Errorf("error opening %s controls file: %v", t, err)) } diff --git a/cmd/federated.go b/cmd/federated.go index 1ebc2511e49589a4c358600785eaad9c2d8097a8..0f9dbf32030b872d04b5895e4221a3fbe2470545 100644 --- a/cmd/federated.go +++ b/cmd/federated.go @@ -33,7 +33,7 @@ func init() { federatedCmd.PersistentFlags().StringVarP(&federatedFile, "file", "f", - cfgDir+"/federated.yaml", + "/federated.yaml", "Alternative YAML file for federated checks", ) diff --git a/cmd/master.go b/cmd/master.go index b702615b39a317f311d27e42b67b5ec8a2947634..1659d38549f6bd473d5b6945561fe69f8b7f1fab 100644 --- a/cmd/master.go +++ b/cmd/master.go @@ -33,7 +33,7 @@ func init() { masterCmd.PersistentFlags().StringVarP(&masterFile, "file", "f", - cfgDir+"/master.yaml", + "/master.yaml", "Alternative YAML file for master checks", ) diff --git a/cmd/node.go b/cmd/node.go index 9ea68bab8b4adbdc011e29df0623a6c503fa3c8c..b07ed7e0df1cc21d86916beac73f742a3d2af037 100644 --- a/cmd/node.go +++ b/cmd/node.go @@ -33,7 +33,7 @@ func init() { nodeCmd.PersistentFlags().StringVarP(&nodeFile, "file", "f", - cfgDir+"/node.yaml", + "/node.yaml", "Alternative YAML file for node checks", ) diff --git a/cmd/util.go b/cmd/util.go index 478ae21ce75796cfff0834afbe75575b312ee009..fa926d8db0144dfa4e38b2f9ff1fefad68697282 100644 --- a/cmd/util.go +++ b/cmd/util.go @@ -159,3 +159,38 @@ func multiWordReplace(s string, subname string, sub string) string { return strings.Replace(s, subname, sub, -1) } + +type version struct { + Server string + Client string +} + +func getKubeVersion() *version { + ver := new(version) + // These executables might not be on the user's path. + _, err := exec.LookPath("kubectl") + if err != nil { + s := fmt.Sprintf("Kubernetes version check skipped with error %v", err) + continueWithError(err, sprintlnWarn(s)) + return nil + } + + cmd := exec.Command("kubectl", "version") + out, err := cmd.Output() + if err != nil { + s := fmt.Sprintf("Kubernetes version check skipped, with error getting kubectl version") + continueWithError(err, sprintlnWarn(s)) + return nil + } + + clientVerRe := regexp.MustCompile(`Client.*Major:"(\d+)".*Minor:"(\d+)"`) + svrVerRe := regexp.MustCompile(`Server.*Major:"(\d+)".*Minor:"(\d+)"`) + + sub := clientVerRe.FindStringSubmatch(string(out)) + ver.Client = sub[1] + "." + sub[2] + + sub = svrVerRe.FindStringSubmatch(string(out)) + ver.Server = sub[1] + "." + sub[2] + + return ver +} diff --git a/cmd/util_test.go b/cmd/util_test.go index dbd434b533e04ab68631670bb21a737fcdbe085f..40994a1a52a448d196efffd709263eb7eb9c63da 100644 --- a/cmd/util_test.go +++ b/cmd/util_test.go @@ -129,3 +129,18 @@ func TestMultiWordReplace(t *testing.T) { }) } } + +func TestGetKubeVersion(t *testing.T) { + ver := getKubeVersion() + if ver == nil { + t.Log("Expected non nil version info.") + } else { + if ok, err := regexp.MatchString(`\d+.\d+`, ver.Client); !ok && err != nil { + t.Logf("Expected:%v got %v\n", "n.m", ver.Client) + } + + if ok, err := regexp.MatchString(`\d+.\d+`, ver.Server); !ok && err != nil { + t.Logf("Expected:%v got %v\n", "n.m", ver.Server) + } + } +}