Skip to main content

CLI for Proxmox VE

Project description

proxctl

crates.io CI License: MIT codecov

A command-line interface for Proxmox VE -- manage VMs, containers, nodes, storage, and more from your terminal. Includes declarative infrastructure management with apply and export.

Install

# From crates.io
cargo install proxctl

# From PyPI (pre-built binaries, no Rust toolchain needed)
pip install proxctl

# From GitHub Releases (Linux, macOS, Windows)
curl -fsSL https://github.com/rvben/proxctl/releases/latest/download/proxctl-$(uname -m)-unknown-linux-gnu.tar.gz | tar xz

Quick Start

# Interactive setup (creates API token automatically)
proxctl config init

# Check connectivity
proxctl health

# List VMs
proxctl vm list

# Start a VM
proxctl vm start 100

# Show VM configuration
proxctl vm config 100

# List snapshots
proxctl vm snapshot list 100

# Raw API access
proxctl api get /nodes

Declarative Infrastructure (IaC)

Manage Proxmox resources declaratively with YAML manifests, similar to kubectl apply.

Export existing resources

# Export a single VM
proxctl export vm 101 > haos.yaml

# Export all containers
proxctl export container --all > containers.yaml

# Export cluster firewall rules
proxctl export firewall cluster > firewall.yaml

Apply desired state

# infra/web.yaml
kind: vm
name: web-01
vmid: 100
config:
  memory: 4096
  cores: 2
  onboot: true
---
kind: firewall-rule
scope: cluster
config:
  action: ACCEPT
  type: in
  proto: tcp
  dport: "443"
  comment: "Allow HTTPS"
# Preview changes
proxctl apply -f infra/ --dry-run

# Apply changes
proxctl apply -f infra/

# Round-trip: export, then verify nothing drifted
proxctl export vm --all > current.yaml
proxctl apply -f current.yaml --dry-run  # should show "noop" for all

Key behaviors

  • Idempotent -- running apply twice produces "up to date" on the second run
  • Patch semantics -- only specified config keys are changed, others left untouched
  • Name or VMID -- resources can be identified by name (auto-resolves VMID) or pinned by ID
  • Multi-document -- multiple resources in one file with --- separators, or a directory of files
  • Optional power state -- add state: running or state: stopped to manage power, or omit to leave it alone
  • Safe -- shows a diff before applying, destructive changes prompt for confirmation

Features

  • 145+ commands covering VMs, containers, nodes, storage, backups, cluster, firewall, access control, pools, and Ceph
  • Declarative IaC -- apply and export for infrastructure-as-code workflows
  • Auto-detection -- resolves which node a VM lives on automatically
  • Agent-friendly -- --json output, schema command for introspection, structured exit codes
  • Async task handling -- waits for operations to complete with progress spinner
  • Safe -- destructive operations require --yes confirmation
  • Raw API escape hatch -- proxctl api get/post/put/delete for any endpoint
  • Hidden aliases -- qm for vm, ct for container
  • Idempotent -- starting an already-running VM succeeds without error

Configuration

Config file

~/.config/proxctl/config.toml

[default]
host = "https://192.168.1.1:8006"
token = "root@pam!proxctl=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
insecure = true

[production]
host = "https://pve.example.com:8006"
token = "admin@pam!proxctl=yyyyyyyy-..."

Environment variables

Variable Description
PROXMOX_HOST Proxmox host (e.g. pve.example.com:8006)
PROXMOX_TOKEN API token (user@realm!tokenid=secret)
PROXMOX_PROFILE Config profile name (default: default)
PROXMOX_NODE Default node name

Precedence

CLI flags > environment variables > config file

Usage Examples

Human output (TTY)

$ proxctl vm list
  VMID  NAME                  STATUS      NODE        CPUS      MEMORY
   100  k8s-control-1         running     pve1           4    8.00 GiB
   101  k8s-worker-1          running     pve1           8   16.00 GiB
   200  dev-sandbox            stopped     pve2           2    4.00 GiB

JSON output (piped or --json)

$ proxctl vm list --json | jq '.[].name'
"k8s-control-1"
"k8s-worker-1"
"dev-sandbox"

JSON output is automatic when stdout is not a TTY, so piping to jq, grep, or scripts works without flags.

