Ansible’s focus on simplicity makes it a good match for organizations with limited skill sets and a small infrastructure footprint. Ansible abstracts configuration into YAML modules called ‘playbooks’.
Playbooks offer a quick start, but they are inherently inflexible language. Any non-standard configurations or run complex change requires awkward workarounds.
Chef has a domain specific language (DSL) that provides an easy to approach interface for managing basic configuration tasks.
For complex scenarios, users can leverage the full power of the Ruby programming language to model appropriate solutions.
Several established patterns for creating custom solutions exist and many are already available through Chef’s vibrant open-source development community.
You don’t need to know Ruby to use Chef, but when facing uncommon edge case scenarios it’s easy to use just enough Ruby to work your way through the most complicated tasks.