feat(getter): address review comments on Vault Integration for better modularity

Signed-off-by: Vineet Aggarwal <vineet.aggarwal@rakuten.com>
pull/13492/head
Vineet Aggarwal 10 months ago
parent 29f3cd7165
commit 918311079e

@ -242,7 +242,7 @@ func runInstall(args []string, client *action.Install, valueOpts *values.Options
debug("CHART PATH: %s\n", cp) debug("CHART PATH: %s\n", cp)
p := getter.All(settings) p := getter.All(settings)
vals, err := valueOpts.MergeValues(p, settings.VaultAddress, settings.Token) vals, err := valueOpts.MergeValues(p)
if err != nil { if err != nil {
return nil, err return nil, err
} }

@ -82,7 +82,7 @@ func newLintCmd(out io.Writer) *cobra.Command {
} }
client.Namespace = settings.Namespace() 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 { if err != nil {
return err return err
} }

@ -71,7 +71,7 @@ func newPackageCmd(out io.Writer) *cobra.Command {
client.RepositoryConfig = settings.RepositoryConfig client.RepositoryConfig = settings.RepositoryConfig
client.RepositoryCache = settings.RepositoryCache client.RepositoryCache = settings.RepositoryCache
p := getter.All(settings) p := getter.All(settings)
vals, err := valueOpts.MergeValues(p, settings.VaultAddress, settings.Token) vals, err := valueOpts.MergeValues(p)
if err != nil { if err != nil {
return err return err
} }

@ -182,7 +182,7 @@ func newUpgradeCmd(cfg *action.Configuration, out io.Writer) *cobra.Command {
} }
p := getter.All(settings) p := getter.All(settings)
vals, err := valueOpts.MergeValues(p, settings.VaultAddress, settings.Token) vals, err := valueOpts.MergeValues(p)
if err != nil { if err != nil {
return err return err
} }

@ -26,7 +26,7 @@ import (
"strings" "strings"
"github.com/pkg/errors" "github.com/pkg/errors"
"gopkg.in/yaml.v3" "sigs.k8s.io/yaml"
"helm.sh/helm/v3/pkg/getter" "helm.sh/helm/v3/pkg/getter"
"helm.sh/helm/v3/pkg/strvals" "helm.sh/helm/v3/pkg/strvals"
@ -45,14 +45,14 @@ type Options struct {
// MergeValues merges values from files specified via -f/--values and directly // MergeValues merges values from files specified via -f/--values and directly
// via --set-json, --set, --set-string, or --set-file, marshaling them to YAML // 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{}{} base := map[string]interface{}{}
// User specified a values files via -f/--values // User specified a values files via -f/--values
for _, filePath := range opts.ValueFiles { for _, filePath := range opts.ValueFiles {
currentMap := map[string]interface{}{} currentMap := map[string]interface{}{}
bytes, err := readFile(filePath, p, vaultAddr, vaultToken) bytes, err := readFile(filePath, p)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -88,7 +88,7 @@ func (opts *Options) MergeValues(p getter.Providers, vaultAddr, vaultToken strin
// User specified a value via --set-file // User specified a value via --set-file
for _, value := range opts.FileValues { for _, value := range opts.FileValues {
reader := func(rs []rune) (interface{}, error) { reader := func(rs []rune) (interface{}, error) {
bytes, err := readFile(string(rs), p, vaultAddr, vaultToken) bytes, err := readFile(string(rs), p)
if err != nil { if err != nil {
return nil, err 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 // User specified property files via -p/--property-file
if len(opts.PropertyFiles) > 0 { if len(opts.PropertyFiles) > 0 {
propertiesFilesMap, err := opts.MergeProperties(p, vaultAddr, vaultToken) propertiesFilesMap, err := opts.MergeProperties(p)
if err != nil { if err != nil {
return nil, err 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 // 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{}) propertiesFilesMap := make(map[string]interface{})
for _, filePath := range opts.PropertyFiles { for _, filePath := range opts.PropertyFiles {
data, err := readFile(filePath, p, vaultAddr, vaultToken) data, err := readFile(filePath, p)
if err != nil { if err != nil {
return nil, errors.Wrap(err, "failed to fetch properties") 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. // 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) == "-" { if strings.TrimSpace(filePath) == "-" {
return io.ReadAll(os.Stdin) return io.ReadAll(os.Stdin)
} }
@ -187,7 +187,7 @@ func readFile(filePath string, p getter.Providers, vaultAddr, vaultToken string)
} }
// Fetch data using the provider // 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 { if err != nil {
return nil, err return nil, err
} }

@ -82,7 +82,7 @@ func TestMergeValues(t *testing.T) {
func TestReadFile(t *testing.T) { func TestReadFile(t *testing.T) {
var p getter.Providers var p getter.Providers
filePath := "%a.txt" filePath := "%a.txt"
_, err := readFile(filePath, p, "", "") _, err := readFile(filePath, p)
if err == nil { if err == nil {
t.Errorf("Expected error when has special strings") t.Errorf("Expected error when has special strings")
} }

@ -228,9 +228,14 @@ var ociProvider = Provider{
New: NewOCIGetter, New: NewOCIGetter,
} }
var vaultAddress string
var vaultToken string
var vaultProvider = Provider{ var vaultProvider = Provider{
Schemes: []string{"vault"}, // Define "vault" as the scheme Schemes: []string{"vault"}, // Define "vault" as the scheme
New: func(options ...Option) (Getter, error) { New: func(options ...Option) (Getter, error) {
options = append(options, WithAddress(vaultAddress), WithToken(vaultToken))
return NewVaultGetter(options...) return NewVaultGetter(options...)
}, },
} }
@ -239,6 +244,8 @@ var vaultProvider = Provider{
// Currently, the built-in getters and the discovered plugins with downloader // Currently, the built-in getters and the discovered plugins with downloader
// notations are collected. // notations are collected.
func All(settings *cli.EnvSettings) Providers { 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 result := Providers{httpProvider, ociProvider, vaultProvider} // Including new vaultProvider as well for Vault integration
pluginDownloaders, _ := collectPlugins(settings) pluginDownloaders, _ := collectPlugins(settings)
result = append(result, pluginDownloaders...) result = append(result, pluginDownloaders...)

Loading…
Cancel
Save