From e315a18943b7ed26501a26d19292e565cd1887bd Mon Sep 17 00:00:00 2001 From: Vivek Lakshmanan Date: Wed, 8 Dec 2021 23:32:50 -0800 Subject: [PATCH 1/6] Add support for using values from yaml files --- provider/pkg/provider/helm_release.go | 31 +++++++++++++++++-- provider/pkg/provider/provider.go | 6 ---- .../examples/helm-release/step1/metrics.yml | 0 3 files changed, 28 insertions(+), 9 deletions(-) create mode 100644 tests/sdk/nodejs/examples/helm-release/step1/metrics.yml diff --git a/provider/pkg/provider/helm_release.go b/provider/pkg/provider/helm_release.go index 62c22e41fd..3facc779f8 100644 --- a/provider/pkg/provider/helm_release.go +++ b/provider/pkg/provider/helm_release.go @@ -22,6 +22,7 @@ import ( "log" "net/url" "os" + "reflect" "strings" "time" @@ -113,8 +114,6 @@ type Release struct { SkipCrds bool `json:"skipCrds,omitempty"` // Time in seconds to wait for any individual kubernetes operation. Timeout int `json:"timeout,omitempty"` - // ValueYamlFiles List of assets (raw yaml files) to pass to helm. - //ValueYamlFiles []*resource.Asset `json:"valueYamlFiles,omitempty"` // Verify the package before installing it. Verify bool `json:"verify,omitempty"` // Specify the exact chart version to install. If this is not specified, the latest version is installed. @@ -250,11 +249,37 @@ func (r *helmReleaseProvider) getActionConfig(namespace string) (*action.Configu func decodeRelease(pm resource.PropertyMap) (*Release, error) { var release Release + values := map[string]interface{}{} stripped := pm.MapRepl(nil, mapReplStripSecrets) logger.V(9).Infof("Decoding release: %#v", stripped) + + if pm.HasValue("valueYamlFiles") { + v := stripped["valueYamlFiles"] + switch reflect.TypeOf(v).Kind() { + case reflect.Slice, reflect.Array: + s := reflect.ValueOf(v) + for i := 0; i < s.Len(); i++ { + val := s.Index(i).Interface() + switch t := val.(type) { + case *resource.Asset: + b, err := t.Bytes() + if err != nil { + return nil, err + } + if err = yaml.Unmarshal(b, &values); err != nil { + return nil, err + } + default: + return nil, fmt.Errorf("unsupported type for 'valueYamlFiles' arg: %T", v) + } + } + } + } + if err := mapstructure.Decode(stripped, &release); err != nil { return nil, fmt.Errorf("decoding failure: %w", err) } + release.Values = mergeMaps(release.Values, values) return &release, nil } @@ -1067,7 +1092,7 @@ func setReleaseAttributes(release *Release, r *release.Release, isPreview bool) release.Chart = r.Chart.Metadata.Name } logger.V(9).Infof("Setting release values: %+v", r.Config) - release.Values = r.Config + release.Values = mergeMaps(release.Values, r.Config) release.Version = r.Chart.Metadata.Version _, resources, err := convertYAMLManifestToJSON(r.Manifest) diff --git a/provider/pkg/provider/provider.go b/provider/pkg/provider/provider.go index 5e1a7a616c..f776381cdc 100644 --- a/provider/pkg/provider/provider.go +++ b/provider/pkg/provider/provider.go @@ -222,7 +222,6 @@ func (k *kubeProvider) CheckConfig(ctx context.Context, req *pulumirpc.CheckRequ Label: fmt.Sprintf("%s.news", label), KeepUnknowns: true, SkipNulls: true, - RejectAssets: true, }) if err != nil { return nil, pkgerrors.Wrapf(err, "CheckConfig failed because of malformed resource inputs") @@ -299,7 +298,6 @@ func (k *kubeProvider) DiffConfig(ctx context.Context, req *pulumirpc.DiffReques Label: fmt.Sprintf("%s.news", label), KeepUnknowns: true, SkipNulls: true, - RejectAssets: true, }) if err != nil { return nil, pkgerrors.Wrapf(err, "DiffConfig failed because of malformed resource inputs") @@ -1209,7 +1207,6 @@ func (k *kubeProvider) Check(ctx context.Context, req *pulumirpc.CheckRequest) ( Label: fmt.Sprintf("%s.news", label), KeepUnknowns: true, SkipNulls: true, - RejectAssets: true, KeepSecrets: true, }) if err != nil { @@ -1431,7 +1428,6 @@ func (k *kubeProvider) Diff(ctx context.Context, req *pulumirpc.DiffRequest) (*p Label: fmt.Sprintf("%s.news", label), KeepUnknowns: true, SkipNulls: true, - RejectAssets: true, KeepSecrets: true, }) if err != nil { @@ -1642,7 +1638,6 @@ func (k *kubeProvider) Create( Label: fmt.Sprintf("%s.properties", label), KeepUnknowns: true, SkipNulls: true, - RejectAssets: true, KeepSecrets: true, }) if err != nil { @@ -2078,7 +2073,6 @@ func (k *kubeProvider) Update( Label: fmt.Sprintf("%s.news", label), KeepUnknowns: true, SkipNulls: true, - RejectAssets: true, KeepSecrets: true, }) if err != nil { diff --git a/tests/sdk/nodejs/examples/helm-release/step1/metrics.yml b/tests/sdk/nodejs/examples/helm-release/step1/metrics.yml new file mode 100644 index 0000000000..e69de29bb2 From a13b537d5de465f5c35507445fa6dfa9081910b7 Mon Sep 17 00:00:00 2001 From: Vivek Lakshmanan Date: Wed, 8 Dec 2021 23:33:33 -0800 Subject: [PATCH 2/6] Update test to use a values yaml file --- tests/sdk/nodejs/examples/examples_test.go | 60 +++++++++++++------ .../examples/helm-release/step1/index.ts | 11 +--- .../examples/helm-release/step1/metrics.yml | 5 ++ .../examples/helm-release/step2/index.ts | 13 +--- 4 files changed, 53 insertions(+), 36 deletions(-) diff --git a/tests/sdk/nodejs/examples/examples_test.go b/tests/sdk/nodejs/examples/examples_test.go index 4b0e7c3eb9..397ae7ab40 100644 --- a/tests/sdk/nodejs/examples/examples_test.go +++ b/tests/sdk/nodejs/examples/examples_test.go @@ -390,32 +390,58 @@ func TestAccProvider(t *testing.T) { func TestHelmRelease(t *testing.T) { skipIfShort(t) + validationFunc := func(t *testing.T, stackInfo integration.RuntimeValidationStackInfo) { + assert.NotEmpty(t, stackInfo.Outputs["redisMasterClusterIP"].(string)) + assert.Equal(t, stackInfo.Outputs["status"], "deployed") + for _, res := range stackInfo.Deployment.Resources { + if res.Type == "kubernetes:helm.sh/v3:Release" { + version, has := res.Inputs["version"] + assert.True(t, has) + stat, has := res.Outputs["status"] + assert.True(t, has) + specMap, is := stat.(map[string]interface{}) + assert.True(t, is) + versionOut, has := specMap["version"] + assert.True(t, has) + assert.Equal(t, version, versionOut) + values, has := res.Outputs["values"] + assert.True(t, has) + assert.Equal(t, map[string]interface{}{ + "cluster": map[string]interface{}{ + "enabled": true, + "slaveCount": 2, + }, + "global": map[string]interface{}{ + "redis": map[string]interface{}{ + "password": "redisPassword", + }, + }, + "metrics": map[string]interface{}{ + "enabled": true, + "service": map[string]interface{}{ + "annotations": map[string]string{ + "prometheus.io/port": "9127", + }, + }, + }, + "rbac": map[string]interface{}{ + "create": true, + }, + }, values) + } + } + } test := getBaseOptions(t). With(integration.ProgramTestOptions{ Dir: filepath.Join(getCwd(t), "helm-release", "step1"), SkipRefresh: false, Verbose: true, - ExtraRuntimeValidation: func(t *testing.T, stackInfo integration.RuntimeValidationStackInfo) { - assert.NotEmpty(t, stackInfo.Outputs["redisMasterClusterIP"].(string)) - assert.Equal(t, stackInfo.Outputs["status"], "deployed") - for _, res := range stackInfo.Deployment.Resources { - if res.Type == "kubernetes:helm.sh/v3:Release" { - version, has := res.Inputs["version"] - assert.True(t, has) - stat, has := res.Outputs["status"] - assert.True(t, has) - specMap, is := stat.(map[string]interface{}) - assert.True(t, is) - versionOut, has := specMap["version"] - assert.True(t, has) - assert.Equal(t, version, versionOut) - } - } - }, + ExtraRuntimeValidation: validationFunc, EditDirs: []integration.EditDir{ { Dir: filepath.Join(getCwd(t), "helm-release", "step2"), Additive: true, + ExtraRuntimeValidation: validationFunc, }, }, }) diff --git a/tests/sdk/nodejs/examples/helm-release/step1/index.ts b/tests/sdk/nodejs/examples/helm-release/step1/index.ts index 7d5579aa0d..25a0971e56 100644 --- a/tests/sdk/nodejs/examples/helm-release/step1/index.ts +++ b/tests/sdk/nodejs/examples/helm-release/step1/index.ts @@ -1,7 +1,7 @@ import * as pulumi from "@pulumi/pulumi"; import * as k8s from "@pulumi/kubernetes"; import * as random from "@pulumi/random"; - +import { FileAsset } from "@pulumi/pulumi/asset"; const redisPassword = pulumi.secret("$053cr3t!"); @@ -19,19 +19,12 @@ const release = new k8s.helm.v3.Release("release", { }, version: "13.0.0", namespace: namespace.metadata.name, + valueYamlFiles: [new FileAsset("./metrics.yml")], values: { cluster: { enabled: true, slaveCount: 2, }, - metrics: { - enabled: true, - service: { - annotations: { - "prometheus.io/port": "9127", - } - }, - }, global: { redis: { password: redisPassword, diff --git a/tests/sdk/nodejs/examples/helm-release/step1/metrics.yml b/tests/sdk/nodejs/examples/helm-release/step1/metrics.yml index e69de29bb2..3764c0fd06 100644 --- a/tests/sdk/nodejs/examples/helm-release/step1/metrics.yml +++ b/tests/sdk/nodejs/examples/helm-release/step1/metrics.yml @@ -0,0 +1,5 @@ +metrics: + enabled: true + service: + annotations: + "prometheus.io/port": "9127" diff --git a/tests/sdk/nodejs/examples/helm-release/step2/index.ts b/tests/sdk/nodejs/examples/helm-release/step2/index.ts index a507bdc089..502a022772 100644 --- a/tests/sdk/nodejs/examples/helm-release/step2/index.ts +++ b/tests/sdk/nodejs/examples/helm-release/step2/index.ts @@ -1,7 +1,7 @@ import * as pulumi from "@pulumi/pulumi"; import * as k8s from "@pulumi/kubernetes"; import * as random from "@pulumi/random"; - +import { FileAsset } from "@pulumi/pulumi/asset"; const redisPassword = pulumi.secret("$053cr3t!"); @@ -19,18 +19,11 @@ const release = new k8s.helm.v3.Release("release", { }, version: "13.0.1", // <--- change namespace: namespace.metadata.name, + valueYamlFiles: [new FileAsset("./metrics.yml")], values: { cluster: { enabled: true, - slaveCount: 3, - }, - metrics: { - enabled: true, - service: { - annotations: { - "prometheus.io/port": "9127", - } - }, + slaveCount: 2, }, global: { redis: { From 8dca02492517bc97bcb968fae79f180abad3f980 Mon Sep 17 00:00:00 2001 From: Vivek Lakshmanan Date: Wed, 8 Dec 2021 23:35:27 -0800 Subject: [PATCH 3/6] Changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dd25ed24fd..d7d416320a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ - Helm Release: fix username fetch option (https://github.com/pulumi/pulumi-kubernetes/pull/1824) - Helm Release: Use URN name as base for autonaming, Drop warning, fix default value for keyring (https://github.com/pulumi/pulumi-kubernetes/pull/1826) +- Helm Release: Add support for loading values from yaml files (https://github.com/pulumi/pulumi-kubernetes/pull/1828) - Fix CRD upgrades (https://github.com/pulumi/pulumi-kubernetes/pull/1819) From 8329f012c64901d3bfd0911399edb55b28d4e703 Mon Sep 17 00:00:00 2001 From: Vivek Lakshmanan Date: Thu, 9 Dec 2021 09:43:30 -0800 Subject: [PATCH 4/6] Fix test --- tests/sdk/nodejs/examples/examples_test.go | 7 ++++--- tests/sdk/nodejs/examples/helm-release/step1/index.ts | 2 +- tests/sdk/nodejs/examples/helm-release/step2/index.ts | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/tests/sdk/nodejs/examples/examples_test.go b/tests/sdk/nodejs/examples/examples_test.go index 397ae7ab40..7bc55a5576 100644 --- a/tests/sdk/nodejs/examples/examples_test.go +++ b/tests/sdk/nodejs/examples/examples_test.go @@ -393,6 +393,7 @@ func TestHelmRelease(t *testing.T) { validationFunc := func(t *testing.T, stackInfo integration.RuntimeValidationStackInfo) { assert.NotEmpty(t, stackInfo.Outputs["redisMasterClusterIP"].(string)) assert.Equal(t, stackInfo.Outputs["status"], "deployed") + redisPassword := stackInfo.Outputs["redisPassword"] for _, res := range stackInfo.Deployment.Resources { if res.Type == "kubernetes:helm.sh/v3:Release" { version, has := res.Inputs["version"] @@ -409,17 +410,17 @@ func TestHelmRelease(t *testing.T) { assert.Equal(t, map[string]interface{}{ "cluster": map[string]interface{}{ "enabled": true, - "slaveCount": 2, + "slaveCount": float64(2), }, "global": map[string]interface{}{ "redis": map[string]interface{}{ - "password": "redisPassword", + "password": redisPassword, }, }, "metrics": map[string]interface{}{ "enabled": true, "service": map[string]interface{}{ - "annotations": map[string]string{ + "annotations": map[string]interface{}{ "prometheus.io/port": "9127", }, }, diff --git a/tests/sdk/nodejs/examples/helm-release/step1/index.ts b/tests/sdk/nodejs/examples/helm-release/step1/index.ts index 25a0971e56..c1f06a5a92 100644 --- a/tests/sdk/nodejs/examples/helm-release/step1/index.ts +++ b/tests/sdk/nodejs/examples/helm-release/step1/index.ts @@ -3,7 +3,7 @@ import * as k8s from "@pulumi/kubernetes"; import * as random from "@pulumi/random"; import { FileAsset } from "@pulumi/pulumi/asset"; -const redisPassword = pulumi.secret("$053cr3t!"); +export const redisPassword = pulumi.secret("$053cr3t!"); const nsName = new random.RandomPet("test"); const namespace = new k8s.core.v1.Namespace("release-ns", { diff --git a/tests/sdk/nodejs/examples/helm-release/step2/index.ts b/tests/sdk/nodejs/examples/helm-release/step2/index.ts index 502a022772..ad2918f66e 100644 --- a/tests/sdk/nodejs/examples/helm-release/step2/index.ts +++ b/tests/sdk/nodejs/examples/helm-release/step2/index.ts @@ -3,7 +3,7 @@ import * as k8s from "@pulumi/kubernetes"; import * as random from "@pulumi/random"; import { FileAsset } from "@pulumi/pulumi/asset"; -const redisPassword = pulumi.secret("$053cr3t!"); +export const redisPassword = pulumi.secret("$053cr3t!"); const nsName = new random.RandomPet("test"); const namespace = new k8s.core.v1.Namespace("release-ns", { From 68e93d821041b1cf337685049274e1b436df62eb Mon Sep 17 00:00:00 2001 From: Vivek Lakshmanan Date: Thu, 9 Dec 2021 10:54:42 -0800 Subject: [PATCH 5/6] More test fixes --- tests/sdk/nodejs/examples/examples_test.go | 40 +++++++++---------- .../examples/helm-release/step1/index.ts | 2 +- .../examples/helm-release/step2/index.ts | 4 +- 3 files changed, 22 insertions(+), 24 deletions(-) diff --git a/tests/sdk/nodejs/examples/examples_test.go b/tests/sdk/nodejs/examples/examples_test.go index 7bc55a5576..5a4d9165b3 100644 --- a/tests/sdk/nodejs/examples/examples_test.go +++ b/tests/sdk/nodejs/examples/examples_test.go @@ -393,7 +393,6 @@ func TestHelmRelease(t *testing.T) { validationFunc := func(t *testing.T, stackInfo integration.RuntimeValidationStackInfo) { assert.NotEmpty(t, stackInfo.Outputs["redisMasterClusterIP"].(string)) assert.Equal(t, stackInfo.Outputs["status"], "deployed") - redisPassword := stackInfo.Outputs["redisPassword"] for _, res := range stackInfo.Deployment.Resources { if res.Type == "kubernetes:helm.sh/v3:Release" { version, has := res.Inputs["version"] @@ -407,28 +406,27 @@ func TestHelmRelease(t *testing.T) { assert.Equal(t, version, versionOut) values, has := res.Outputs["values"] assert.True(t, has) - assert.Equal(t, map[string]interface{}{ - "cluster": map[string]interface{}{ - "enabled": true, - "slaveCount": float64(2), - }, - "global": map[string]interface{}{ - "redis": map[string]interface{}{ - "password": redisPassword, - }, - }, - "metrics": map[string]interface{}{ - "enabled": true, - "service": map[string]interface{}{ - "annotations": map[string]interface{}{ - "prometheus.io/port": "9127", - }, + assert.Contains(t, values, "cluster") + valMap := values.(map[string]interface{}) + assert.Equal(t, valMap["cluster"], map[string]interface{}{ + "enabled": true, + "slaveCount": float64(2), + }) + // not asserting contents since the secret is hard to assert equality on. + assert.Contains(t, values, "global") + assert.Contains(t, values, "metrics") + assert.Equal(t, valMap["metrics"], map[string]interface{}{ + "enabled": true, + "service": map[string]interface{}{ + "annotations": map[string]interface{}{ + "prometheus.io/port": "9127", }, }, - "rbac": map[string]interface{}{ - "create": true, - }, - }, values) + }) + assert.Contains(t, values,"rbac") + assert.Equal(t, valMap["rbac"], map[string]interface{}{ + "create": true, + }) } } } diff --git a/tests/sdk/nodejs/examples/helm-release/step1/index.ts b/tests/sdk/nodejs/examples/helm-release/step1/index.ts index c1f06a5a92..25a0971e56 100644 --- a/tests/sdk/nodejs/examples/helm-release/step1/index.ts +++ b/tests/sdk/nodejs/examples/helm-release/step1/index.ts @@ -3,7 +3,7 @@ import * as k8s from "@pulumi/kubernetes"; import * as random from "@pulumi/random"; import { FileAsset } from "@pulumi/pulumi/asset"; -export const redisPassword = pulumi.secret("$053cr3t!"); +const redisPassword = pulumi.secret("$053cr3t!"); const nsName = new random.RandomPet("test"); const namespace = new k8s.core.v1.Namespace("release-ns", { diff --git a/tests/sdk/nodejs/examples/helm-release/step2/index.ts b/tests/sdk/nodejs/examples/helm-release/step2/index.ts index ad2918f66e..ede4536740 100644 --- a/tests/sdk/nodejs/examples/helm-release/step2/index.ts +++ b/tests/sdk/nodejs/examples/helm-release/step2/index.ts @@ -3,7 +3,7 @@ import * as k8s from "@pulumi/kubernetes"; import * as random from "@pulumi/random"; import { FileAsset } from "@pulumi/pulumi/asset"; -export const redisPassword = pulumi.secret("$053cr3t!"); +const redisPassword = pulumi.secret("$053cr3t!"); const nsName = new random.RandomPet("test"); const namespace = new k8s.core.v1.Namespace("release-ns", { @@ -39,4 +39,4 @@ const release = new k8s.helm.v3.Release("release", { const srv = k8s.core.v1.Service.get("redis-master-svc", pulumi.interpolate`${release.status.namespace}/${release.status.name}-redis-master`); export const redisMasterClusterIP = srv.spec.clusterIP; -export const status = release.status; +export const status = release.status.status; From fbeb9541c5e6a7aed1ce65b3e5d08d490b747154 Mon Sep 17 00:00:00 2001 From: Vivek Lakshmanan Date: Thu, 9 Dec 2021 12:39:06 -0800 Subject: [PATCH 6/6] Fix description for valueYamlFiles --- provider/cmd/pulumi-resource-kubernetes/schema.json | 2 +- provider/pkg/gen/overlays.go | 2 +- sdk/dotnet/Helm/V3/Release.cs | 2 +- sdk/go/kubernetes/helm/v3/release.go | 2 +- sdk/nodejs/helm/v3/release.ts | 2 +- sdk/python/pulumi_kubernetes/helm/v3/Release.py | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/provider/cmd/pulumi-resource-kubernetes/schema.json b/provider/cmd/pulumi-resource-kubernetes/schema.json index 9a37eb1bbf..4a3592a8f5 100644 --- a/provider/cmd/pulumi-resource-kubernetes/schema.json +++ b/provider/cmd/pulumi-resource-kubernetes/schema.json @@ -41736,7 +41736,7 @@ "items": { "$ref": "pulumi.json#/Asset" }, - "description": "List of assets (raw yaml files). Content is read and merged with values. Not yet supported." + "description": "List of assets (raw yaml files). Content is read and merged with values (with values taking precedence)." }, "values": { "type": "object", diff --git a/provider/pkg/gen/overlays.go b/provider/pkg/gen/overlays.go index 72a5d71f2b..f52fc8c949 100644 --- a/provider/pkg/gen/overlays.go +++ b/provider/pkg/gen/overlays.go @@ -580,7 +580,7 @@ var helmV3ReleaseResource = pschema.ResourceSpec{ Ref: "pulumi.json#/Asset", }, }, - Description: "List of assets (raw yaml files). Content is read and merged with values. Not yet supported.", + Description: "List of assets (raw yaml files). Content is read and merged with values (with values taking precedence).", }, "values": { TypeSpec: pschema.TypeSpec{ diff --git a/sdk/dotnet/Helm/V3/Release.cs b/sdk/dotnet/Helm/V3/Release.cs index 87c5e92f69..3b3601dc9e 100644 --- a/sdk/dotnet/Helm/V3/Release.cs +++ b/sdk/dotnet/Helm/V3/Release.cs @@ -192,7 +192,7 @@ public partial class Release : KubernetesResource public Output Timeout { get; private set; } = null!; /// - /// List of assets (raw yaml files). Content is read and merged with values. Not yet supported. + /// List of assets (raw yaml files). Content is read and merged with values (with values taking precedence). /// [Output("valueYamlFiles")] public Output> ValueYamlFiles { get; private set; } = null!; diff --git a/sdk/go/kubernetes/helm/v3/release.go b/sdk/go/kubernetes/helm/v3/release.go index 9938de8f1e..8ca181c616 100644 --- a/sdk/go/kubernetes/helm/v3/release.go +++ b/sdk/go/kubernetes/helm/v3/release.go @@ -75,7 +75,7 @@ type Release struct { Status ReleaseStatusOutput `pulumi:"status"` // Time in seconds to wait for any individual kubernetes operation. Timeout pulumi.IntPtrOutput `pulumi:"timeout"` - // List of assets (raw yaml files). Content is read and merged with values. Not yet supported. + // List of assets (raw yaml files). Content is read and merged with values (with values taking precedence). ValueYamlFiles pulumi.AssetOrArchiveArrayOutput `pulumi:"valueYamlFiles"` // Custom values set for the release. Values pulumi.MapOutput `pulumi:"values"` diff --git a/sdk/nodejs/helm/v3/release.ts b/sdk/nodejs/helm/v3/release.ts index 4255296519..66a628fdfe 100644 --- a/sdk/nodejs/helm/v3/release.ts +++ b/sdk/nodejs/helm/v3/release.ts @@ -154,7 +154,7 @@ export class Release extends pulumi.CustomResource { */ public readonly timeout!: pulumi.Output; /** - * List of assets (raw yaml files). Content is read and merged with values. Not yet supported. + * List of assets (raw yaml files). Content is read and merged with values (with values taking precedence). */ public readonly valueYamlFiles!: pulumi.Output<(pulumi.asset.Asset | pulumi.asset.Archive)[]>; /** diff --git a/sdk/python/pulumi_kubernetes/helm/v3/Release.py b/sdk/python/pulumi_kubernetes/helm/v3/Release.py index 59a2d04da0..b116f8fd4e 100644 --- a/sdk/python/pulumi_kubernetes/helm/v3/Release.py +++ b/sdk/python/pulumi_kubernetes/helm/v3/Release.py @@ -1043,7 +1043,7 @@ def timeout(self) -> pulumi.Output[Optional[int]]: @pulumi.getter(name="valueYamlFiles") def value_yaml_files(self) -> pulumi.Output[Optional[Sequence[Union[pulumi.Asset, pulumi.Archive]]]]: """ - List of assets (raw yaml files). Content is read and merged with values. Not yet supported. + List of assets (raw yaml files). Content is read and merged with values (with values taking precedence). """ return pulumi.get(self, "value_yaml_files")