访问掌舵中的动态文件
accessing dynamic file in helm
我是 kubernetes helm chart 的新手。有一个名为 configmap 的 yaml 文件。该文件包含与应用程序相关的所有配置。由于此文件包含大量数据,我试图将一些数据放入新文件并使用 FILE 对象进行访问。所以创建了两个不同的文件,名称为:
data1.yaml 和 data2.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
键。我认为您应该在此键下捕获数据,而不是创建 data1
和 data2
但不确定。
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 }}
我是 kubernetes helm chart 的新手。有一个名为 configmap 的 yaml 文件。该文件包含与应用程序相关的所有配置。由于此文件包含大量数据,我试图将一些数据放入新文件并使用 FILE 对象进行访问。所以创建了两个不同的文件,名称为:
data1.yaml 和 data2.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
键。我认为您应该在此键下捕获数据,而不是创建 data1
和 data2
但不确定。
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 }}