Whip your servers into line. A fast and simple Ansible replacement optimized for projects with 1 to 20 servers.
base=https://github.com/gwillem/whip/releases/latest/download/whip
curl -L $base-$(uname -s)-$(uname -m).gz|gzip -d>whip&&chmod +x whip
./whip version
Note
Keep this in mind.
Finished | Planned | NOT planned* |
---|---|---|
ssh auth | external inventory | non-linux |
ssh agent | facts | sudo / become |
apt | pip / env | ssh passwords |
file/copy | roles / includes | local_action |
shell | rpm, yum, pacman | with_xxx |
command | get_url | delegate_to |
lineinfile | apt_repository | set_fact |
vars | user | assert |
templates | mysql | stat |
vault | postgresql | debug |
How will Whip stay fast and simple?
Only build features that satisfy 95% of use cases. Convention over configuration. Support top used modules only. Only support Linux servers and Linux/Mac clients.
Eliminate unnecessary SSH round trips: Ansibles biggest delay is caused by tasks that are sent one by one. Whip bundles tasks into a single job.
Ansible started out as fast and simple too. Compared to the popular configuration management systems at the time (Puppet, Chef, CFEngine), it was a breeze of fresh air. Simple configuration files, easy to learn, effective documentation, simple push architecture.
Until version 2 or so. After the RedHat acquisition, Ansible grew into commercial bloatware. RedHat got rid of the old objectives page (Simple, Fast) and replaced it with corporate marketing fluff. The task parameter documentation is hidden behind white paper downloads. Core modules have grown to support 20 extra options to support esoteric use cases. And above all, its once legendary speed is gone. Ansible feels sluggish today.
Ansible has grown too complex, as illustrated by this Hacker News comment:
Any sufficiently complicated configuration language contains an ad hoc, informally-specified, bug-ridden, slow implementation of a Turing complete programming language. (jasim @ HN)
- Top Ansible tasks
- I'm done with Red Hat
- Is Ansible turing complete?
- Ansible's YAML file is essentially code
- Configuration complexity clock
- Original Ansible site: simple and efficient
- Some recent config mgt alternatives:
- gossh: declarative config management using Go
- JetPorch (launched and discontinued)
- Ploy Jan 2024, not Ansible compatible
- Bruce since Apr 2023, not Ansible compatible
- mgmt since 2016, full featured, high complexity, not Ansible compatible
- Tiron some Ansible runners, written in Rust, uses HCL instead of Yaml
- Sparky see also
Is Whip designed to be an Ansible replacement (backwards compatible) or to be a better solution to the same problem?
The latter, however we stick to most of Ansible's verbiage to ease a transition.
To support different architectures between host and client
- tree module with state per line
- apt module with state per line
- "unless" for command and shell