YAML:问题一大堆

Hacker News Top 新闻

摘要

一篇讽刺文章,指出YAML在DevOps和编程环境中的各种缺陷和怪癖,例如解析错误和Kubernetes等工具中的配置错误。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/08/28 09:47

# 🚨🚨 这可真是够多的YAML 🚨🚨 来源:https://noyaml.com/ \# 由 https://ghuntley\.com 💖 制作,在无数次自定义资源定义之后 \# 欢迎改进,点击那个 ↗️ Octocat ↗️ 分享YAML如何让你的生活更美好。不要:内容:想要:去:写:\- YAML \# 🤔 为什么YAML是你的正确DevOps技术 🤔 \# \# \- 100%测试覆盖率,总能编译通过且无错误或警告,总能发布 \# \# \- 开发期间无需强制错误处理,因为生产环境中的运行时"在迪厅崩溃"很酷 \# \# \- "出问题了"比带行号的堆栈跟踪好多了 \# \# \- 你需要烧掉时间来搭建新的CI流水线 \# \# \- 安全的选择,无可置疑的行业采用率,"被Kubernetes使用" \# \# \- 比windows\.ini略好一点 \# \# \- 不像json \[1\]\[2\],YAML支持注释 \# \# \- 没有官方文档(除了面向实现者的规范)完全没问题 \# \# \- 你需要一个超安全的"执行此代码"的方法 \# \# 🍿 等一下,你说的是"可执行的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 \# \# 🚨 任何长期使用YAML的人最终在试图缩写挪威时都会被坑 🚨 \# \# \`NO\` 被解析为布尔类型,根据YAML 1\.1规范,有22种方式写"true"或"false"。 \# \# 你必须把"NO"用引号括起来才能得到预期结果。 \# \# NI: 尼加拉瓜 NL: 荷兰 NO: 挪威 \# \# 💣! \# \# 🚨 有人想知道为什么他们的前七个Kubernetes集群部署正常,而第八个失败了吗?🚨 \# \# \- 07 \# \# \- 08 \# \# 导致 \[ 7, "08" \] \# \# YAML知道,当你有看起来像时间的东西时, \# \# 你\_真正\_想要的是自午夜以来的秒数时间 \# \# timeOfDay: \# \# whatYouWrote: 04:30 \# \# 当你解析这个文件并重新序列化时,在YAML 1\.2之前可能会得到 \# \# whatYouSurelyMent: 16200 \# \# 祝你调试愉快! \# \# whatYouShouldHaveWritten: \!\!str 04:30 \# \# YAML是编码八进制(tm)的最佳方式,而通过实践认识到 \# \# Kubernetes使用YAML 1\.1是DevOps的必经之路。在YAML 1\.2以下, \# \# 大整数会自动转换为八进制。\[3\] \# \# \- YAML 1\.1使用\`0666\`表示法。 \# \# \- YAML 1\.2使用\`0o666\`表示法 \# \# YAML非常适合指定软件包版本,只要你喜欢版本被解析为浮点数。 \# \# versions: \# \# foo: 1\.7 \# \# bar: 1\.70 \# \# fizz: 1\.7\.0 \# \# buzz: 1\.70\.0 \# \# 🤢 我最近在学GitHub Actions \# \# 我在一个小时内做了8次提交/推送,最后一条提交信息完整内容是: \# \# "I don't really like yml" \# \# \- https://twitter\.com/eric\_sink/status/1430954572848287744 \# \# 😭 如果SQL是基于YAML构建的 😭 \# \# SELECT: \# \# \- num \# \# \- name \# \# FROM: \# \# \- customers \# \# WHERE EXISTS: \# \# SELECT: \# \# \- name \# \# FROM: \# \# \- orders \# \# WHERE: \# \# AND: \# \# \- EQUALS: \# \# \- customers\.num \# \# \- orders\.customer\_num \# \# \- LT: \# \# \- price \# \# \- 50 \# \# 谈到CI,你知道8位SHA可能全是数字吗? \# \# 如果解析\`my\.flaky\_version\`的系统是强类型的,它会很乐意地每2%时间爆炸。 \# \# my: \# \# \# 约98%时间这是字符串 \# \# flaky\_version: $\{GIT\_SHORT\_SHA\} \# \# \# 约100%时间这是字符串 \# \# string\_version: "$\{GIT\_SHORT\_SHA\}" \# \# him: "看,我买了一盒DevOps" \# \# her: "你不能随便买一盒DevOps" \# \# 🤣 https://twitter\.com/mike\_kaufmann/status/1454712996933025794 \# \# "别忘了多空行,否则一切都完蛋" \# \# 👉 https://github\.com/IronScheme/IronScheme/commit/2f847793946935bd9143cdfb064f9006f763df68 \# \# 🤡 在不同CI提供商上做同样的事 🤡 \# \# Azure devops \# \# jobs: \# \# \- job: job1 \# \# steps: \# \# \- script: chmod \+x \./script\.sh \# \# \- script: \./script\.sh \# \# CircleCI \# \# jobs: \# \# job1: \# \# steps: \# \# \- checkout \# \# \- run: "execute\-script\-for\-job1" \# \# 未来的某个CI系统,大概 \# \# jobs: \# \# \- steps: \# \# job1 \# \# \- step1: \# \# \- script: chmod \+x \./script\.sh \# \# \- step2: \# \# \- run: "execute\-script\-for\-job1\-inside\-step2" \# \# 如果你正在为Cloudwatch的DashboardBody构建Cloudformation的YAML文件 \# \# 并且有SEARCH函数?你需要转义已经转义的并在整个JSON外加双引号: \# \# "\{ \\"search\(' var=\\\\\\"blue\\\\\\" \. \# \# 🍻 酒吧里的对话 \# \# YAML的问题在于它只有一件事做得好。糟糕的样板代码。然后每个人都认为这是个好主意。 \# \# 💊 Twitter上的痛苦长篇串 \# \# 👉 https://twitter\.com/brunoborges/status/1098472238469111808 👈 \# \# 📢 必读文章 📢 \# \# \- "今天我们来看看YAML格式的一些普遍问题" \# \# 👉 https://arp242\.net/yaml\-config\.html 👈 \# \# \- "我们用10个结构体替换了1000行YAML,人们又开始贡献了" \# \# 👉 https://tinyurl\.com/lessons\-in\-over\-engineering 👈 \# \# \- "如果你用定义应用的语言和工具来定义基础设施会怎样?" \# \# 👉 https://twitter\.com/ellism/status/1008728148131733504 👈 \# \# \- "即使被截断,YAML文件几乎总是仍然'有效'" \# \# 👉 https://twitter\.com/colmmacc/status/1057316977457324032 👈 \# \# \- "bug是YAML解析器忽略了负号...所以GPS负坐标变成了正的" \# \# 👉 https://twitter\.com/colmmacc/status/1063470541464461312 👈 \# \# \- "每个YAML解析器都是自定义YAML解析器" \# \# 👉 https://matrix\.yaml\.info/valid\.html 👈 \# \# \- "在YAML中有63种不同的方式编写多行字符串" \# \# 👉 https://stackoverflow\.com/a/21699210/1094085 👈 \# \# \- "工具链版本1\.70被解析为1\.7" \# \# 👉 https://github\.com/dtolnay/rust\-toolchain/issues/112 👈 \# \# \- "StrictYAML设计原理" \# \# 👉 https://hitchdev\.com/strictyaml/why/ 👈 \# \# 💭 DevOps的替代方案和方法(咳yamlops咳)💭 \# \# \- 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 \# \# 🏁 如果你是通过YAML配置的开发者工具供应商,请这样做 🏁 \# \# \- https://twitter\.com/kzu/status/1163864030911578112 \# \# \- https://twitter\.com/timeyoutakeit/status/1431052862138769408 \# \# 📖 脚注 📖 \# \# \[1\] 你可以在json中通过\`\{"//": "A way to use comments in json"\}\`做注释,但很别扭。 \# \# \[2\] "Ansible有json schema吗?有了schema,Yaml也没那么糟。"? \# \# \[3\] 另见\`python2 \-c 'print 011' && echo $\(\(011 \+ 1\)\)\` \# \# 最后,这里有reddit\.com上的一些⭐️⭐️⭐️⭐️⭐️反馈: \# \# \- 我需要烧掉这个网站运行的那块主板。太糟糕了。 \# \# \- 这是我见过的最差的网站 \# \# \- 我原则上同意作者,但那个网站不可原谅。我打算周一就在我的项目中加入YAML配置,就为了跟那个可怕的"网站"作对。 \# \# \- 这网站到底是什么鬼,为什么它反复弹出我手机的键盘 \# \# \- 这个网站是一个巨大的可编辑文本框 \# \# \- 为什么?!? \# \# \- 因为在肥皂箱上时,展示良好标准是个好主意 \# \# \- 那个网站的作者想告诉其他人如何编程。 \# \# \- 虽然我同意网站的精神(去他的YAML),但作者的设计决定至少是可疑的。 \# \# \- 好消息(我意识到)是你可以选择网站的所有文本,然后删除它。问题解决了。 \# \# \- 去他的这个网站。也许如果这个人停止抱怨YAML,他们的网站就不会这么糟了。 \# \# \- 是的,我不会从一个网站是巨大可编辑文本框且超链接不可点击的家伙那里听取最佳实践建议。 \# \# 附注。按照设计,这个网站和YAML一样好用。💕 https://github.com/ghuntley/noyaml

相似文章

为YAML辩护

Lobsters Hottest

Posit的一篇博文为YAML辩护,反驳当前普遍认为TOML更优的共识,回顾了配置格式的历史,并指出YAML的规范与工具已经演进,解决了过去的批评。

YAML?那是挪威问题

Hacker News Top

探讨了臭名昭著的 YAML '挪威问题',即国家代码 'NO' 被解析为布尔值 false,追溯其历史并提供如加引号等解决方案。