func InitConfig()

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")
}