如何修复 helm _helpers.tpl 中的“无法评估类型接口 {} 中的字段”

我试图从舵中的伞图中获取一些值_helpers.tpl,但由于某种原因我收到了错误executing "gluu.ldaplist" at <.Values.ldap.extraHo...>: can't evaluate field extraHosts in type interface {}


这就是我正在努力做的事情。 _helpers.ptl


{{- define "gluu.ldaplist" -}}

{{- $hosts := .Values.ldap.extraHosts -}}

{{- $genLdap := dict "host" (printf "%s-%s" .Release.Name .Values.ldapType) "port" .Values.ldapPort -}}

{{- $hosts := prepend $hosts $genLdap -}}

{{- $local := dict "first" true -}}

{{- range $k, $v := $hosts -}}

{{- if not $local.first -}},{{- end -}}{{- printf "%s:%.f" $v.host $v.port -}}{{- $_ := set $local "first" false -}}

{{- end -}}

{{- end -}}

这是values.yml伞图的 一部分values.yml


ldap:

  enabled: true

  type: opendj

  extraHosts: [

    host: opendj,

    port: 3434

  ] #array of k,v e.g host: host1, port: port1

目录结构


helm/

  charts/

     chart_a/

       templates/

          configMap.yml ----->>> this is where I want to use it

  templates/

     _helpers.tpl ---->>>> where the failing function is

  requirements.yml

  values.yml ---------->>> where the ldap values are


看起来configMap.yml像下面这样


apiVersion: v1

kind: ConfigMap

metadata:

  name: {{ template "oxauth.fullname" . }}-cm

data:

  GLUU_CONFIG_ADAPTER: {{ .Values.global.configAdapterName | quote }}

  GLUU_LDAP_URL: {{ template "gluu.ldaplist" . }}

注意:_helpers.tpl位于主/伞图下方。chart_a是一个子图。


预期结果类似于GLUU_LDAP_URL:"opendj:3434"


头盔版本:


Client: &version.Version{SemVer:"v2.10.0", GitCommit:"9ad53aac42165a5fadc6c87be0dea6b115f93090", GitTreeState:"clean"}

Server: &version.Version{SemVer:"v2.10.0", GitCommit:"9ad53aac42165a5fadc6c87be0dea6b115f93090", GitTreeState:"clean"}

预期结果是,即使数组中未提供任何值,函数{{- define "gluu.ldaplist" -}}也会顺利完成。_helpers.tpl如果提供了值,则预期的字符串将host:port作为输出。


如果可以以其他方式完成此操作,我欢迎任何建议。


当年话下
浏览 144回答 1
1回答

繁花不似锦

这可以通过全局值来解决,全局值允许父图表中的值覆盖(或提供未指定的)子子图表中的值。来自关于子图和全局值的 Helm 文档:子图被视为“独立”,这意味着子图永远不能显式依赖于其父图。因此,子图无法访问其父图的值。父图表可以覆盖子图表的值。Helm 有一个全局值的概念,所有图表都可以访问它。(起初我并没有想到要搜索“helm subchart”,但当我在互联网上搜索该术语时,这是第一个或第二个结果)这是解决您的问题的最小示例:目录结构helm├── Chart.yaml├── charts│   └── chart_a│       ├── Chart.yaml│       └── templates│           └── configMap.yml├── templates│   └── _helpers.tpl└── values.yaml注意:我添加了Chart.yaml文件以使其实际工作,重命名values.yml为values.yaml,以便它默认工作而无需额外的标志,并删除requirements.yml,因为没有必要重现问题和解决方案。values.yamlglobal:  ldap:    enabled: true    type: opendj    extraHosts:    - host: opendj      port: 3434  ldapType: xxx  ldapPort: 123关键是将你拥有的东西嵌套在一个特殊的global键下。请注意,我还添加了ldapType和 ,ldapPort因为它们在您的 中_helpers.tpl,并且我修复了您在 下的 YAML 结构extraHosts。host之前的内容实际上并不代表带有和键的地图列表port。如果没有此修复,该helm命令不会失败,但也不会输出您想要的内容。结果$ helm template .---# Source: helm/charts/chart_a/templates/configMap.ymlapiVersion: v1kind: ConfigMapmetadata:  name: cmdata:  GLUU_LDAP_URL: release-name-xxx:123,opendj:3434
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go