Hi Team - I am wondering if it is possible to use ...
# general
p
Hi Team - I am wondering if it is possible to use a regular provider as part of a dynamic provider. The use-case I have is that I want to create a local certificate authority and use that to generate a locally signed cert using pulumi_tls. The reason I would like to use a dynamic provider to manage this is because on create, I would like to install the root ca cert on the user's workstation, and on delete I would like to remove it. Is this possible? I am trying to do this with a minimal example example (just generating a private key and displaying the contents) but running into errors.
Copy code
from typing import Any, Optional

from pulumi.dynamic import ResourceProvider, CreateResult, Resource
from pulumi import Input, ResourceOptions, Output, export
import pulumi_tls as tls
import pulumi

tls_provider = tls.Provider('tls_provider')


class WildcardProvider(ResourceProvider):
    def create(self, inputs):

        key = tls.PrivateKey("someNewKey", algorithm="RSA", opts=pulumi.ResourceOptions(provider=tls_provider))
        outputs = {"private_key_pem": key}
        return CreateResult(id_="foo", outs=outputs)  


class Wildcard(Resource):
    private_key: Output

    def __init__(self, name: str, props: Any, opts: Optional[ResourceOptions] = None):
        full_args = {"cert_pem": None, "private_key_pem": None, "ca_cert_pem": None, **props}
        super().__init__(WildcardProvider(), name, full_args, opts)

my_wildcard = Wildcard("my-new-resource", {})
Logs:
Copy code
I0616 14:08:49.440319    3760 provider_plugin.go:643] Provider[pulumi-python, 0x140008721e0].Check(urn:pulumi:localca::localca::pulumi-python:dynamic:Resource::my-new-resource) success: inputs=#1 failures=#0
I0616 14:08:49.440331    3760 step_generator.go:689] Planner decided to create 'urn:pulumi:localca::localca::pulumi-python:dynamic:Resource::my-new-resource' (inputs=map[__provider:{gASVSAMAAAAAAACMCmRpbGwuX2RpbGyUjAxfY3JlYXRlX3R5cGWUk5QoaACMCl9sb2FkX3R5cGWUk5SMBHR5cGWUhZRSlIwQV2lsZGNhcmRQcm92aWRlcpSMFnB1bHVtaS5keW5hbWljLmR5bmFtaWOUjBBSZXNvdXJjZVByb3ZpZGVylJOUhZR9lCiMB19fZG9jX1+UTowKX19tb2R1bGVfX5SMCF9fbWFpbl9flIwNX19zbG90bmFtZXNfX5RdlIwGY3JlYXRllGgAjBBfY3JlYXRlX2Z1bmN0aW9ulJOUKGgAjAxfY3JlYXRlX2NvZGWUk5QoSwJLAEsASwVLB0tDQzZ0AKABZAGhAX0CdABqAmQCZAN0A3wCdARkBI0CZAWNA30DZAZ8A2kBfQR0BWQHfARkCI0CUwCUKE6MDHRsc19wcm92aWRlcpSMCnNvbWVOZXdLZXmUjANSU0GUjAhwcm92aWRlcpSMBnBhcmVudJSGlIwJYWxnb3JpdGhtlIwEb3B0c5SGlIwLcHJpdmF0ZV9rZXmUjANmb2+UjANpZF+UjARvdXRzlIaUdJQojAN0bHOUjAhQcm92aWRlcpSMClByaXZhdGVLZXmUjA9SZXNvdXJjZU9wdGlvbnOUaAqMDENyZWF0ZVJlc3VsdJR0lCiMBHNlbGaUjAZpbnB1dHOUaBmMA2tleZSMB291dHB1dHOUdJSMOS9Vc2Vycy9jbWFydGVlcGFudHMvUHljaGFybVByb2plY3RzL2xvY2FsY2EvLi9fX21haW5fXy5weZRoE0sRQwgAAQoBGAEIAZQpKXSUUpR9lIwIX19uYW1lX1+UaBBzaBNOTnSUUpR9lH2UKIwPX19hbm5vdGF0aW9uc19flH2UjAxfX3F1YWxuYW1lX1+UjBdXaWxkY2FyZFByb3ZpZGVyLmNyZWF0ZZR1hpRiaDcojAxDcmVhdGVSZXN1bHSUaAloLJOUjA9SZXNvdXJjZU9wdGlvbnOUjA9wdWx1bWkucmVzb3VyY2WUaCuTlIwQUmVzb3VyY2VQcm92aWRlcpRoC4wDdGxzlGgAjA5faW1wb3J0X21vZHVsZZSTlIwKcHVsdW1pX3Rsc5SFlFKUdTB1dJRSlCmBlC4=}])
I0616 14:08:49.440462    3760 step_executor.go:364] StepExecutor worker(-2): worker received chain for execution
I0616 14:08:49.440471    3760 step_executor.go:364] StepExecutor worker(-2): worker waiting for incoming chains
I0616 14:08:49.440478    3760 step_executor.go:364] StepExecutor worker(2): launching oneshot worker
I0616 14:08:49.440508    3760 snapshot.go:130] SnapshotManager: Beginning mutation for step `create` on resource `urn:pulumi:localca::localca::pulumi-python:dynamic:Resource::my-new-resource`
     Type                               Name             Status       
 +   pulumi:pulumi:Stack                localca-localca  creating..   
 +   └─ pulumi-python:dynamic:Resource  my-new-resource  creating     
