From 1dc2db8606191ac947b402d4ed77db966a178cf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20=C5=9Aliwka?= Date: Thu, 12 Mar 2020 17:02:44 +0100 Subject: [PATCH] Fix restoring backups when custom certs are used Before this change, `rke etcd snapshot-restore` did not support `--custom-certs` and `--cert-dir` flags. As a result, an attempt to restore snapshot on cluster using custom certificates resulted in fatal error: ``` FATA[0032] CA Certificate or Key is empty ``` This commit adds `--custom-certs` and `--cert-dir` flag handling similar to `rke up` command, resolving the issue. --- cmd/etcd.go | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/cmd/etcd.go b/cmd/etcd.go index 5e403498..572a4e87 100644 --- a/cmd/etcd.go +++ b/cmd/etcd.go @@ -63,7 +63,20 @@ func EtcdCommand() cli.Command { Usage: "Specify s3 folder name", }, } - snapshotFlags = append(snapshotFlags, commonFlags...) + + snapshotSaveFlags := append(snapshotFlags, commonFlags...) + + snapshotRestoreFlags := []cli.Flag{ + cli.StringFlag{ + Name: "cert-dir", + Usage: "Specify a certificate dir path", + }, + cli.BoolFlag{ + Name: "custom-certs", + Usage: "Use custom certificates from a cert dir", + }, + } + snapshotRestoreFlags = append(append(snapshotFlags, snapshotRestoreFlags...), commonFlags...) return cli.Command{ Name: "etcd", @@ -72,13 +85,13 @@ func EtcdCommand() cli.Command { { Name: "snapshot-save", Usage: "Take snapshot on all etcd hosts", - Flags: snapshotFlags, + Flags: snapshotSaveFlags, Action: SnapshotSaveEtcdHostsFromCli, }, { Name: "snapshot-restore", Usage: "Restore existing snapshot", - Flags: snapshotFlags, + Flags: snapshotRestoreFlags, Action: RestoreEtcdSnapshotFromCli, }, }, @@ -230,6 +243,9 @@ func RestoreEtcdSnapshotFromCli(ctx *cli.Context) error { } // setting up the flags flags := cluster.GetExternalFlags(false, false, false, "", filePath) + // Custom certificates and certificate dir flags + flags.CertificateDir = ctx.String("cert-dir") + flags.CustomCerts = ctx.Bool("custom-certs") _, _, _, _, _, err = RestoreEtcdSnapshot(context.Background(), rkeConfig, hosts.DialersOptions{}, flags, map[string]interface{}{}, etcdSnapshotName) return err