Skip to main content

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

Metadata

Release files for pyvergeos 1.2.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyvergeos 1.2.7
File Size Uploaded
pyvergeos-1.2.7.tar.gz 876.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pyvergeos 1.2.7
File Interpreter ABI Platform
pyvergeos-1.2.7-py3-none-any.whl Python 3 none any Details

Total release size: 1.3 MB

Release files / pyvergeos-1.2.7.tar.gz

Download URL pyvergeos-1.2.7.tar.gz
Size 876.3 kB
Tags Source
SHA-256 checksum
How to use checksums
212b9f87cff960a65a3165d1f9e17965b5495fbed0bcb49f46adbbf57a8ea660
BLAKE2b-256 checksum
How to use checksums
4c49b4ccaa17b0c2b26f4a9f39ebc90c05edbee5d84d6d74cab67c6417ba664c
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 21, 2026.

Transparency log

Release files / pyvergeos-1.2.7-py3-none-any.whl

Download URL pyvergeos-1.2.7-py3-none-any.whl
Size 438.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0a65f4bc8a64dde06efc64e9ab3df8a13d5549f709d421fb6061b3c4cfc13f55
BLAKE2b-256 checksum
How to use checksums
f5e8eaab6bcc12a5cdf40ac605a733d1fed8899e6edf060603a7802df41a62a2
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 21, 2026.

Transparency log

Release history Release notifications | RSS feed

1.7.1

2 release files

1.6.1

2 release files

This release

1.2.7 This release

2 release files

1.2.6

2 release files

1.2.5

2 release files

1.2.4

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page