【问题标题】:How to fail a helm release based on inputs in values.yaml如何根据 values.yaml 中的输入使 helm 发布失败
【发布时间】:2019-08-24 00:06:11
【问题描述】:

我正在使用helm install 命令安装掌舵图。我有values.yaml,它需要用户的一些输入。 values.yaml 中的一个键是 action,它只能采用三个预定义的值(比如说 action1action2action3 ) 作为输入。除此以外的任何其他值均无效。

当用户向values.yaml 中的操作字段提供值并触发helm install 命令时,我需要检查的第一件事是action 键是否具有有效值.如果 action 值无效,我希望发布失败并显示正确的错误消息。

例如:如果用户给了action: action4,这是无效的并且释放应该失败,因为.Values.action只能是action1action2或action3.

考虑到 helm 结构,我如何实现此用例以及哪个文件最适合处理此验证?

【问题讨论】:

    标签: kubernetes kubernetes-helm


    【解决方案1】:

    我能够通过以下更改实现用例。 在 _helpers.tpl 中添加以下代码

    {{- define "actionValidate" -}}
      {{ $action := .Values.actions }}
      {{- if or (eq $action "action1") (eq $action "action2") (eq $action "action3") -}}
        true
      {{- end -}}
    {{- end -}}
    

    从 .tpl 文件中调用此函数,如下所示:-

    {{ include "actionValidate" .  | required "Action value is incorrect. The valid values are 'action1', 'action2', 'action3' " }}
    

    【讨论】:

      【解决方案2】:

      有了 HelmV3,现在有了更简单的方法。只需指定包含您的值的schema

      例如:

       title: Values
          type: object
          properties:
              action:
                  description: Some action
                  type: string
                  pattern: "^(action1|action2|action3)$"
      

      【讨论】:

      • 我猜,这个方案更适合复杂的图表,但是如果你想对几个输入值进行简单的验证,“required”语句更容易。
      【解决方案3】:

      没有足够的代表发表评论。但是,为了响应@Saurabh,您现在必须用 YAML 注释掉函数调用。否则,Go Template 将遇到来自调用文件中间的随机 true 值的无效返回类型运行时错误。

      例子

      # validation.yaml
      ---
      #{{ include "actionValidate" .  | required "Action value is incorrect. The valid values are 'action1', 'action2', 'action3' " }}
      

      【讨论】:

        猜你喜欢
        • 2021-12-18
        • 2021-06-17
        • 2021-09-24
        • 1970-01-01
        • 2020-03-31
        • 2020-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多