【发布时间】:2022-06-22 11:07:58
【问题描述】:
假设我有来自 2 个不同文件的 2 个 yaml 值,例如:
lambo.yaml:
- key: car
value: "lambo"
descriptors:
unit: kmh
topspeed: 300
toyota.yaml:
- key: car
value: "bugatti"
descriptors:
unit: kmh
topspeed: 400
并且我想形成一个 yaml 值文件以在 helm 图表中使用,例如:
result.yaml:
domain: supercardomain
descriptors:
- key: supercars
descriptors:
- key: car
value: "lambo"
descriptors:
unit: kmh
topspeed: 300
- key: car
value: "bugatti"
descriptors:
unit: kmh
topspeed: 400
CONTEXT:我在 terraform 中有一个 helm_release,它需要一个 ConfigMap(k8s),其值与上述值相同 (result.yaml)。在 helm 中合并值文件是 not possible,我们也希望避免使用任何惰性硬编码方法(例如创建 .Values.lambo 和 .Values.toyota yaml 结构并将它们附加到 configmap helm 模板)。
我试过的是:
car_descriptor=indent(2, format("car:\ndescriptors:\n%s\n%s", var.lambo_descriptor, var.buggati_descriptor)
var.<car>_descriptor 是汽车 yaml 值的字符串表示形式。
然后它被 helm_release 用作值文件:
resource "helm_release" "my_helm_release" {
name = "my_helm_release"
...
values = [
var.car_descriptor
]
然后像这样模板化到 Configmap 中:
apiVersion: v1
kind: ConfigMap
metadata:
name: car-config
data:
config.yaml: |
domain: supercardomain
descriptors:
- key: supercars
descriptors:
{{- if .Values.car.descriptors }}
{{ toYaml .Values.car.descriptors | indent 6 }}
{{- end }}
它有效,但我想知道是否有一种更简单、更 DRY 的方式来执行此操作,而无需执行格式和缩进,而仅使用 terraform/helm。另外,我不想弄乱 2 个汽车文件的 yaml 结构,或者 Configmap (I have already tried this) 中的模板。
也非常感谢使这个问题更简洁的提示:)
【问题讨论】:
-
可能是
yamlencode和join的某种组合? -
即
car_descriptor= join("", yamlencode(var.lambo_descriptor), yamlencode(var.buggati_descriptor))
标签: kubernetes terraform yaml kubernetes-helm