Not that this is good or bad, but I think that's why Ansible took off with the traditional operations-teams.
You don't get that with programming languages. People do all kinds of shit with programming languages. There's tons of good ways to tackle a problem. And exponentially many more bad ways to tackle a problem.
Having a given repeated form makes interpreting & understanding Ansible far easier than the alternatives.
By using yaml ansible basically forces you to be purely declarative, which I found to be a boon, especially once other engineers who similarly didn't initially get the declarative paradigm started on working in the codebase.
But yes, trying to work with even mildly complex data structures in Ansible is a nightmare compared to raw Python.
Also, don't forget that yaml is way easier to pick up by non-python developers and people unfamiliar with programming.
Kidding aside, it is somewhat amusing to see the same discussion as when chef happened repeat itself.
Ansible clearly had to take a lot of liberties with the yaml format to make it work in practice. The amount of yaml in yaml you have to write is surprising. I cannot wait for the cycle to repeat itself.
and yet, completely facepalmed by invoking Jinja2 with its default begin and end characters that are meaningful to yaml, thus ensuring billions of person-years of SO questions due to having to quote, sometimes multiple ways, every jinja2 invocation
Contrast that to GitHub Actions which uses ${{ }} for its parameterization and thus no quoting required, in contrast to
- debug:
msg: '{{ "what kind of lack of forethought was this nonsense" }}'
My first love in this space was Chef, and honestly it remains my favorite in config management because you can write things in it that look very non-programmy, but you're still just writing in pure ruby. Obviously Ansible has the advantage being agentless, but I just cannot stand how popular it is.