From 918311079ef637352c5a910160bcb45e4d746c39 Mon Sep 17 00:00:00 2001 From: Vineet Aggarwal Date: Sun, 1 Dec 2024 10:27:05 +0530 Subject: [PATCH] feat(getter): address review comments on Vault Integration for better modularity Signed-off-by: Vineet Aggarwal --- cmd/helm/install.go | 2 +- cmd/helm/lint.go | 2 +- cmd/helm/package.go | 2 +- cmd/helm/upgrade.go | 2 +- pkg/cli/values/options.go | 18 +++++++++--------- pkg/cli/values/options_test.go | 2 +- pkg/getter/getter.go | 7 +++++++ 7 files changed, 21 insertions(+), 14 deletions(-) diff --git a/cmd/helm/install.go b/cmd/helm/install.go index f2b9b6d32..6b905268d 100644 --- a/cmd/helm/install.go +++ b/cmd/helm/install.go @@ -242,7 +242,7 @@ func runInstall(args []string, client *action.Install, valueOpts *values.Options debug("CHART PATH: %s\n", cp) p := getter.All(settings) - vals, err := valueOpts.MergeValues(p, settings.VaultAddress, settings.Token) + vals, err := valueOpts.MergeValues(p) if err != nil { return nil, err } diff --git a/cmd/helm/lint.go b/cmd/helm/lint.go index db655c230..5683815be 100644 --- a/cmd/helm/lint.go +++ b/cmd/helm/lint.go @@ -82,7 +82,7 @@ func newLintCmd(out io.Writer) *cobra.Command { } client.Namespace = settings.Namespace() - vals, err := valueOpts.MergeValues(getter.All(settings), settings.VaultAddress, settings.Token) + vals, err := valueOpts.MergeValues(getter.All(settings)) if err != nil { return err } diff --git a/cmd/helm/package.go b/cmd/helm/package.go index 25a1a00ef..a173bbf42 100644 --- a/cmd/helm/package.go +++ b/cmd/helm/package.go @@ -71,7 +71,7 @@ func newPackageCmd(out io.Writer) *cobra.Command { client.RepositoryConfig = settings.RepositoryConfig client.RepositoryCache = settings.RepositoryCache p := getter.All(settings) - vals, err := valueOpts.MergeValues(p, settings.VaultAddress, settings.Token) + vals, err := valueOpts.MergeValues(p) if err != nil { return err } diff --git a/cmd/helm/upgrade.go b/cmd/helm/upgrade.go index efec11e5d..e3634e3cf 100644 --- a/cmd/helm/upgrade.go +++ b/cmd/helm/upgrade.go @@ -182,7 +182,7 @@ func newUpgradeCmd(cfg *action.Configuration, out io.Writer) *cobra.Command { } p := getter.All(settings) - vals, err := valueOpts.MergeValues(p, settings.VaultAddress, settings.Token) + vals, err := valueOpts.MergeValues(p) if err != nil { return err } diff --git a/pkg/cli/values/options.go b/pkg/cli/values/options.go index 01e1b684c..086f9f3f8 100644 --- a/pkg/cli/values/options.go +++ b/pkg/cli/values/options.go @@ -26,7 +26,7 @@ import ( "strings" "github.com/pkg/errors" - "gopkg.in/yaml.v3" + "sigs.k8s.io/yaml" "helm.sh/helm/v3/pkg/getter" "helm.sh/helm/v3/pkg/strvals" @@ -45,14 +45,14 @@ type Options struct { // MergeValues merges values from files specified via -f/--values and directly // via --set-json, --set, --set-string, or --set-file, marshaling them to YAML -func (opts *Options) MergeValues(p getter.Providers, vaultAddr, vaultToken string) (map[string]interface{}, error) { +func (opts *Options) MergeValues(p getter.Providers) (map[string]interface{}, error) { base := map[string]interface{}{} // User specified a values files via -f/--values for _, filePath := range opts.ValueFiles { currentMap := map[string]interface{}{} - bytes, err := readFile(filePath, p, vaultAddr, vaultToken) + bytes, err := readFile(filePath, p) if err != nil { return nil, err } @@ -88,7 +88,7 @@ func (opts *Options) MergeValues(p getter.Providers, vaultAddr, vaultToken strin // User specified a value via --set-file for _, value := range opts.FileValues { reader := func(rs []rune) (interface{}, error) { - bytes, err := readFile(string(rs), p, vaultAddr, vaultToken) + bytes, err := readFile(string(rs), p) if err != nil { return nil, err } @@ -108,7 +108,7 @@ func (opts *Options) MergeValues(p getter.Providers, vaultAddr, vaultToken strin // User specified property files via -p/--property-file if len(opts.PropertyFiles) > 0 { - propertiesFilesMap, err := opts.MergeProperties(p, vaultAddr, vaultToken) + propertiesFilesMap, err := opts.MergeProperties(p) if err != nil { return nil, err } @@ -119,11 +119,11 @@ func (opts *Options) MergeValues(p getter.Providers, vaultAddr, vaultToken strin } // MergeProperties merges properties from files specified via --property-file -func (opts *Options) MergeProperties(p getter.Providers, vaultAddr, vaultToken string) (map[string]interface{}, error) { +func (opts *Options) MergeProperties(p getter.Providers) (map[string]interface{}, error) { propertiesFilesMap := make(map[string]interface{}) for _, filePath := range opts.PropertyFiles { - data, err := readFile(filePath, p, vaultAddr, vaultToken) + data, err := readFile(filePath, p) if err != nil { return nil, errors.Wrap(err, "failed to fetch properties") } @@ -171,7 +171,7 @@ func mergeMaps(a, b map[string]interface{}) map[string]interface{} { } // readFile load a file from stdin, the local directory, or a remote file with a url. -func readFile(filePath string, p getter.Providers, vaultAddr, vaultToken string) ([]byte, error) { +func readFile(filePath string, p getter.Providers) ([]byte, error) { if strings.TrimSpace(filePath) == "-" { return io.ReadAll(os.Stdin) } @@ -187,7 +187,7 @@ func readFile(filePath string, p getter.Providers, vaultAddr, vaultToken string) } // Fetch data using the provider - data, err := g.Get(filePath, getter.WithURL(filePath), getter.WithAddress(vaultAddr), getter.WithToken(vaultToken)) + data, err := g.Get(filePath, getter.WithURL(filePath)) if err != nil { return nil, err } diff --git a/pkg/cli/values/options_test.go b/pkg/cli/values/options_test.go index 33c026797..e7541d16a 100644 --- a/pkg/cli/values/options_test.go +++ b/pkg/cli/values/options_test.go @@ -82,7 +82,7 @@ func TestMergeValues(t *testing.T) { func TestReadFile(t *testing.T) { var p getter.Providers filePath := "%a.txt" - _, err := readFile(filePath, p, "", "") + _, err := readFile(filePath, p) if err == nil { t.Errorf("Expected error when has special strings") } diff --git a/pkg/getter/getter.go b/pkg/getter/getter.go index 6799eebbc..3191ada2d 100644 --- a/pkg/getter/getter.go +++ b/pkg/getter/getter.go @@ -228,9 +228,14 @@ var ociProvider = Provider{ New: NewOCIGetter, } + +var vaultAddress string +var vaultToken string + var vaultProvider = Provider{ Schemes: []string{"vault"}, // Define "vault" as the scheme New: func(options ...Option) (Getter, error) { + options = append(options, WithAddress(vaultAddress), WithToken(vaultToken)) return NewVaultGetter(options...) }, } @@ -239,6 +244,8 @@ var vaultProvider = Provider{ // Currently, the built-in getters and the discovered plugins with downloader // notations are collected. func All(settings *cli.EnvSettings) Providers { + vaultAddress = settings.VaultAddress + vaultToken = settings.Token result := Providers{httpProvider, ociProvider, vaultProvider} // Including new vaultProvider as well for Vault integration pluginDownloaders, _ := collectPlugins(settings) result = append(result, pluginDownloaders...)