https://pulumi.com logo
Title
p

powerful-rain-97767

06/16/2022, 3:29 PM
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.
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:
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

billowy-army-68599

06/16/2022, 3:39 PM
I'm not sure of the answer to if resources can in dynamic providrrs, but the error message:
TypeError: 'Output' object is not callable
indicates you're trying to so something with an
Output
before its resolved
p

powerful-rain-97767

06/16/2022, 5:05 PM
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.