Having used Chef, Puppet, and Ansible, this is exactly why I prefer Ansible for all my projects now.
If you can write a shell script, you can write an Ansible playbook. It won't be a great playbook, and you get benefits from using their modules instead of shell commands (like idempotency). But you don't have to worry about learning a new DSL just to do write a basic playbook or tweak an existing one.
As a functional programmer, I understand the benefits and appeal of declarative syntax. Unfortunately, systems programming is the one place where it's really hard to be 100% declarative, because systems are inherently all about state[0].
[0] At least in 2015 - perhaps things will change as we move toward better containerization models