in pkg/ecctl/init.go [280:341]
func InitConfig(params InitConfigParams) error {
if err := params.Validate(); err != nil {
return err
}
fmt.Fprint(params.Writer, disclaimer)
configRead := params.Viper.ReadInConfig() == nil
var confirmationMessage = missingConfigMsg
if configRead {
confirmationMessage = existingConfigMsg
params.FilePath = params.Viper.ConfigFileUsed()
if err := printConfig(params.Writer, params.Viper); err != nil {
return err
}
}
outputDevice := output.NewDevice(params.Writer)
scanner := input.NewScanner(params.Reader, outputDevice)
shouldExit := !strings.EqualFold(scanner.Scan(confirmationMessage), "y")
if shouldExit {
return nil
}
// Populate config
var cfg = Config{
Client: params.Client,
OutputDevice: outputDevice,
ErrorDevice: params.ErrWriter,
}
if err := params.Viper.Unmarshal(&cfg); err != nil {
return err
}
// Insecure is set to true by default to allow API calls against HTTPS
// endpoints with self-signed certificates.
cfg.Insecure = true
if err := askInfraSelection(&cfg, scanner, params.Writer, params.ErrWriter, params.PasswordReadFunc); err != nil {
return err
}
if err := askOutputFormat(&cfg, scanner, params.Writer, params.ErrWriter); err != nil {
return err
}
if err := validateAuth(cfg, params.Writer); err != nil {
return err
}
fmt.Fprintln(params.Writer, finalMsg)
if err := setViperConfig(cfg, params.Viper); err != nil {
return err
}
// It's better to write the config as is since it omits defaults and
// empties vs viper's behaviour in `WriteConfig`.
return writeConfig(cfg, params.FilePath, ".json")
}