Helm: 支持集合中的复杂对象

创建于 2017-03-03  ·  3评论  ·  资料来源: helm/helm

在聊天中,我询问了通过--set定义这样一个对象的能力,并遗憾地面临着事实:

env:
  - name: ROUTER
    value: cake
  - name: PASSWORD
    value: derp

我喜欢在values.yaml使用这些节来定义特定容器规范的整个 env 变量需求,因此在规范中我只需要:

        env:
{{ toYaml .Values.env | indent 10 }}

这有很多有用的原因:

  1. 我不必担心将空变量传递给我的应用程序。
  2. 变量都定义在一个位置,所以如果变量名称发生变化,我可以快速设置并继续我的工作。
  3. 我永远不必担心完全重新部署像deployment对象这样的东西,因为我想将一些其他变量传递给主进程。

遗憾的是,目前不支持传递这些类型的对象。 现在以最好的方式在我的模板中使用 if 语句来解决这个问题,但是在values.yaml定义关于我的应用程序的大量潜在动态信息会很棒

feature

最有用的评论

现在可以使用以下语法:

helm install foo --set env[0].name="ROUTER",env[0].value="cake"

在此处记录

所有3条评论

我实际上只是通过观察kube-lego找到了另一种方法来做到这一点:

          {{- range $key, $value := .Values.config }}
            - name: "{{ $key }}"
              value: "{{ $value }}"
          {{- end }}

我的问题是类似的。
我们想在以下位置使用图表 aws-cluster-autoscaler:
https://github.com/kubernetes/charts/tree/master/stable/aws-cluster-autoscaler

我们想通过命令行传递 autoscalingGroups[].name,使用--set ,并通过文件 params.yaml 传递其他信息:

autoscalingGroups:
- minSize: 2
  maxSize: 8
awsRegion: eu-west-1

当我们尝试使用以下方法设置自动缩放组名称时:

$ helm upgrade cluster-autoscaler stable/aws-cluster-autoscaler -f params.yaml --set "autoscalingGroups[].name"="nodes.k8s.test.eu-west-1.aws.redacted.net"

但这不起作用。

阅读文档,这是众所周知的,但能够做到这一点仍然很好。

现在可以使用以下语法:

helm install foo --set env[0].name="ROUTER",env[0].value="cake"

在此处记录

此页面是否有帮助?
0 / 5 - 0 等级