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  }