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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

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

File metadata

  • Download URL: proxctl-0.2.8.tar.gz
  • Upload date:
  • Size: 108.3 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.8.tar.gz
Algorithm Hash digest
SHA256 256b8fa538fda818c4f26e59ba2902f23a82c60fab37c7edf14a1f9a4a5d3f9b
MD5 74770749a28a9c61591306d33ee5644c
BLAKE2b-256 370756025ac821e50b009ebf9b8c0f863df7cc7cb9d05912bb8646c207638284

See more details on using hashes here.

File details

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

File metadata

  • Download URL: proxctl-0.2.8-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.8-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 3f08aa597a07ad3785e6731d7cbf13caea725ef42cd12558174863e975fd59b8
MD5 682a6131c133adc8e79669a9f904ba9e
BLAKE2b-256 e84d52f5536ac70f4a06550f48ad52f9b4838e023665d1a3c480e7173a935319

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for proxctl-0.2.8-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c10c2a8b0ba5368e4351da3409a03df189a0b03298f44da9f01093b851df41ca
MD5 82bb9cbb398063246bc056437e1c878b
BLAKE2b-256 c180c0680068a63776c6c7d3f7bca4b6e9aae93f7b2f16e2fb5a35f67aa4f688

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for proxctl-0.2.8-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d72b15768386c715b38442ed604515567b561acc61c87ecf480ac8a00ca098ed
MD5 976a3ec2d1c24951270172e44abaec16
BLAKE2b-256 e36d255891ddbb625f5523b08e090eae21c869714aa77f5111280e1390277a22

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for proxctl-0.2.8-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 40a84491083fdf50f3f28e8b7e9613a200c6d378aa0c7417f0bf8e02ad26fa34
MD5 fb840fccbd79c84ed788dac7beb55ab9
BLAKE2b-256 1f8e03448c7a8dc743431666b2fbfc347852ff324a116a1ab20df158dab9b88d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for proxctl-0.2.8-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 4455e4aa47d6c1fa0a67f2daac2ebc614ddba266b61d3d4fe635a9d78e565fc1
MD5 3ef943dbb4f6f6712fb6aec47004f49d
BLAKE2b-256 c70565f0a9fb426d413bd51a89ac899561a8d1d25268eeb3ca7fc38be284027b

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