A Pulumi provider for managing DevZero infrastructure resources.
Project description
pulumi-devzero
The official Python Pulumi provider for DevZero — manage clusters, workload policies, and node policies as code.
Installation
pip install pulumi-devzero
Requires: pulumi>=3.0.0,<4.0.0, Python 3.9+
Configuration
Before using the DevZero Pulumi provider, configure your credentials using Pulumi config.
1. Generate a Personal Access Token (PAT)
Go to the DevZero user settings page to generate your PAT token:
https://www.devzero.io/settings/user-settings/general
Create a Personal Access Token and copy it.
2. Find your Team ID
You can find your DevZero Team ID in the organization settings:
https://www.devzero.io/settings/organization-settings/account
Copy the Team ID value from this page.
3. Set Pulumi configuration
Run the following commands in your Pulumi project:
pulumi config set --secret devzero:token <YOUR_PAT_TOKEN>
pulumi config set devzero:teamId <TEAM_ID>
pulumi config set devzero:url https://dakr.devzero.io # optional, this is the default
Example
pulumi config set --secret devzero:token dz_pat_xxxxxxxxxxxxx
pulumi config set devzero:teamId team_123456789
The --secret flag ensures that your token is encrypted in the Pulumi state.
Quick Start
import pulumi
import pulumi_devzero as devzero
# 1. Create a cluster
cluster = devzero.resources.Cluster("prod-cluster",
name="prod-cluster",
)
# 2. Create a workload policy with CPU vertical scaling
policy = devzero.resources.WorkloadPolicy("cpu-scaling-policy",
name="cpu-scaling-policy",
description="Policy with CPU vertical scaling enabled",
cpu_vertical_scaling=devzero.resources.VerticalScalingArgsArgs(
enabled=True,
target_percentile=0.95,
min_request=50,
max_request=4000,
max_scale_up_percent=100,
max_scale_down_percent=25,
overhead_multiplier=1.1,
limits_adjustment_enabled=True,
limit_multiplier=1.5,
),
)
# 3. Apply the policy to the cluster for all Deployments
target = devzero.resources.WorkloadPolicyTarget("prod-cluster-target",
name="prod-cluster-deployments-target",
description="Apply cpu-scaling-policy to all Deployments in prod-cluster",
policy_id=policy.id,
cluster_ids=[cluster.id],
kind_filter=["Deployment"],
enabled=True,
)
pulumi.export("cluster_id", cluster.id)
pulumi.export("cluster_token", pulumi.Output.secret(cluster.token))
pulumi.export("policy_id", policy.id)
pulumi.export("target_id", target.id)
pulumi up
Resources
Cluster
Provision and manage a DevZero cluster.
import pulumi
import pulumi_devzero as devzero
cluster = devzero.resources.Cluster("my-cluster",
name="my-cluster",
)
pulumi.export("id", cluster.id)
pulumi.export("token", pulumi.Output.secret(cluster.token))
WorkloadPolicy
Configure vertical and horizontal scaling policies for workloads.
import pulumi_devzero as devzero
policy = devzero.resources.WorkloadPolicy("my-policy",
name="my-policy",
description="Vertical scaling for CPU and memory",
cpu_vertical_scaling=devzero.resources.VerticalScalingArgsArgs(
enabled=True,
target_percentile=0.95,
min_request=50,
max_request=4000,
max_scale_up_percent=100,
max_scale_down_percent=25,
overhead_multiplier=1.1,
limits_adjustment_enabled=True,
limit_multiplier=1.5,
),
memory_vertical_scaling=devzero.resources.VerticalScalingArgsArgs(
enabled=True,
target_percentile=0.9,
min_request=128,
max_request=8192,
max_scale_up_percent=50,
max_scale_down_percent=20,
overhead_multiplier=1.2,
limits_adjustment_enabled=True,
limit_multiplier=1.3,
),
)
VerticalScalingArgsArgs fields:
| Field | Type | Description |
|---|---|---|
enabled |
bool |
Enable this scaling axis |
target_percentile |
float |
Percentile of observed usage to target (e.g. 0.95) |
min_request |
int |
Minimum resource request (millicores / MiB) |
max_request |
int |
Maximum resource request (millicores / MiB) |
max_scale_up_percent |
int |
Max % to scale up in one step |
max_scale_down_percent |
int |
Max % to scale down in one step |
overhead_multiplier |
float |
Multiplier added on top of the recommendation |
limits_adjustment_enabled |
bool |
Whether to also adjust resource limits |
limit_multiplier |
float |
Limits = request × limit_multiplier |
WorkloadPolicyTarget
Apply a workload policy to one or more clusters with optional filters.
import pulumi_devzero as devzero
target = devzero.resources.WorkloadPolicyTarget("my-target",
name="my-target",
policy_id=policy.id,
cluster_ids=[cluster.id],
kind_filter=["Deployment", "StatefulSet"],
namespace_filter=["production"],
enabled=True,
)
Fields:
| Field | Type | Description |
|---|---|---|
name |
str |
Unique target name |
policy_id |
str |
ID of the WorkloadPolicy to apply |
cluster_ids |
list[str] |
Cluster IDs to target |
kind_filter |
list[str] |
Pod | Deployment | StatefulSet | DaemonSet | Job | CronJob | ReplicaSet | ReplicationController | Rollout |
namespace_filter |
list[str] |
Restrict to specific namespaces (optional) |
enabled |
bool |
Activate the target |
NodePolicy
Configure node provisioning and pooling (AWS / Azure).
import pulumi_devzero as devzero
node_policy = devzero.resources.NodePolicy("my-node-policy",
name="my-node-policy",
)
NodePolicyTarget
Apply a node policy to one or more clusters.
import pulumi_devzero as devzero
node_policy_target = devzero.resources.NodePolicyTarget("my-node-policy-target",
name="my-node-policy-target",
policy_id=node_policy.id,
cluster_ids=[cluster.id],
enabled=True,
)
Data Sources
get_cluster_id_by_name
Look up an existing cluster by name and return its ID. Use this when a cluster was registered manually (not created by Pulumi) and you need its ID to attach policies or inject into values.yaml / a Kubernetes secret.
import pulumi
import pulumi_devzero as devzero
existing = devzero.resources.get_cluster_id_by_name(
name="my-existing-cluster",
# team_id is optional — defaults to devzero:teamId from provider config
)
# Attach a policy to the existing cluster
target = devzero.resources.WorkloadPolicyTarget("my-target",
name="my-target",
policy_id=policy.id,
cluster_ids=[existing.cluster_id],
kind_filter=["Deployment"],
enabled=True,
)
pulumi.export("existing_cluster_id", existing.cluster_id)
Inputs:
| Field | Type | Required | Description |
|---|---|---|---|
name |
str |
yes | Cluster name to look up |
team_id |
str |
no | Defaults to devzero:teamId from provider config |
Outputs:
| Field | Type | Description |
|---|---|---|
cluster_id |
str |
UUID of the matching cluster |
Warning: If multiple clusters share the same name, only the first active (non-deleted) one is returned. Ensure cluster names are unique within your team to avoid unexpected results.
Destroying Resources
# Tear down all resources in the stack
pulumi destroy
# Remove the stack itself
pulumi stack rm <stack-name>
Links
License
MIT — Copyright (c) 2026 DevZero Inc.
Project details
Release history Release notifications | RSS feed
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_devzero-0.1.9.tar.gz.
File metadata
- Download URL: pulumi_devzero-0.1.9.tar.gz
- Upload date:
- Size: 43.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
371310b40cbb3955f603e8d6e8258eb2f08556a2d17b27a153b6ee76b70d4dcd
|
|
| MD5 |
edd2f7987c74448b989ebdc280e7846b
|
|
| BLAKE2b-256 |
a456bec5fb10aeae0afc71974016987086ce20cb22f00ae5843817e87cd2f257
|
File details
Details for the file pulumi_devzero-0.1.9-py3-none-any.whl.
File metadata
- Download URL: pulumi_devzero-0.1.9-py3-none-any.whl
- Upload date:
- Size: 50.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b819de47925efb9b764f6105522bf8c6abc9929d7e7adac5cfca46720f5307fc
|
|
| MD5 |
2dafe52944d2e96f92f57af8735474a7
|
|
| BLAKE2b-256 |
2779c8cf8e303cbd30262c298acdea3d71839a8561eca6b8912f7374cc5ced10
|