发布时间:2022年3月18日
一个 helm 应用所需的资源清单通过 YAML 格式文件进行声明的,所以编写一个正确的 chart 的前提是熟悉 YAML 语言语法,我们先对 YAML 语法进行讲解。
根据 YAML规范,YAML 中数据类型分为两种:标量类型和集合类型。
YAML 语言中,集合类型共有两种实现:map 与 sequence,可以简单理解为对象与数组,每种类型例子参照下面示例
集合类型 - Map
brands:
kor: samsung
chn: huawei
usa: apple
集合类型 - Sequence
fruits:
- apple
- banana
- pear
在 YAML 中,单个值的类型统称为标量类型。标量类型又可以划分为:数字类型、布尔类型、字符串类型
数字类型
当字段的值为整型或浮点数类型,且没有引号包裹时,将其视为数字类型
# 数字类型
count: 1
size: 2.34
# 字符串
count: "1"
size: '2.34'
布尔类型
当字段的值为 true / false
,且没有引号包裹时,将其视为布尔类型类型
# 布尔类型
isGood: true
isBad: false
# 字符串类型
isGood: "true"
isBad: 'false'
字符串类型
在 YAML 中声明一个字符串的方式比较多,最简单的声明一个单行字符串的方式就有以下三种:
message: hello world
message: "hello world"
message: 'hello world'
上述三种方式均可以声明一个单行字符串,三种方式的差异在于:
第一种:裸字符串。裸字符串中不存在引号,不可使用特殊字符
第二种:双引号字符串。不会转义特殊字符,特殊字符均按照其本身意义输出,如 \\n
会输出一个换行
因为这种特性,使用了特殊字符的字符串在被 chart template 使用时,必须通过 quote 函数加上双引号
第三种:单引号字符串。所有特殊字符将会被转义为普通字符串后输入,如 \\n
输出为字符串 \\n
不会输出换行。
在实际使用中可能遇到超长单行字符串的情况,我们可以使用 >
符号来实现一个折叠字符串,如下例子
message: >
hello
world
上面的字符串是以以多行字符串的形式声明,但因为我们使用了 >
符号,因此在实际使用中其将被转换成 hello world\\n
值。
在 YAML 中,可以在字段 Key 后面跟上一个 |
来表示这是一个多行字符串,如
message: |
hello
world
此时 message
的值为 hello\\nworld\\n
,当在模板中使用时,在最后一个 world
输出后会多出一个换行,如下图
此时我们可以使用 |-
语法来去掉尾部的 \\n
换行。同样的,如果我们需要多一个换行符时,可以使用 |+
来给尾部多添加一个换行符。
📌 在 YAML 中我们可以通过强制标签修改 YAML 解释器对数据类型的判断,如
size: !!int "1" # 强制判断为数字
age: !!str 21 # 强制判断为字符串
isGood: !!bool "true" # 强制判断为布尔值
但在实际使用中,不推荐使用这些操作,应该在声明字段值时使用正确的数据类型