Skip to content

gwillem/whip

Repository files navigation

whip - simple and fast devops automation

order, order!

Whip your servers into line. A fast and simple Ansible replacement optimized for projects with 1 to 20 servers.

Install

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

Demo

Note

Keep this in mind.

Features

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

Philosophy

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.

But why?

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)

Other reading

FAQ

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.

Isn't everybody using Docker, Kubernetes and Kamal etc these days?

Not really.

Why is there an embedded build?

To support different architectures between host and client

Changes from Ansible syntax

  • tree module with state per line
  • apt module with state per line
  • "unless" for command and shell