I0616 14:08:49.564438    3760 state.go:291] error copying .pulumi/stacks/localca.json.gz to .pulumi/stacks/localca.json.gz.bak: blob (key ".pulumi/stacks/localca.json.gz -> .pulumi/stacks/localca.json.gz.bak") (code=NotFound): NoSuchKey: The specified key does not exist.
        status code: 404, request id: 9YQA6FZAQFJYR64M, host id: yXgNUIt03L09jr7kWkFkZsJB/1IWvVAGdDopL6vj5VpdDVAxItClPl/Vin0eJLfwUMi7vqcf77U=
I0616 14:08:49.625553    3760 state.go:297] error deleting source object after rename: .pulumi/stacks/localca.json.gz (blob (key ".pulumi/stacks/localca.json.gz") (code=NotFound): NotFound: Not Found
        status code: 404, request id: 9YQ6GE6NZW8ZBENS, host id: nsmxOvwpUIGsaheHH1j2CsehZ+DrcJgF9Qs1IJoCvnKFKduVfkKTorVgv2XnS3jJmtid62MXVkI=) skipping
I0616 14:08:49.833128    3760 state.go:248] Saved stack localca checkpoint to: .pulumi/stacks/localca.json (backup=.pulumi/stacks/localca.json.bak)
I0616 14:08:49.833284    3760 step_executor.go:364] StepExecutor worker(2): applying step create on urn:pulumi:localca::localca::pulumi-python:dynamic:Resource::my-new-resource (preview false)
I0616 14:08:49.833319    3760 registry.go:174] GetProvider(urn:pulumi:localca::localca::pulumi:providers:pulumi-python::default::01ef631b-e17e-43f9-b68d-02b250e6f04e)
I0616 14:08:49.833356    3760 provider_plugin.go:744] Provider[pulumi-python, 0x140008721e0].Create(urn:pulumi:localca::localca::pulumi-python:dynamic:Resource::my-new-resource) executing (#props=1)
I0616 14:08:49.833393    3760 rpc.go:74] Marshaling property for RPC[Provider[pulumi-python, 0x140008721e0].Create(urn:pulumi:localca::localca::pulumi-python:dynamic:Resource::my-new-resource).inputs]: __provider={gASVSAMAAAAAAACMCmRpbGwuX2RpbGyUjAxfY3JlYXRlX3R5cGWUk5QoaACMCl9sb2FkX3R5cGWUk5SMBHR5cGWUhZRSlIwQV2lsZGNhcmRQcm92aWRlcpSMFnB1bHVtaS5keW5hbWljLmR5bmFtaWOUjBBSZXNvdXJjZVByb3ZpZGVylJOUhZR9lCiMB19fZG9jX1+UTowKX19tb2R1bGVfX5SMCF9fbWFpbl9flIwNX19zbG90bmFtZXNfX5RdlIwGY3JlYXRllGgAjBBfY3JlYXRlX2Z1bmN0aW9ulJOUKGgAjAxfY3JlYXRlX2NvZGWUk5QoSwJLAEsASwVLB0tDQzZ0AKABZAGhAX0CdABqAmQCZAN0A3wCdARkBI0CZAWNA30DZAZ8A2kBfQR0BWQHfARkCI0CUwCUKE6MDHRsc19wcm92aWRlcpSMCnNvbWVOZXdLZXmUjANSU0GUjAhwcm92aWRlcpSMBnBhcmVudJSGlIwJYWxnb3JpdGhtlIwEb3B0c5SGlIwLcHJpdmF0ZV9rZXmUjANmb2+UjANpZF+UjARvdXRzlIaUdJQojAN0bHOUjAhQcm92aWRlcpSMClByaXZhdGVLZXmUjA9SZXNvdXJjZU9wdGlvbnOUaAqMDENyZWF0ZVJlc3VsdJR0lCiMBHNlbGaUjAZpbnB1dHOUaBmMA2tleZSMB291dHB1dHOUdJSMOS9Vc2Vycy9jbWFydGVlcGFudHMvUHljaGFybVByb2plY3RzL2xvY2FsY2EvLi9fX21haW5fXy5weZRoE0sRQwgAAQoBGAEIAZQpKXSUUpR9lIwIX19uYW1lX1+UaBBzaBNOTnSUUpR9lH2UKIwPX19hbm5vdGF0aW9uc19flH2UjAxfX3F1YWxuYW1lX1+UjBdXaWxkY2FyZFByb3ZpZGVyLmNyZWF0ZZR1hpRiaDcojAxDcmVhdGVSZXN1bHSUaAloLJOUjA9SZXNvdXJjZU9wdGlvbnOUjA9wdWx1bWkucmVzb3VyY2WUaCuTlIwQUmVzb3VyY2VQcm92aWRlcpRoC4wDdGxzlGgAjA5faW1wb3J0X21vZHVsZZSTlIwKcHVsdW1pX3Rsc5SFlFKUdTB1dJRSlCmBlC4=}
I0616 14:08:49.840313    3760 provider_plugin.go:1586] provider received rpc error `Unknown`: `Exception calling application: Program run without the Pulumi engine available; re-run using the `pulumi` CLI`
I0616 14:08:49.840345    3760 provider_plugin.go:1589] rpc error kind `Unknown` may not be recoverable
I0616 14:08:49.840355    3760 provider_plugin.go:800] Provider[pulumi-python, 0x140008721e0].Create(urn:pulumi:localca::localca::pulumi-python:dynamic:Resource::my-new-resource) failed: Exception calling application: Program run without the Pulumi engine available; re-run using the `pulumi` CLI
     Type                               Name             Status                  Info
 +   pulumi:pulumi:Stack                localca-localca  creating..              
 +   └─ pulumi-python:dynamic:Resource  my-new-resource  **creating failed**     error: Exception calling application: Program run without the Pulumi engine available; re-run using the `pulumi` CLI
