denvr
A Python SDK for interacting with Denvr Cloud.
This package is largely autogenerated from our Denvr Cloud API Spec
Installation
Quickstart
Getting started with the denvr
python sdk just involves loading and calling the client
builder function, which returns a Client
object for each denvr service (e.g., clusters
, vpcs
, servers/virtual
).
Lets start by fetching some of Denvr's VM configurations.
We'll use json.dumps
to make the output a bit easier to read.
print(json.dumps(virtual.get_configurations(), indent=2))
{
"items": [
{
"id": 5,
"user_friendly_name": "A100_40GB_PCIe_1x",
"name": "A100_40GB_PCIe_1x",
"description": null,
"os_version": "20.04",
"os_type": "Ubuntu",
"storage": 1700,
"gpu_type": "nvidia.com/A100PCIE40GB",
"gpu_family": "NVIDIA A100",
"gpu_brand": "Nvidia",
"gpu_name": "A100 40GB PCIe",
"type": "nvidia.com/A100PCIE40GB",
"brand_family": "NVIDIA A100",
"brand": "Nvidia",
"text_name": "A100 40GB PCIe",
"gpus": 1,
"vcpus": 14,
"memory": 112,
"price": 2.05,
"compute_network": null,
"is_gpu_platform": true,
"clusters": [
"Hou1",
"Msc1"
]
},
{
"id": 6,
"user_friendly_name": "A100_40GB_PCIe_2x",
"name": "A100_40GB_PCIe_2x",
"description": null,
"os_version": "20.04",
"os_type": "Ubuntu",
"storage": 3400,
"gpu_type": "nvidia.com/A100PCIE40GB",
"gpu_family": "NVIDIA A100",
"gpu_brand": "Nvidia",
"gpu_name": "A100 40GB PCIe",
"type": "nvidia.com/A100PCIE40GB",
"brand_family": "NVIDIA A100",
"brand": "Nvidia",
"text_name": "A100 40GB PCIe",
"gpus": 2,
"vcpus": 28,
"memory": 224,
"price": 4.1,
"compute_network": null,
"is_gpu_platform": true,
"clusters": [
"Hou1",
"Msc1"
]
},
...
print(json.dumps(
virtual.create_server(
name="api-test",
rpool="on-demand",
vpc="denvr",
configuration="H100_80GB_SXM_8x",
cluster="Hou1",
ssh_keys=["ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAA..."],
operating_system_image="Ubuntu 22.04.4 LTS",
root_disk_size=500,
),
indent=2
))
{
"username": "rory@denvrdata.com",
"tenancy_name": "denvr",
"rpool": "on-demand",
"direct_attached_storage_persisted": false,
"id": "api-test",
"namespace": "denvr",
"configuration": "H100_80GB_SXM_8x",
"storage": 20000,
"gpu_type": "nvidia.com/H100SXM480GB",
"gpus": 8,
"vcpus": 200,
"memory": 940,
"ip": "",
"private_ip": "172.16.0.84",
"image": "Ubuntu_22.04.4_LTS",
"cluster": "Hou1",
"status": "na",
"storage_type": "na"
}
Similarly, we can also fetch info about a specific vm.
print(json.dumps(
virtual.get_server(
id='rofinn-intel-dev',
namespace='denvr',
cluster='Hou1'
),
indent=2
))
{
"username": "rory@denvrdata.com",
"tenancy_name": "denvr",
"rpool": "reserved-denvr",
"direct_attached_storage_persisted": false,
"id": "rofinn-intel-dev",
"namespace": "denvr",
"configuration": "15",
"storage": 27000,
"gpu_type": "intel/GAUDI2",
"gpus": 8,
"vcpus": 152,
"memory": 940,
...
"image": "habana-1.16.2",
"cluster": "Hou1",
"status": "ONLINE",
"storage_type": "na"
}
A different example using our applications service.
print(json.dumps(
app.create_catalog_application(
name="api-test",
cluster="Msc1",
hardware_package_name="g-nvidia-1xa100-40gb-pcie-14vcpu-112gb",
application_catalog_item_name="jupyter-notebook",
application_catalog_item_version="python-3.11.9",
resource_pool="on-demand",
jupyter_token="abc123"
),
indent=2
))
{
"id": "api-test",
"cluster": "Msc1",
"status": null,
"tenant": "denvr",
"created_by": "rory@denvrdata.com",
"private_ip": "172.16.0.180",
"public_ip": "",
"resource_pool": "on-demand",
"dns": "",
"ssh_username": "",
"application_catalog_item_name": "jupyter-notebook",
"application_catalog_item_version_name": "python-3.11.9",
"hardware_package_name": "g-nvidia-1xa100-40gb-pcie-14vcpu-112gb",
"persisted_direct_attached_storage": false,
"personal_shared_storage": false,
"tenant_shared_storage": false
}
print(json.dumps(app.get_applications(), indent=2))
{
"items": [
{
"id": "api-test",
"cluster": "Msc1",
"status": "ONLINE",
"tenant": "denvr",
"createdBy": "rory@denvrdata.com",
"privateIp": "172.16.0.180",
"publicIp": "130.250.171.126",
"resourcePool": "on-demand",
"dns": "https://YYC-130-250-171-126.cloud.denvrdata.com/",
"sshUsername": "",
"applicationCatalogItemName": "jupyter-notebook",
"applicationCatalogItemVersionName": "python-3.11.9",
"hardwarePackageName": "g-nvidia-1xa100-40gb-pcie-14vcpu-112gb",
"persistedDirectAttachedStorage": false,
"personalSharedStorage": false,
"tenantSharedStorage": false
}
]
}
Using a Waiter
```python from denvr.waiters import waiter
create_app = waiter(app.create_catalog_application) response = create_app( name="api-test", cluster="Msc1", hardware_package_name="g-nvidia-1xa100-40gb-pcie-14vcpu-112gb", application_catalog_item_name="jupyter-notebook", application_catalog_item_version="python-3.11.9", resource_pool="on-demand", jupyter_token="abc123" ) print(json.dumps(response, indent=2)) { "instance_details": { "id": "api-test", "cluster": "Msc1", "status": "ONLINE", "privateIp": "172.16.0.100", "publicIp": "130.250.171.177", "imageCmdOverride": null, "environmentVariables": { "USERNAME": "ubuntu", "JUPYTER_TOKEN": "abc123", "DIRECT_ATTACHED_STORAGE": "True" }, "readinessWatcherPort": 443, "createdBy": "rory.finnegan@denvrdata.com", "tenant": "denvr", "resourcePool": "on-demand", "creationTime": "2025-04-09T01:15:35Z", "lastUpdated": "2025-04-09T01:15:35+00:00", "dns": "https://yyc-130-250-171-177.cloud.denvrdata.com/", "persistedDirectAttachedStorage": false, "personalSharedStorage": false, "tenantSharedStorage": false }, "application_catalog_item": { "name": "jupyter-notebook", "applicationSourceDetailsUrl": null, "versions": [ { "name": "python-3.11.9", "imageUrl": "quay.io/jupyter/base-notebook:python-3.11.9", "imageLastPushDate": "2024-07-14T07:00:00+00:00", "platform": "NVIDIA", "launchType": "jupyter", "releaseNotesUrl": "https://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html" } ] }, "hardware_package": { "name": "g-nvidia-1xa100-40gb-pcie-14vcpu-112gb", "description": "1x A100 40 GB PCIe GPU, 14 vCPUs, 112GB RAM", "gpuCount": 1, "gpuType": "nvidia.com/A100PCIE40GB", "gpuBrand": "NVIDIA", "gpuName": "NVIDIA A100", "vcpusCount": 14, "memoryGb": 112, "directAttachedStorageGb": 1700, "pricePerHour": 1.15 } }