In my experience with ansible, salt and chef their key selling point compared to bash script is composibility and abstracting away the underlaying distribution. The later one is so leaky it's not very useful. Composibility is possible but the building blocks lack any opinionated structure, so everyone re-invents the wheel anyway.
Today I wouldn't use any of those anymore and, as you suggested, use shell scripts in a immutable infrastructure fashion (aka, reinstall system when changes are needed).