Agent Integration

The schema command outputs a JSON description of all 145+ commands with their arguments, types, defaults, and behavioral metadata:

proxctl schema | jq '.commands | length'
145

This enables AI agents and automation tools to discover available operations, required parameters, and which commands are mutating or destructive -- without parsing help text.

Comparison

Feature proxctl pvesh (built-in) proxmoxer (Python)
Declarative IaC (apply/export) Yes No No
Typed CLI with completions Yes No N/A
Cross-platform binaries Yes No (PVE only) pip install
VMID auto-resolution Yes No Manual
JSON + human output Auto-detect JSON only N/A
Agent schema introspection Yes No No
Idempotent lifecycle ops Yes No Manual

License

MIT

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

proxctl-0.2.5.tar.gz (99.7 kB view details)

Uploaded Source

Built Distributions

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

proxctl-0.2.5-py3-none-win_amd64.whl (3.9 MB view details)

Uploaded Python 3Windows x86-64

proxctl-0.2.5-py3-none-manylinux_2_28_x86_64.whl (3.9 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

proxctl-0.2.5-py3-none-manylinux_2_28_aarch64.whl (3.7 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

proxctl-0.2.5-py3-none-macosx_11_0_arm64.whl (3.6 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

proxctl-0.2.5-py3-none-macosx_10_12_x86_64.whl (3.8 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file proxctl-0.2.5.tar.gz.

File metadata

  • Download URL: proxctl-0.2.5.tar.gz
  • Upload date:
  • Size: 99.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for proxctl-0.2.5.tar.gz
Algorithm Hash digest
SHA256 b801ab7be6ad3967f563c5a9f1c1d42d87b958976f9bdca88f96030cc44e0c46
MD5 b51c77813e2527d674a05c04bc2247b9
BLAKE2b-256 a25c347338ac7a88ccf7ecf05f63f662fcefbe853eab006b857f96ec262e6c76

See more details on using hashes here.

File details

Details for the file proxctl-0.2.5-py3-none-win_amd64.whl.

File metadata

  • Download URL: proxctl-0.2.5-py3-none-win_amd64.whl
  • Upload date:
  • Size: 3.9 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for proxctl-0.2.5-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 f3e1a62fccf042dc743b139e6a3960e3356674d8829a8a9d19e6b71a0c65ef03
MD5 d010ebfde47761f925bec328f24d6eda
BLAKE2b-256 1b3b9aaf957b5e239da38257f1e6466e1d3f8af35c31efbdc17c19dc16ff693b

See more details on using hashes here.

File details

Details for the file proxctl-0.2.5-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for proxctl-0.2.5-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 05ae4770156b887caf67ce2a89210fc850fe68d5604e920766ed5d70b109cfd4
MD5 7ba5a375d3a30db452480db8ac2456a6
BLAKE2b-256 de3e163d80c26e970ababa2fd766010dc268a93c0ed594d684a9dc994e01b72a

See more details on using hashes here.

File details

Details for the file proxctl-0.2.5-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for proxctl-0.2.5-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d2861514e0b9fec7aec905685aa5979ee8d8a2acdc64c41d8e2b6e11d6977a27
MD5 ccd14ecfe429b613afbfe6f9db0a012e
BLAKE2b-256 12a9b42a5cf3ff168e2f0ab850328d5f2be560a8430190f007748e72201ffcd6

See more details on using hashes here.

File details

Details for the file proxctl-0.2.5-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for proxctl-0.2.5-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 51f4e50f91602ce485d45f8f83a173b83d6ff2da7ccbfd2949a72110fa396de1
MD5 504c512a06426e32926b3e42ab7cdd70
BLAKE2b-256 7cb4e2f5ad30429bfdaf3355a0571ccbae6ceef6f120073d8b0c68bc33507f31

See more details on using hashes here.

File details

Details for the file proxctl-0.2.5-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for proxctl-0.2.5-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9942640294255295b83a2de1d73bbf964a3fad754c104e872a79847700338d04
MD5 d98e581c7a859ecb02d83051aef40131
BLAKE2b-256 f36395391feda93deada67ffd32d2250a9c6d9c5ce76515e27072c302159c06c

See more details on using hashes here.

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