Skip to content
Back to skills

Ops Proxmox

ASecurity

Proxmox VE infrastructure with Terraform (VMs, LXC, network, storage, backup)

  • 5 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added May 28, 2026
ai-agentsbashnodeterraformgitapisecuritydocumentation

Works with

  • api

Security analysis

A100/100

Pro scans all 5 files and shows the line behind each finding

Scanned September 28, 2026

npx -y skills add christopherlouet/claude-base --skill ops-proxmox --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ops Proxmox?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Ops Proxmox
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/christopherlouet-ops-proxmox/badge)](https://www.skillsdirectory.com/skills/christopherlouet-ops-proxmox)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: ops-proxmox
description: Proxmox VE infrastructure with Terraform (VMs, LXC, network, storage, backup)
argument-hint: "[resource-type]"
---

# Proxmox Infrastructure Skill

Proxmox VE infrastructure management with Terraform: provisioning of virtual machines, LXC containers, network configuration, storage and backup.

## When to use this skill

This skill is automatically activated when the conversation mentions:
- "Proxmox", "PVE", "Proxmox VE"
- "Proxmox VM", "Proxmox LXC", "Proxmox container"
- "Proxmox cluster", "Proxmox node"
- "PBS", "Proxmox Backup Server"
- "Proxmox cloud-init"
- "QEMU/KVM" in a Proxmox context

## Core principles

### 1. Infrastructure as Code

All Proxmox infrastructure must be managed via Terraform:
- **Reproducibility**: same config = same result
- **Versioning**: history in Git
- **Review**: PR to validate infra changes
- **Documentation**: the code IS the documentation

### 2. Environment separation

```
environments/
├── dev/           # Can be destroyed
├── staging/       # Mirrors prod
└── prod/          # Critical
```

Each environment has its own variables (`terraform.tfvars`), its own Terraform state and its own credentials.

### 3. Reusable modules

```
modules/
├── vm/            # QEMU/KVM virtual machine
├── lxc/           # LXC container
├── network/       # Network configuration
├── storage/       # Storage configuration
└── backup/        # PBS configuration
```

## Proxmox architecture

### Resource hierarchy

```
Datacenter
├── Cluster (optional)
│   ├── Node 1 (pve1) → VMs, LXC, Storage, Network
│   ├── Node 2 (pve2)
│   └── Node 3 (pve3)
├── Storage (datacenter level)
│   ├── local, local-lvm (per node)
│   ├── nfs-shared (shared)
│   └── ceph (distributed)
└── SDN (Zones, VNets, Subnets)
```

### Resource types

| Type | Description | Use case |
|------|-------------|----------|
| **VM (QEMU)** | Full virtual machine | Heavy workloads, strong isolation |
| **LXC** | System container | Lightweight services, high density |
| **Template** | Base image | Fast cloning of VMs/LXC |
| **Snippet** | cloud-init files | Automated configuration |

## Terraform provider

### bpg/proxmox (recommended)

Modern, well-maintained provider, full coverage of the Proxmox API.

```hcl
terraform {
  required_version = ">= 1.5.0"
  required_providers {
    proxmox = {
      source  = "bpg/proxmox"
      version = "~> 0.50"
    }
  }
}

provider "proxmox" {
  endpoint  = var.proxmox_endpoint
  api_token = var.proxmox_api_token  # Recommended token
  insecure  = var.proxmox_insecure   # Dev only

  ssh {
    agent    = true
    username = "root"
  }
}
```

### API token authentication

```bash
# On the Proxmox node
pveum user token add terraform@pve terraform-token --privsep=0

# Minimal permissions
pveum aclmod / -user terraform@pve -role PVEVMAdmin
pveum aclmod /storage -user terraform@pve -role PVEDatastoreUser
```

Format: `terraform@pve!terraform-token=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`

## Naming conventions

### VMs and containers

| Environment | Pattern | Example |
|---------------|---------|---------|
| Production | `prod-{role}-{index}` | `prod-web-01` |
| Staging | `stg-{role}-{index}` | `stg-api-01` |
| Development | `dev-{role}-{index}` | `dev-db-01` |
| Test | `test-{purpose}` | `test-migration` |

### VMID ranges

| Range | Usage |
|-------|-------|
| 100-199 | Infrastructure (DNS, DHCP, etc.) |
| 200-299 | Production |
| 300-399 | Staging |
| 400-499 | Development |
| 500-599 | Test/Temporary |
| 9000-9099 | Templates |

### Recommended tags

```
environment:prod
role:webserver
team:platform
backup:daily
managed-by:terraform
criticality:high
```

## Security

### Best practices

1. **API Token**: minimal permissions (dedicated role, not root)
2. **Firewall**: enable the Proxmox firewall by default
3. **Isolation**: separate VLANs per environment
4. **Unprivileged LXC**: always use unprivileged containers
5. **Audit**: log API and SSH access
6. **Secrets**: NEVER hardcode in HCL (use Vault, TF_VAR_*, or gitignored tfvars)

### Minimal Terraform permissions

```bash
# Dedicated role
pveum role add TerraformRole -privs "VM.Allocate VM.Clone VM.Config.CDROM VM.Config.CPU VM.Config.Cloudinit VM.Config.Disk VM.Config.HWType VM.Config.Memory VM.Config.Network VM.Config.Options VM.Monitor VM.Audit VM.PowerMgmt Datastore.AllocateSpace Datastore.AllocateTemplate Datastore.Audit SDN.Use"

# User + assignment
pveum user add terraform@pve
pveum aclmod / -user terraform@pve -role TerraformRole
```

## References

This SKILL.md section contains the core principles. For technical details with full HCL examples, see the reference files:

| File | Content |
|---------|---------|
| [`references/terraform-modules.md`](references/terraform-modules.md) | VM modules, LXC, usage, network, storage |
| [`references/cloud-init.md`](references/cloud-init.md) | cloud-config templates, snippet uploads |
| [`references/backup-ha.md`](references/backup-ha.md) | PBS schedule, commands, HA configuration |
| [`references/troubleshooting.md`](references/troubleshooting.md) | Common issues, diagnostic commands, recovery |

## Rules

IMPORTANT: NEVER manage Proxmox manually via the UI. Always via Terraform.

IMPORTANT: Use unprivileged LXC by default (limited privilege escalation).

IMPORTANT: One Terraform state per environment (dev/staging/prod isolated).

YOU MUST use the `bpg/proxmox` provider (modern, maintained) rather than `telmate/proxmox` (deprecated).

YOU MUST use API tokens with minimal permissions, never root.

NEVER hardcode secrets in committed HCL. Use gitignored tfvars or Vault.

NEVER skip PBS backups on critical VMs.

## Attribution

This skill is based on:
- [Official Proxmox VE documentation](https://pve.proxmox.com/wiki/Main_Page)
- [bpg/proxmox Terraform provider](https://registry.terraform.io/providers/bpg/proxmox/latest/docs)

Files in this skill

  • SKILL.md5.9 KB
  • references/backup-ha.md2.1 KB
  • references/cloud-init.md1.5 KB
  • references/terraform-modules.md5.4 KB
  • references/troubleshooting.md2.9 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.