diff --git a/CHANGELOG.md b/CHANGELOG.md index c3d7afeac1..57ed08b7b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ ## HEAD (Unreleased) +- `ConfigGroup` now respects explicit provider instances when parsing YAML. + ## 3.3.0 (May 26, 2021) - Automatically mark Secret data as Pulumi secrets. (https://github.com/pulumi/pulumi-kubernetes/pull/1577) diff --git a/provider/pkg/gen/_go-templates/yaml/configGroup.go b/provider/pkg/gen/_go-templates/yaml/configGroup.go index 1b35fe4be2..a59082365d 100644 --- a/provider/pkg/gen/_go-templates/yaml/configGroup.go +++ b/provider/pkg/gen/_go-templates/yaml/configGroup.go @@ -264,7 +264,8 @@ func NewConfigGroup(ctx *pulumi.Context, } // Parse and decode the YAML files. - rs, err := parseDecodeYamlFiles(ctx, args, true, pulumi.Parent(configGroup)) + parseOpts := append(opts, pulumi.Parent(configGroup)) + rs, err := parseDecodeYamlFiles(ctx, args, true, parseOpts...) if err != nil { return nil, err } diff --git a/provider/pkg/gen/_go-templates/yaml/yaml.tmpl b/provider/pkg/gen/_go-templates/yaml/yaml.tmpl index 8a064aa3e8..d304882c37 100644 --- a/provider/pkg/gen/_go-templates/yaml/yaml.tmpl +++ b/provider/pkg/gen/_go-templates/yaml/yaml.tmpl @@ -79,10 +79,18 @@ func parseDecodeYamlFiles(ctx *pulumi.Context, args *ConfigGroupArgs, glob bool, } } + // Find options which are also Invoke options, and prepare them to pass to Invoke functions + var invokeOpts []pulumi.InvokeOption + for _, opt := range opts { + if invokeOpt, ok := opt.(pulumi.InvokeOption); ok { + invokeOpts = append(invokeOpts, invokeOpt) + } + } + // Next parse all YAML documents into objects. for _, yaml := range yamls { // Parse the resulting YAML bytes and turn them into raw Kubernetes objects. - dec, err := yamlDecode(ctx, yaml, opts...) + dec, err := yamlDecode(ctx, yaml, invokeOpts...) if err != nil { return nil, errors.Wrapf(err, "decoding YAML") } @@ -94,7 +102,7 @@ func parseDecodeYamlFiles(ctx *pulumi.Context, args *ConfigGroupArgs, glob bool, } // yamlDecode invokes the function to decode a single YAML file and decompose it into object structures. -func yamlDecode(ctx *pulumi.Context, text string, opts ...pulumi.ResourceOption) ([]map[string]interface{}, error) { +func yamlDecode(ctx *pulumi.Context, text string, opts ...pulumi.InvokeOption) ([]map[string]interface{}, error) { args := struct { Text string `pulumi:"text"` }{Text: text} @@ -102,7 +110,7 @@ func yamlDecode(ctx *pulumi.Context, text string, opts ...pulumi.ResourceOption) Result []map[string]interface{} `pulumi:"result"` } - if err := ctx.Invoke("kubernetes:yaml:decode", &args, &ret); err != nil { + if err := ctx.Invoke("kubernetes:yaml:decode", &args, &ret, opts...); err != nil { return nil, err } return ret.Result, nil diff --git a/sdk/go/kubernetes/yaml/configGroup.go b/sdk/go/kubernetes/yaml/configGroup.go index 6ec668212b..4b4a8f6f81 100644 --- a/sdk/go/kubernetes/yaml/configGroup.go +++ b/sdk/go/kubernetes/yaml/configGroup.go @@ -264,7 +264,8 @@ func NewConfigGroup(ctx *pulumi.Context, } // Parse and decode the YAML files. - rs, err := parseDecodeYamlFiles(ctx, args, true, pulumi.Parent(configGroup)) + parseOpts := append(opts, pulumi.Parent(configGroup)) + rs, err := parseDecodeYamlFiles(ctx, args, true, parseOpts...) if err != nil { return nil, err } diff --git a/sdk/go/kubernetes/yaml/yaml.go b/sdk/go/kubernetes/yaml/yaml.go index 24015cc2d1..432e59763d 100644 --- a/sdk/go/kubernetes/yaml/yaml.go +++ b/sdk/go/kubernetes/yaml/yaml.go @@ -126,10 +126,18 @@ func parseDecodeYamlFiles(ctx *pulumi.Context, args *ConfigGroupArgs, glob bool, } } + // Find options which are also Invoke options, and prepare them to pass to Invoke functions + var invokeOpts []pulumi.InvokeOption + for _, opt := range opts { + if invokeOpt, ok := opt.(pulumi.InvokeOption); ok { + invokeOpts = append(invokeOpts, invokeOpt) + } + } + // Next parse all YAML documents into objects. for _, yaml := range yamls { // Parse the resulting YAML bytes and turn them into raw Kubernetes objects. - dec, err := yamlDecode(ctx, yaml, opts...) + dec, err := yamlDecode(ctx, yaml, invokeOpts...) if err != nil { return nil, errors.Wrapf(err, "decoding YAML") } @@ -141,7 +149,7 @@ func parseDecodeYamlFiles(ctx *pulumi.Context, args *ConfigGroupArgs, glob bool, } // yamlDecode invokes the function to decode a single YAML file and decompose it into object structures. -func yamlDecode(ctx *pulumi.Context, text string, opts ...pulumi.ResourceOption) ([]map[string]interface{}, error) { +func yamlDecode(ctx *pulumi.Context, text string, opts ...pulumi.InvokeOption) ([]map[string]interface{}, error) { args := struct { Text string `pulumi:"text"` }{Text: text} @@ -149,7 +157,7 @@ func yamlDecode(ctx *pulumi.Context, text string, opts ...pulumi.ResourceOption) Result []map[string]interface{} `pulumi:"result"` } - if err := ctx.Invoke("kubernetes:yaml:decode", &args, &ret); err != nil { + if err := ctx.Invoke("kubernetes:yaml:decode", &args, &ret, opts...); err != nil { return nil, err } return ret.Result, nil