Files
influx-cli/cmd/influx/config.go

248 lines
7.1 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
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).
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",
Required: true,
Destination: &cfg.Token,
},
&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 {
client := cmd.Client{CLI: getCLI(ctx)}
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
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: "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 {
client := cmd.Client{CLI: getCLI(ctx)}
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()
},
}
}