- OpenTofu 语言
- 函数
- yamlencode
yamlencode
函数
yamlencode
使用 YAML 1.2 块语法将给定值编码为字符串。
此函数以以下方式将 OpenTofu 语言值 映射到 YAML 标记
OpenTofu 类型 | YAML 类型 |
---|---|
字符串 | !!str |
数字 | !!float 或 !!int |
布尔值 | !!bool |
list(...) | !!seq |
set(...) | !!seq |
tuple(...) | !!seq |
map(...) | !!map |
object(...) | !!map |
空值 | !!null |
yamlencode
对所有上述类型使用隐式语法,因此它不会生成显式 YAML 标记。
由于 YAML 格式无法完全表示所有 OpenTofu 语言类型,因此将 yamlencode
结果传递给 yamldecode
不会生成相同的值,但 OpenTofu 语言的自动类型转换规则意味着这在实践中很少成为问题。
YAML 是 JSON 的超集,因此在可能的情况下,我们建议使用 jsonencode
生成 JSON,即使远程系统支持 YAML。JSON 语法等同于流式 YAML,OpenTofu 可以为 JSON 值在计划中显示详细的结构更改信息,而 OpenTofu 会将块式 YAML 视为普通的 多行字符串。但是,如果生成的 value 将被远程系统中的用户直接读取或修改,生成 YAML 可能有助于提高可读性。
示例
> yamlencode({"a":"b", "c":"d"})
"a": "b"
"c": "d"
> yamlencode({"foo":[1, 2, 3], "bar": "baz"})
"bar": "baz"
"foo":
- 1
- 2
- 3
> yamlencode({"foo":[1, {"a":"b","c":"d"}, 3], "bar": "baz"})
"bar": "baz"
"foo":
- 1
- "a": "b"
"c": "d"
- 3
yamlencode
始终使用 YAML 的“块样式”来表示映射和序列,除非映射或序列为空。要生成流式 YAML,请使用 jsonencode
,因为 YAML 流式是 JSON 语法的超集。
相关函数
jsonencode
是使用 JSON 而不是 YAML 的类似操作。yamldecode
执行相反的操作,即解码 YAML 字符串以获取其表示的值。