首页 > 解决方案 > 是否可以将模板化的 blob 文本包含到 values.yaml 中?

问题描述

出于向后兼容的动机(并减少必须更新 src 代码的负担)如下:

我有一个用户输入:

$values.yaml

output:
  endpoint: MYENDPOINT
specialFile: 
  config1: |-
    Some very nicely formated text.
    Wow, such sample. 
    Much text.
    [...]
  config2: |-
    # this is also text but i need to remove |- for interpretation
    {{- $.Files.Get "configs/include.conf" | nindent 4 }}

我想用一团文本替换:

$configs/include.conf

<match **>
  @type http
  endpoint_url    {{ .Values.output.endpoint }}
  serializer      json
</match>

因此,输出替换文本上的 var,文本替换 values.yaml 上的值。这可能吗?我知道这几乎是不可能的事情。我已经看到有人用自己替换 values.yaml (自己没有尝试过),但这可能吗?

或者我可以覆盖 .Values.specialFile.configs2 值而不直接写入 .Values 文件并以某种方式覆盖变量,也许使用模板?

标签: templatestextyamlkubernetes-helm

解决方案


这可以通过将包含的文件处理为嵌套模板来实现tpl

{{ $endpoint := "MYENDPOINT" }}
output:
  endpoint: {{ $endpoint }}
specialFile: 
  config1: |-
    Some very nicely formated text.
    Wow, such sample. 
    Much text.
    [...]
  config2: |-
    # this is also text but i need to remove |- for interpretation
    {{- tpl ($.Files.Get "configs/include.conf") $endpoint | nindent 4 }}

为了避免重复,我将端点放在一个变量中并将其传递给加载的模板。因此,它将在{{.}}那里可用:

<match **>
  @type http
  endpoint_url    {{ . }}
  serializer      json
</match>

推荐阅读