Skip to content

Python API

dss-provisioner can be used as a Python library for programmatic access. All public functions are available from the dss_provisioner.config module.

Basic usage

from dss_provisioner.config import load, plan, apply

# Load configuration
config = load("dss-provisioner.yaml")

# Plan changes
p = plan(config)
print(f"Changes: {p.summary()}")

# Apply changes
result = apply(p, config)
print(f"Applied: {result.summary()}")

One-step plan and apply

from dss_provisioner.config import load, plan_and_apply

config = load("dss-provisioner.yaml")
result = plan_and_apply(config)

Drift detection

from dss_provisioner.config import load, drift

config = load("dss-provisioner.yaml")
changes = drift(config)

for change in changes:
    print(f"{change.action.value}: {change.address}")
    if change.diff:
        for key, value in change.diff.items():
            print(f"  {key}: {value}")

Refresh state

from dss_provisioner.config import load, refresh, save_state

config = load("dss-provisioner.yaml")
changes, new_state = refresh(config)

if changes:
    print(f"Found {len(changes)} drifted resources")
    save_state(config, new_state)  # persist to disk

Progress callbacks

Track apply progress with a callback:

from dss_provisioner.config import load, plan, apply

config = load("dss-provisioner.yaml")
p = plan(config)

def on_progress(change, event):
    if event == "start":
        print(f"  {change.address}: applying...")
    else:
        print(f"  {change.address}: done")

result = apply(p, config, progress=on_progress)

Error handling

from dss_provisioner.config import load, plan, apply, ConfigError
from dss_provisioner.engine.errors import (
    ApplyError,
    StalePlanError,
    StateProjectMismatchError,
)

try:
    config = load("dss-provisioner.yaml")
except ConfigError as e:
    print(f"Invalid configuration: {e}")
    raise

p = plan(config)

try:
    result = apply(p, config)
except StalePlanError:
    print("State changed since plan was created — re-plan required")
except ApplyError as e:
    print(f"Apply failed at {e.address}")
    print(f"Successfully applied: {e.result.summary()}")

API reference

See the full API reference for all classes, functions, and types.