As a data format, yaml is extremely complicated and it has many footguns. In this post I explain some of those pitfalls by means of an example, and I suggest a few simpler and safer yaml alternatives.
A 10 minute read covering some YAML edge-cases that you should have in mind when writing complex YAML files
Man, even knowing that YAML document was going to be laden with bullshit, I only spotted the unquoted version strings looking fishy.
I also really dislike how often YAML is abused to take keys as list items. Something like this, for example:
hosts: debian-vm: user: root database-server: user: sql
“debian-vm” and “database-server” are the hostname, and as such they are values. So, this should be written as:
hosts: - name: debian-vm user: root - name: database-server user: sql
And I’m not just nitpicking here. If we change the example a bit:
hosts: database: user: sql
…then suddenly, you don’t know, if “database” is just one of many possible hosts or if all hosts always have a shared database with this technology.
Recently introduced myself to OpenAPI/Swagger and it’s chock full of this. It’s painful.
I inherited ansible that always used maps instead of lists and it drove me up the wall. Still untangling that.
Maybe one day you’ll be left with optimized Ansible.
It’ll still be absolute shit, because it’s Ansible, but at leas-- nah, quit now.