diff --git a/cmd/common.go b/cmd/common.go index 0ad74a4b..962d9cff 100644 --- a/cmd/common.go +++ b/cmd/common.go @@ -117,6 +117,7 @@ func setS3OptionsFromCLI(c *cli.Context) *v3.S3BackupConfig { accessKey := c.String("access-key") secretKey := c.String("secret-key") endpointCA := c.String("s3-endpoint-ca") + folder := c.String("folder") var s3BackupBackend = &v3.S3BackupConfig{} if len(endpoint) != 0 { s3BackupBackend.Endpoint = endpoint @@ -141,6 +142,9 @@ func setS3OptionsFromCLI(c *cli.Context) *v3.S3BackupConfig { s3BackupBackend.CustomCA = caStr } } + if len(folder) != 0 { + s3BackupBackend.Folder = folder + } return s3BackupBackend } diff --git a/cmd/etcd.go b/cmd/etcd.go index d622f568..4c76edf9 100644 --- a/cmd/etcd.go +++ b/cmd/etcd.go @@ -58,6 +58,10 @@ func EtcdCommand() cli.Command { Name: "region", Usage: "Specify the s3 bucket location (optional)", }, + cli.StringFlag{ + Name: "folder", + Usage: "Specify s3 folder name", + }, } snapshotFlags = append(snapshotFlags, commonFlags...) diff --git a/services/etcd.go b/services/etcd.go index 0765b6d3..19e579fe 100644 --- a/services/etcd.go +++ b/services/etcd.go @@ -381,6 +381,9 @@ func DownloadEtcdSnapshotFromS3(ctx context.Context, etcdHost *hosts.Host, prsMa caStr := base64.StdEncoding.EncodeToString([]byte(s3Backend.CustomCA)) imageCfg.Cmd = append(imageCfg.Cmd, "--s3-endpoint-ca="+caStr) } + if s3Backend.Folder != "" { + imageCfg.Cmd = append(imageCfg.Cmd, "--s3-folder="+s3Backend.Folder) + } hostCfg := &container.HostConfig{ Binds: []string{ fmt.Sprintf("%s:/backup:z", EtcdSnapshotPath), @@ -571,6 +574,9 @@ func configS3BackupImgCmd(ctx context.Context, imageCfg *container.Config, bc *v caStr := base64.StdEncoding.EncodeToString([]byte(bc.S3BackupConfig.CustomCA)) cmd = append(cmd, "--s3-endpoint-ca="+caStr) } + if bc.S3BackupConfig.Folder != "" { + cmd = append(cmd, "--s3-folder="+bc.S3BackupConfig.Folder) + } } imageCfg.Cmd = append(imageCfg.Cmd, cmd...) return imageCfg