pulumi/pkg/resource/deploy
Julien a3cdbad64c
Allow accessing configuration in Python dynamic providers (#17673)
Python dynamic providers get serialised and deserialised, and run in the
`pulumi-python` plugin process. This causes issues when trying to use
`pulumi.config.Config` in a dynamic provider:

* Using `Config` at runtime fails because the process is not setup with
the current configuration
* When the dynamic provider implementation is in the `__main__` module,
the dynamic provider serialization attempts to serialize the global
`SETTINGS` object, which pulls in protobuf definitions, which are not
serializable by `dill`.

To provide a stable API to access configuration in dynamic providers,
the provider classes (ResourceProvider) can now implement a `configure`
method which is called during provider initialization.
```python
class SimpleProvider(ResourceProvider):
    password: str

    def configure(self, req: ConfigureRequest):
        self.password = req.config.get("password")

    def create(self, props):
        # Use `self.password`.
        ...
```

The `configure` method is called when a provider is deserialized. Since
we cache the deserialization result, we guarantee that this is only
called once per program, and this process level cache serves as a plugin
registry.

Fixes https://github.com/pulumi/pulumi/issues/17050

---------

Co-authored-by: Will Jones <will@sacharissa.co.uk>
2024-11-07 10:12:24 +00:00
..
deploytest Bump gRPC dependencies and migrate `grpc.Dial` (#17701) 2024-11-06 18:36:10 +00:00
providers Have `Host.Provider` accept a `PackageDescriptor` (#17244) 2024-09-12 13:17:30 +00:00
builtins.go Enable goheader rule and add missing license headers (#15473) 2024-09-09 12:05:45 +00:00
builtins_test.go Normalize plugin.Provider methods to (Context, Request) -> (Response, error) (#16302) 2024-06-07 19:47:49 +00:00
deployment.go Remove unused deployment option (#17559) 2024-10-16 08:54:32 +00:00
deployment_executor.go Centralize resource state dependency traversal (#17320) 2024-09-23 08:37:34 +00:00
deployment_executor_test.go Enable goheader rule and add missing license headers (#15473) 2024-09-09 12:05:45 +00:00
deployment_test.go Introduce snapshot metadata (#17430) 2024-09-30 16:45:40 +00:00
doc.go Document Go packages (#6009) 2021-01-11 11:07:59 -07:00
import.go Extend the TestReplacementParameterizedProvider test (#16644) 2024-07-15 08:33:36 +00:00
import_test.go Have `Host.Provider` accept a `PackageDescriptor` (#17244) 2024-09-12 13:17:30 +00:00
manifest.go Split Manifest type to it's own file (#8712) 2022-01-10 12:25:24 +00:00
manifest_test.go Refactor: move plugin kind to apitype (#15946) 2024-04-25 17:30:30 +00:00
plan.go Enable goheader rule and add missing license headers (#15473) 2024-09-09 12:05:45 +00:00
plan_test.go [ci] `pkg/resource/deploy` coverage (#14831) 2023-12-19 16:14:40 +00:00
snapshot.go Persist metadata about snapshot integrity errors (#17291) 2024-11-06 17:35:27 +00:00
snapshot_test.go Fix flake in TestSnapshotPrune_FixesDanglingReferences (#17492) 2024-10-07 08:55:16 +00:00
source.go allow component providers to return more detailed error messages (#17306) 2024-09-25 15:38:36 +00:00
source_error.go Clean up deployment options (#16357) 2024-06-11 13:37:57 +00:00
source_error_test.go Clean up deployment options (#16357) 2024-06-11 13:37:57 +00:00
source_eval.go allow InputPropertyErrors from Calls (#17567) 2024-11-07 09:56:04 +00:00
source_eval_test.go allow InputPropertyErrors from Calls (#17567) 2024-11-07 09:56:04 +00:00
source_null.go Clean up deployment options (#16357) 2024-06-11 13:37:57 +00:00
source_query.go allow component providers to return more detailed error messages (#17306) 2024-09-25 15:38:36 +00:00
source_query_test.go allow component providers to return more detailed error messages (#17306) 2024-09-25 15:38:36 +00:00
state_builder.go Normalize URNs in `DeletedWith` references (#17666) 2024-11-05 13:27:11 +00:00
state_builder_test.go Normalize URNs in `DeletedWith` references (#17666) 2024-11-05 13:27:11 +00:00
step.go Enable some more linting rules (#17456) 2024-10-03 17:37:13 +00:00
step_executor.go Use int32 in Go interfaces that map to protobufs using int32 (#17068) 2024-08-28 13:45:17 +00:00
step_executor_test.go Clean up deployment options (#16357) 2024-06-11 13:37:57 +00:00
step_generator.go Spot skipped-create dependencies even when inputs don't change (#17633) 2024-10-30 16:17:30 +00:00
step_generator_test.go Enable some more linting rules (#17456) 2024-10-03 17:37:13 +00:00
step_test.go Add input keys from diff during import step to warning and error message (#17312) 2024-09-25 13:21:50 +00:00
target.go Allow accessing configuration in Python dynamic providers (#17673) 2024-11-07 10:12:24 +00:00
target_test.go upgrade to latest version of golangci-lint (#15977) 2024-04-19 06:20:33 +00:00