Artem Chernyshev 23ef1d40af chore: add ability to redirect talos upgrade module logs to io.Writer
This is going to be useful in the third party code which is using
upgrade modules, to collect output logs instead of printing them to the
stdout.

Signed-off-by: Artem Chernyshev <artem.0xD2@gmail.com>
2021-07-13 08:12:06 -07:00

62 lines
1.8 KiB
Go

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package kubernetes
import (
"fmt"
"io"
"github.com/coreos/go-semver/semver"
appsv1 "k8s.io/api/apps/v1"
)
const (
namespace = "kube-system"
checkpointerAnnotation = "checkpointer.alpha.coreos.com/checkpoint"
checkpointedPodAnnotation = "checkpointer.alpha.coreos.com/checkpoint-of"
kubeAPIServer = "kube-apiserver"
kubeControllerManager = "kube-controller-manager"
kubeScheduler = "kube-scheduler"
kubeProxy = "kube-proxy"
)
// UpgradeOptions represents Kubernetes control plane upgrade settings.
type UpgradeOptions struct {
FromVersion string
ToVersion string
ControlPlaneEndpoint string
LogOutput io.Writer
extraUpdaters []daemonsetUpdater
podCheckpointerExtraUpdaters []daemonsetUpdater
masterNodes []string
}
// Path returns upgrade path in a form "FromMajor.FromMinor->ToMajor.ToMinor" (e.g. "1.20->1.21"),
// or empty string, if one or both versions can't be parsed.
func (options *UpgradeOptions) Path() string {
from, fromErr := semver.NewVersion(options.FromVersion)
to, toErr := semver.NewVersion(options.ToVersion)
if fromErr != nil || toErr != nil {
return ""
}
return fmt.Sprintf("%d.%d->%d.%d", from.Major, from.Minor, to.Major, to.Minor)
}
// Log writes the line to logger or to stdout if no logger was provided.
func (options *UpgradeOptions) Log(line string, args ...interface{}) {
if options.LogOutput != nil {
options.LogOutput.Write([]byte(fmt.Sprintf(line, args...))) //nolint:errcheck
}
fmt.Printf(line+"\n", args...)
}
type daemonsetUpdater func(ds string, daemonset *appsv1.DaemonSet) error