다음과 같이 yaml 구조를 평면화할 수 있는 도구가 있습니까?
foo:
bar:
baz: true
다음을 입력하세요:
foo.bar.baz = true
이 구문 이름이 무엇인지 잘 모르겠습니다.
컨텍스트: 다음과 같이 많은 값을 설정하려면 이 hcl이 필요합니다.
set {
name = "foo.bar.baz"
value = false
}
이것은 Terraform의 helm-provider를 위한 것입니다. json이나 yaml을 직접 사용할 수 없습니다. 변경하려는 속성을 하나씩 설정해야 합니다(작동하지 않는 이유를 확인하기 위해 많은 것을 비활성화해야 했습니다) ).
답변1
사용안드레이 키슬류크yq
입력 문서에서 부울 값이 있는 모든 경로를 얻으려면 각 경로에 대해 경로 요소를 점으로 연결한 다음 해당 경로에서 찾은 값과 함께 각 점 경로를 출력합니다.
yq -r '
paths(type == "boolean") as $p |
[ ($p | join(".")), getpath($p) ] |
join(" = ")' file
입력 문서 예:
foo:
bar:
baz: true
baar:
baz: false
결과 출력:
foo.bar.baz = true
foo.baar.baz = false
enabled
부울 값이 있는 명명된 키로 끝나는 경로만 가져옵니다 true
(이미지에 표시됨).다른 곳의 예에서는):
yq -r '
(
paths(type == "boolean" and .) |
select(last == "enabled")
) as $p |
[ ($p | join(".")), getpath($p) ] |
join(" = ")' file
답변2
아무것도 찾을 수 없어서 직접 '__'을 만들었습니다.)