访问掌舵中的动态文件

accessing dynamic file in helm

我是 kubernetes helm chart 的新手。有一个名为 configmap 的 yaml 文件。该文件包含与应用程序相关的所有配置。由于此文件包含大量数据,我试图将一些数据放入新文件并使用 FILE 对象进行访问。所以创建了两个不同的文件,名称为: data1.yamldata2.yaml
data1.yaml 文件只有静态数据。另一方面 data2.yaml 文件包含动态数据(一些变量也像 $.Values.appUrl)。 我可以使用 FILE 对象将静态文件 (data1.yaml) 读取到 configmap.yaml 文件。我也可以读取 data2.yaml 文件,但由于该文件也包含一些变量,因此变量值不会被实际值替换。它在 configmap 文件中打印相同的变量。所以我的问题是, 有什么方法可以访问动态文件(包含变量类型数据)?
下面是显示的示例数据。

configmap.yaml 文件是->

kind: ConfigMap
apiVersion: v1
metadata:
  name: example-configmap
  namespace: default
data1: {{ .File.Get "data1.yaml" | indent 2 }}
data2: {{ .File.Get "data2.yaml" | indent 2 }}

data1.yaml 文件是 ->

data1:
  ui.type:2
  ui.color1:red
  ui.color2:green

data2.yaml 文件是 ->

system.data.name: "app-name"
  system.data.url: {{ $.Values.appUrl }}   # variable
  system.data.type_one: "app-type-xxx"
  system.data.value: "3"
  system.interface.properties: |  

Values.yaml 文件是 ->

appUrl: "https://app-name.com"

输出:

kind: ConfigMap
apiVersion: v1
metadata:
  name: example-configmap
  namespace: default
data1:
  ui.type:2
  ui.color1:red
  ui.color2:green
data2:
  system.data.name: "app-name"
  system.data.url: {{ $.Values.appUrl }}    # here should be "https://app-name.com" 
  system.data.type_one: "app-type-xxx"
  system.data.value: "3"
  system.interface.properties: |

您可以使用 tpl function 像这样处理模板文件:

configmap.yaml:

apiVersion: v1
kind: ConfigMap
metadata:
  name: example-configmap
data:
{{ (tpl (.Files.Get "data2.yaml") . ) | indent 2 }}

注意 configmap 默认有 data 键。我认为您应该在此键下捕获数据,而不是创建 data1data2 但不确定。

values.yaml:

appUrl: "https://app-name.com"

data2.yaml:(缩进更正,否则失败)

system.data.name: "app-name"
system.data.url: {{ .Values.appUrl }}   # variable
system.data.type_one: "app-type-xxx"
system.data.value: "3"
system.interface.properties: |
{{ (tpl (.Files.Glob "data2.yaml").AsConfig . ) | indent 2 }}

使用上面的语法,它正在选择变量的实际值。但它也会打印如下文件名:

data2.yaml: |-

所以我使用以下语法解决了这个问题:

{{ (tpl (.Files.Get "data2.yaml") . ) | indent 2 }}