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.