Configuration management finally done right
The story so far: Puppet
●slow
●pull-based (dedicated client)

●custom PKI

●huge memory hog, very brittle

●extendable in Ruby only

●hard to share data between nodes

●crazy DSL

●slow
The story so far: bcfg2

●acceptable performance
●pull-based (dedicated client)

●custom PKI

●small memory footprint

●extendable in Python

●XML everywhere
The future is now: ansible

●no daemons, ever (almost)
●push-based (python is the client)

●ssh keys for authentication

●quite fast and getting faster

●extendable in everything that can write JSON

●fast and furious (<1 year old)
Deploying ansible


1. pip install ansible
2. profit!

(almost, some tweaks needed)
One-shot mode


ansible webservers -m copy -a 
  „src=httpd.conf
   dest=/etc/apache2/httpd.conf”
/etc/ansible/hosts
[webservers]
www[0-100].example.com

[webservers:vars]
app_version=1.23.45

[dbservers]
db0.example.com
db1.example.com
Playbooks


●YAML
●collections of actions, mostly like one-shot mode

●notifications (restart apache if config changed)
Get shit done

 From zero to production in minutes
●no custom authentication

●no client setup

●no daemons

●no external dependencies (DNS, NTP, WTF)

●playbooks very similar to ad-hoc mode

●configuration management or one-off deploys
http://ansible.cc/

Ansible