# Made with π by https://ghuntley.com after one too many CustomResourceDefinitions
# Improvements welcome, mash the βοΈ Octocat βοΈ and share how YAML makes your life better.
No:
Body:
Wants:
To:
Write:
- YAML
# π€ Why YAML is the right devops technology for you π€
#
# - 100% test coverage, always compiles just fine with no errors or warnings, always shippable
# - no enforced error handling during development because runtime "panic at the disco" in production is dope
# - "something broke" is way better than stack traces with line numbers
# - you need to burn hours as part of setting up a new CI pipeline
# - safe choice with unquestionable industry adoption, "used by kubernetes"
# - is marginally better than windows.ini
# - unlike json [1][2], YAML supports comments
# - no official documentation (other than a specification for implementers) is totally fine
# - you need a super safe way to "execute this code"
# πΏ wait a sec, did you say "executable yaml"?? πΏ
# - https://ruby-doc.org/stdlib-2.4.0/libdoc/yaml/rdoc/YAML.html#module-YAML-label-Security
# - https://www.php.net/manual/en/function.yaml-parse.php#refsect1-function.yaml-parse-notes
# - https://securitylab.github.com/research/swagger-yaml-parser-vulnerability/
# - https://github.com/yaml/pyyaml/wiki/PyYAML-yaml.load(input)-Deprecation
# π¨ Anyone who uses YAML long enough will eventually get burned when attempting to abbreviate Norway π¨
# `NO` is parsed as a boolean type, which with the YAML 1.1 spec, there are 22 options to write "true" or "false."
# You have to wrap "NO" in quotes to get the expected result.
NI: Nicaragua
NL: Netherlands
NO: Norway # π£!
# π¨ Anyone wondering why their first seven Kubernetes clusters deploy just fine, and the eighth fails? π¨
- 07
- 08
# Results in
[ 7, "08" ]
# YAML knows that, when you have something that looks like the time of day,
# what you _really_ wanted is the time of seconds since midnight
timeOfDay:
whatYouWrote: 04:30 # And when you parse this file and serialize it again, you get ...
whatYouSurelyMeant: 16200 # Have fun debugging this one!
whatYouShouldHaveWritten: !!str 04:30
# YAML is the super best way to encode Octal (tm) and learning the hard way that Kubernetes uses YAML 1.1
# is a DevOps rite of passage. Below YAML 1.2 a large integer is automatically converted to octal.
- YAML 1.1 uses `0666` notation.
- YAML 1.2 uses `0o666` notation
# π€’ I have recently been learning GitHub Actions
#
# I just made 8 commits/pushes in one hour, and the last commit message, in its entirety, was:
#
# "I don't really like yml"
- https://twitter.com/eric_sink/status/1430954572848287744
# π If SQL were built on YAML π
SELECT:
- num
- name
FROM:
- customers
WHERE EXISTS:
SELECT:
- name
FROM:
- orders
WHERE:
AND:
- EQUALS:
- customers.num
- orders.customer_num
- LT:
- price
- 50
# Speaking of CI, did you know that 8-character SHAs could be all numbers?
# If the system that parses `my.flaky_version` is typed, it will happily explode 2% of the time.
my:
# this will be a string ~98% of the time
flaky_version: ${GIT_SHORT_SHA}
# this will be a string ~100% of the time
string_version: "${GIT_SHORT_SHA}"
# him: "Look, I bought a box of DevOps"
# her: "You can't just buy a box of DevOps"
# π€£ https://twitter.com/mike_kaufmann/status/1454712996933025794
# "Don't forget the extra line break otherwise all shit goes to hell"
# π https://github.com/IronScheme/IronScheme/commit/2f847793946935bd9143cdfb064f9006f763df68
# π€‘ Doing the same thing with different CI providers π€‘
# Azure devops
jobs:
- job: job1
steps:
- script: chmod +x ./script.sh
- script: ./script.sh
# CircleCI
jobs:
job1:
steps:
- checkout
- run: "execute-script-for-job1"
# Some future CI system, probably
jobs:
- steps: job1
- step1:
- script: chmod +x ./script.sh
- step2:
- run: "execute-script-for-job1-inside-step2"
# If you're building a YAML file for Cloudformation for a DashboardBody for Cloudwatch
# and theres a SEARCH function? you need to escape the already-escaped and close the
# whole JSON with double-quotes:
"{
\"search(' var=\\\"blue\\\" .
# π» Overhead in a pub
- The problem with YAML they did one thing well. Shitty boiler plate. Then everyone thought it was a good idea.
# π Mega twitter thread of pain
# π https://twitter.com/brunoborges/status/1098472238469111808 π
# π’ Mandatory reading π’
#
# "Today weβre going to look at some general problems with the YAML format"
# π https://arp242.net/yaml-config.html π
#
# "We replaced 1,000 lines of YAML with 10 structs and people started contributing again"
# π https://tinyurl.com/lessons-in-over-engineering π
#
# "What if you used the same language and tools you use to define your app to define your infrastructure?"
# π https://twitter.com/ellism/status/1008728148131733504 π
#
# "A YAML file is almost always still 'valid' even if it is trunca"
# π https://twitter.com/colmmacc/status/1057316977457324032 π
#
# "the bug was that the YAML parser ignored the negative signs ... so negative GPS coordinates became positive ones"
# π https://twitter.com/colmmacc/status/1063470541464461312 π
#
# "Every YAML parser is a custom YAML parser"
# π https://matrix.yaml.info/valid.html π
#
# "There are 63 different ways to write multi-line strings in YAML"
# π https://stackoverflow.com/a/21699210/1094085 π
# π Alternative options and approaches to DevOps (cough yamlops cough) π
# - https://media.ccc.de/v/36c3-11172-leaving_legacy_behind
# - https://nickel-lang.org/
# - https://dhall-lang.org/
# - https://cuelang.org/
# - https://jsonnet.org/
# - https://www.youtube.com/watch?v=tl9I-R83lKo
# - https://github.com/xtruder/kubenix/tree/kubenix-2.0/examples/nginx-deployment
# - https://github.com/nin-jin/tree.d
# π If you are vendor of developer tooling that is configurable via YAML, please do this π
# - https://twitter.com/kzu/status/1163864030911578112
# - https://twitter.com/timeyoutakeit/status/1431052862138769408
# π Footnotes π
# [1] You can do comments in json by `{"//": "A way to use comments in json"}` but it's icky.
# [2] "Does ansible have a json schema? Yaml aint so bad with a schema."?
# and finally, here's some βοΈβοΈβοΈβοΈβοΈ feedback from reddit.com:
- I need to burn the very motherboard this site runs from. Itβs that awful.
- This is the worst website I've ever seen
- I agree with the author in principle but that website is inexcusable. I'm going to add YAML config to my projects on Monday just to spite that horrific "website".
- Wtf is this website and why does it repeatedly pop up my phone's keyboard
- This Website is a giant editable textfield
- Why?!?
- Because itβs a good idea to demonstrate good standards while standing on oneβs soapbox
- The author of THAT website wants to tell the rest of us how to program.
- While I agree with the spirit of the website (fuck yaml), the design decisions of the author are questionable to say the least.
- The good news (I realised) was that you can select all the text of the site, and then delete it. Problem solved.
- Fuck this website. Maybe if this person stopped bitching about yaml their website wouldn't blow.
- Yeah, Iβm not going to take advice on best practices from a guy whose website is a giant editable text field with unclickable hyperlinks.
# ps. By design, this website is as usable as YAML. π