I0616 14:08:49.973967    3760 state.go:291] error copying .pulumi/stacks/localca.json.gz to .pulumi/stacks/localca.json.gz.bak: blob (key ".pulumi/stacks/localca.json.gz -> .pulumi/stacks/localca.json.gz.bak") (code=NotFound): NoSuchKey: The specified key does not exist.
        status code: 404, request id: 9YQ5WSE9S77HGJN7, host id: 2DreBH/zBLA7obo9PFGQi6edUO0fxgkU13VBgjC2Sjy0i0gRT3BGfsNHES89YwHc7Tv4K3sNd8c=
I0616 14:08:50.028370    3760 state.go:297] error deleting source object after rename: .pulumi/stacks/localca.json.gz (blob (key ".pulumi/stacks/localca.json.gz") (code=NotFound): NotFound: Not Found
        status code: 404, request id: K73R852D4NM5HJYM, host id: NU+hZF0GchzOkeIX7n5LiioTpf/ehXB74Sbyp916x3gV8ETV8o5okiorNed6nevbz8Yji3jjEWU=) skipping
I0616 14:08:50.207675    3760 state.go:248] Saved stack localca checkpoint to: .pulumi/stacks/localca.json (backup=.pulumi/stacks/localca.json.bak)
I0616 14:08:50.207839    3760 step_executor.go:364] StepExecutor worker(2): step create on urn:pulumi:localca::localca::pulumi-python:dynamic:Resource::my-new-resource failed with an error: Exception calling application: Program run without the Pulumi engine available; re-run using the `pulumi` CLI
I0616 14:08:50.207883    3760 step_executor.go:364] StepExecutor worker(2): step create on urn:pulumi:localca::localca::pulumi-python:dynamic:Resource::my-new-resource failed, signalling cancellation
I0616 14:08:50.207933    3760 deployment_executor.go:293] deploymentExecutor.Execute(...): context finished: context canceled
I0616 14:08:50.207949    3760 step_executor.go:364] StepExecutor worker(-1): StepExecutor.waitForCompletion(): waiting for worker threads to exit
I0616 14:08:50.207981    3760 step_executor.go:364] StepExecutor worker(-2): worker exiting due to cancellation
I0616 14:08:50.207998    3760 step_executor.go:364] StepExecutor worker(-1): StepExecutor.waitForCompletion(): worker threads all exited
I0616 14:08:50.208523    3760 deployment_executor.go:303] deploymentExecutor.Execute(...): step executor has completed
 +   pulumi:pulumi:Stack                localca-localca  creating..              error: update failed
I0616 14:08:50.208781    3760 deployment_executor.go:161] deploymentExecutor.Execute(...): exiting provider canceller
I0616 14:08:50.214509    3760 langruntime_plugin.go:193] langhost[python].Run(pwd=/Users/cmarteepants/PycharmProjects/localca,program=.,...,dryrun=false) failed: err=error reading from server: read tcp 127.0.0.1:60993->127.0.0.1:60992: use of closed network connection
I0616 14:08:50.214547    3760 ignore.go:44] Explicitly ignoring and discarding error: rpc error: code = Canceled desc = grpc: the client connection is closing
I0616 14:08:50.217677    3760 ignore.go:44] Explicitly ignoring and discarding error: 1 error occurred:
        * operation not permitted
 +   pulumi:pulumi:Stack                localca-localca  **creating failed**     1 error
 +   └─ pulumi-python:dynamic:Resource  my-new-resource  **creating failed**     1 error
 
Diagnostics:
  pulumi:pulumi:Stack (localca-localca):
    error: update failed
 
  pulumi-python:dynamic:Resource (my-new-resource):
    error: Exception calling application: Program run without the Pulumi engine available; re-run using the `pulumi` CLI
b
I'm not sure of the answer to if resources can in dynamic providrrs, but the error message:
Copy code
TypeError: 'Output' object is not callable
indicates you're trying to so something with an
Output
before its resolved
p
Yes, happens the moment I try and generate a private key via the create method
Updated the example code. That's too bad 😐 May need to attack this differently.