100 lines
2.8 KiB
Go
100 lines
2.8 KiB
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/influxdata/influx-cli/v2/clients/restore"
|
|
"github.com/influxdata/influx-cli/v2/pkg/cli/middleware"
|
|
"github.com/urfave/cli"
|
|
)
|
|
|
|
func newRestoreCmd() cli.Command {
|
|
var params restore.Params
|
|
|
|
return cli.Command{
|
|
Name: "restore",
|
|
Usage: "Restores a backup directory to InfluxDB",
|
|
Description: `Restore influxdb.
|
|
|
|
Examples:
|
|
# backup all data
|
|
influx restore /path/to/restore
|
|
`,
|
|
ArgsUsage: "path",
|
|
Before: middleware.WithBeforeFns(withCli(), withApi(true)),
|
|
Flags: append(
|
|
commonFlagsNoPrint(),
|
|
&cli.BoolFlag{
|
|
Name: "full",
|
|
Usage: "Fully restore and replace all data on server",
|
|
Destination: ¶ms.Full,
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "org-id",
|
|
Usage: "The original ID of the organization to restore",
|
|
EnvVar: "INFLUX_ORG_ID",
|
|
Destination: ¶ms.OrgID,
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "org, o",
|
|
Usage: "The original name of the organization to restore",
|
|
EnvVar: "INFLUX_ORG",
|
|
Destination: ¶ms.OrgName,
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "bucket-id",
|
|
Usage: "The original ID of the bucket to restore",
|
|
Destination: ¶ms.BucketID,
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "bucket, b",
|
|
Usage: "The original name of the bucket to restore",
|
|
Destination: ¶ms.BucketName,
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "new-bucket",
|
|
Usage: "New name to use for the restored bucket",
|
|
Destination: ¶ms.NewBucketName,
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "new-org",
|
|
Usage: "New name to use for the restored organization",
|
|
Destination: ¶ms.NewOrgName,
|
|
},
|
|
),
|
|
Action: func(ctx *cli.Context) error {
|
|
if ctx.NArg() != 1 {
|
|
return errors.New("restore path must be specified as a single positional argument")
|
|
}
|
|
params.Path = ctx.Args().Get(0)
|
|
|
|
if params.Full && (params.OrgName != "" ||
|
|
params.OrgID != "" ||
|
|
params.BucketName != "" ||
|
|
params.BucketID != "" ||
|
|
params.NewOrgName != "" ||
|
|
params.NewBucketName != "") {
|
|
return errors.New("--full restore cannot be limited to a single org or bucket")
|
|
}
|
|
|
|
if params.NewOrgName != "" && params.OrgID == "" && params.OrgName == "" {
|
|
return errors.New("--org-id or --org must be set to use --new-org")
|
|
}
|
|
if params.NewBucketName != "" && params.BucketID == "" && params.BucketName == "" {
|
|
return errors.New("--bucket-id or --bucket must be set to use --new-bucket")
|
|
}
|
|
|
|
api := getAPI(ctx)
|
|
client := restore.Client{
|
|
CLI: getCLI(ctx),
|
|
HealthApi: api.HealthApi,
|
|
RestoreApi: api.RestoreApi,
|
|
BucketsApi: api.BucketsApi,
|
|
OrganizationsApi: api.OrganizationsApi,
|
|
ApiConfig: api,
|
|
}
|
|
return client.Restore(getContext(ctx), ¶ms)
|
|
},
|
|
}
|
|
}
|