github.com/jenkins-x/jx/v2@v2.1.155/pkg/cmd/opts/version.go (about) 1 package opts 2 3 import ( 4 "strings" 5 6 "github.com/jenkins-x/jx/v2/pkg/versionstream/versionstreamrepo" 7 8 "github.com/jenkins-x/jx/v2/pkg/versionstream" 9 10 "github.com/jenkins-x/jx-logging/pkg/log" 11 "github.com/jenkins-x/jx/v2/pkg/table" 12 "github.com/jenkins-x/jx/v2/pkg/util" 13 ) 14 15 // CreateVersionResolver creates a new VersionResolver service 16 func (o *CommonOptions) CreateVersionResolver(repo string, gitRef string) (*versionstream.VersionResolver, error) { 17 versionsDir, _, err := o.CloneJXVersionsRepo(repo, gitRef) 18 if err != nil { 19 return nil, err 20 } 21 return &versionstream.VersionResolver{ 22 VersionsDir: versionsDir, 23 }, nil 24 } 25 26 // GetVersionResolver gets a VersionResolver, lazy creating one if required so we can reuse it later 27 func (o *CommonOptions) GetVersionResolver() (*versionstream.VersionResolver, error) { 28 var err error 29 if o.versionResolver == nil { 30 o.versionResolver, err = o.CreateVersionResolver("", "") 31 } 32 return o.versionResolver, err 33 } 34 35 // SetVersionResolver gets a VersionResolver, lazy creating one if required 36 func (o *CommonOptions) SetVersionResolver(resolver *versionstream.VersionResolver) { 37 o.versionResolver = resolver 38 } 39 40 // GetPackageVersions returns the package versions and a table if they need to be rendered 41 func (o *CommonOptions) GetPackageVersions(ns string, helmTLS bool) (map[string]string, table.Table) { 42 info := util.ColorInfo 43 packages := map[string]string{} 44 table := o.CreateTable() 45 table.AddRow("NAME", "VERSION") 46 // Jenkins X version 47 releases, _, err := o.Helm().ListReleases(ns) 48 if err != nil { 49 log.Logger().Warnf("Failed to find helm installs: %s", err) 50 } else { 51 for _, release := range releases { 52 if release.Chart == "jenkins-x-platform" { 53 table.AddRow("jenkins x platform", info(release.ChartVersion)) 54 } 55 } 56 } 57 // Kubernetes version 58 client, err := o.KubeClient() 59 if err != nil { 60 log.Logger().Warnf("Failed to connect to Kubernetes: %s", err) 61 } else { 62 serverVersion, err := client.Discovery().ServerVersion() 63 if err != nil { 64 log.Logger().Warnf("Failed to get Kubernetes server version: %s", err) 65 } else if serverVersion != nil { 66 version := serverVersion.String() 67 packages["kubernetesCluster"] = version 68 table.AddRow("Kubernetes cluster", info(version)) 69 } 70 } 71 // kubectl version 72 output, err := o.GetCommandOutput("", "kubectl", "version", "--short") 73 if err != nil { 74 log.Logger().Warnf("Failed to get kubectl version: %s", err) 75 } else { 76 for i, line := range strings.Split(output, "\n") { 77 fields := strings.Fields(line) 78 if len(fields) > 1 { 79 v := fields[2] 80 if v != "" { 81 switch i { 82 case 0: 83 table.AddRow("kubectl (installed in JX_BIN)", info(v)) 84 packages["kubectl"] = v 85 case 1: 86 // Ignore K8S server details as we have these above 87 } 88 } 89 } 90 } 91 } 92 93 // helm version 94 output, err = o.Helm().Version(helmTLS) 95 if err != nil { 96 log.Logger().Warnf("Failed to get helm version: %s", err) 97 } else { 98 helmBinary, noTiller, helmTemplate, _ := o.TeamHelmBin() 99 if helmBinary == "helm3" || noTiller || helmTemplate { 100 table.AddRow("helm client", info(output)) 101 } else { 102 for i, line := range strings.Split(output, "\n") { 103 fields := strings.Fields(line) 104 if len(fields) > 1 { 105 v := fields[1] 106 if v != "" { 107 switch i { 108 case 0: 109 table.AddRow("helm client", info(v)) 110 packages["helm"] = v 111 case 1: 112 table.AddRow("helm server", info(v)) 113 } 114 } 115 } 116 } 117 } 118 } 119 120 // git version 121 version, err := o.Git().Version() 122 if err != nil { 123 log.Logger().Warnf("Failed to get git version: %s", err) 124 } else { 125 table.AddRow("git", info(version)) 126 packages["git"] = version 127 } 128 return packages, table 129 } 130 131 // GetVersionNumber returns the version number for the given kind and name or blank string if there is no locked version 132 func (o *CommonOptions) GetVersionNumber(kind versionstream.VersionKind, name, repo string, gitRef string) (string, error) { 133 versioner, err := o.CreateVersionResolver(repo, gitRef) 134 if err != nil { 135 return "", err 136 } 137 return versioner.StableVersionNumber(kind, name) 138 } 139 140 // CloneJXVersionsRepo clones the jenkins-x versions repo to a local working dir 141 func (o *CommonOptions) CloneJXVersionsRepo(versionRepository string, versionRef string) (string, string, error) { 142 settings, err := o.TeamSettings() 143 if err != nil { 144 log.Logger().Debugf("Unable to load team settings because %v", err) 145 } 146 return versionstreamrepo.CloneJXVersionsRepo(versionRepository, versionRef, settings, o.Git(), o.BatchMode, o.AdvancedMode, o.GetIOFileHandles()) 147 }