Ansible&#x27;s playbooks aren&#x27;t declarative for me, I&#x27;ve came to the conclusion that they&#x27;re a framework to write shell scripts.<p>Dependencies are expressed by the sequence of the code blocks in the playbooks and roles, and I see them as implicit. In contrast, Puppet makes the dependency tree explicit with the &quot;requires&quot; language construct.<p>The thing is, Ansible works well enough for 85% of the cases, where the additional complexity that Puppet brings is not needed.