mirror of
https://github.com/skoelle/kctl-tui.git
synced 2026-09-17 20:10:24 +00:00
65 lines
1.8 KiB
Go
65 lines
1.8 KiB
Go
// Package config loads the user-specific, non-versioned kctl-tui
|
|
// configuration (context pairs, team label key) from a YAML file.
|
|
package config
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
|
|
"github.com/skoelle/kctl-tui/internal/kctl"
|
|
)
|
|
|
|
// DefaultAWSSSOLoginCommand is used when the user has not configured a
|
|
// custom login command in their config.yaml.
|
|
const DefaultAWSSSOLoginCommand = "aws sso login"
|
|
|
|
// Config is the root structure of ~/.kctl-tui/config.yaml
|
|
type Config struct {
|
|
ContextPairs []kctl.ContextPair `yaml:"context_pairs"`
|
|
TeamLabelKey string `yaml:"team_label_key"`
|
|
AWSSSOLoginCommand string `yaml:"aws_sso_login_command"`
|
|
}
|
|
|
|
// LoginCommand returns the configured AWS SSO login command, falling back
|
|
// to DefaultAWSSSOLoginCommand if none is set. Organizations that wrap
|
|
// SSO login in a custom script (e.g. to select a specific profile) can
|
|
// override this via aws_sso_login_command in config.yaml.
|
|
func (c Config) LoginCommand() string {
|
|
if c.AWSSSOLoginCommand == "" {
|
|
return DefaultAWSSSOLoginCommand
|
|
}
|
|
return c.AWSSSOLoginCommand
|
|
}
|
|
|
|
// DefaultPath returns the default config file location: ~/.kctl-tui/config.yaml
|
|
func DefaultPath() (string, error) {
|
|
home, err := os.UserHomeDir()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return filepath.Join(home, ".kctl-tui", "config.yaml"), nil
|
|
}
|
|
|
|
// Load reads and parses the config file at path. If the file does not
|
|
// exist, it returns a zero-value Config (no pairs, empty label key) and no
|
|
// error, so the tool can run with sane defaults before the user has set up
|
|
// a config file.
|
|
func Load(path string) (Config, error) {
|
|
cfg := Config{}
|
|
|
|
data, err := os.ReadFile(path)
|
|
if os.IsNotExist(err) {
|
|
return cfg, nil
|
|
}
|
|
if err != nil {
|
|
return cfg, err
|
|
}
|
|
|
|
if err := yaml.Unmarshal(data, &cfg); err != nil {
|
|
return cfg, err
|
|
}
|
|
return cfg, nil
|
|
}
|