Ask HN: How do you handle configuration management?
1.) My company mandates the use of Jenkins for "all the things" CI/CD related. A significant component of my team's domain is a heavily customized off-the-shelf commercial product. This product comes with a plethora of configuration. We are tasked with using Jenkins to deploy config changes to production, and this has proven to be an inflexible pain in the rear.
2.) My company has an enterprise Puppet license, which to me seems a much better fit for our use case. One major caveat is that my company is devoutly beholden to its shareholders, which means it favors FOSS (extreme emphasis on FREE) solutions as much as possible. This has me thinking Ansible.
I'm curious as to what you use and why you use it. I'm also open to any suggestions as to how I can convince both my manager and upper management that Jenkins just isn't cutting it.
11 comments
[ 2.8 ms ] story [ 33.6 ms ] threadAnsible for remote execution and your write your own scripts, tha has been a good combination for me.
Very resently I remake all my bash and makefile scripts to use just python scripts with https://github.com/mariocesar/boot.py, taking advantage that all my instances have Python 3.6 by default.
Have python3 for scripting makes doing sysadmin work joyful.
Yeah, no, bad choice. Ansible only pushes configs to remote servers, and on-line ones at that. Don't expect a retry if any of the servers is down. Good match for deploying things, but terrible for long term management. It's somewhat similar with this regard to Jenkins.
Also Ansible's approach of using SSH (directly to root or through sudo) is brittle; prepare for outages if you start changing sshd config or sudoers, as it's easy to cut off your all channels: configuration distribution, running predefined procedures, and debugging. And there's more, like managing hosts' public keys being PITA (as always with SSH) or weird way of encoding a programming language as YAML with mismatching preprocessor (Jinja2).
If you have Puppet deployed, stay with Puppet for managing configuration.
http://www.fabfile.org/
Works over SSH. Uses pure Python. No need to deploy and configure minions/agents/etc.
Fabric also benefits from being highly composable. Since it's python, you can parametrize and reuse functions and create class-based tasks [1]
Want to use Fabric with python 3? Here is a fork with Python 3 support: https://github.com/mathiasertl/fabric/
If you use fabtools, I maintain a fork of it for fabric3: https://github.com/develtech/fabtools/tree/fabric3
[1] http://docs.fabfile.org/en/1.14/usage/tasks.html#task-subcla...
[1] - https://packer.io
[2] - https://terraform.io
https://fortyft.com/posts/ansible-puppet-chef-no-thanks/
For more bells and whistles (and a steeper learning curve) try Escape:
https://escape.ankyra.io/docs/what-is-escape/
I wrote this 3 years ago and it's still true today: http://verticalsysadmin.com/blog/cfengine-is-awesome/
Offering training and consulting on CFEngine has allowed me the privilege of training top-notch talent from all over the world (and to see more of the States).