XelNagaTemple - Bare Metal Provisioning Tool

I want to introduce a new tool that I personally find useful. The use case sprung up from the great difficulty it is to do complex things using Ansible when deploying bare metal nodes.

So for example, order 10 servers on Hetzner, order failover ips and secondary ips. Bind the first primary interface to eno1 (using the mac address), bind the secondary ips that you ordered, set the failover ip, for eno1. This seemingly simple config took over a month to figure out using Ansible and even then it did not work as needed (requiring much manual intervention, and tons of chained playbooks + ansible config files).

At that point we realised it made more sense to just write a new tool.

What we really want out of a deployment tool is just parallel SSH and SFTP basically. Something so simple but not really offered anywhere.

Big thanks to Bakeware for their awesome Spawnfest submission. This made packing up the tool as a single binary effortless.

3 Likes

Out of interest, have you tried using GNU Parallel with shell scripts? This seems to be similar in capabilities to this one.

I did not look at parallel, it might fit the bill but itl introduce a lot of extra complexity. It could probably get the job done, say using parallel to run a bunch of scripts, then using the parallel string replace + catting a list of hosts + seding them + creating a custom format and parsing it using awk essentially creating a term parser (to pull the ssh_port / ssh_user or other per host fields).

But why? lol, just use elixir. I am okay without my awk/sed+shell+pipes blackbelt.

GNU Parallel can run scripts on remote machines, so no need for additional parser or configuration if I understand what you wanted to do.

I mean I don’t think its as simple as just running shell scripts in “parallel” on remote machines.

But this def looks like a fun challenge, to deploy a 10+ node baremetal cluster using parallel and shell scripts (assuming cannot use escript, since the remote machine come bare, no elixir installed). Configuring ifaces, grub, systemd services like performance governor, and more.