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.7.tar.gz (101.2 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.7-py3-none-win_amd64.whl (3.9 MB view details)

Uploaded Python 3Windows x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

proxctl-0.2.7-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.7.tar.gz.

File metadata

  • Download URL: proxctl-0.2.7.tar.gz
  • Upload date:
  • Size: 101.2 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.7.tar.gz
Algorithm Hash digest
SHA256 3b813a061daf83f486db1df90b3be8ea24fe1def2258c06c54f3570c5e14bd7f
MD5 eb896eef7098bfc1ba3d4464ba8a2438
BLAKE2b-256 11e78c177972cff4e4492f2fc4e61d62c1135f7027e156de796b00a6d5cbf939

See more details on using hashes here.

File details

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

File metadata

  • Download URL: proxctl-0.2.7-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.7-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 6cbb5bc7598cd402b5687678c39e99be3c0db533ae00a18fc4885e4be2380906
MD5 5389841af10ce83d1a7b350cec87f092
BLAKE2b-256 4e580cf0c26afb6f4dc0a190ffff2b63eb5223d52e586fc02f36e2b67dda4a1a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for proxctl-0.2.7-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 13325ad7f10365635cbc05f428c6127f6ba32c67c3f93c3fc0aab30816c348dc
MD5 b87736bd1e430072cf3d01b57314a6e1
BLAKE2b-256 7f4855f4f32f08c71de4fade7ec6cc8a943289c3d8033b2f0cb1ce95f562cbb2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for proxctl-0.2.7-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 8ea2a2c6f3d204cf17aa0869ddf134c667b3d2097b3ef2c5686b7d0139e0599b
MD5 e3b34981a4416a0d7b204dd796066cec
BLAKE2b-256 3643d10ac7e4b3eaa742a59bc16b3f682943f6ce383c057c6fa4ff82c3171366

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for proxctl-0.2.7-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 881190a6026c0ff37b4efb815f82e9d081f468abd44d5f907ecb671e699fb4c7
MD5 52e1a01b33a44e4859c26800f4976b81
BLAKE2b-256 761ac4905a5a7766a3ba3e7b52de45b3ae72a06349c394f2d71acdc39d8b3a2b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for proxctl-0.2.7-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a7ac600873afa6e09384158795d871621e95349d7c021bbbf14429f6575ee0f9
MD5 b4843b053392b65d0fa01cd1658accc6
BLAKE2b-256 6b6c7a51457748ecb2b490696f2be5ba9177207efec25de9c2fc7571fcfd9488

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