Skip to content

Commit 9d6e2b9

Browse files
committed
kubeadm upgrade plan: Use internal types of the output API
`kubeadm upgrade plan` is using the external (currently `v1alpha1`) types of the kubeadm output API to collect upgrade plans. This is counter intuitive since code structure gets bound to the whatever version the output API is at. In addition to that, the versioned API is used only in the very last stages of a machine readable output (which is currently not implemented). Hence, to increase flexibility and keep up with the standard Kubernetes ecosystem practice, `kubeadm upgrade plan` is migrated to use the internal types of the output API. Signed-off-by: Rostislav M. Georgiev <[email protected]>
1 parent e2d8f6c commit 9d6e2b9

File tree

2 files changed

+11
-10
lines changed

2 files changed

+11
-10
lines changed

cmd/kubeadm/app/cmd/upgrade/BUILD

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ go_library(
1515
deps = [
1616
"//cmd/kubeadm/app/apis/kubeadm:go_default_library",
1717
"//cmd/kubeadm/app/apis/kubeadm/validation:go_default_library",
18-
"//cmd/kubeadm/app/apis/output/v1alpha1:go_default_library",
18+
"//cmd/kubeadm/app/apis/output:go_default_library",
1919
"//cmd/kubeadm/app/cmd/options:go_default_library",
2020
"//cmd/kubeadm/app/cmd/phases/upgrade/node:go_default_library",
2121
"//cmd/kubeadm/app/cmd/phases/workflow:go_default_library",

cmd/kubeadm/app/cmd/upgrade/plan.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,11 @@ import (
2626

2727
"github.com/pkg/errors"
2828
"github.com/spf13/cobra"
29+
2930
"k8s.io/apimachinery/pkg/util/version"
3031
"k8s.io/klog/v2"
3132
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
32-
outputapiv1alpha1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/output/v1alpha1"
33+
outputapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/output"
3334
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
3435
"k8s.io/kubernetes/cmd/kubeadm/app/phases/upgrade"
3536
)
@@ -96,9 +97,9 @@ func runPlan(flags *planFlags, args []string) error {
9697
return nil
9798
}
9899

99-
// newComponentUpgradePlan helper creates outputapiv1alpha1.ComponentUpgradePlan object
100-
func newComponentUpgradePlan(name, currentVersion, newVersion string) outputapiv1alpha1.ComponentUpgradePlan {
101-
return outputapiv1alpha1.ComponentUpgradePlan{
100+
// newComponentUpgradePlan helper creates outputapi.ComponentUpgradePlan object
101+
func newComponentUpgradePlan(name, currentVersion, newVersion string) outputapi.ComponentUpgradePlan {
102+
return outputapi.ComponentUpgradePlan{
102103
Name: name,
103104
CurrentVersion: currentVersion,
104105
NewVersion: newVersion,
@@ -107,7 +108,7 @@ func newComponentUpgradePlan(name, currentVersion, newVersion string) outputapiv
107108

108109
// TODO There is currently no way to cleanly output upgrades that involve adding, removing, or changing components
109110
// https://github.com/kubernetes/kubeadm/issues/810 was created to track addressing this.
110-
func appendDNSComponent(components []outputapiv1alpha1.ComponentUpgradePlan, up *upgrade.Upgrade, DNSType kubeadmapi.DNSAddOnType, name string) []outputapiv1alpha1.ComponentUpgradePlan {
111+
func appendDNSComponent(components []outputapi.ComponentUpgradePlan, up *upgrade.Upgrade, DNSType kubeadmapi.DNSAddOnType, name string) []outputapi.ComponentUpgradePlan {
111112
beforeVersion, afterVersion := "", ""
112113
if up.Before.DNSType == DNSType {
113114
beforeVersion = up.Before.DNSVersion
@@ -123,7 +124,7 @@ func appendDNSComponent(components []outputapiv1alpha1.ComponentUpgradePlan, up
123124
}
124125

125126
// genUpgradePlan generates output-friendly upgrade plan out of upgrade.Upgrade structure
126-
func genUpgradePlan(up *upgrade.Upgrade, isExternalEtcd bool) (*outputapiv1alpha1.UpgradePlan, string, error) {
127+
func genUpgradePlan(up *upgrade.Upgrade, isExternalEtcd bool) (*outputapi.UpgradePlan, string, error) {
127128
newK8sVersion, err := version.ParseSemantic(up.After.KubeVersion)
128129
if err != nil {
129130
return nil, "", errors.Wrapf(err, "Unable to parse normalized version %q as a semantic version", up.After.KubeVersion)
@@ -138,7 +139,7 @@ func genUpgradePlan(up *upgrade.Upgrade, isExternalEtcd bool) (*outputapiv1alpha
138139
}
139140
}
140141

141-
components := []outputapiv1alpha1.ComponentUpgradePlan{}
142+
components := []outputapi.ComponentUpgradePlan{}
142143

143144
if up.CanUpgradeKubelets() {
144145
// The map is of the form <old-version>:<node-count>. Here all the keys are put into a slice and sorted
@@ -161,11 +162,11 @@ func genUpgradePlan(up *upgrade.Upgrade, isExternalEtcd bool) (*outputapiv1alpha
161162
components = append(components, newComponentUpgradePlan(constants.Etcd, up.Before.EtcdVersion, up.After.EtcdVersion))
162163
}
163164

164-
return &outputapiv1alpha1.UpgradePlan{Components: components}, unstableVersionFlag, nil
165+
return &outputapi.UpgradePlan{Components: components}, unstableVersionFlag, nil
165166
}
166167

167168
// printUpgradePlan prints a UX-friendly overview of what versions are available to upgrade to
168-
func printUpgradePlan(up *upgrade.Upgrade, plan *outputapiv1alpha1.UpgradePlan, unstableVersionFlag string, isExternalEtcd bool, w io.Writer) {
169+
func printUpgradePlan(up *upgrade.Upgrade, plan *outputapi.UpgradePlan, unstableVersionFlag string, isExternalEtcd bool, w io.Writer) {
169170
// The tab writer writes to the "real" writer w
170171
tabw := tabwriter.NewWriter(w, 10, 4, 3, ' ', 0)
171172

0 commit comments

Comments
 (0)