proxmox-ansible-provisioninglisted
Install: claude install-skill jackson2w/claude-code-skills
# Proxmox + Ansible Provisioning
A repeatable sequence and five real gotchas hit while building a Proxmox LXC and Ansible control
node from scratch. Each looked like a one-off problem at first; all five recur on every future
Proxmox/Ansible build unless checked for up front.
## Provisioning sequence — check reality before writing commands
Don't guess storage/template names from memory or generic Proxmox examples — verify against the
actual host first, every time:
```bash
pvesm status # real storage identifiers — NOT always "local-lvm"
pveam update && pveam available | grep debian-13
pveam list local | grep debian-13 # real template filename, exact version string
```
A ZFS-based Proxmox install uses something like `local-zfs`, not the LVM-thin default
(`local-lvm`) most tutorials assume. Guessing wrong here fails the `pct create` outright — cheap
to avoid by checking first.
Create unprivileged, DHCP-addressed (not a hardcoded IP — add a router DHCP reservation instead,
once you have the MAC from `ip a` inside the container):
```bash
pct create <vmid> local:vztmpl/<exact-template-filename> \
--hostname <name> \
--unprivileged 1 \
--cores 1 --memory 1024 --swap 512 \
--rootfs <real-storage-name>:8 \
--net0 name=eth0,bridge=vmbr0,ip=dhcp \
--onboot 1 \
--ssh-public-keys /path/to/pubkey-file-on-the-host
```
**Last step, not optional: run `base-hardening.yml` against the new host before considering it
provisioned** — `ansible-playbook base