CloudStack Proxmox VE Extension
An Apache CloudStack Orchestrator extension that manages virtual machines on Proxmox VE.
CloudStack invokes the extension as a command line program, passing an action and the path to a JSON payload; the extension talks to the Proxmox API and writes a single JSON document to stdout. Everything is implemented on top of the Python standard library, so the extension has no runtime dependencies and runs with the management server's system interpreter.
Installation
pip install cloudstack-extension-proxmox-ngine
This provides the cloudstack-extension-proxmox command. CloudStack expects to find an
executable inside the extension directory, so link the command into place:
mkdir -p /usr/share/cloudstack-management/extensions/Proxmox-Ngine
ln -s "$(command -v cloudstack-extension-proxmox)" \
/usr/share/cloudstack-management/extensions/Proxmox-Ngine/proxmox.sh
Register the extension in CloudStack (Extensions → Add Extension, type
Orchestrator) and add the Proxmox connection details as extension or host details.
Usage
cloudstack-extension-proxmox <action> <payload.json> [timeout-seconds]
| Action | Description |
|---|---|
prepare |
Reserve the next free VM ID and return it as proxmox_vmid |
create |
Clone a template or install from an ISO, attach the NICs and start the VM |
start, stop, reboot, delete |
Power and lifecycle operations |
status, statuses |
Power state of one VM, or of every VM on the node |
getconsole |
Issue a one time VNC ticket for the console proxy |
listsnapshots, createsnapshot, restoresnapshot, deletesnapshot |
Snapshot management |
stop and delete are idempotent: a VM that no longer exists is reported as success.
Payload
The payload is written by CloudStack. The fields the extension reads are:
| Path | Meaning |
|---|---|
externaldetails.host.url / .extension.url |
Proxmox API base URL (host wins) |
externaldetails.host.user, .token, .secret |
API token credentials |
externaldetails.host.node |
Proxmox node name |
externaldetails.host.network_bridge |
Bridge the VM NICs attach to |
externaldetails.host.verify_tls_certificate |
Verify the API certificate (default true) |
externaldetails.virtualmachine.template_type |
ISO or anything else for a template clone |
externaldetails.virtualmachine.template_id |
Template VM ID to clone |
externaldetails.virtualmachine.iso_path, .iso_os_type, .disk_size_gb |
ISO installation |
externaldetails.virtualmachine.storage, .is_full_clone |
Storage and clone mode |
cloudstack.vm.details |
VM name, CPU, memory and NICs from the service offering |
parameters.snap_name, .snap_description, .snap_save_memory |
Snapshot action inputs |
As a library
from cloudstack_extension_proxmox_ngine import ProxmoxManager
manager = ProxmoxManager.from_config_file("payload.json")
print(manager.status())
# {'status': 'success', 'power_state': 'poweron'}
Operations return the CloudStack result document and raise ProxmoxError on failure.
Development
The project uses uv:
uv sync --group dev
uv run pytest # tests with coverage
uv run black --check . # formatting
uv run ruff check . # linting
uv run mypy # type checking
Pull requests run the same checks on Python 3.10 through 3.14.
License
Apache License 2.0 — see LICENSE.
Metadata
Release files for cloudstack-extension-proxmox-ngine 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| cloudstack_extension_proxmox_ngine-0.2.0.tar.gz | 25.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cloudstack_extension_proxmox_ngine-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 49.9 kB
Release files / cloudstack_extension_proxmox_ngine-0.2.0.tar.gz
| Download URL | cloudstack_extension_proxmox_ngine-0.2.0.tar.gz |
|---|---|
| Size | 25.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1c9b717c1e6c767debfcb0de0045aa7b279162352acb1a50f93ae1e93a5e9ecc
|
|
BLAKE2b-256 checksum How to use checksums |
fc2991f23585610c0a9d4286aa43a39698c18d19a657980cc819f6e9ba7878f7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.
Transparency logRelease files / cloudstack_extension_proxmox_ngine-0.2.0-py3-none-any.whl
| Download URL | cloudstack_extension_proxmox_ngine-0.2.0-py3-none-any.whl |
|---|---|
| Size | 24.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2a5fb3bf88c9784b936edddfd70730e23aeae7b02770448e9c5a5a7e5f3429d5
|
|
BLAKE2b-256 checksum How to use checksums |
0607c3a8af57b2d83a1408ae2161769339281f05ae6f5ed0f8267394a8137d04
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.
Transparency log