-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Tracking Issue: Standardize provider
and providers
behaviour
#8796
Labels
Comments
This was referenced Jan 20, 2022
This was referenced Feb 16, 2023
EronWright
added a commit
to pulumi/pulumi-kubernetes
that referenced
this issue
Jan 3, 2024
<!--Thanks for your contribution. See [CONTRIBUTING](CONTRIBUTING.md) for Pulumi's contribution guidelines. Help us merge your changes more quickly by adding more details such as labels, milestones, and reviewers.--> ### Proposed changes Epic: #2254 Fixes: #2710 This PR standardizes the option propagation logic for the component resources in the pulumi-kubernetes Go SDK. The general approach is: 1. In the component resource constructor, compute the child options to be propagated to any children. The child options consist of the component as parent, and with `version` and `pluginDownloadURL` if specified. 2. Compute the invoke options by copying the child options. ### Specification The component resource is responsible for computing sub-options for invokes and for child resource declarations. This table outlines the expected behavior for each [resource option](https://www.pulumi.com/docs/concepts/options/) when presented to a component resource. | | Propagated | Remarks | |---|---|---| | `additionalSecretOutputs` | no | "does not apply to component resources" | | `aliases` | no | Inherited via parent-child relationship. | | `customTimeouts` | no | "does not apply to component resources" | | `deleteBeforeReplace` | no | | | `deletedWith` | no | | | `dependsOn` | no | The children implicitly wait for the dependency. | | `ignoreChanges` | no | Nonsensical to apply directly to children (see [discussion](pulumi/pulumi#8969)). | | `import` | no | | | `parent` | **yes** | The component becomes the parent. | | `protect` | no | Inherited (see [p/p bug](pulumi/pulumi#12431)). | | `provider` | no | Combined into providers map, then inherited via parent-child relationship. | | `providers` | no | Inherited. | | `replaceOnChanges` | no | "does not apply to component resources" | | `retainOnDelete` | no | "does not apply to component resources" | | `transformations` | no | Inherited. | | `version` | **yes** | Influences default provider selection logic during invokes.<br/>Should propagate when child resource is from the same provider type. | | `pluginDownloadURL` | **yes** | Influences default provider selection logic during invokes.<br/>Should propagate when child resource is from the same provider type. | ### Testing A new test case is provided ([test case](https://github.com/pulumi/pulumi-kubernetes/blob/073b9dc64e32e4f14fa6691e1b11049007ca2db7/tests/sdk/go/go_test.go#L808), [test program](https://github.com/pulumi/pulumi-kubernetes/blob/073b9dc64e32e4f14fa6691e1b11049007ca2db7/tests/sdk/go/options/main.go)) that exercises option propagation across the component resources: - [kubernetes.helm.sh.v3.Chart](https://www.pulumi.com/registry/packages/kubernetes/api-docs/helm/v3/chart/) - [kubernetes.kustomize.Directory](https://www.pulumi.com/registry/packages/kubernetes/api-docs/kustomize/directory/) - [kubernetes.yaml.ConfigGroup](https://www.pulumi.com/registry/packages/kubernetes/api-docs/yaml/configgroup/) - [kubernetes.yaml.ConfigFile](https://www.pulumi.com/registry/packages/kubernetes/api-docs/yaml/configfile/) Upgrade testing must be done manually, with an emphasis on avoiding replacement due to reparenting. ### Related issues (optional) The Go SDK doesn't allow for options to be mutated via the "kubernetes-style" transformation function. #2666 During testing it was observed that the `parent` field is occasionally missing from `RegisterResource` RPC call. pulumi/pulumi#14826 Here's some key related PRs for additional context: - pulumi/pulumi#8796 - #1601 - #1919 - #2005
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
Hello!
Issue details
After an a design discussion (internal link), we have decided to implement the following:
provider
indicates that a provider must be used. This takes priority over the ambient parent map or the providers map.provider
is added toproviders
to be discoverable by children, but does not override an already existing provider for the same package.a. Do merge with warning if a conflict exists (between provider and providers).
b. Warning should indicate that this merge will be depreciated in 6 months.
providers
indicates a set of providers that may be used, by both the resource and its children. We never promote a provider fromproviders
toprovider
.provider
andproviders
can be given. They operate independently as described above.provider
does not agree with the type of the resource being created.a. If python is passed a map of providers, warn if a key does not match its expected value (Provider.package). We warn instead of erroring to prevent breaking programs that have unused (and incorrect) provider maps. Warning should be converted to an error for the second release of July 2022.
b. Depreciate accepting a Mapping for the python/go SDK.
TODO
a. Update semantics in each SDK
b. Update commends in docstrings across language SDKs to speak truth-y things
a. Dropping all the maps and just having lists for “providers” is an obvious cleanup even if we don’t do anything else.
Affected area/feature
The text was updated successfully, but these errors were encountered: