From 9f1f36215abacfa27d38961abf0584f5db30bfda Mon Sep 17 00:00:00 2001 From: Andrew Woodlee Date: Wed, 19 Mar 2025 22:40:06 -0500 Subject: [PATCH] v0.10.2 --- pkg/backy/backy.go | 6 ++++++ pkg/backy/config.go | 33 ++++++++++++++++++++++----------- pkg/backy/types.go | 16 ++++++++++++++-- 3 files changed, 42 insertions(+), 13 deletions(-) diff --git a/pkg/backy/backy.go b/pkg/backy/backy.go index 8c82f4f..fc9d93b 100644 --- a/pkg/backy/backy.go +++ b/pkg/backy/backy.go @@ -537,6 +537,12 @@ func logCommandOutput(command *Command, cmdOutBuf bytes.Buffer, cmdCtxLogger zer return outputArr } +func (c *Command) GetVariablesFromConf(opts *ConfigOpts) { + c.ScriptEnvFile = replaceVarInString(opts.Vars, c.ScriptEnvFile, opts.Logger) + c.Name = replaceVarInString(opts.Vars, c.Name, opts.Logger) + c.OutputFile = replaceVarInString(opts.Vars, c.OutputFile, opts.Logger) +} + // func executeUserCommands() []string { // } diff --git a/pkg/backy/config.go b/pkg/backy/config.go index 6232cc0..4a4af03 100644 --- a/pkg/backy/config.go +++ b/pkg/backy/config.go @@ -104,7 +104,7 @@ func (opts *ConfigOpts) ReadConfig() *ConfigOpts { backyKoanf := opts.koanf if backyKoanf.Exists("variables") { - unmarshalConfig(backyKoanf, "variables", &opts.Vars, opts.Logger) + unmarshalConfigIntoStruct(backyKoanf, "variables", &opts.Vars, opts.Logger) } getConfigDir(opts) @@ -131,15 +131,15 @@ func (opts *ConfigOpts) ReadConfig() *ConfigOpts { log.Info().Str("config file", opts.ConfigFilePath).Send() - if err := opts.setupVault(); err != nil { + if err := opts.initVault(); err != nil { log.Err(err).Send() } - unmarshalConfig(backyKoanf, "commands", &opts.Cmds, opts.Logger) + unmarshalConfigIntoStruct(backyKoanf, "commands", &opts.Cmds, opts.Logger) getCommandEnvironments(opts) - unmarshalConfig(backyKoanf, "hosts", &opts.Hosts, opts.Logger) + unmarshalConfigIntoStruct(backyKoanf, "hosts", &opts.Hosts, opts.Logger) resolveHostConfigs(opts) @@ -163,7 +163,7 @@ func (opts *ConfigOpts) ReadConfig() *ConfigOpts { filterExecuteLists(opts) if backyKoanf.Exists("notifications") { - unmarshalConfig(backyKoanf, "notifications", &opts.NotificationConf, opts.Logger) + unmarshalConfigIntoStruct(backyKoanf, "notifications", &opts.NotificationConf, opts.Logger) } opts.SetupNotify() @@ -251,7 +251,7 @@ func setupLogger(opts *ConfigOpts) zerolog.Logger { return zerolog.New(writers).With().Timestamp().Logger() } -func unmarshalConfig(k *koanf.Koanf, key string, target interface{}, log zerolog.Logger) { +func unmarshalConfigIntoStruct(k *koanf.Koanf, key string, target interface{}, log zerolog.Logger) { if err := k.UnmarshalWithConf(key, target, koanf.UnmarshalConf{Tag: "yaml"}); err != nil { logging.ExitWithMSG(fmt.Sprintf("error unmarshaling key %s into struct: %v", key, err), 1, &log) } @@ -331,7 +331,7 @@ func loadCommandLists(opts *ConfigOpts, backyKoanf *koanf.Koanf) { if backyKoanf.Exists("cmdLists.file") { loadCmdListsFile(backyKoanf, listsConfig, opts) } else { - unmarshalConfig(backyKoanf, "cmdLists", &opts.CmdConfigLists, opts.Logger) + unmarshalConfigIntoStruct(backyKoanf, "cmdLists", &opts.CmdConfigLists, opts.Logger) } } } @@ -371,7 +371,7 @@ func loadListConfigFile(filePath string, k *koanf.Koanf, opts *ConfigOpts) bool return false } - unmarshalConfig(k, "cmdLists", &opts.CmdConfigLists, opts.Logger) + unmarshalConfigIntoStruct(k, "cmdLists", &opts.CmdConfigLists, opts.Logger) keyNotSupported("cmd-lists", "cmdLists", k, opts, true) opts.CmdListFile = filePath return true @@ -399,7 +399,7 @@ func loadCmdListsFile(backyKoanf *koanf.Koanf, listsConfig *koanf.Koanf, opts *C } keyNotSupported("cmd-lists", "cmdLists", listsConfig, opts, true) - unmarshalConfig(listsConfig, "cmdLists", &opts.CmdConfigLists, opts.Logger) + unmarshalConfigIntoStruct(listsConfig, "cmdLists", &opts.CmdConfigLists, opts.Logger) opts.Logger.Info().Str("using lists config file", opts.CmdListFile).Send() } @@ -456,7 +456,7 @@ func getLoggingKeyFromConfig(key string) string { // return fmt.Sprintf("cmdLists.%s", list) // } -func (opts *ConfigOpts) setupVault() error { +func (opts *ConfigOpts) initVault() error { if !opts.koanf.Bool("vault.enabled") { return nil } @@ -477,7 +477,7 @@ func (opts *ConfigOpts) setupVault() error { token = os.Getenv("VAULT_TOKEN") } if strings.TrimSpace(token) == "" { - return fmt.Errorf("no token found, but one was required. \n\nSet the config key vault.token or the environment variable VAULT_TOKEN") + return fmt.Errorf("no token found. One is required. \n\nSet the config key vault.token or the environment variable VAULT_TOKEN") } client.SetToken(token) @@ -489,6 +489,11 @@ func (opts *ConfigOpts) setupVault() error { opts.vaultClient = client + for _, v := range opts.VaultKeys { + v.Name = replaceVarInString(opts.Vars, v.Key, opts.Logger) + v.MountPath = replaceVarInString(opts.Vars, v.MountPath, opts.Logger) + } + return nil } @@ -728,3 +733,9 @@ func replaceVarInString(vars map[string]string, str string, logger zerolog.Logge } return str } + +func VariadicFunctionParameterTest(allowedKeys ...string) { + if contains(allowedKeys, "file") { + println("file param included") + } +} diff --git a/pkg/backy/types.go b/pkg/backy/types.go index 6049359..2ed4491 100644 --- a/pkg/backy/types.go +++ b/pkg/backy/types.go @@ -278,8 +278,9 @@ type ( } // use ints so we can use enums - CommandType int - PackageOperation int + CommandType int + PackageOperation int + AllowedExternalDirectives int ) //go:generate go run github.com/dmarkham/enumer -linecomment -yaml -text -json -type=CommandType @@ -302,3 +303,14 @@ const ( PackOpCheckVersion // checkVersion PackOpIsInstalled // isInstalled ) + +//go:generate go run github.com/dmarkham/enumer -linecomment -yaml -text -json -type=AllowedExternalDirectives +const ( + DefaultExternalDir AllowedExternalDirectives = iota + AllowedExternalDirectiveVault // vault + AllowedExternalDirectiveVaultFile // vault-file + AllowedExternalDirectiveAll // vault-file-env + AllowedExternalDirectiveFileEnv // file-env + AllowedExternalDirectiveFile // file + AllowedExternalDirectiveEnv // env +)