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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
94019a1ddb2fad1b148763657b85ca9ec47a31d4dc7bcae64c1e27f8824f2646
|
|
| MD5 |
1d9e6580c333b0a9a857531d032a0653
|
|
| BLAKE2b-256 |
e4460b83f8445600e1108f8b1ffaacf9371bc55e87ca60c56cac7c48a95dd058
|
File details
Details for the file pulumi_components_test-0.0.6-py3-none-any.whl.
File metadata
- Download URL: pulumi_components_test-0.0.6-py3-none-any.whl
- Upload date:
- Size: 9.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e0fb51749588e9e4589cb3c7d9c556d069b3e9593e4a42af39e9bcbcce14b6de
|
|
| MD5 |
c8478d258ddf4c25a3d884d576cc745d
|
|
| BLAKE2b-256 |
5b32c8122ea91381a178a225420c816c97033b0f46f7e2fc6cfb9599276e0e96
|