kubeadm: add final fallback to constants.CurrentKubernetesVersion

It may happen that both the git version and the remote version
are broken/inaccessible. In this case the broken remote version
would be used.

To overcome this situation fall back to the constant CurrentKubernetesVersion.

The alternative could be os.Exit(1).

Also this change fixes Bazel-based unit tests in air-gapped environment.
This commit is contained in:
Dmitry Rozhkov 2018-12-27 12:21:47 +02:00
parent af31a202ea
commit 9e25a00ec0

View File

@ -29,6 +29,7 @@ import (
netutil "k8s.io/apimachinery/pkg/util/net" netutil "k8s.io/apimachinery/pkg/util/net"
versionutil "k8s.io/apimachinery/pkg/util/version" versionutil "k8s.io/apimachinery/pkg/util/version"
"k8s.io/klog" "k8s.io/klog"
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
pkgversion "k8s.io/kubernetes/pkg/version" pkgversion "k8s.io/kubernetes/pkg/version"
) )
@ -92,13 +93,20 @@ func KubernetesReleaseVersion(version string) (string, error) {
if body != "" { if body != "" {
return "", err return "", err
} }
// Handle air-gapped environments by falling back to the client version. if clientVersionErr == nil {
klog.Infof("could not fetch a Kubernetes version from the internet: %v", err) // Handle air-gapped environments by falling back to the client version.
klog.Infof("falling back to the local client version: %s", clientVersion) klog.Warningf("could not fetch a Kubernetes version from the internet: %v", err)
return KubernetesReleaseVersion(clientVersion) klog.Warningf("falling back to the local client version: %s", clientVersion)
return KubernetesReleaseVersion(clientVersion)
}
} }
if clientVersionErr != nil { if clientVersionErr != nil {
if err != nil {
klog.Warningf("could not obtain neither client nor remote version; fall back to: %s", constants.CurrentKubernetesVersion)
return KubernetesReleaseVersion(constants.CurrentKubernetesVersion.String())
}
klog.Warningf("could not obtain client version; using remote version: %s", body) klog.Warningf("could not obtain client version; using remote version: %s", body)
return KubernetesReleaseVersion(body) return KubernetesReleaseVersion(body)
} }