На ум приходят два разумных подхода.
Одним из них является определение шаблона, который расширяется до строки {{
, после чего вы можете использовать его в расширении переменной. Вам не нужно специально бежать }}
.
{{- define "cc" }}{{ printf "{{" }}{{ end -}}
- name: SYSLOG_HOSTNAME
value: '{{cc}} index .Container.Config.Labels "io.kubernetes.container.name" }}'
Второй подход, более продолжительный, но с меньшим количеством экранирования, заключается в создании внешнего файла, содержащего эти фрагменты переменных среды.
# I am files/syslog_vars.yaml
- name: SYSLOG_HOSTNAME
value: '{{ index .Container.Config.Labels "io.kubernetes.container.name" }}'
Тогда вы можете включить файл . Это не относится к шаблонам в файле, оно просто читает его как буквальный текст.
env:
{{ .Files.Get "files/syslog_vars.yaml" | indent 2 }}
Важным моментом этого последнего метода и проблемой, с которой вы столкнулись в этом вопросе, является то, что Хелм читает произвольный файл, раскрывает все шаблоны и затем пытается интерпретировать полученный текст как YAML. Часть indent 2
должна соответствовать тому, что есть у остальной части вашего блока env:
; если это глубоко внутри спецификации развертывания, может потребоваться 8 или 10 пробелов. helm template
отобразит диаграмму в текст, не пытаясь выполнить дополнительную обработку, что действительно полезно для отладки.