How to pass dynamic arguments to a helm chart that runs a job

纵然是瞬间 提交于 2019-12-10 13:09:07

问题


I'd like to allow our developers to pass dynamic arguments to a helm template (Kubernetes job). Currently my arguments in the helm template are somewhat static (apart from certain values) and look like this

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

If I were run a task using the docker container without Kubernetes, I would pass parameters like so:

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

Is there any way to templatize arguments in a helm chart in such way that any number of arguments could be passed to a template.

For example.

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

or

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

I've tried a few approaches but was not successful. Here is one example:

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

回答1:


In your values file define arguments as:

extraArgs:
  argument1: value1
  argument2: value2
  booleanArg1:

In your template do:

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

Easy.




回答2:


Yes. In values.yaml you need to give it an array instead of a space delimited string.

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

or

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

and then you like you mentioned in the template should do it:

     args:          
      {{  range .Values.arguments }}
        - {{ . }}
      {{ end }}

If you want to override the arguments on the command line you can pass an array with --set like this:

--set arguments={--arg1, value1, --arg2, value2, --arg3, value3, ....}



回答3:


Rico's answer needed to be improved. Using the previous example I've received errors like:

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

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

This is my working setup with coma in elements: ( the vertical format for the list is more readable )

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

in the template should do it:

```

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

```




回答4:


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

So this is the helm chart in question: https://github.com/helm/charts/tree/master/stable/airflow Now I want to overwrite the default values in the helm chart secrets.database and secrets.password so I use --set argument and then it is key=value pairs separated by commas.
helm install --name "<name for your chart>" <chart> --set key0=value0,key1=value1,key2=value2,key3=value3



来源:https://stackoverflow.com/questions/52636571/how-to-pass-dynamic-arguments-to-a-helm-chart-that-runs-a-job

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!