From 73df65d93a9fde0ccf8fec40c04423fd96e32a4f Mon Sep 17 00:00:00 2001 From: Hussein Galal Date: Tue, 16 Mar 2021 18:14:43 +0200 Subject: [PATCH] remove etcd data dir when etcd is disabled (#3059) * remove etcd data dir when etcd is disabled Signed-off-by: galal-hussein * fix comment Signed-off-by: galal-hussein * more fixes Signed-off-by: galal-hussein * use debug instead of info logs Signed-off-by: galal-hussein --- pkg/cluster/storage.go | 5 +++++ pkg/etcd/etcd.go | 10 +++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/pkg/cluster/storage.go b/pkg/cluster/storage.go index e6c74b90cb..4df5635164 100644 --- a/pkg/cluster/storage.go +++ b/pkg/cluster/storage.go @@ -3,6 +3,7 @@ package cluster import ( "bytes" "context" + "strings" "github.com/k3s-io/kine/pkg/client" "github.com/rancher/k3s/pkg/bootstrap" @@ -23,6 +24,7 @@ func (c *Cluster) save(ctx context.Context) error { if err != nil { return err } + storageClient, err := client.New(c.etcdConfig) if err != nil { return err @@ -32,6 +34,9 @@ func (c *Cluster) save(ctx context.Context) error { if err.Error() == "key exists" { logrus.Warnln("Bootstrap key exists. Please follow documentation updating a node after restore.") return nil + } else if strings.Contains(err.Error(), "not supported for learner") { + logrus.Debug("Skipping bootstrap data save on learner.") + return nil } return err } diff --git a/pkg/etcd/etcd.go b/pkg/etcd/etcd.go index 998acc56dd..ddd01e5ff6 100644 --- a/pkg/etcd/etcd.go +++ b/pkg/etcd/etcd.go @@ -1011,5 +1011,13 @@ func (e *ETCD) GetMembersClientURLs(ctx context.Context) ([]string, error) { // RemoveSelf will remove the member if it exists in the cluster func (e *ETCD) RemoveSelf(ctx context.Context) error { - return e.removePeer(ctx, e.name, e.address, true) + if err := e.removePeer(ctx, e.name, e.address, true); err != nil { + return err + } + + // backup the data dir to avoid issues when re-enabling etcd + oldDataDir := etcdDBDir(e.config) + "-old-" + strconv.Itoa(int(time.Now().Unix())) + + // move the data directory to a temp path + return os.Rename(etcdDBDir(e.config), oldDataDir) }