Kubernetes Helm chart requirements.yaml文件依赖项false条件

时间:2018-06-08 04:48:39

标签: kubernetes kubernetes-helm

我正在使用Kubernetes Helm requirements.yaml文件来添加依赖项。基于values.yaml条件,它将创建依赖项pod。

这里我想在apache.enabled == false

时执行所需的依赖项
values.yaml

external_apache:
  enabled: false

文件requirements.yaml

dependencies:
- name:
  version:
  repository:
  condition: external_apache.enabled

如何添加错误条件?

我已经尝试过以下条件,但它无效:

condition: external_apache.enabled == false

4 个答案:

答案 0 :(得分:1)

您使用的是什么版本的Helm?

GitHub上的Kubernetes存储库中存在类似的问题:

Unable to use condition in 'requirements.yaml' #2111

解决方案是将Helm升级到v2.2.0 +。在该版本中,添加了条件支持。

Helm documentationrepository中,可以解释条件的工作原理: (我添加了一些评论以使阅读更容易)

条件 - 条件字段包含一个或多个YAML路径(以逗号分隔)。
标签 - 标签字段是与此图表关联的标签的YAML列表。

# parentchart/requirements.yaml
dependencies:
      - name: subchart1
        repository: http://localhost:10191
        version: 0.1.0
        condition: subchart1.enabled, global.subchart1.enabled
        tags:
          - front-end        #(chart should be disabled because the tags.front-end is “false” in values.yaml file , but ...)
          - subchart1        #(subchart1.enabled condition path is present in values.yaml file and it has "true" value...)
                             #(this condition, so it overrides tag front-end and this chart will be enabled)

      - name: subchart2
        repository: http://localhost:10191
        version: 0.1.0
        condition: subchart2.enabled,global.subchart2.enabled
                  #(as soon as no one from these paths is exists in values.yaml this condition has ho effect)

        tags:
          - back-end        #(chart should be enabled because the tags.back-end is “true” in values.yaml file)
          - subchart2       #(and there is no condition path found in values.yaml to override it)

如果顶级父级values中存在条件路径并解析为布尔值,则将根据该布尔值启用或禁用图表。 仅评估列表中找到的第一个有效路径,并且如果不存在路径则条件无效

在顶级父级的值中,可以通过指定标记和布尔值来启用或禁用所有带标记的图表。

# parentchart/values.yaml

subchart1:
  enabled: true          #(this could be found from requirements as subchart1.enabled and override tags in this case)
tags:
  front-end: false      #(this disables charts with tag front-end)
  back-end: true        #(this enables charts with tag back-end)

条件和标签的逻辑和顺序在Tags and Condition Resolution

中描述
  • 条件(在值中设置时)始终覆盖标记。将忽略存在的第一个条件路径以及该图表的后续条件路径。
  • 标签被评估为'如果图表的任何标签为真,则启用图表'。
  • 必须在顶级父级的值中设置标签和条件值。
  • 标签:键值必须是顶级键。 全局和嵌套代码:目前不支持表格。

您还可以在命令行中设置标记和条件:

helm install --set tags.front-end=true --set subchart2.enabled=false

答案 1 :(得分:0)

根据documentation和@VAS的回答,您的问题的答案是无法在Requirements.yaml中使用否定条件

答案 2 :(得分:0)

头盔版本v2.2.2有效,而v2.10.0无效。

答案 3 :(得分:0)

虽然有点晚,但用户可能会发现它有帮助。我没有从命令行为父图表运行 helm install,但是,我有一个用于运行它的 shell 脚本和另一个用于环境属性的 shell 脚本。

我已在环境脚本中将条件布尔值设置为 true 或 false,并使用其他脚本中的值为父 helm 图表运行 helm,我已在父值中设置了单个子图表 enabled 属性.yaml。

<块引用>

此外,在 3.0.0+ 版本中,之前完成的配置 requirements.yaml 现在在父的 chart.yaml 本身中完成。