This is a story about Proxmox Terraform automation, and how using it to replace clicking through provisioning wizards turned a three-hour chore into fifteen minutes of code. Same result. Ten times faster. Zero human error. I should have done it years earlier.

The third VM that week

It was the third VM I'd built that week. Three hours of clicking through the Proxmox wizard — storage here, network there, ISO, template, disk size, the same dance every single time.

Then the part I actually hated: copying IP addresses out of a shared spreadsheet that nobody had updated in two months. Configuring networking by hand. Cross-checking against the last VM and praying this one matched.

It didn't. It never did. No two VMs I built by hand ever came out identical. Every one of them was a snowflake — subtly different in ways I wouldn't discover until something broke at 2 a.m. and I was diffing configs trying to work out which manual step I'd fat-fingered three weeks earlier.

The moment I snapped

Somewhere around hour two of that third VM, I stopped clicking. I opened a terminal. I started writing Terraform.

Not because I had a plan. Because I couldn't stand doing it by hand one more time. There's a specific kind of exhaustion that comes from repeating a task you know a machine should be doing, and I'd hit the wall of it.

Two weeks later, the entire manual workflow was gone.

The stack that replaced the clicking

The replacement wasn't one tool. It was three, each doing the thing it's actually good at:

  • Terraform talks directly to the Proxmox API for provisioning and networking. This is the layer that killed the wizard. You describe the VM; Terraform makes it exist.
  • Ansible runs everything post-provisioning — configuration and security hardening — automatically. No SSH-ing in afterward to tweak things by hand.
  • Python handles template management and orchestration, the glue that ties template lifecycle and the messier edges together.

None of this is exotic. That's the point. It's boring, well-documented infrastructure-as-code, and boring is exactly what you want holding up the machines you run everything else on.

The workflow

The day-to-day is almost anticlimactic now:

  1. Define the VM specs in a YAML file — CPU, memory, disk, network, the works.
  2. Run terraform plan and read exactly what will be created. No surprises, no "let's see what happens."
  3. terraform apply.
  4. Ansible takes it from there. Hands off.

Define what you want. Get what you defined. That's the whole loop.

What actually changed

The headline number is the one that made me want to write about it in the first place: three hours down to fifteen minutes per VM. But the time saved is the least interesting part.

  • Every VM is identical. No snowflakes. When they're all built from the same code, "it works on that box but not this one" stops being a category of problem.
  • IP management is automated. The spreadsheet is dead. Addresses are handled by code, not by whoever remembered to update a shared file.
  • Everything lives in Git. A new engineer clones the repo and understands how the whole thing works on day one. No tribal knowledge. No documentation that went stale six months ago. No archaeology through old Slack threads.

That last one is the quiet win. Manual infrastructure isn't just slow — it's a knowledge trap. The person who built it is the only one who knows why it's shaped the way it is, and the moment they leave, you're reverse-engineering your own systems.

The part nobody warns you about

Here's the thing about manual work: you don't notice how much of your life it's eating until you stop doing it. While you're in it, three hours of clicking feels like "just the job." It's only from the other side — watching terraform apply finish in the time it used to take me to configure networking on one box — that you look back and wonder why you tolerated it for so long.

So here's the honest rule I've landed on: if you're provisioning anything by hand more than twice, you're not being thorough. You're being patient with a problem that doesn't deserve your patience.

What are you still building by hand that Terraform could handle?