diff --git a/cmd/kubeadm/app/cmd/upgrade/common.go b/cmd/kubeadm/app/cmd/upgrade/common.go index 78003bc3dad..6eb9e4d34dd 100644 --- a/cmd/kubeadm/app/cmd/upgrade/common.go +++ b/cmd/kubeadm/app/cmd/upgrade/common.go @@ -157,7 +157,7 @@ func enforceRequirements(flags *applyPlanFlags, dryRun bool, newK8sVersion strin } // Use a real version getter interface that queries the API server, the kubeadm client and the Kubernetes CI system for latest versions - return client, upgrade.NewOfflineVersionGetter(upgrade.NewKubeVersionGetter(client, os.Stdout), newK8sVersion), cfg, nil + return client, upgrade.NewOfflineVersionGetter(upgrade.NewKubeVersionGetter(client), newK8sVersion), cfg, nil } // printConfiguration prints the external version of the API to yaml diff --git a/cmd/kubeadm/app/phases/upgrade/compute.go b/cmd/kubeadm/app/phases/upgrade/compute.go index 64beda3bfb7..7be74bc1684 100644 --- a/cmd/kubeadm/app/phases/upgrade/compute.go +++ b/cmd/kubeadm/app/phases/upgrade/compute.go @@ -85,12 +85,14 @@ func GetAvailableUpgrades(versionGetterImpl VersionGetter, experimentalUpgradesA if err != nil { return upgrades, err } + fmt.Printf("[upgrade/versions] Cluster version: %s\n", clusterVersionStr) // Get current kubeadm CLI version kubeadmVersionStr, kubeadmVersion, err := versionGetterImpl.KubeadmVersion() if err != nil { return upgrades, err } + fmt.Printf("[upgrade/versions] kubeadm version: %s\n", kubeadmVersionStr) // Get and output the current latest stable version stableVersionStr, stableVersion, err := versionGetterImpl.VersionFromCILabel("stable", "stable version") @@ -98,6 +100,8 @@ func GetAvailableUpgrades(versionGetterImpl VersionGetter, experimentalUpgradesA fmt.Printf("[upgrade/versions] WARNING: %v\n", err) fmt.Println("[upgrade/versions] WARNING: Falling back to current kubeadm version as latest stable version") stableVersionStr, stableVersion = kubeadmVersionStr, kubeadmVersion + } else { + fmt.Printf("[upgrade/versions] Latest %s: %s\n", "stable version", stableVersionStr) } // Get the kubelet versions in the cluster @@ -144,6 +148,8 @@ func GetAvailableUpgrades(versionGetterImpl VersionGetter, experimentalUpgradesA if err != nil { fmt.Printf("[upgrade/versions] WARNING: %v\n", err) } else { + fmt.Printf("[upgrade/versions] Latest %s: %s\n", description, patchVersionStr) + // Check if a minor version upgrade is possible when a patch release exists // It's only possible if the latest patch version is higher than the current patch version // If that's the case, they must be on different branches => a newer minor version can be upgraded to @@ -211,6 +217,7 @@ func GetAvailableUpgrades(versionGetterImpl VersionGetter, experimentalUpgradesA if err != nil { return upgrades, err } + fmt.Printf("[upgrade/versions] Latest %s: %s\n", "experimental version", latestVersionStr) minorUnstable := latestVersion.Components()[1] // Get and output the current latest unstable version @@ -219,6 +226,7 @@ func GetAvailableUpgrades(versionGetterImpl VersionGetter, experimentalUpgradesA if err != nil { return upgrades, err } + fmt.Printf("[upgrade/versions] Latest %s: %s\n", "", previousBranchLatestVersionStr) // If that previous latest version is an RC, RCs are allowed and the cluster version is lower than the RC version, show the upgrade if rcUpgradesAllowed && rcUpgradePossible(clusterVersion, previousBranchLatestVersion) { diff --git a/cmd/kubeadm/app/phases/upgrade/policy.go b/cmd/kubeadm/app/phases/upgrade/policy.go index ddeaf6779ec..701f13182bd 100644 --- a/cmd/kubeadm/app/phases/upgrade/policy.go +++ b/cmd/kubeadm/app/phases/upgrade/policy.go @@ -17,6 +17,7 @@ limitations under the License. package upgrade import ( + "fmt" "strings" "github.com/pkg/errors" @@ -56,6 +57,7 @@ func EnforceVersionPolicies(versionGetter VersionGetter, newK8sVersionStr string skewErrors.Mandatory = append(skewErrors.Mandatory, errors.Wrap(err, "Unable to fetch cluster version")) return skewErrors } + fmt.Printf("[upgrade/versions] Cluster version: %s\n", clusterVersionStr) kubeadmVersionStr, kubeadmVersion, err := versionGetter.KubeadmVersion() if err != nil { @@ -63,6 +65,7 @@ func EnforceVersionPolicies(versionGetter VersionGetter, newK8sVersionStr string skewErrors.Mandatory = append(skewErrors.Mandatory, errors.Wrap(err, "Unable to fetch kubeadm version")) return skewErrors } + fmt.Printf("[upgrade/versions] kubeadm version: %s\n", kubeadmVersionStr) kubeletVersions, err := versionGetter.KubeletVersions() if err != nil { diff --git a/cmd/kubeadm/app/phases/upgrade/versiongetter.go b/cmd/kubeadm/app/phases/upgrade/versiongetter.go index 775da36b70d..e70adc6b0f4 100644 --- a/cmd/kubeadm/app/phases/upgrade/versiongetter.go +++ b/cmd/kubeadm/app/phases/upgrade/versiongetter.go @@ -18,8 +18,6 @@ package upgrade import ( "fmt" - "io" - "github.com/pkg/errors" "k8s.io/api/core/v1" @@ -46,14 +44,12 @@ type VersionGetter interface { // KubeVersionGetter handles the version-fetching mechanism from external sources type KubeVersionGetter struct { client clientset.Interface - w io.Writer } // NewKubeVersionGetter returns a new instance of KubeVersionGetter -func NewKubeVersionGetter(client clientset.Interface, writer io.Writer) VersionGetter { +func NewKubeVersionGetter(client clientset.Interface) VersionGetter { return &KubeVersionGetter{ client: client, - w: writer, } } @@ -63,7 +59,6 @@ func (g *KubeVersionGetter) ClusterVersion() (string, *versionutil.Version, erro if err != nil { return "", nil, errors.Wrap(err, "Couldn't fetch cluster version from the API Server") } - fmt.Fprintf(g.w, "[upgrade/versions] Cluster version: %s\n", clusterVersionInfo.String()) clusterVersion, err := versionutil.ParseSemantic(clusterVersionInfo.String()) if err != nil { @@ -75,7 +70,6 @@ func (g *KubeVersionGetter) ClusterVersion() (string, *versionutil.Version, erro // KubeadmVersion gets kubeadm version func (g *KubeVersionGetter) KubeadmVersion() (string, *versionutil.Version, error) { kubeadmVersionInfo := version.Get() - fmt.Fprintf(g.w, "[upgrade/versions] kubeadm version: %s\n", kubeadmVersionInfo.String()) kubeadmVersion, err := versionutil.ParseSemantic(kubeadmVersionInfo.String()) if err != nil { @@ -91,10 +85,6 @@ func (g *KubeVersionGetter) VersionFromCILabel(ciVersionLabel, description strin return "", nil, errors.Wrapf(err, "Couldn't fetch latest %s from the internet", description) } - if description != "" { - fmt.Fprintf(g.w, "[upgrade/versions] Latest %s: %s\n", description, versionStr) - } - ver, err := versionutil.ParseSemantic(versionStr) if err != nil { return "", nil, errors.Wrapf(err, "Couldn't parse latest %s", description) @@ -143,7 +133,11 @@ func NewOfflineVersionGetter(versionGetter VersionGetter, version string) Versio // VersionFromCILabel will return the version that was passed into the struct func (o *OfflineVersionGetter) VersionFromCILabel(ciVersionLabel, description string) (string, *versionutil.Version, error) { if o.version == "" { - return o.VersionGetter.VersionFromCILabel(ciVersionLabel, description) + versionStr, version, err := o.VersionGetter.VersionFromCILabel(ciVersionLabel, description) + if err == nil { + fmt.Printf("[upgrade/versions] Latest %s: %s\n", description, versionStr) + } + return versionStr, version, err } ver, err := versionutil.ParseSemantic(o.version) if err != nil {