【问题标题】:pass array in Helm values property在 Helm 值属性中传递数组
【发布时间】:2020-01-21 12:51:29
【问题描述】:

我想在 Helm 的 yaml(值文件)中将数组作为属性传递。我尝试了什么:

  1. 尝试。

    elasticsearch:
      uri: "[\"127.0.0.1:9200\",\"127.0.0.2:9200\"]"
    

    错误:

    ReadString: 需要 " 或 n,但发现 [,在 #10 字节中发现错误 ...|RCH_URL":["127.0.0.1|...,更大的上下文 ...|{"apiVersion":"v1","data":{"ELASTIC_SEARCH_URL": ["127.0.0.1:9200","127.0.0.2:9200"],"LOGS_ENV_PREFI|...

  2. 尝试。根据official helm site如何传数组

    elasticsearch:
      --set uri={127.0.0.1:9200,127.0.0.2:9200}
    

    有错误:

    将 YAML 转换为 JSON 时出错:yaml:第 15 行:映射值不是 在这种情况下允许

  3. 尝试。

     elasticsearch:
       uri: 
       - 127.0.0.1:9200
       - 127.0.0.2:9200
    

    失败,异常与 1 相同。

编辑: 实际上,在我的情况下,当时 YAML 文件中没有使用 helm 值,所以我需要另一种格式,最后的解决方案是将 uri 作为带单引号的字符串传递:

 elasticsearch:
   uri: '["127.0.0.1:9200","127.0.0.2:9200"]'

不过@Marcin 的回答是正确的。

【问题讨论】:

  • Helm 将值从 values.yaml 渲染到 config.yaml:values.yaml:站点:-dataprovider:abcd -dataprovider:xyzx config.yaml:站点:{{ toYaml .Values.sites |缩进 10 }}

标签: kubernetes kubernetes-helm


【解决方案1】:

您可以使用老式的 json 方式传递一个值数组:

elasticsearch:
  uri: ["127.0.0.1:9200", "127.0.0.2:9200"]

或者yaml引入的方式:

elasticsearch:
  uri: 
  - 127.0.0.1:9200
  - 127.0.0.2:9200

然后您可以使用 range 访问 Helm 模板中的值:

Uris:{{- range .Values.elasticsearch.uri }}
{{.}}{{- end }}

解决:

Uris:
127.0.0.1:9200
127.0.0.2:9200

【讨论】:

  • 请注意:您定义为old fashioned json way 的也是yaml,就在一行中
【解决方案2】:

Helm 将值从 values.yaml 渲染到 config.yaml :

values.yaml

sites:
  - dataprovider: abcd
  - dataprovider: xyzx

config.yaml

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

【讨论】:

  • 这对我来说是一个小小的改动——输出的第一行缩进了 12 个空格而不是 10 个;我必须完全左对齐上面的第二行才能获得预期的输出。
  • 也可以在一行上写成sites: {{ toYaml .Values.sites | nindent 10 }}nindent 添加前导换行符。
  • 是的,我们可以按照输出要求的建议进行这些更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-07
  • 2016-11-13
  • 2022-08-11
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 2021-11-25
相关资源
最近更新 更多