The problem is that the current fashion of devops is done through piles and piles of badly defined YAML. If it used any other configuration language, it would be just as bad.
It isn't "bad", as it does have a purpose. It's just fucking annoying to work with.
How's it annoying? It's easier to edit by hand than json as it allows for comments and there's no trailing comma errors.
I prefer it any day over json.
There’s a lot of foot guns in YAML. The specification is way more complicated with hidden obscurities. JSON specification is just 5 diagrams. YAML speciation on the other hand is an 86 page pdf, so there’s more room for nasty surprises (which is not a thing you want in configuration files).
I’ve also seen many people struggle more than they need to with the yaml indentation.
I think the only upside to yaml is that it allows for comments, but other than that JSON all the way.
The fact that it allows comments is really, really handy. I used to be a JSON advocate until I realized this one useful piece of info.
Yeah, such a simple, but still killer feature. Really sad that JSON doesn't support them.
I wonder how you'd even implement that. Like maybe {! At the beginning.
Most comment-aware JSON parsers I've seen just use standard // to delineate comment lines.
They make sense.
It's just another syntax to learn. For someone who already has their head crammed full of a bunch of other syntaxes over the years, I didn't want to learn a new one. YAML has kind of forced it's way in anyways though.
There are plugins that go back and forth between JSON and YAML so as you might expect it's similar. Unlike JSON, spacing has semantic meaning, which can be a little annoying, especially when cutting and pasting. It's nice in that configs aren't cluttered up with open and close braces. It could be annoying AF if you're a tabs instead of spaces person but idk because I'm a spaces person.
I like YAML for config over .config files but it's not a big deal either way. It just encourages better organization of settings because the hierarchical structure demands it while .config let's you just drop a setting anywhere in the file. But it's valid to have the opposite preference for the exact same reasons.
I'll answer your question with a question. Why does YAML support sexagesimal? (that's base 60)
ports:
- 22:22
Becomes
{
"ports": [1342]
}
not at all. it's used for configuration and stuff. having a lot of it can be a real bummer depending on the context. like a puppet config or perhaps a super weird docker compose setup.
I've never heard anyone complain about the markup though. it's like blaming json for a crap api or something or idk blaming the coffee cup for burnt coffee 🤷
It's just another structured data format. It's used for a lot more than config. It's also how you define commands and etc for Ansible. Like how a Maven project is defined in XML or a NodeJS package has its JSON.
Sure they're still "just" data formats on their own, but what they're used for is genuinely just as important as what it is. I really doubt XML would've held on like it has without HTML being the web.
For some little config it's fine, but it's horrible when used when you have thousands upon thousands of lines of it. Lots of DevOps tools tend to use it like a fully-blown turing-complete programming language, and each has a different DSL of doing variables, loops etc. And that becomes an abomination.
I learned the hard way that no is false in yaml. Took us a while to realize why our app failed to start in Norway. Too many ways to do something.
Even a 'no' is a 'false' ?
Yup. Have to ensure that you use "no" if you don't want yaml to equate it to false.
Is Yaml bad ?
Yes, a bit. But that's not the problem.
The problem is that the current fashion of devops is done through piles and piles of badly defined YAML. If it used any other configuration language, it would be just as bad.
It isn't "bad", as it does have a purpose. It's just fucking annoying to work with.
https://docs.platform.sh/learn/overview/yaml/what-is-yaml.html
How's it annoying? It's easier to edit by hand than json as it allows for comments and there's no trailing comma errors. I prefer it any day over json.
There’s a lot of foot guns in YAML. The specification is way more complicated with hidden obscurities. JSON specification is just 5 diagrams. YAML speciation on the other hand is an 86 page pdf, so there’s more room for nasty surprises (which is not a thing you want in configuration files).
I’ve also seen many people struggle more than they need to with the yaml indentation.
I think the only upside to yaml is that it allows for comments, but other than that JSON all the way.
https://ruudvanasseldonk.com/2023/01/11/the-yaml-document-from-hell
The fact that it allows comments is really, really handy. I used to be a JSON advocate until I realized this one useful piece of info.
Yeah, such a simple, but still killer feature. Really sad that JSON doesn't support them.
I wonder how you'd even implement that. Like maybe {! At the beginning.
Most comment-aware JSON parsers I've seen just use standard // to delineate comment lines.
They make sense.
It's just another syntax to learn. For someone who already has their head crammed full of a bunch of other syntaxes over the years, I didn't want to learn a new one. YAML has kind of forced it's way in anyways though.
There are plugins that go back and forth between JSON and YAML so as you might expect it's similar. Unlike JSON, spacing has semantic meaning, which can be a little annoying, especially when cutting and pasting. It's nice in that configs aren't cluttered up with open and close braces. It could be annoying AF if you're a tabs instead of spaces person but idk because I'm a spaces person.
I like YAML for config over .config files but it's not a big deal either way. It just encourages better organization of settings because the hierarchical structure demands it while .config let's you just drop a setting anywhere in the file. But it's valid to have the opposite preference for the exact same reasons.
I'll answer your question with a question. Why does YAML support sexagesimal? (that's base 60)
Becomes
not at all. it's used for configuration and stuff. having a lot of it can be a real bummer depending on the context. like a puppet config or perhaps a super weird docker compose setup. I've never heard anyone complain about the markup though. it's like blaming json for a crap api or something or idk blaming the coffee cup for burnt coffee 🤷
It's just another structured data format. It's used for a lot more than config. It's also how you define commands and etc for Ansible. Like how a Maven project is defined in XML or a NodeJS package has its JSON.
Sure they're still "just" data formats on their own, but what they're used for is genuinely just as important as what it is. I really doubt XML would've held on like it has without HTML being the web.
For some little config it's fine, but it's horrible when used when you have thousands upon thousands of lines of it. Lots of DevOps tools tend to use it like a fully-blown turing-complete programming language, and each has a different DSL of doing variables, loops etc. And that becomes an abomination.
I learned the hard way that no is false in yaml. Took us a while to realize why our app failed to start in Norway. Too many ways to do something.
Even a 'no' is a 'false' ?
Yup. Have to ensure that you use "no" if you don't want yaml to equate it to false.