277 lines
8.3 KiB
Go
277 lines
8.3 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path"
|
|
|
|
cmd "github.com/influxdata/influx-cli/v2/clients/config"
|
|
"github.com/influxdata/influx-cli/v2/config"
|
|
"github.com/influxdata/influx-cli/v2/pkg/cli/middleware"
|
|
"github.com/urfave/cli"
|
|
)
|
|
|
|
var configPathAndPrintFlags = append([]cli.Flag{configPathFlag()}, printFlags()...)
|
|
|
|
func newConfigCmd() cli.Command {
|
|
return cli.Command{
|
|
Name: "config",
|
|
Usage: "Config management commands",
|
|
ArgsUsage: "[config name]",
|
|
Description: `
|
|
Providing no argument to the config command will print the active configuration.
|
|
When an argument is provided, the active config will be switched to the config with
|
|
a name matching that of the argument provided.
|
|
|
|
Examples:
|
|
# show active config
|
|
influx config
|
|
|
|
# set active config to previously active config
|
|
influx config -
|
|
|
|
# set active config
|
|
influx config $CONFIG_NAME
|
|
|
|
The influx config command displays the active InfluxDB connection configuration and
|
|
manages multiple connection configurations stored, by default, in ~/.influxdbv2/configs.
|
|
Each connection includes a URL, token, associated organization, and active setting.
|
|
InfluxDB reads the token from the active connection configuration, so you don't have
|
|
to manually enter a token to log into InfluxDB.
|
|
|
|
For information about the config command, see
|
|
https://docs.influxdata.com/influxdb/latest/reference/cli/influx/config/
|
|
`,
|
|
Before: withCli(),
|
|
Flags: configPathAndPrintFlags,
|
|
Action: func(ctx *cli.Context) error {
|
|
prog := path.Base(os.Args[0])
|
|
if ctx.NArg() > 1 {
|
|
return fmt.Errorf("usage: %s config [config name]", prog)
|
|
}
|
|
client := cmd.Client{CLI: getCLI(ctx)}
|
|
if ctx.NArg() == 1 {
|
|
return client.SwitchActive(ctx.Args().Get(0))
|
|
}
|
|
return client.PrintActive()
|
|
},
|
|
Subcommands: []cli.Command{
|
|
newConfigCreateCmd(),
|
|
newConfigDeleteCmd(),
|
|
newConfigUpdateCmd(),
|
|
newConfigListCmd(),
|
|
},
|
|
}
|
|
}
|
|
|
|
func newConfigCreateCmd() cli.Command {
|
|
var cfg config.Config
|
|
var userpass string
|
|
return cli.Command{
|
|
Name: "create",
|
|
Usage: "Create config",
|
|
Description: `
|
|
The influx config create command creates a new InfluxDB connection configuration
|
|
and stores it in the configs file (by default, stored at ~/.influxdbv2/configs).
|
|
|
|
Authentication:
|
|
Authentication can be provided by either an api token or username/password, but not both.
|
|
When setting the username and password, the password is saved unencrypted in your local config file.
|
|
Optionally, you can omit the password and only provide the username.
|
|
You will then be prompted for the password each time.
|
|
|
|
Examples:
|
|
# create a config and set it active
|
|
influx config create -a -n $CFG_NAME -u $HOST_URL -t $TOKEN -o $ORG_NAME
|
|
|
|
# create a config and without setting it active
|
|
influx config create -n $CFG_NAME -u $HOST_URL -t $TOKEN -o $ORG_NAME
|
|
|
|
For information about the config command, see
|
|
https://docs.influxdata.com/influxdb/latest/reference/cli/influx/config/
|
|
and
|
|
https://docs.influxdata.com/influxdb/latest/reference/cli/influx/config/create/
|
|
`,
|
|
Before: middleware.WithBeforeFns(withCli(), middleware.NoArgs),
|
|
Flags: append(
|
|
configPathAndPrintFlags,
|
|
&cli.StringFlag{
|
|
Name: "config-name, n",
|
|
Usage: "Name for the new config",
|
|
Required: true,
|
|
Destination: &cfg.Name,
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "host-url, u",
|
|
Usage: "Base URL of the InfluxDB server the new config should target",
|
|
Required: true,
|
|
Destination: &cfg.Host,
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "token, t",
|
|
Usage: "Auth token to use when communicating with the InfluxDB server",
|
|
Destination: &cfg.Token,
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "username-password, p",
|
|
Usage: "Username (and optionally password) to use for authentication. Only supported in OSS",
|
|
Destination: &userpass,
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "org, o",
|
|
Usage: "Default organization name to use in the new config",
|
|
Destination: &cfg.Org,
|
|
},
|
|
&cli.BoolFlag{
|
|
Name: "active, a",
|
|
Usage: "Set the new config as active",
|
|
Destination: &cfg.Active,
|
|
},
|
|
),
|
|
Action: func(ctx *cli.Context) error {
|
|
if cfg.Token != "" && userpass != "" {
|
|
return fmt.Errorf("cannot specify `--token` and `--username-password` together, please choose one")
|
|
}
|
|
client := cmd.Client{CLI: getCLI(ctx)}
|
|
if userpass != "" {
|
|
return client.CreateWithUserPass(cfg, userpass)
|
|
}
|
|
return client.Create(cfg)
|
|
},
|
|
}
|
|
}
|
|
|
|
func newConfigDeleteCmd() cli.Command {
|
|
return cli.Command{
|
|
Name: "rm",
|
|
Aliases: []string{"delete", "remove"},
|
|
Usage: "Delete config",
|
|
ArgsUsage: "[cfg_name]...",
|
|
Description: `
|
|
The influx config delete command deletes an InfluxDB connection configuration from
|
|
the configs file (by default, stored at ~/.influxdbv2/configs).
|
|
|
|
Examples:
|
|
# delete a config
|
|
influx config rm $CFG_NAME
|
|
|
|
# delete multiple configs
|
|
influx config rm $CFG_NAME_1 $CFG_NAME_2
|
|
|
|
For information about the config command, see
|
|
https://docs.influxdata.com/influxdb/latest/reference/cli/influx/config/
|
|
and
|
|
https://docs.influxdata.com/influxdb/latest/reference/cli/influx/config/rm/
|
|
`,
|
|
Before: withCli(),
|
|
Flags: append([]cli.Flag{configPathFlag()}, printFlags()...),
|
|
Action: func(ctx *cli.Context) error {
|
|
client := cmd.Client{CLI: getCLI(ctx)}
|
|
return client.Delete(ctx.Args())
|
|
},
|
|
}
|
|
}
|
|
|
|
func newConfigUpdateCmd() cli.Command {
|
|
var cfg config.Config
|
|
var userpass string
|
|
return cli.Command{
|
|
Name: "set",
|
|
Aliases: []string{"update"},
|
|
Usage: "Update config",
|
|
Description: `
|
|
The influx config set command updates information in an InfluxDB connection
|
|
configuration in the configs file (by default, stored at ~/.influxdbv2/configs).
|
|
|
|
Examples:
|
|
# update a config and set active
|
|
influx config set -a -n $CFG_NAME -u $HOST_URL -t $TOKEN -o $ORG_NAME
|
|
|
|
# update a config and do not set to active
|
|
influx config set -n $CFG_NAME -u $HOST_URL -t $TOKEN -o $ORG_NAME
|
|
|
|
For information about the config command, see
|
|
https://docs.influxdata.com/influxdb/latest/reference/cli/influx/config/
|
|
and
|
|
https://docs.influxdata.com/influxdb/latest/reference/cli/influx/config/set/
|
|
`,
|
|
Before: middleware.WithBeforeFns(withCli(), middleware.NoArgs),
|
|
Flags: append(
|
|
configPathAndPrintFlags,
|
|
&cli.StringFlag{
|
|
Name: "config-name, n",
|
|
Usage: "Name of the config to update",
|
|
Required: true,
|
|
Destination: &cfg.Name,
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "host-url, u",
|
|
Usage: "New URL to set on the config",
|
|
Destination: &cfg.Host,
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "token, t",
|
|
Usage: "New auth token to set on the config",
|
|
Destination: &cfg.Token,
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "username-password, p",
|
|
Usage: "Username (and optionally password) to use for authentication. Only supported in OSS",
|
|
Destination: &userpass,
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "org, o",
|
|
Usage: "New default organization to set on the config",
|
|
Destination: &cfg.Org,
|
|
},
|
|
&cli.BoolFlag{
|
|
Name: "active, a",
|
|
Usage: "Set the config as active",
|
|
Destination: &cfg.Active,
|
|
},
|
|
),
|
|
Action: func(ctx *cli.Context) error {
|
|
if cfg.Token != "" && userpass != "" {
|
|
return fmt.Errorf("cannot specify `--token` and `--username-password` together, please choose one")
|
|
}
|
|
client := cmd.Client{CLI: getCLI(ctx)}
|
|
if userpass != "" {
|
|
return client.UpdateWithUserPass(cfg, userpass)
|
|
}
|
|
return client.Update(cfg)
|
|
},
|
|
}
|
|
}
|
|
|
|
func newConfigListCmd() cli.Command {
|
|
return cli.Command{
|
|
Name: "ls",
|
|
Aliases: []string{"list"},
|
|
Usage: "List configs",
|
|
Description: `
|
|
The influx config ls command lists all InfluxDB connection configurations
|
|
in the configs file (by default, stored at ~/.influxdbv2/configs). Each
|
|
connection configuration includes a URL, authentication token, and active
|
|
setting. An asterisk (*) indicates the active configuration.
|
|
|
|
Examples:
|
|
# list configs
|
|
influx config ls
|
|
|
|
# list configs with long alias
|
|
influx config list
|
|
|
|
For information about the config command, see
|
|
https://docs.influxdata.com/influxdb/latest/reference/cli/influx/config/
|
|
and
|
|
https://docs.influxdata.com/influxdb/latest/reference/cli/influx/config/list/
|
|
`,
|
|
Before: middleware.WithBeforeFns(withCli(), middleware.NoArgs),
|
|
Flags: configPathAndPrintFlags,
|
|
Action: func(ctx *cli.Context) error {
|
|
client := cmd.Client{CLI: getCLI(ctx)}
|
|
return client.List()
|
|
},
|
|
}
|
|
}
|