🌑

Mocha's Blog

目录
  1. 集合类型
  2. 标量类型

helm入门指南(二)- YAML语法

发布时间: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'

上述三种方式均可以声明一个单行字符串,三种方式的差异在于:

  1. 第一种:裸字符串。裸字符串中不存在引号,不可使用特殊字符

  2. 第二种:双引号字符串。不会转义特殊字符,特殊字符均按照其本身意义输出,如 \\n 会输出一个换行

    因为这种特性,使用了特殊字符的字符串在被 chart template 使用时,必须通过 quote 函数加上双引号

  3. 第三种:单引号字符串。所有特殊字符将会被转义为普通字符串后输入,如 \\n 输出为字符串 \\n 不会输出换行。

在实际使用中可能遇到超长单行字符串的情况,我们可以使用 > 符号来实现一个折叠字符串,如下例子

message: >
  hello
  world

上面的字符串是以以多行字符串的形式声明,但因为我们使用了 > 符号,因此在实际使用中其将被转换成 hello world\\n 值。


在 YAML 中,可以在字段 Key 后面跟上一个 | 来表示这是一个多行字符串,如

message: |
  hello
  world

此时 message 的值为 hello\\nworld\\n ,当在模板中使用时,在最后一个 world 输出后会多出一个换行,如下图

image.png

此时我们可以使用 |- 语法来去掉尾部的 \\n 换行。同样的,如果我们需要多一个换行符时,可以使用 |+ 来给尾部多添加一个换行符。


📌 在 YAML 中我们可以通过强制标签修改 YAML 解释器对数据类型的判断,如

size: !!int "1" # 强制判断为数字
age: !!str 21 # 强制判断为字符串
isGood: !!bool "true" # 强制判断为布尔值

但在实际使用中,不推荐使用这些操作,应该在声明字段值时使用正确的数据类型

Powered By Hexo.js Hexo and Minima. Support By Oracle & Docker-Compose.

友情链接: 相随