yamlencode 함수

yamlencode 함수 (yamlencode Function)

yamlencode 함수는 주어진 값을 YAML 1.2 블록 문법(block syntax)을 사용하는 문자열로 인코딩해요. YAML 설정이나 데이터를 만들어야 할 때 쓸 수 있어요.

출처: Packer 공식 문서

본문

yamlencode 함수는 주어진 값을 YAML 1.2 블록 문법을 사용해 문자열로 인코딩해요.

경고: 이 함수는 현재 실험적(experimental)이고, 정확한 결과 형식은 피드백에 따라 향후 Packer 버전에서 바뀔 수 있어요. 결과가 바뀌면 지장이 있을 리소스 인자 값을 만드는 데 yamldecode 를 사용하지 마세요. 값의 일관된 문자열 표현을 원한다면 대신 jsonencode 를 사용하세요. YAML이 JSON의 상위 집합(superset)이므로 그 결과도 유효한 YAML이에요.

이 함수는 Packer 언어 값을 아래와 같은 방식으로 YAML 태그에 매핑해요.

Packer type YAML type
string !!str
number !!float 또는 !!int
bool !!bool
list(...) !!seq
set(...) !!seq
tuple(...) !!seq
map(...) !!map
object(...) !!map
Null value !!null

yamlencode 는 위 모든 타입에 대해 암시적(implied) 문법을 사용하므로 명시적인 YAML 태그는 생성하지 않아요.

YAML 형식이 모든 Packer 언어 타입을 완전히 표현할 수는 없기 때문에, yamlencode 결과를 yamldecode 에 넘겨도 완전히 동일한 값이 되지는 않아요. 다만 Packer 언어의 자동 타입 변환 규칙 때문에 실무에서는 이게 문제가 되는 일은 거의 없어요.

Examples (예시)

> 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의 "block style"을 사용해요. flow-style YAML을 만들려면 jsonencode 를 사용하세요. YAML flow-style은 JSON 문법의 상위 집합이에요.

  • jsonencode 는 YAML 대신 JSON을 사용하는 유사한 작업이에요.
  • yamldecode 는 반대 작업을 수행해요. YAML 문자열을 디코딩해 그 표현 값을 얻어요.

더 알아보기 (Learn more)