Richard Bucker

Hashicorp Packer; is it a waste of time and money?

Posted at — Aug 3, 2019

I’m lazy. There, I’ve said it. It’s that laziness that prevents me from creating “things” with layers of complexity and simplicity. I simply want to GST (get sh*t done) in the fewest keystrokes, lines of code, and features. All those things are nice to have but in all honestly get some revenue first. Paying customers with feature requests is better than no customers burning through investment.I recall in one environment we talked about HA replication and scaling to 10s-100s of servers. That was a nice exercise, however, we always said “transaction volume would be a different class of problem to solve”. Sadly it never happened and we never grew past a single deployment and all of that DB and security replication cost money to develop and test… and worse support in production. And those features never generated a single extra dollar in revenue.So what does Packer get you? Frankly I’m not sure. They support a number of different targets but all of them require customization. I’m not sure you get real scale there when you later start adding chef, puppet or ansible. The layers and costs just continue to mount.Bootstrapping an environment is a common function. It usually means that there is a source code repository some place with at least one script that can initiate the full deployment. Sometimes this bootstrap system is transient and sometimes it’s permanent. It does depend on the operating rules. But one thing for certain is that there are certain challenges when you are looking at recursion… you cannot bootstrap a git server if the code you need is in the git server. That’s why I believe in the simplest system possible.My simple solution is a matter of putting my general purpose tools in a public repo like gitlab, github, etc. I’ll clone that code onto my bootstrap regress for a moment, my bootstrap system is either a simple dedicated guest or some other system that resides inside the target network. This resource has access to the tools and the ability to run them. That could include docker, docker-machine, some credentials.At this point I have private script that can deploy an admin console. OnceĀ  the admin console is created all of the clusters config scripts are loaded and deployed. Currently I’m using docker swarm with some minor k8s and k3s implementations. Once the cluster is ready it’s just matter of deploying apps and services. That in itself is just a matter of launching some docker stack or service commands. None of which requires packer, chef, etc… just simple shell commands. Once deployed normal orchestration applies.Simply put you already need a Dockerfile and in some cases some sort of a compose file… now adding layers of configuration as code called packer is a waste.