我有一个 cron 作业的 helm 图表,它一直按预期工作,直到现在我必须将多个参数传递给命令并希望将参数分解为多行。
到目前为止,我尝试将参数分解为多行,导致命令根本没有收到所需的参数(可能是换行问题),或者 helm 出现语法问题,并出现以下错误:
json:无法将字符串解组到 Go 结构字段中
作为一个简单的例子,我的命令将从 bash 运行,如下所示;
python -m django scale_workloads --appserver-reg 1 --appserver-up 2 --nginx-reg 1 --nginx-up 2
通常为此,我的头盔模板就可以:
containers:
- name: word-check
image: {{ .Values.gke_registry }}/my_image:{{ .Values.global.build }}
command: ["/bin/sh","-c"]
args: ["python -m django word_check --log-all --wordlist /etc/words.txt"]
我尝试了许多不同的格式来将参数拆分为多行,并检查 yaml 语法。
我尝试过的一些事情;
command: [ "/bin/sh","-c" ]
args: [
"python -m django scale_workloads",
"--appserver-reg={{ .Values.pods.appserver.minReplicas }}",
"--appserver-up={{ .Values.pods.appserver.minReplicasUp }}",
"--nginx-reg={{ .Values.pods.nginx.minReplicas }}",
"--nginx-up={{ .Values.pods.nginx.minReplicasUp }}"
]
command: [ "/bin/sh","-c" ]
args: |
python -m django scale_workloads
--appserver-reg={{ .Values.pods.appserver.minReplicas }}
--appserver-up={{ .Values.pods.appserver.minReplicasUp }}
--nginx-reg={{ .Values.pods.nginx.minReplicas }}
--nginx-up={{ .Values.pods.nginx.minReplicasUp }}
command: [ "/bin/sh","-c" ]
args: >-
python -m django scale_workloads
--appserver-reg={{ .Values.pods.appserver.minReplicas }}
--appserver-up={{ .Values.pods.appserver.minReplicasUp }}
--nginx-reg={{ .Values.pods.nginx.minReplicas }}
--nginx-up={{ .Values.pods.nginx.minReplicasUp }}
我怀疑你正在寻找的语法是
command: ["/bin/sh", "-c"]
args:
- >-
python -m django scale_workloads
--appserver-reg={{ .Values.pods.appserver.minReplicas }}
...
在数据模型级别,
args:
必须是一个列表,并且列表中的每一项都必须是一个字符串。以缩进的 -
开始新行引入了一个列表项。 >-
引入了 YAML 块标量 语法;以下缩进行用单个空格连接在一起,并且没有前导或尾随新行。
作为替代方案,您的第一次尝试使
args:
明确成为一个列表。这与需要单个命令字的 sh -c
不兼容,但另一方面,您没有使用任何 shell 功能(变量扩展、管道、重定向)。如果 args:
或 command:
是一个列表,那么每个 shell 单词都需要是它自己的列表项。您还可以将这种方法与 Helm(以及更广泛的 Kubernetes)一起使用
command:
- python
- -m
- django
- scale_workloads
- --appserver-reg={{ .Values.pods.appserver.minReplicas }}
- ...
请注意,我没有
sh -c
包装器,并且我没有尝试将单词列表拆分为单独的 command:
和 args:
(它们只是组合在一起)。