mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-04 18:00:08 +00:00
Merge pull request #123492 from carlory/fix-kubeadm-494-1
Replace fmt.Print with printer in upgrade plan code and fix configVersions are not printed when output is json or yaml
This commit is contained in:
commit
a58221c104
@ -176,7 +176,7 @@ func enforceRequirements(flags *applyPlanFlags, args []string, dryRun bool, upgr
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run healthchecks against the cluster
|
// Run healthchecks against the cluster
|
||||||
if err := upgrade.CheckClusterHealth(client, &cfg.ClusterConfiguration, ignorePreflightErrorsSet); err != nil {
|
if err := upgrade.CheckClusterHealth(client, &cfg.ClusterConfiguration, ignorePreflightErrorsSet, printer); err != nil {
|
||||||
return nil, nil, nil, errors.Wrap(err, "[upgrade/health] FATAL")
|
return nil, nil, nil, errors.Wrap(err, "[upgrade/health] FATAL")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -158,7 +158,8 @@ func (pf *upgradePlanJSONYamlPrintFlags) AllowedFormats() []string {
|
|||||||
// upgradePlanJSONYAMLPrinter prints upgrade plan in a JSON or YAML format
|
// upgradePlanJSONYAMLPrinter prints upgrade plan in a JSON or YAML format
|
||||||
type upgradePlanJSONYAMLPrinter struct {
|
type upgradePlanJSONYAMLPrinter struct {
|
||||||
output.ResourcePrinterWrapper
|
output.ResourcePrinterWrapper
|
||||||
Buffer []outputapiv1alpha2.ComponentUpgradePlan
|
Components []outputapiv1alpha2.ComponentUpgradePlan
|
||||||
|
ConfigVersions []outputapiv1alpha2.ComponentConfigVersionState
|
||||||
}
|
}
|
||||||
|
|
||||||
// newUpgradePlanJSONYAMLPrinter creates a new upgradePlanJSONYAMLPrinter object
|
// newUpgradePlanJSONYAMLPrinter creates a new upgradePlanJSONYAMLPrinter object
|
||||||
@ -175,7 +176,7 @@ func (p *upgradePlanJSONYAMLPrinter) PrintObj(obj runtime.Object, writer io.Writ
|
|||||||
if !ok {
|
if !ok {
|
||||||
return errors.Errorf("expected ComponentUpgradePlan, but got %+v", obj)
|
return errors.Errorf("expected ComponentUpgradePlan, but got %+v", obj)
|
||||||
}
|
}
|
||||||
p.Buffer = append(p.Buffer, *item)
|
p.Components = append(p.Components, *item)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -184,19 +185,18 @@ func (p *upgradePlanJSONYAMLPrinter) Flush(writer io.Writer, last bool) {
|
|||||||
if !last {
|
if !last {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if len(p.Buffer) == 0 {
|
if len(p.Components) == 0 && len(p.ConfigVersions) == 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
plan := &outputapiv1alpha2.UpgradePlan{Components: p.Buffer}
|
plan := &outputapiv1alpha2.UpgradePlan{Components: p.Components, ConfigVersions: p.ConfigVersions}
|
||||||
if err := p.Printer.PrintObj(plan, writer); err != nil {
|
if err := p.Printer.PrintObj(plan, writer); err != nil {
|
||||||
fmt.Fprintf(os.Stderr, "could not flush output buffer: %v\n", err)
|
fmt.Fprintf(os.Stderr, "could not flush output buffer: %v\n", err)
|
||||||
}
|
}
|
||||||
|
p.Components = p.Components[:0]
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close empties the list of buffered components
|
// Close does nothing.
|
||||||
func (p *upgradePlanJSONYAMLPrinter) Close(writer io.Writer) {
|
func (p *upgradePlanJSONYAMLPrinter) Close(writer io.Writer) {}
|
||||||
p.Buffer = p.Buffer[:0]
|
|
||||||
}
|
|
||||||
|
|
||||||
// upgradePlanTextPrinter prints upgrade plan in a text form
|
// upgradePlanTextPrinter prints upgrade plan in a text form
|
||||||
type upgradePlanTextPrinter struct {
|
type upgradePlanTextPrinter struct {
|
||||||
@ -284,6 +284,11 @@ func runPlan(flags *planFlags, args []string, printer output.Printer) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A workaround to set the configVersionStates in the printer
|
||||||
|
if p, ok := printer.(*upgradePlanJSONYAMLPrinter); ok {
|
||||||
|
p.ConfigVersions = configVersionStates
|
||||||
|
}
|
||||||
|
|
||||||
// Generate and print upgrade plans
|
// Generate and print upgrade plans
|
||||||
for _, up := range availUpgrades {
|
for _, up := range availUpgrades {
|
||||||
plan, unstableVersionFlag, err := genUpgradePlan(&up, isExternalEtcd)
|
plan, unstableVersionFlag, err := genUpgradePlan(&up, isExternalEtcd)
|
||||||
@ -387,6 +392,7 @@ func printUpgradePlan(up *upgrade.Upgrade, plan *outputapiv1alpha2.UpgradePlan,
|
|||||||
printer.PrintObj(&plan, writer)
|
printer.PrintObj(&plan, writer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
printer.Flush(writer, true)
|
printer.Flush(writer, true)
|
||||||
|
|
||||||
printer.Fprintln(writer, "You can now apply the upgrade by executing the following command:")
|
printer.Fprintln(writer, "You can now apply the upgrade by executing the following command:")
|
||||||
|
@ -216,7 +216,7 @@ func GetAvailableUpgrades(versionGetterImpl VersionGetter, experimentalUpgradesA
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return upgrades, err
|
return upgrades, err
|
||||||
}
|
}
|
||||||
fmt.Printf("[upgrade/versions] Latest %s: %s\n", "experimental version", latestVersionStr)
|
_, _ = printer.Printf("[upgrade/versions] Latest %s: %s\n", "experimental version", latestVersionStr)
|
||||||
|
|
||||||
minorUnstable := latestVersion.Components()[1]
|
minorUnstable := latestVersion.Components()[1]
|
||||||
// Get and output the current latest unstable version
|
// Get and output the current latest unstable version
|
||||||
@ -225,7 +225,7 @@ func GetAvailableUpgrades(versionGetterImpl VersionGetter, experimentalUpgradesA
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return upgrades, err
|
return upgrades, err
|
||||||
}
|
}
|
||||||
fmt.Printf("[upgrade/versions] Latest %s: %s\n", "previous version", previousBranchLatestVersionStr)
|
_, _ = printer.Printf("[upgrade/versions] Latest %s: %s\n", "previous version", 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 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) {
|
if rcUpgradesAllowed && rcUpgradePossible(clusterVersion, previousBranchLatestVersion) {
|
||||||
|
@ -38,6 +38,7 @@ import (
|
|||||||
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/images"
|
"k8s.io/kubernetes/cmd/kubeadm/app/images"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/preflight"
|
"k8s.io/kubernetes/cmd/kubeadm/app/preflight"
|
||||||
|
"k8s.io/kubernetes/cmd/kubeadm/app/util/output"
|
||||||
)
|
)
|
||||||
|
|
||||||
// healthCheck is a helper struct for easily performing healthchecks against the cluster and printing the output
|
// healthCheck is a helper struct for easily performing healthchecks against the cluster and printing the output
|
||||||
@ -66,8 +67,8 @@ func (c *healthCheck) Name() string {
|
|||||||
// - the API /healthz endpoint is healthy
|
// - the API /healthz endpoint is healthy
|
||||||
// - all control-plane Nodes are Ready
|
// - all control-plane Nodes are Ready
|
||||||
// - (if static pod-hosted) that all required Static Pod manifests exist on disk
|
// - (if static pod-hosted) that all required Static Pod manifests exist on disk
|
||||||
func CheckClusterHealth(client clientset.Interface, cfg *kubeadmapi.ClusterConfiguration, ignoreChecksErrors sets.Set[string]) error {
|
func CheckClusterHealth(client clientset.Interface, cfg *kubeadmapi.ClusterConfiguration, ignoreChecksErrors sets.Set[string], printer output.Printer) error {
|
||||||
fmt.Println("[upgrade] Running cluster health checks")
|
_, _ = printer.Println("[upgrade] Running cluster health checks")
|
||||||
|
|
||||||
healthChecks := []preflight.Checker{
|
healthChecks := []preflight.Checker{
|
||||||
&healthCheck{
|
&healthCheck{
|
||||||
|
Loading…
Reference in New Issue
Block a user