Helm:对于 tls,无法使用非 table 覆盖 table
Helm: Cannot overwrite table with non table for tls
这很可能真的很简单,但我现在 2 个小时都弄不明白。我有以下要通过父图表参数化的 Consul Ingress:
spec:
rules:
{{- range .Values.uiIngress.hosts }}
- host: {{ . }}
http:
paths:
- backend:
serviceName: {{ $serviceName }}
servicePort: {{ $servicePort }}
{{- end -}}
{{- if .Values.uiIngress.tls }}
tls:
{{ toYaml .Values.uiIngress.tls | indent 4 }}
{{- end -}}
{{- end }}
我要参数化上面的spec.tls
在 Consul 的 values.yaml
文件中,我们有以下模板:
uiIngress:
enabled: false
annotations: {}
hosts: []
tls: {}
我最接近参数化的是:
uiIngress:
tls:
- hosts:
- "some.domain.com"
secretName: "ssl-default"
当我这样做时,我得到了这个错误:
warning: cannot overwrite table with non table for tls (map[])
有人可以帮忙吗,我试过一百万种东西。
检查您的 helm
版本。我认为旧版本中存在一些问题。这个不错:
$ helm version
Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
我完全按照您提到的步骤进行了操作:
- 添加了 consul 作为子图(在
charts/consul
中)
在父图表中创建 values.yaml
具有:
consul:
uiIngress:
tls:
- hosts:
- "some.domain.com"
secretName: "ssl-default"
Helm 安装父图表
如果您在 values.yaml
文件中为 Consul 定义的此图表的默认配置值具有以下结构:
uiIngress:
enabled: false
annotations: {}
hosts: []
tls: {}
当您执行 helm
命令时,您发送的值如下:
uiIngress:
tls:
- hosts:
- "some.domain.com"
secretName: "ssl-default"
错误 warning: cannot overwrite table with non table for tls (map[])
的发生是因为 tls
在 values.yaml
中被定义为字典 {}
并且您正尝试使用输入 list []
(- hosts:
) 到它。
要修复警告,您可以将提供的 values.yaml
格式更改为:
uiIngress:
enabled: false
annotations: {}
tls: []
hosts: []
这很可能真的很简单,但我现在 2 个小时都弄不明白。我有以下要通过父图表参数化的 Consul Ingress:
spec:
rules:
{{- range .Values.uiIngress.hosts }}
- host: {{ . }}
http:
paths:
- backend:
serviceName: {{ $serviceName }}
servicePort: {{ $servicePort }}
{{- end -}}
{{- if .Values.uiIngress.tls }}
tls:
{{ toYaml .Values.uiIngress.tls | indent 4 }}
{{- end -}}
{{- end }}
我要参数化上面的spec.tls
在 Consul 的 values.yaml
文件中,我们有以下模板:
uiIngress:
enabled: false
annotations: {}
hosts: []
tls: {}
我最接近参数化的是:
uiIngress:
tls:
- hosts:
- "some.domain.com"
secretName: "ssl-default"
当我这样做时,我得到了这个错误:
warning: cannot overwrite table with non table for tls (map[])
有人可以帮忙吗,我试过一百万种东西。
检查您的 helm
版本。我认为旧版本中存在一些问题。这个不错:
$ helm version
Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
我完全按照您提到的步骤进行了操作:
- 添加了 consul 作为子图(在
charts/consul
中) 在父图表中创建
values.yaml
具有:consul: uiIngress: tls: - hosts: - "some.domain.com" secretName: "ssl-default"
Helm 安装父图表
如果您在 values.yaml
文件中为 Consul 定义的此图表的默认配置值具有以下结构:
uiIngress:
enabled: false
annotations: {}
hosts: []
tls: {}
当您执行 helm
命令时,您发送的值如下:
uiIngress:
tls:
- hosts:
- "some.domain.com"
secretName: "ssl-default"
错误 warning: cannot overwrite table with non table for tls (map[])
的发生是因为 tls
在 values.yaml
中被定义为字典 {}
并且您正尝试使用输入 list []
(- hosts:
) 到它。
要修复警告,您可以将提供的 values.yaml
格式更改为:
uiIngress:
enabled: false
annotations: {}
tls: []
hosts: []