首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >values.yaml配置图中的舵机模板

values.yaml配置图中的舵机模板
EN

Stack Overflow用户
提问于 2022-06-30 13:45:01
回答 2查看 554关注 0票数 0

我正在寻找帮助来创建一个通用的configmap.yaml,它可以支持多个服务。

values.yaml (这个工程)

代码语言:javascript
运行
复制
value1:  val1

genericConfigMapProperties:
  application.properties: |-
    prop1=prop1value
    prop2=prop2value

configmap.yaml

代码语言:javascript
运行
复制
apiVersion: 1
kind: ConfigMap
...
...
data:
{{ (toYaml .Values.genericConfigMapProperties)  . | ident 4 }}

模板{{ (toYaml .Values.genericConfigMapProperties) . | ident 4 }}几乎是完美的。它正确地呈现application.properties

代码语言:javascript
运行
复制
data:
  application.properties: |-
    prop1=prop1value
    prop2=prop2value

values.yaml (这不起作用)

代码语言:javascript
运行
复制
value1:  val1

genericConfigMapProperties:
  cmValue1: {{ .Values.value1 | default "default val1" | quote }}

  application.properties: |-
    prop1=prop1value
    prop2=prop2value

呈现cmValue1时会出现错误。我期待着这样的回答:

代码语言:javascript
运行
复制
data:
  cmValue1: val1

  application.properties: |-
    prop1=prop1value
    prop2=prop2value

错误:

代码语言:javascript
运行
复制
Error: failed to parse values.yaml: error converting YAML to JSON: yaml: invalid map key: map[interface {}]interface {}{".Values.value1 | default \"default val1\" | quote":interface {}(nill)}
helm.go:88: [debug]  error converting YAML to JSON: yaml: invalid map key: map[interface {}]interface {}{".Values.value1 | default \"default val1\" | quote":interface {}(nill)}
failed to parse values.yaml

我需要哪些额外的舵机模板代码来支持cmValue1呈现?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2022-07-01 02:22:21

Helm不支持二次呈现,但您可以使用yaml锚来实现此功能,也可以间接地使用命名模板

计划A:锚

values.yaml

代码语言:javascript
运行
复制
value1: &value1 val1

genericConfigMapProperties:
  cmValue1: *value1

  application.properties: |-
    prop1=prop1value
    prop2=prop2value

模板/configmap.yaml

代码语言:javascript
运行
复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: test
data: 
  config.yaml: |
    {{- toYaml $.Values.genericConfigMapProperties | nindent 4 }}

输出

代码语言:javascript
运行
复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: test
data: 
  config.yaml: |
    application.properties: |-
      prop1=prop1value
      prop2=prop2value
    cmValue1: val1

B计划:命名模板

values.yaml

代码语言:javascript
运行
复制
value1: val1

模板/_helpers.tpl

代码语言:javascript
运行
复制
{{/*
cmValue template
*/}}
{{- define "genericConfigMapProperties" -}}
cmValue1: {{ .Values.value1 | default "default val1" | quote }}
application.properties: |-
  prop1=prop1value
  prop2=prop2value
{{- end -}}

模板/configmap.yaml

代码语言:javascript
运行
复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: test
data: 
  config.yaml: |
     {{- include "genericConfigMapProperties" . | nindent 4 }}

输出

代码语言:javascript
运行
复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: test
data: 
  config.yaml: |
    cmValue1: "val1"
    application.properties: |-
      prop1=prop1value
      prop2=prop2value
票数 0
EN

Stack Overflow用户

发布于 2022-08-02 17:06:19

谢谢你的回应。

我从bitnami公共模板中找到了这个很棒的解决方案。它几乎可以在任何地方工作。

tplvalues.tpl

复制此模板文件:

代码语言:javascript
运行
复制
{{/* vim: set filetype=mustache: */}}
{{/*
Renders a value that contains template.
Usage:
{{ include "common.tplvalues.render" ( dict "value" .Values.path.to.the.Value "context" $) }}
*/}}
{{- define "common.tplvalues.render" -}}
    {{- if typeIs "string" .value }}
        {{- tpl .value .context }}
    {{- else }}
        {{- tpl (.value | toYaml) .context }}
    {{- end }}
{{- end -}}

使用它模板configmap.yaml或deployment.yaml或其他任何地方的任何值..。

values.yaml:

代码语言:javascript
运行
复制
configMapProperties:
  cmValue1: "val1"
  application.properties: |-
    prop1=prop1value
    prop2=prop2value

configmap.yaml

代码语言:javascript
运行
复制
data:
    {{- if .Values.configMapProperties }}
    {{- include "common.tplvalues.render" ( dict "value" .Values.configMapProperties "context" $ ) | nindent 2 }}
    {{- end }}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72816925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档