feat: support multi-document values files

Signed-off-by: lubingtan <bingtanlu@gmail.com>
pull/13655/head
lubingtan 8 months ago
parent 8edc3ac024
commit 0d36cb664a

@ -17,6 +17,7 @@ limitations under the License.
package values package values
import ( import (
"bytes"
"encoding/json" "encoding/json"
"io" "io"
"net/url" "net/url"
@ -24,7 +25,7 @@ import (
"strings" "strings"
"github.com/pkg/errors" "github.com/pkg/errors"
"sigs.k8s.io/yaml" utilyaml "k8s.io/apimachinery/pkg/util/yaml"
"helm.sh/helm/v4/pkg/getter" "helm.sh/helm/v4/pkg/getter"
"helm.sh/helm/v4/pkg/strvals" "helm.sh/helm/v4/pkg/strvals"
@ -47,18 +48,23 @@ func (opts *Options) MergeValues(p getter.Providers) (map[string]interface{}, er
// 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{}{} raw, err := readFile(filePath, p)
bytes, err := readFile(filePath, p)
if err != nil { if err != nil {
return nil, err return nil, err
} }
if err := yaml.Unmarshal(bytes, &currentMap); err != nil { decoder := utilyaml.NewYAMLOrJSONDecoder(bytes.NewReader(raw), 4096)
return nil, errors.Wrapf(err, "failed to parse %s", filePath) for {
currentMap := map[string]interface{}{}
if err := decoder.Decode(&currentMap); err != nil {
if err == io.EOF {
break
}
return nil, errors.Wrapf(err, "failed to parse %s", filePath)
}
// Merge with the previous map
base = mergeMaps(base, currentMap)
} }
// Merge with the previous map
base = mergeMaps(base, currentMap)
} }
// User specified a value via --set-json // User specified a value via --set-json

Loading…
Cancel
Save