84 lines
1.9 KiB
Go
84 lines
1.9 KiB
Go
package run
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
|
|
"github.com/BurntSushi/toml"
|
|
)
|
|
|
|
// PrintConfigCommand represents the command executed by "influxd config".
|
|
type PrintConfigCommand struct {
|
|
Stdin io.Reader
|
|
Stdout io.Writer
|
|
Stderr io.Writer
|
|
}
|
|
|
|
// NewPrintConfigCommand return a new instance of PrintConfigCommand.
|
|
func NewPrintConfigCommand() *PrintConfigCommand {
|
|
return &PrintConfigCommand{
|
|
Stdin: os.Stdin,
|
|
Stdout: os.Stdout,
|
|
Stderr: os.Stderr,
|
|
}
|
|
}
|
|
|
|
// Run parses and prints the current config loaded.
|
|
func (cmd *PrintConfigCommand) Run(args ...string) error {
|
|
// Parse command flags.
|
|
fs := flag.NewFlagSet("", flag.ContinueOnError)
|
|
configPath := fs.String("config", "", "")
|
|
hostname := fs.String("hostname", "", "")
|
|
fs.Usage = func() { fmt.Fprintln(cmd.Stderr, printConfigUsage) }
|
|
if err := fs.Parse(args); err != nil {
|
|
return err
|
|
}
|
|
|
|
// Parse config from path.
|
|
config, err := cmd.parseConfig(*configPath)
|
|
if err != nil {
|
|
return fmt.Errorf("parse config: %s", err)
|
|
}
|
|
|
|
// Apply any environment variables on top of the parsed config
|
|
if err := config.ApplyEnvOverrides(); err != nil {
|
|
return fmt.Errorf("apply env config: %v", err)
|
|
}
|
|
|
|
// Override config properties.
|
|
if *hostname != "" {
|
|
config.Meta.Hostname = *hostname
|
|
}
|
|
|
|
// Validate the configuration.
|
|
if err := config.Validate(); err != nil {
|
|
return fmt.Errorf("%s. To generate a valid configuration file run `influxd config > influxdb.generated.conf`", err)
|
|
}
|
|
|
|
toml.NewEncoder(cmd.Stdout).Encode(config)
|
|
fmt.Fprint(cmd.Stdout, "\n")
|
|
|
|
return nil
|
|
}
|
|
|
|
// ParseConfig parses the config at path.
|
|
// Returns a demo configuration if path is blank.
|
|
func (cmd *PrintConfigCommand) parseConfig(path string) (*Config, error) {
|
|
if path == "" {
|
|
return NewDemoConfig()
|
|
}
|
|
|
|
config := NewConfig()
|
|
if _, err := toml.DecodeFile(path, &config); err != nil {
|
|
return nil, err
|
|
}
|
|
return config, nil
|
|
}
|
|
|
|
var printConfigUsage = `usage: config
|
|
|
|
config displays the default configuration
|
|
`
|