An Ansible Tutorial
serversforhackers.com
serversforhackers.com
What's scary about shell scripts is the lack of idempotence (if you accidentally run them twice, things break).
What's annoying about chef/puppet is the bootstrapping overhead -- you can't start from a blank slate system, because you still need to install puppet-client or ruby+dependencies. So now you're paying to store a bunch of semi-pre-configured images with some out-of-date ruby gems or an old puppet-client. If you want to start from a blank image, then you're using shell scripts to install the toolchain that will let you avoid using shell scripts (or worse - doing it by hand!).
Ansible is idempotent ssh + shell scripting, so it solves the 'blank slate' problem nicely. It only requires python, which is bundled by default on ubuntu servers.
Personally I love how it makes it easy to convert existing shell scripts. One of my projects is Vaprobash - vagrant provisioning bash scripts - which contains mostly non-idempotent scripts. (It uses bash scripts purposefully as a teaching tool). Making an ansible version of it will be nice as well.
ansible webservers -m yum -a "name=puppet state=latest" -s
Or just use ansible for provisioning and install puppet along with the OS. Or something...Also, there's Rex now (in Perl), which, in my opinion, is better than Ansible as I hate writing code in YAML - I'd rather do it in Perl if Python/Go/Rust are not a option.