如何将动态参数传递给运行作业的头盔图

时间:2018-10-03 22:32:50

标签: kubernetes kubernetes-helm go-templates

我想允许我们的开发人员将动态参数传递给头盔模板(Kubernetes作业)。目前,我在helm模板中的参数有些静态(除了某些值),看起来像这样

      Args:
        --arg1
        value1
        --arg2
        value2
        --sql-cmd
        select * from db

如果我是使用不带Kubernetes的docker容器运行任务的,那么我将像这样传递参数:

docker run my-image --arg1 value1 --arg2 value2 --sql-cmd "select * from db"

是否有任何方法可以将舵图中的参数模板化,从而可以将任意数量的参数传递给模板。

例如。

cat values.yaml
...
arguments: --arg1 value1 --arg2 value2 --sql-cmd "select * from db"
...

cat values.yaml
...
arguments: --arg3 value3
...

我尝试了几种方法,但没有成功。这是一个示例:

     Args:          
      {{  range .Values.arguments }}
        {{ . }}
      {{ end }}

5 个答案:

答案 0 :(得分:1)

是的。在values.yaml中,您需要给它一个数组而不是用空格分隔的字符串。

cat values.yaml
...
arguments: ['--arg3', 'value3', '--arg2', 'value2']
...

cat values.yaml
...
arguments:
- --arg3
- value3
- --arg2
- value2
...

然后您喜欢模板中提到的内容:

     Args:          
      {{  range .Values.arguments }}
        {{ . }}
      {{ end }}

答案 1 :(得分:0)

Rico的答案有待改进。 使用前面的示例,我收到了以下错误:

templates/deployment.yaml: error converting YAML to JSON: yaml

failed to get versionedObject: unable to convert unstructured object to apps/v1beta2, Kind=Deployment: cannot restore slice from string

这是我使用逗号进行工作的设置: (列表的垂直格式更具可读性)

cat values.yaml ... arguments: [ "--arg3,", "value3,", "--arg2,", "value2,", ] ...

模板中的

应该这样做:

```

          args: [
{{  range .Values.arguments }}
{{ . }}
{{ end }}
          ]

```

答案 2 :(得分:0)

在您的值文件中,将参数定义为:

extraArgs:
  argument1: value1
  argument2: value2
  booleanArg1:

在您的模板中执行:

    args:
{{- range $key, $value := .Values.extraArgs }}
    {{- if $value }}
    - --{{ $key }}={{ $value }}
    {{- else }}
    - --{{ $key }}
    {{- end }}
{{- end }}

容易

答案 3 :(得分:0)

helm install --name "airflow" stable/airflow --set secrets.database=mydatabase,secrets.password=mypassword

这是有问题的头盔图表:https://github.com/helm/charts/tree/master/stable/airflow 现在我想覆盖头盔图表中的默认值 secrets.database和 secrets.password,所以我使用--set参数,然后是用逗号分隔的键=值对。
helm install --name "<name for your chart>" <chart> --set key0=value0,key1=value1,key2=value2,key3=value3

答案 4 :(得分:0)

由于某些限制,我不得不使用 split 并使用 delimiter,所以在我的情况下:

deployment.yaml :

        {{- if .Values.deployment.args }}
        args:
        {{- range (split " " .Values.deployment.args) }}
        - {{ . }}
        {{- end }}
        {{- end }}

使用 --set 时:

helm install --set deployment.args="--inspect server.js" ...

结果:

  - args:
    - --inspect
    - server.js