github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/utils/kubectl/version.go (about) 1 package kubectl 2 3 import ( 4 "fmt" 5 "strings" 6 7 "gopkg.in/yaml.v3" 8 9 "github.com/caos/orbos/mntr" 10 ) 11 12 type Version struct { 13 BuildDate string `yaml:"buildDate"` 14 Compiler string `yaml:"compiler"` 15 GitCommit string `yaml:"gitCommit"` 16 GitTreeState string `yaml:"gitTreeState"` 17 GitVersion string `yaml:"gitVersion"` 18 GoVersion string `yaml:"goVersion"` 19 Major string `yaml:"major"` 20 Minor string `yaml:"minor"` 21 Platform string `yaml:"platform"` 22 } 23 24 type Versions struct { 25 ClientVersion *Version `yaml:"clientVersion"` 26 ServerVersion *Version `yaml:"serverVersion"` 27 } 28 29 type KubectlVersion struct { 30 kubectl *Kubectl 31 } 32 33 func NewVersion() *KubectlVersion { 34 return &KubectlVersion{kubectl: New("version").AddParameter("-o", "yaml")} 35 } 36 37 func (k *KubectlVersion) GetKubeVersion(monitor mntr.Monitor) (string, error) { 38 cmd := k.kubectl.Build() 39 40 kubectlMonitor := monitor.WithFields(map[string]interface{}{ 41 "cmd": cmd, 42 }) 43 kubectlMonitor.Debug("Executing") 44 45 out, err := cmd.CombinedOutput() 46 if err != nil { 47 return "", fmt.Errorf("error while executing command: %w", err) 48 } 49 50 versions := &Versions{} 51 err = yaml.Unmarshal(out, versions) 52 if err != nil { 53 return "", fmt.Errorf("error while unmarshaling output: %w", err) 54 } 55 56 parts := strings.Split(versions.ServerVersion.GitVersion, "-") 57 return parts[0], nil 58 }