- 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 値 | !!null |
yamlencode
は、上記のすべての型に対して暗黙的な構文を使用するため、明示的なYAMLタグを生成しません。
YAML形式はOpenTofu言語のすべての型を完全に表現できるわけではないため、yamlencode
の結果を yamldecode
に渡しても、同一の値は生成されません。ただし、OpenTofu言語の自動型変換ルールにより、実際にはこれが問題になることはほとんどありません。
YAMLはJSONのスーパーセットであるため、リモートシステムがYAMLをサポートしている場合でも、可能な限り jsonencode
を使用してJSONを生成することをお勧めします。JSON構文は、フロー形式のYAMLと同等であり、OpenTofuはプラン内のJSON値の詳細な構造変更情報を提供できます。一方、OpenTofuはブロック形式のYAMLを通常の複数行文字列として扱います。ただし、生成された値をリモートシステムで人間が直接読み書きする場合は、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
は、YAMLの代わりにJSONを使用する同様の操作です。yamldecode
は、反対の操作を実行し、YAML文字列をデコードして、その表現値を取得します。