← ClaudeAtlas

proxmox-ansible-provisioninglisted

This skill should be used when creating a new Proxmox LXC (pct create) or VM, writing or debugging Ansible playbooks that target Proxmox/Debian hosts (including Debian 13/trixie), or troubleshooting a Proxmox+Ansible workflow — a "storage 'local-lvm' does not exist" error, a "Systemd 257 detected" nesting warning, Ansible failing with a locale error inside a fresh LXC, an Ansible lineinfile task that keeps reporting changed on every run, writing multi-line config/YAML files to a remote host over SSH, an "apt-key or gpg binary is required" error from Ansible's apt_repository module, a Proxmox-family product (PVE/PBS/PMG) apt install failing with a 401 against enterprise.proxmox.com, Tailscale/anything needing `/dev/net/tun` stuck crash-looping inside an unprivileged LXC, any host device (GPU render node, USB dongle) bind-mounted into an unprivileged LXC showing up owned by `nobody:nogroup`, or an LXC's own dashboard/monitoring reporting a suspiciously high load average that doesn't match its actual workload. T
jackson2w/claude-code-skills · ★ 1 · DevOps & Infrastructure · score 67
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