【发布时间】:2019-08-05 18:19:42
【问题描述】:
我正在尝试从 _helpers.tpl 的 helm 中的 Umbrella 图表中获取一些值,但由于某种原因,我收到了错误 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"
Helm 版本:
Client: &version.Version{SemVer:"v2.10.0", GitCommit:"9ad53aac42165a5fadc6c87be0dea6b115f93090", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.10.0", GitCommit:"9ad53aac42165a5fadc6c87be0dea6b115f93090", GitTreeState:"clean"}
预期结果是,即使数组中没有提供任何值,_helpers.tpl 中的函数 {{- define "gluu.ldaplist" -}} 也会正确完成。
如果提供了值,则预期的字符串为 host:port 作为输出。
如果这可以通过其他方式完成,我欢迎任何建议。
【问题讨论】:
-
“host: opendj”和“port: 3434”在你的 YAML 中没有配对。如果您想对数组使用 [ ... ],请将主机/端口对包装在 { ... } 中。或者删除方括号并使用 - 表示每个主机/端口对的新数组项。
-
我认为这不是问题所在。当我将
extraHosts放在 ldap 之外时,它会被正常调用。 -
如果您能提供一个完整的最小示例将会很有帮助。你的目录结构是什么,你正在运行什么命令,Helm 是什么版本,你的预期输出是什么。这样人们就可以尝试在本地复制。
-
我已经更新了描述。 @AmitKumarGupta
-
不幸的是,这些信息不足以让我尝试重现。首先,您是说
templates、requirements.yml和values.yml是charts目录的兄弟,而不是在chart_b目录中?另外,您正在运行什么命令?你能提供一个完整的最小例子吗?这可能需要创建一个虚拟的非_xxx.tpl文件,以便helm template不是空操作。您可以显示运行helm template所期望的输出(如果这确实是您正在运行的命令,我不知道),就像您显示输入values.yml一样。
标签: go kubernetes kubernetes-helm templating gluu