It's worth giving Ansible some credit here. Alternatives like Chef, can and do contain arbitrary Ruby logic which can make Chef "cookbooks" horrible to figure out and debug.
So while Ansible may not be great, other solutions also have drawbacks, and it isn't quite as easy as do <x>.