Hi, got Proxmox installed. Now want to install some VMs but would like to use a simple setup rather than painfully going trough an install. I’ve read I could accomplish this via ansible. Are there ready playbooks you can hack? Presumably I would need to have Proxmox understand playbooks?
Please, for the love of god, look at other things instead of Ansible.
Definitely do openTofu for infrastructure and deployment, but for configuration of VMs please learn about puppet, saltstack, chef(cinc.sh) and especially mgmtConfig .
Ansible, by comparison, better matches what we were doing in 2002 at 1/10th the speed, and it’s like pascal levels of wordy.
Learning about options and finding one that works well for you will often give you a much better experience than fucking Ansible.
If you do abandon all hope, though, then go ahead and do Ansible; but remember if you do: there are better options, and hating Ansible doesn’t mean you hate automation.
I’d recommend using OpenTofu (Terraform) for initial provisioning of VMs and then use Ansible for post-provisioning config & management. That way you’re letting both tools play to their strengths.
https://registry.terraform.io/providers/bpg/proxmox/latest/docs
Besides ansible, also have a look at “templates” and “cloud-init” for VM generation.
I personally would avoid Cloud init as it is largely a Ubuntu thing.
Instead look into Flatcar or bootable containers
It works on debian too, which of course is ubuntu’s base distro. Just adding info.
You also could just use Ansible
Cloud init adds overhead to a clean Debian install. I’ve never really liked it personally.
Oversimplifying it, Ansible playbooks are nothing more than some commands that should be run on a remote machine via ssh. Ansible knows or has modules for a variety of different package managers (apt, yum, etc) and automagically knows how to handle services or various config files.
It can get complex, but I think just the startup phase, until you have an inventory of remote machines, the ssh keys are in place, etc. I second the Jeff Geerling recommendation, his stuff is solid, both ready to use playbooks, and tutorials.
I would suggest to also look into
cloudinit
. Makes setting up VMs on proxmox easier, faster, more consistent, with users, networking, ssh keys, etc ready to use (by you or by Ansible).@beerclue Exactly. You can take wiki bash instructions on how a system was set up and translate it to ansible, or back again. The ansible modules are python, but theoretically you could make a bash implementation that just calls dnf/systemctl/etc. directly, like a sys admin would have done.
Or, if you’re using only one or few distributions you can preseed the image and have the installer do the stuff for you.
NixOS and OpenTofu are pretty great. Add OpenBao to secure ssh keys and passwords and you can get a job as a sysops if you get good enough.
Check out NixOS. It can build qcow images from scratch for you to import into proxmox
https://github.com/nix-community/nixos-generators
I have 8 bare-metal servers and I do everything automated with NixOS, I rarely ever access the servers directly.
Here are the nixos configs for my DHCP server and kubernetes servers that you can use as a base.
https://codeberg.org/jlh/h5b/src/branch/main/porygonz
https://codeberg.org/jlh/h5b/src/branch/main/nodes
For what it’s worth, Ive been using Ansible off and on at work for 8 years, and I think it’s pretty outdated and clunky these days, there are much smarter ways to manage workloads such as kubernetes, cloud-init, terraform, and NixOS. If you don’t want to get into Kubernetes then definitely learn NixOS.
Hello you maybe best do some reading up on how ansible works, as it can get very complex.
This might be a good sting point 👉 https://www.jeffgeerling.com/project/ansible-101-youtube-series
Watching this thread. I too would like to dip into Ansible. Looks like a really powerful way to automate things.
Start by creating a VM template in Proxmox. Male sure the template regenerates things like SSH host keys and machine-id on startup. Inside the template create a user with passwordless sudo and setup SSH public key authentication.
One the host with the private key install Ansible in a python virtual environment.
To execute this create a VM in proxmox, get its IP from the DHCP server and then add it to the hosts file for Ansible. From there you can use your playbooks.
The automated way to do this would be to use the Ansible Proxmox collection to create the MAC of the VM and then use a different collection to fetch the IP and set it static. From there you could dynamically add it to the hosts file. This is hard and requires more Ansible knowledge.
Another tool you could look into is pyinfra. Pyinfra has less of a learning curve since it is just python.
If you don’t want another dependency, just get familiar with the provisioning tools of whatever distro you intend to use (Fedora Kickstart, for example), and learn how to quickly provision custom scripted thing with cloud-init when you provision something.
Ansible Galaxy has what you’re looking for, and you can install them directly from the command line.
I use it to initialize new VPS with my usual setup, but it might be easier to use a container format. I think Ansible itself has become a bit unfashionable since I started using it. I don’t know what is cool instead now. It was Saltstack for a while but idk how long that lasted. Ansible is working mostly ok for me so I’ve stayed with it, til whenever.