Skip to main content

This is a proof of concept to build a provider from Python code using type annotations to define the schema.

Project description

Python Component as Component

This is a proof of concept to build a provider from Python code using type annotations to define the schema.

Usage

Subclass pulumi.ComponentResource and use type annotations to define the schema:

# A class defining the inputs for the component
@dataclass
class ServiceArgs:
    region: pulumi.Input[str]
    project: pulumi.Input[str]
    app_path: Optional[pulumi.Input[str]] = "./app"
    image_name: Optional[pulumi.Input[str]] = "image"

# The component class that will be constructed by the provider
class Service(pulumi.ComponentResource):
    # Define the outputs of the component
    url: pulumi.Output[Optional[str]]
    image_digest: pulumi.Output[str]

    def __init__(
        self,
        name: str,
        args: ServiceArgs,
        opts: Optional[pulumi.ResourceOptions] = None,
    ):
        super().__init__("cloudrun:index:Service", name, {}, opts)
        # Create your resources etc.

Create a hosting provider for the class by adding a __main__.py file that uses componentProviderHost:

from component.host import componentProviderHost
from component.metadata import Metadata

componentProviderHost(
    Metadata(name="my-component", version="1.2.3", display_name="My Component")
)

Example

The example folder contains a component in my-component that generates a self-signed certificate. The pulumi_project_yaml folder contains a Pulumi YAML project that uses The pulumi_project_py folder contains a Pulumi Python project that uses the component via the generated SDK.

cd example/pulumi_project_py
pulumi package gen-sdk ../my-component --out ../generated-sdk --language python
uv add --editable ../generated-sdk/python
pulumi preview
Updating (dev)

View in Browser (Ctrl+O): https://app.pulumi.com/v-julien-pulumi-corp/example/dev/updates/27

     Type                                         Name         Status
 +   pulumi:pulumi:Stack                          example-dev  created (9s)
 +   └─ my-component:index:SelfSignedCertificate  cert         created
 +      └─ tls:index:PrivateKey                   cert-ca      created (0.31s)
 +         ├─ tls:index:PrivateKey                cert-key     created (0.55s)
 +         └─ tls:index:SelfSignedCert            cert-ca      created (1s)

Outputs:
    cert: {
        algorithm  : "ECDSA"
        ca_cert_pem: "-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----\n"
        ecdsa_curve: "P224"
        private_key: [secret]
        rsa_bits   : 2048
        urn        : "urn:pulumi:dev::example::my-component:index:SelfSignedCertificate::cert"
    }

Resources:
    + 5 created

Duration: 11s

Alternatively, add the package with package add, but this requires the Python Pulumi SDK to handle parameterization in sdk/python/lib/pulumi/provider/provider.py.

pulumi package add ../my-component

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pulumi_components_test-0.0.6.tar.gz (59.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pulumi_components_test-0.0.6-py3-none-any.whl (9.7 kB view details)

Uploaded Python 3

File details

Details for the file pulumi_components_test-0.0.6.tar.gz.

File metadata

  • Download URL: pulumi_components_test-0.0.6.tar.gz
  • Upload date:
  • Size: 59.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.0

File hashes

Hashes for pulumi_components_test-0.0.6.tar.gz
Algorithm Hash digest
SHA256 94019a1ddb2fad1b148763657b85ca9ec47a31d4dc7bcae64c1e27f8824f2646
MD5 1d9e6580c333b0a9a857531d032a0653
BLAKE2b-256 e4460b83f8445600e1108f8b1ffaacf9371bc55e87ca60c56cac7c48a95dd058

See more details on using hashes here.

File details

Details for the file pulumi_components_test-0.0.6-py3-none-any.whl.

File metadata

File hashes

Hashes for pulumi_components_test-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 e0fb51749588e9e4589cb3c7d9c556d069b3e9593e4a42af39e9bcbcce14b6de
MD5 c8478d258ddf4c25a3d884d576cc745d
BLAKE2b-256 5b32c8122ea91381a178a225420c816c97033b0f46f7e2fc6cfb9599276e0e96

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page