Skip to main content

Add your description here

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.5.tar.gz (59.8 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.5-py3-none-any.whl (9.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pulumi_components_test-0.0.5.tar.gz
  • Upload date:
  • Size: 59.8 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.5.tar.gz
Algorithm Hash digest
SHA256 fff514fcce4c47d5fed76d06ac4991b4b688571271057377ad20c18565ab8dea
MD5 9ac0936cb2ed9ac95a3b25955d344aca
BLAKE2b-256 6041f30ae42c2cee584a5e1678e0aad0550ac51232c0f209a4e3d80b39c71367

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pulumi_components_test-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 5e53e1dfd72191e0346c254b69177bc99aabf6798adea40d3cca282797f15fa0
MD5 46393aa3559e77f33e729b5945addd44
BLAKE2b-256 2027d147176ad0f02757514d1587ee2b7e7470f6dad82108d4734e6f7d1ce3ac

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