Skip to main content

Python SDK for the VergeOS REST API

Project description

pyvergeos

Python SDK for the VergeOS REST API.

PyPI version Python 3.9+ License Documentation

Overview

pyvergeos provides a Pythonic interface for managing VergeOS infrastructure. It abstracts the VergeOS REST API behind a clean, type-annotated SDK suitable for automation, tooling, and integration development.

Read the full documentation

Installation

pip install pyvergeos

# Or with uv
uv add pyvergeos

Quick Start

from pyvergeos import VergeClient

# Connect to VergeOS
client = VergeClient(
    host="192.168.1.100",
    username="admin",
    password="secret",
    verify_ssl=False  # For self-signed certificates
)

# List all VMs
for vm in client.vms.list():
    print(f"{vm.name}: {vm.ram}MB RAM, {vm.cpu_cores} cores")

# Get a specific VM
vm = client.vms.get(name="web-server")

# Power operations
vm.power_on()
vm.power_off()

# Create a VM
new_vm = client.vms.create(
    name="test-vm",
    ram=2048,
    cpu_cores=2,
    os_family="linux"
)

# Cleanup
client.disconnect()

Context Manager

with VergeClient(host="192.168.1.100", token="api-token") as client:
    vms = client.vms.list_running()

Authentication

Username/Password

client = VergeClient(
    host="192.168.1.100",
    username="admin",
    password="secret"
)

API Token

client = VergeClient(
    host="192.168.1.100",
    token="your-api-token"
)

Environment Variables

export VERGE_HOST=192.168.1.100
export VERGE_USERNAME=admin
export VERGE_PASSWORD=secret
# Optional
export VERGE_VERIFY_SSL=true
export VERGE_TIMEOUT=30
export VERGE_RETRY_TOTAL=3
export VERGE_RETRY_BACKOFF=1
client = VergeClient.from_env()

Features

Virtual Machines

# List, filter, create, update, delete
vms = client.vms.list(os_family="linux", name="web-*")
vm = client.vms.create(name="test", ram=2048, cpu_cores=2)

# Power operations
vm.power_on()
vm.power_off()
vm.reset()

# Snapshots
vm.snapshots.create(retention=86400, quiesce=True)

# Clone
clone = vm.clone(name="test-clone")

# Drives and NICs
vm.drives.add(name="data", size=50*1024*1024*1024)
vm.nics.add(network=network.key)

Networks

# Create and manage virtual networks
network = client.networks.create(
    name="app-network",
    network_address="10.10.1.0/24",
    ip_address="10.10.1.1",
    dhcp_enabled=True
)

network.power_on()
network.apply_rules()

# Firewall rules
network.rules.create(name="Allow SSH", action="accept", protocol="tcp", dest_port=22)

Tenants

tenant = client.tenants.create(name="customer-a")
tenant.power_on()

Filtering

# Keyword arguments
vms = client.vms.list(status="running", name="prod-*")

# OData filter string
vms = client.vms.list(filter="os_family eq 'linux' and ram gt 2048")

# Filter builder
from pyvergeos.filters import Filter
f = Filter().eq("os_family", "linux").and_().gt("ram", 2048)
vms = client.vms.list(filter=str(f))

Task Waiting

result = vm.snapshots.create(name="backup")
task = client.tasks.wait(result["task"], timeout=300)

Error Handling

from pyvergeos.exceptions import NotFoundError, AuthenticationError, TaskTimeoutError

try:
    vm = client.vms.get(name="nonexistent")
except NotFoundError:
    print("VM not found")

try:
    task = client.tasks.wait(task_id, timeout=60)
except TaskTimeoutError as e:
    print(f"Task {e.task_id} timed out")

Retry Configuration

The client automatically retries failed requests for transient errors (429, 500, 502, 503, 504). You can customize the retry behavior:

from http import HTTPStatus

# Custom retry configuration
client = VergeClient(
    host="192.168.1.100",
    username="admin",
    password="secret",
    retry_total=5,              # Number of retry attempts (default: 3)
    retry_backoff_factor=2.0,   # Exponential backoff factor (default: 1)
    retry_status_codes=frozenset({  # HTTP codes to retry (default: 429, 500, 502, 503, 504)
        HTTPStatus.TOO_MANY_REQUESTS,
        HTTPStatus.SERVICE_UNAVAILABLE,
    }),
)

# Disable retries entirely
client = VergeClient(
    host="192.168.1.100",
    username="admin",
    password="secret",
    retry_total=0,
)

Requirements

  • Python 3.9+
  • VergeOS 26.0+

License

Apache License 2.0 - see LICENSE for details.

Contributing

Contributions welcome! Please read the contributing guidelines before submitting PRs.

Resources

Related Projects

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

pyvergeos-1.1.2.tar.gz (820.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyvergeos-1.1.2-py3-none-any.whl (412.7 kB view details)

Uploaded Python 3

File details

Details for the file pyvergeos-1.1.2.tar.gz.

File metadata

  • Download URL: pyvergeos-1.1.2.tar.gz
  • Upload date:
  • Size: 820.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyvergeos-1.1.2.tar.gz
Algorithm Hash digest
SHA256 255a9c5c5e22a887888dad9785902fe8f13cf294606ce9268460d37ad0d601db
MD5 1edbcc278b95003b857f80622864cca7
BLAKE2b-256 260558ccfdba85c8dc8c9f01e54efd9221fbd07f40e630a8a694923b3d3a4a6e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyvergeos-1.1.2.tar.gz:

Publisher: publish.yml on verge-io/pyVergeOS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyvergeos-1.1.2-py3-none-any.whl.

File metadata

  • Download URL: pyvergeos-1.1.2-py3-none-any.whl
  • Upload date:
  • Size: 412.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyvergeos-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2b69ef0c6bc2a58ca0b40cc647db9e338feb59e1b53d1f6844a5f0ba97ed8ce3
MD5 c7165cd6a968a106ad837aeb33284151
BLAKE2b-256 4c32f57b3d8f29bfcbd6f5864a93b4c0b6fe78f4203322d7e586301a5f9b3d78

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyvergeos-1.1.2-py3-none-any.whl:

Publisher: publish.yml on verge-io/pyVergeOS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page