在一些头盔模板中挣扎…
我试图通过一个单独的yaml文件与springboot参数helm,并有他们的环境拆分…然后我想通过--set env=staging
将环境传递给helm感觉我什么都试过了,但显然我缺乏基本的理解…
我的_helpers.tpl
包含以下内容:
{{- define "env" }}
{{- printf "%s" .Values.env }}
{{- end }}
{{ define "configmap.metadata" }}
name: {{ .Values.name }}-config
{{ end }}
{{ define "configmap.properties" }}
{{ index .Values.environment (include "env" .) "properties" | indent 4 }}
{{ end }}
配置映射模板:
apiVersion: v1
kind: ConfigMap
metadata:
{{ include "configmap.metadata" . }}
data:
app.properties: |-
{{ include "configmap.properties" .}}
包含属性的yaml文件看起来像这样:
environment:
staging:
properties:
spring:
datasource:
url: something
username: something
password: something
app1:
key: something
secret: something
baseUri: something
app2:
bootstrap_server: something
bootstrap_port: something
registry_schema: something
production:
properties:
spring:
etc, etc
然后我想使用set选择环境。我正在测试:
helm template test . -f values.yaml -f properties.yaml --set env=staging
我想我只是尝试了太多的事情,我只是只见树木不见森林!我看到的错误是:
Error: template: microservice/templates/configmap.yaml:7:7: executing "microservice/templates/configmap.yaml" at <include "configmap.properties" .>: error calling include: template: microservice/templates/_helpers.tpl:56:76: executing "configmap.properties" at <4>: wrong type for value; expected string; got map[string]interface {}
编辑:
调整后,我仍然得到一个错误,但我看到的东西在configmap..但我想知道错误是否由于第一行的8个空格…
data:
app.properties: |-
app2:
bootstrap_port: something
bootstrap_server: something
registry_schema: something
app1:
baseUri: something
key: something
secret: something
spring:
datasource:
password: something
url: something
username: something
我认为你的实际错误信息是围绕你使用.Values.environment.production.properties
值的方式。它是一个YAML映射,但是indent
函数期望它是一个字符串。如果你使用helm template --debug
选项,你应该能够看到一些奇怪的缩进,也许是一个奇怪的[map spring [map datasource ...]]
字符串。
当你去渲染ConfigMap时,你需要确保做两件事。由于您拥有的数据是结构化属性,因此需要使用文档较少的toYaml
函数将其转换回YAML。这将从第一列开始,因此您需要对其应用indent
函数,然后您需要确保调用它的标记也位于第一列(indent
应该是唯一提供缩进的东西)。
data:
app.properties: |-
{{ include "configmap.properties" . | indent 4}}
{{/*- starts at column 1, but includes the `indent` function */}}
{{ define "configmap.properties" }}
{{- index .Values.environment (.Values.env) "properties" | toYaml }}
{{/*- starts at first column, includes `toYaml`, does not include `indent` */}}
{{- end }}