16

有没有办法为 spec.container.env.value 传递布尔值?我想用 helm 覆盖 docker 父图像(https://github.com/APSL/docker-thumbor)中的布尔环境变量:UPLOAD_ENABLED

我做了一个更简单的测试

如果您尝试以下 yaml :

apiVersion: v1
kind: Pod
metadata:
  name: envar-demo
  labels:
    purpose: demonstrate-envars
spec:
  containers:
  - name: envar-demo-container
    image: gcr.io/google-samples/node-hello:1.0
    env:
    - name: DEMO_GREETING
      value: true

并尝试使用 kubernetes 创建它,您收到以下错误:

kubectl create -f envars.yaml

错误 :

error: error validating "envars.yaml": error validating data: expected type string, for field spec.containers[0].env[0].value, got bool; if you choose to ignore these errors, turn validation off with --validate=false

验证=假

Error from server (BadRequest): error when creating "envars.yaml": Pod in version "v1" cannot be handled as a Pod: [pos 192]: json: expect char '"' but got char 't'

它也不适用于整数值

4

5 回答 5

11

spec.container.env.value定义为string。见这里: https ://kubernetes.io/docs/api-reference/v1.6/#envvar-v1-core

使用此值时,您必须在容器中强制转换/转换/强制转换为布尔值

于 2017-06-22T06:55:26.253 回答
5

尝试转义值。以下对我有用:

- name: DEMO_GREETING
  value: "'true'"
于 2020-01-20T19:06:59.900 回答
4

这对我有用。

在我的示例中,一个是硬编码的,另一个来自 env var。

env:
  - name: MY_BOOLEAN
    value: 'true'
  - name: MY_BOOLEAN2
    value: '${MY_BOOLEAN2_ENV_VAR}'

所以基本上,我将单引号括起来,以防万一。

警告:不要在您的环境变量名称中使用连字符,这将不起作用......

于 2020-04-29T17:57:33.300 回答
2

如果您是舵图实施者,请引用它

data:
  # VNC_ONLY: {{ .Values.vncOnly }} <-- Wrong 
  VNC_ONLY: "{{ .Values.vncOnly }}" # <-- Correct

于 2021-08-20T11:34:58.350 回答
0

从命令行你也可以使用

--set-string

代替

--set

并且您将能够在不转义的情况下传递值,例如:

--set-string "env.my-setting=False"

于 2021-02-15T17:31:20.623 回答