kubernetes 如何在Helm Go模板中返回另一个YAML文件的一部分

ffx8fchx  于 2022-11-21  发布在  Kubernetes
关注(0)|答案(1)|浏览(173)

我有一个Yaml文件在一个文件夹为abc.yaml和内容是

metadata:
  test1: apple
  test2: banana
  test3: cat
container:
  image: foo
  text: xyz
variables:
  ojb: one
  meta: two

我有另一个文件values.yaml.j2需要上述内容的一部分。

metadata:
  test4: dog
  test5: elephant
  {{ .... Here I need test1, test2, test3 from the above (abc.yaml).... }}
container:
  name: test
  {{ .... Here I need image and text from the above (abc.yaml) ....}}
variables:
  ping: pong
  {{ ..... Here I need ojb and meta from the above (abc.yaml) .... }}

当我探索Helm go模板时,我发现,Files.Lines将逐行返回。但是我需要上面提到的特定行。
任何解决方案与go模板wo得到的部分其他yaml文件?

p1iqtdky

p1iqtdky1#

如果 您 知道 另 一 个 文件 是 YAML , Helm 包含 一 个 文档 较少 的 fromYaml 扩展 , 可以 解析 它 。

{{- $abc := .Files.Get "abc.yaml" | fromYaml }}

中 的 每 一 个
在 这里 , 您 有 几 个 选项 可以 选择 如何 继续 , 其中 一 个 工具 是 相应 的 toYaml 扩展 , 它 也 是 文档 较少 的 扩展 , 可以 将 任意 结构 转换 回 YAML 。
因此 , 一 种 选择 是 直接 发出 您 认为 需要 的 值 :

metadata:
  test4: dog
  test5: elephant
  test1: {{ $abc.metadata.test1 }}
  test2: {{ $abc.metadata.test2 }}
  test3: {{ $abc.metadata.test3 }}

格式
第 二 种 方法 是 发出 每个 块 的 新 值 , 以及 现有 内容 :

metadata:
  test4: dog
  test5: elephant
{{ $abc.metadata | toYaml | indent 2 -}}

格式
第 三 种 方法 是 在 适当 的 位置 修改 结构 , 然后 让 Helm 把 整个 结构 写成 YAML 。 set 修改 了 字典 , 这 对于 Helm 模板 函数 来说 是 不 寻常 的 。

{{- $_ := $abc.metadata | set "test4" "dog" | set "test5" "elephant" -}}
{{- toYaml $abc -}}

格式

相关问题