Kubernetes:无法将 int64 转换为字符串。 Kubernetes 无法解释 helmchart values.yaml 文件中的整数值
Kubernetes: Cannot convert int64 to string. Kubernetes fails to interpret integer value in helmchart values.yaml file
我有一个 values.yaml
文件,我在其中提供了 spring_datasource_hikari_maximum_pool_size: "10"
在deployment yaml
中我已经使用这个值作为
- name: SPRING_DATASOURCE_HIKARI_MAXIMUM-POOL-SIZE
value: {{ .Values.spring_datasource_hikari_maximum_pool_size }}
但是,当在 deployment.yaml
文件中使用时,它会失败并出现以下错误。
Deploy failed: The request is invalid: patch: Invalid value: "map[metadata:map[annotations:map[kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":
{
(helm values etc)
`{"name":"SPRING_DATASOURCE_HIKARI_MAXIMUM-POOL-SIZE","value":10}]` **(this is the incorrect value)**
}
cannot convert int64 to string
在 deployment.yaml
文件中使用 values.yaml
文件中的整数值的正确格式是什么?
我也尝试了多种带有引号“”的组合,但似乎没有任何效果。
感谢任何帮助,提前致谢。
检查来自Helm Environment Variables with Booleans and Integers
的解决方案
We can use !!str
to convert the output to a string, Alternatively we
can also use a undefined !!
and get the same behaviour giving later
developers nice hints of what we intended !!booleanEnv
or !!integerEnv
will cast the values to string (or even just !!boolean
)
- name: SPRING_DATASOURCE_HIKARI_MAXIMUM-POOL-SIZE
value: !!integerEnv {{ .Values.spring_datasource_hikari_maximum_pool_size }}
- name: FAVORITE_DRINK
value: !!stringEnv {{ .Values.favoriteDrink }}
- name: TAKES_SUGAR
value: !!booleanEnv {{ .Values.takesSugar }}
YAML 值具有类型,标准规则是将像 10
这样的数字字符串视为数字。但是,在 Kubernetes YAML 格式中,环境变量的名称和值必须是字符串。
最简单的方法是使用 Helm (Sprig) quote
函数,它将参数用双引号引起来:
- name: SPRING_DATASOURCE_HIKARI_MAXIMUMPOOLSIZE
value: {{ quote .Values.spring_datasource_hikari_maximum_pool_size }}
{{/* ^^^^^ */}}
quote
不是特别聪明;与 value: "{{ .Values...}}"
相同。有一个类似的 squote
会将值用单引号引起来。
如果您想要一个真正强大的解决方案,您可以使用 print
to convert an arbitrary value to a string, then the lightly-documented toJson
函数将其转换为 JSON。按照设计,有效的 JSON 是有效的 YAML,并且“将字符串转换为 JSON” 将意味着将其双引号并根据需要转义它。
value: {{ .Values...pool_size | print | toJson }}
我能够通过在 deployment.yaml
文件
中的 value
本身使用 双引号 来解决这个问题
- name: SPRING_DATASOURCE_HIKARI_MAXIMUM-POOL-SIZE
value: "{{ .Values.spring_datasource_hikari_maximum_pool_size }}"
因为这是一个生产实例我无法检查@David Maze 和 Vit 的解决方案。
编辑:
尝试使用 quote
选项,它也有效。
- name: SPRING_DATASOURCE_HIKARI_MAXIMUMPOOLSIZE
value: {{ quote .Values.spring_datasource_hikari_maximum_pool_size }}
我有一个 values.yaml
文件,我在其中提供了 spring_datasource_hikari_maximum_pool_size: "10"
在deployment yaml
中我已经使用这个值作为
- name: SPRING_DATASOURCE_HIKARI_MAXIMUM-POOL-SIZE
value: {{ .Values.spring_datasource_hikari_maximum_pool_size }}
但是,当在 deployment.yaml
文件中使用时,它会失败并出现以下错误。
Deploy failed: The request is invalid: patch: Invalid value: "map[metadata:map[annotations:map[kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":
{
(helm values etc)
`{"name":"SPRING_DATASOURCE_HIKARI_MAXIMUM-POOL-SIZE","value":10}]` **(this is the incorrect value)**
}
cannot convert int64 to string
在 deployment.yaml
文件中使用 values.yaml
文件中的整数值的正确格式是什么?
我也尝试了多种带有引号“”的组合,但似乎没有任何效果。
感谢任何帮助,提前致谢。
检查来自Helm Environment Variables with Booleans and Integers
的解决方案We can use
!!str
to convert the output to a string, Alternatively we can also use a undefined!!
and get the same behaviour giving later developers nice hints of what we intended!!booleanEnv
or!!integerEnv
will cast the values to string (or even just!!boolean
)
- name: SPRING_DATASOURCE_HIKARI_MAXIMUM-POOL-SIZE
value: !!integerEnv {{ .Values.spring_datasource_hikari_maximum_pool_size }}
- name: FAVORITE_DRINK
value: !!stringEnv {{ .Values.favoriteDrink }}
- name: TAKES_SUGAR
value: !!booleanEnv {{ .Values.takesSugar }}
YAML 值具有类型,标准规则是将像 10
这样的数字字符串视为数字。但是,在 Kubernetes YAML 格式中,环境变量的名称和值必须是字符串。
最简单的方法是使用 Helm (Sprig) quote
函数,它将参数用双引号引起来:
- name: SPRING_DATASOURCE_HIKARI_MAXIMUMPOOLSIZE
value: {{ quote .Values.spring_datasource_hikari_maximum_pool_size }}
{{/* ^^^^^ */}}
quote
不是特别聪明;与 value: "{{ .Values...}}"
相同。有一个类似的 squote
会将值用单引号引起来。
如果您想要一个真正强大的解决方案,您可以使用 print
to convert an arbitrary value to a string, then the lightly-documented toJson
函数将其转换为 JSON。按照设计,有效的 JSON 是有效的 YAML,并且“将字符串转换为 JSON” 将意味着将其双引号并根据需要转义它。
value: {{ .Values...pool_size | print | toJson }}
我能够通过在 deployment.yaml
文件
value
本身使用 双引号 来解决这个问题
- name: SPRING_DATASOURCE_HIKARI_MAXIMUM-POOL-SIZE
value: "{{ .Values.spring_datasource_hikari_maximum_pool_size }}"
因为这是一个生产实例我无法检查@David Maze 和 Vit 的解决方案。
编辑:
尝试使用 quote
选项,它也有效。
- name: SPRING_DATASOURCE_HIKARI_MAXIMUMPOOLSIZE
value: {{ quote .Values.spring_datasource_hikari_maximum_pool_size }}