From ad40da3271c216e983428e303b53e2ddbcffccf3 Mon Sep 17 00:00:00 2001 From: Brad Davidson Date: Tue, 1 Mar 2022 13:33:01 -0800 Subject: [PATCH] Fix etcd-snapshot commands by making setup more consistent. Signed-off-by: Brad Davidson (cherry picked from commit a7878db17f5ecc4f09483d939c5926b1eae16662) --- cmd/etcdsnapshot/main.go | 4 +- cmd/server/main.go | 4 +- main.go | 4 +- pkg/cli/etcdsnapshot/etcd_snapshot.go | 53 +++++++++++++-------------- 4 files changed, 32 insertions(+), 33 deletions(-) diff --git a/cmd/etcdsnapshot/main.go b/cmd/etcdsnapshot/main.go index 0ad08000f6..071a82730b 100644 --- a/cmd/etcdsnapshot/main.go +++ b/cmd/etcdsnapshot/main.go @@ -15,12 +15,12 @@ import ( func main() { app := cmds.NewApp() app.Commands = []cli.Command{ - cmds.NewEtcdSnapshotCommand(etcdsnapshot.Run, + cmds.NewEtcdSnapshotCommand(etcdsnapshot.Save, cmds.NewEtcdSnapshotSubcommands( etcdsnapshot.Delete, etcdsnapshot.List, etcdsnapshot.Prune, - etcdsnapshot.Run), + etcdsnapshot.Save), ), } diff --git a/cmd/server/main.go b/cmd/server/main.go index 0e3d8cee87..12624b0c78 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -47,12 +47,12 @@ func main() { cmds.NewKubectlCommand(kubectl.Run), cmds.NewCRICTL(crictl.Run), cmds.NewCtrCommand(ctr.Run), - cmds.NewEtcdSnapshotCommand(etcdsnapshot.Run, + cmds.NewEtcdSnapshotCommand(etcdsnapshot.Save, cmds.NewEtcdSnapshotSubcommands( etcdsnapshot.Delete, etcdsnapshot.List, etcdsnapshot.Prune, - etcdsnapshot.Run), + etcdsnapshot.Save), ), cmds.NewSecretsEncryptCommand(cli.ShowAppHelp, cmds.NewSecretsEncryptSubcommands( diff --git a/main.go b/main.go index 1eb41188c4..3da505e6dc 100644 --- a/main.go +++ b/main.go @@ -31,12 +31,12 @@ func main() { cmds.NewAgentCommand(agent.Run), cmds.NewKubectlCommand(kubectl.Run), cmds.NewCRICTL(crictl.Run), - cmds.NewEtcdSnapshotCommand(etcdsnapshot.Run, + cmds.NewEtcdSnapshotCommand(etcdsnapshot.Save, cmds.NewEtcdSnapshotSubcommands( etcdsnapshot.Delete, etcdsnapshot.List, etcdsnapshot.Prune, - etcdsnapshot.Run), + etcdsnapshot.Save), ), cmds.NewSecretsEncryptCommand(cli.ShowAppHelp, cmds.NewSecretsEncryptSubcommands( diff --git a/pkg/cli/etcdsnapshot/etcd_snapshot.go b/pkg/cli/etcdsnapshot/etcd_snapshot.go index b98941174b..32b203a6c2 100644 --- a/pkg/cli/etcdsnapshot/etcd_snapshot.go +++ b/pkg/cli/etcdsnapshot/etcd_snapshot.go @@ -24,22 +24,27 @@ import ( // commandSetup setups up common things needed // for each etcd command. -func commandSetup(app *cli.Context, cfg *cmds.Server, sc *server.Config) (string, error) { +func commandSetup(app *cli.Context, cfg *cmds.Server, sc *server.Config) error { gspt.SetProcTitle(os.Args[0]) nodeName := app.String("node-name") if nodeName == "" { h, err := os.Hostname() if err != nil { - return "", err + return err } nodeName = h } os.Setenv("NODE_NAME", nodeName) + dataDir, err := server.ResolveDataDir(cfg.DataDir) + if err != nil { + return err + } + sc.DisableAgent = true - sc.ControlConfig.DataDir = cfg.DataDir + sc.ControlConfig.DataDir = dataDir sc.ControlConfig.EtcdSnapshotName = cfg.EtcdSnapshotName sc.ControlConfig.EtcdSnapshotDir = cfg.EtcdSnapshotDir sc.ControlConfig.EtcdSnapshotCompress = cfg.EtcdSnapshotCompress @@ -56,22 +61,31 @@ func commandSetup(app *cli.Context, cfg *cmds.Server, sc *server.Config) (string sc.ControlConfig.EtcdS3Insecure = cfg.EtcdS3Insecure sc.ControlConfig.EtcdS3Timeout = cfg.EtcdS3Timeout sc.ControlConfig.Runtime = &config.ControlRuntime{} + sc.ControlConfig.Runtime.ETCDServerCA = filepath.Join(dataDir, "tls", "etcd", "server-ca.crt") + sc.ControlConfig.Runtime.ClientETCDCert = filepath.Join(dataDir, "tls", "etcd", "client.crt") + sc.ControlConfig.Runtime.ClientETCDKey = filepath.Join(dataDir, "tls", "etcd", "client.key") + sc.ControlConfig.Runtime.KubeConfigAdmin = filepath.Join(dataDir, "cred", "admin.kubeconfig") - return server.ResolveDataDir(cfg.DataDir) + return nil } +// Run is an alias for Save, retained for compatibility reasons. func Run(app *cli.Context) error { + return Save(app) +} + +// Save triggers an on-demand etcd snapshot operation +func Save(app *cli.Context) error { if err := cmds.InitLogging(); err != nil { return err } - return run(app, &cmds.ServerConfig) + return save(app, &cmds.ServerConfig) } -func run(app *cli.Context, cfg *cmds.Server) error { +func save(app *cli.Context, cfg *cmds.Server) error { var serverConfig server.Config - dataDir, err := commandSetup(app, cfg, &serverConfig) - if err != nil { + if err := commandSetup(app, cfg, &serverConfig); err != nil { return err } @@ -79,12 +93,7 @@ func run(app *cli.Context, cfg *cmds.Server) error { return util2.ErrCommandNoArgs } - serverConfig.ControlConfig.DataDir = dataDir serverConfig.ControlConfig.EtcdSnapshotRetention = 0 // disable retention check - serverConfig.ControlConfig.Runtime.ETCDServerCA = filepath.Join(dataDir, "tls", "etcd", "server-ca.crt") - serverConfig.ControlConfig.Runtime.ClientETCDCert = filepath.Join(dataDir, "tls", "etcd", "client.crt") - serverConfig.ControlConfig.Runtime.ClientETCDKey = filepath.Join(dataDir, "tls", "etcd", "client.key") - serverConfig.ControlConfig.Runtime.KubeConfigAdmin = filepath.Join(dataDir, "cred", "admin.kubeconfig") ctx := signals.SetupSignalContext() e := etcd.NewETCD() @@ -97,7 +106,7 @@ func run(app *cli.Context, cfg *cmds.Server) error { return err } if !initialized { - return fmt.Errorf("etcd database not found in %s", dataDir) + return fmt.Errorf("etcd database not found in %s", serverConfig.ControlConfig.DataDir) } cluster := cluster.New(&serverConfig.ControlConfig) @@ -125,8 +134,7 @@ func Delete(app *cli.Context) error { func delete(app *cli.Context, cfg *cmds.Server) error { var serverConfig server.Config - dataDir, err := commandSetup(app, cfg, &serverConfig) - if err != nil { + if err := commandSetup(app, cfg, &serverConfig); err != nil { return err } @@ -135,9 +143,6 @@ func delete(app *cli.Context, cfg *cmds.Server) error { return errors.New("no snapshots given for removal") } - serverConfig.ControlConfig.DataDir = dataDir - serverConfig.ControlConfig.Runtime.KubeConfigAdmin = filepath.Join(dataDir, "cred", "admin.kubeconfig") - ctx := signals.SetupSignalContext() e := etcd.NewETCD() if err := e.SetControlConfig(ctx, &serverConfig.ControlConfig); err != nil { @@ -174,13 +179,10 @@ func validEtcdListFormat(format string) bool { func list(app *cli.Context, cfg *cmds.Server) error { var serverConfig server.Config - dataDir, err := commandSetup(app, cfg, &serverConfig) - if err != nil { + if err := commandSetup(app, cfg, &serverConfig); err != nil { return err } - serverConfig.ControlConfig.DataDir = dataDir - ctx := signals.SetupSignalContext() e := etcd.NewETCD() if err := e.SetControlConfig(ctx, &serverConfig.ControlConfig); err != nil { @@ -241,14 +243,11 @@ func Prune(app *cli.Context) error { func prune(app *cli.Context, cfg *cmds.Server) error { var serverConfig server.Config - dataDir, err := commandSetup(app, cfg, &serverConfig) - if err != nil { + if err := commandSetup(app, cfg, &serverConfig); err != nil { return err } - serverConfig.ControlConfig.DataDir = dataDir serverConfig.ControlConfig.EtcdSnapshotRetention = cfg.EtcdSnapshotRetention - serverConfig.ControlConfig.Runtime.KubeConfigAdmin = filepath.Join(dataDir, "cred", "admin.kubeconfig") ctx := signals.SetupSignalContext() e := etcd.NewETCD()