From 3817ae5b39fe7b8e00ebf0732210820451a26fde Mon Sep 17 00:00:00 2001 From: Kimmo Lehto Date: Wed, 18 Oct 2023 10:19:02 +0300 Subject: [PATCH] Run reset after k0s install has been run but host doesn't come up If "k0s install" has been run but the host fails to become ready, run "k0s reset" in the phase's cleanup. Signed-off-by: Kimmo Lehto --- action/apply.go | 16 ++++++++++++++++ phase/initialize_k0s.go | 2 ++ phase/install_controllers.go | 1 + phase/install_workers.go | 2 ++ .../k0sctl.k0sproject.io/v1beta1/cluster/host.go | 1 + 5 files changed, 22 insertions(+) diff --git a/action/apply.go b/action/apply.go index 11b2a26a..4a0dbbde 100644 --- a/action/apply.go +++ b/action/apply.go @@ -84,6 +84,22 @@ func (a Apply) Run() error { if result = a.Manager.Run(); result != nil { analytics.Client.Publish("apply-failure", map[string]interface{}{"clusterID": a.Manager.Config.Spec.K0s.Metadata.ClusterID}) + log.Info(phase.Colorize.Red("==> Apply failed").String()) + + var installedHosts []string + for _, h := range a.Manager.Config.Spec.Hosts { + if h.Metadata.K0sInstalled { + installedHosts = append(installedHosts, h.String()) + } + } + if len(installedHosts) > 0 { + log.Warn("Cluster setup failed, but 'k0s install' has been run on the following hosts:") + for _, h := range installedHosts { + log.Warnf(" - %s", h) + } + log.Warn("You may need to reset them before retrying 'k0sctl apply'. See 'k0sctl reset --help' for more information.") + } + return result } diff --git a/phase/initialize_k0s.go b/phase/initialize_k0s.go index a2bf1726..a007feb2 100644 --- a/phase/initialize_k0s.go +++ b/phase/initialize_k0s.go @@ -72,6 +72,8 @@ func (p *InitializeK0s) Run() error { return err } + h.Metadata.K0sInstalled = true + if len(h.Environment) > 0 { log.Infof("%s: updating service environment", h) if err := h.Configurer.UpdateServiceEnvironment(h, h.K0sServiceName(), h.Environment); err != nil { diff --git a/phase/install_controllers.go b/phase/install_controllers.go index 19caa577..a04504c1 100644 --- a/phase/install_controllers.go +++ b/phase/install_controllers.go @@ -119,6 +119,7 @@ func (p *InstallControllers) Run() error { if err = h.Exec(cmd); err != nil { return err } + h.Metadata.K0sInstalled = true if len(h.Environment) > 0 { log.Infof("%s: updating service environment", h) diff --git a/phase/install_workers.go b/phase/install_workers.go index 2c1edaf1..f4848716 100644 --- a/phase/install_workers.go +++ b/phase/install_workers.go @@ -137,6 +137,8 @@ func (p *InstallWorkers) Run() error { return err } + h.Metadata.K0sInstalled = true + if len(h.Environment) > 0 { log.Infof("%s: updating service environment", h) if err := h.Configurer.UpdateServiceEnvironment(h, h.K0sServiceName(), h.Environment); err != nil { diff --git a/pkg/apis/k0sctl.k0sproject.io/v1beta1/cluster/host.go b/pkg/apis/k0sctl.k0sproject.io/v1beta1/cluster/host.go index fbece209..28522b64 100644 --- a/pkg/apis/k0sctl.k0sproject.io/v1beta1/cluster/host.go +++ b/pkg/apis/k0sctl.k0sproject.io/v1beta1/cluster/host.go @@ -175,6 +175,7 @@ type HostMetadata struct { K0sBinaryVersion *version.Version K0sBinaryTempFile string K0sRunningVersion *version.Version + K0sInstalled bool Arch string IsK0sLeader bool Hostname string