YAML快速参考
简介
YAML(发音/ˈjæməl/)的字面含义是另外一种标记语言(Yet Another Markup Language),实际上它不仅可以作为XML的替代品,更是一套支持所有编程语言的数据串行化标准。
语法
基本规则
- 大小写敏感
- 使用基于缩进的格式,缩进用来表示层级关系
- 缩进必须基于空格
- 缩进长度不重要,但是相同层级的键值,左侧必须对齐
注释
注释以 #开头,可以独占一行,也可以位于行尾。
空白行
你可以在YAML中任意添加空白行,这些空白行会自动被忽略。
数据类型
YAML支持三类数据:标量、数组、字典。
标量
标量类型 | 说明 | ||
数字 | 直接写字面值,例如 6.12 | ||
字符串 |
通常不需要引号,你也可以显式添加引号,如果字符串中包含冒号、空格,则需要引号包围 你可以使用单引号、双引号。单引号不进行 \转义。单引号包围的字符串中,如果有单引号字面值,需要用双单引号 ''代替 多行字符串可以用 >或者 |标记之:
示例:
|
||
布尔值 | 直接写字面值, true或者 false | ||
空值 | 直接写字面值 ~ | ||
时间 | 使用ISO8601格式表示,例如 1986-09-12T02:00:00.000+8:00 | ||
日期 | 使用ISO8601格式表示,例如 1986-09-12 |
强制类型转换
使用 !!进行强制类型转换,例如:
1 2 |
!!str true # "true" !!str 6.12 # "6.12" |
数组
数组元素以短横线 - 开始,连续若干以-开头的行构成一个数组。示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
- alex - meng - cai - dang # 以上等价于JSON: ["alex","meng","cai","dang"] # 数组元素的缩进是可选的: children: - cai children: - cai # 嵌套数组 - - alex - meng - cai - dang # 以上等价于JSON: [["alex","meng","cai","dang"]] # 内联写法 users: [alex, meng, cai, dang] |
字典
冒号 :作为字典键、值之间的分隔符,后面需要跟随至少一个空格。前导空格不是必须的,但是为了增强易读性,你可以在:前后添加任意数量的空格。示例:
1 2 3 4 5 6 7 |
name : alex # 等价于JSON: { "name" : "alex" } # 内联写法 name : { first: alex, last: wong} # 等价于JSON: { "name" : { "first": "alex", "last": "wong" } } # 空字典 name: {} |
锚点和别名
使用 &可以为某个节点定义一个锚点:
1 2 |
nginx-ingress: &nginx-ingress enabled: true |
在后续内容中,可以通过别名操作符 *来引用:
1 2 3 4 5 6 |
some-other-component: use-nginx: *nginx-ingress some-other-component: use-nginx: enabled: true |
可以用于减少重复内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
common-config: &common-config replicas: 3 resources: limits: cpu: "500m" memory: "512Mi" requests: cpu: "200m" memory: "256Mi" web-server: <<: *common-config image: nginx:latest app-server: <<: *common-config image: myapp:latest |
<<表示将common-config的所有键值合并到所在父元素。
Leave a Reply