&gt; ... keep playbooks declarative.<p>I guess I&#x27;ve never really considered playbooks declarative. They are written like and feel like a script I&#x27;d write in a language like, I don&#x27;t know, Python. Now, Salt state files I would consider declarative. They are simply Jinja templated dictionaries (Ansible is YAML that tries to find values templated with Jinja; BIG difference as I&#x27;ve discovered using Ansible for the last 6 months) that actually describe a set of states the host should be in. Ansible&#x27;s playbooks encode a set of function calls that should be applied in a particular order. Don&#x27;t get me wrong, playbooks ARE powerful in their ability to describe processes that span multiple hosts and I recognize that, but I&#x27;d really like to use a real programming language rather than some half-baked one that is encoded in YAML.<p>I agree with the GP that I wish the Python API was a bit more robust. Currently we have several tools that generate playbooks on the fly, write them to temporary files and then run them with ansible-playbook to ensure we don&#x27;t lose some functionality that makes playbooks as powerful as they are. Now, it appears the API has significantly changed in 2.0 and it looks like they expose (read: recommend using) more of it making it easier to script with Ansible.