在 Helm values 属性中传递数组

Bar*_*tek 9 kubernetes kubernetes-helm

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

  1. 试图。

    elasticsearch:
      uri: "[\"127.0.0.1:9200\",\"127.0.0.2:9200\"]"
    
    Run Code Online (Sandbox Code Playgroud)

    错误:

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

  2. 试图。根据官方掌舵站点如何传递数组

    elasticsearch:
      --set uri={127.0.0.1:9200,127.0.0.2:9200}
    
    Run Code Online (Sandbox Code Playgroud)

    有错误:

    将 YAML 转换为 JSON 时出错:yaml:第 15 行:此上下文中不允许映射值

  3. 试图。

     elasticsearch:
       uri: 
       - 127.0.0.1:9200
       - 127.0.0.2:9200
    
    Run Code Online (Sandbox Code Playgroud)

    与 1 相同的异常失败。

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

 elasticsearch:
   uri: '["127.0.0.1:9200","127.0.0.2:9200"]'
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ról 13

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

elasticsearch:
  uri: ["127.0.0.1:9200", "127.0.0.2:9200"]
Run Code Online (Sandbox Code Playgroud)

或者yaml介绍的方式:

elasticsearch:
  uri: 
  - 127.0.0.1:9200
  - 127.0.0.2:9200
Run Code Online (Sandbox Code Playgroud)

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

Uris:{{- range .Values.elasticsearch.uri }}
{{.}}{{- end }}
Run Code Online (Sandbox Code Playgroud)

决定:

Uris:
127.0.0.1:9200
127.0.0.2:9200
Run Code Online (Sandbox Code Playgroud)

  • 请注意:您定义的“老式 json 方式”也是 yaml,仅在一行中 (2认同)

小智 5

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

值.yaml

sites:
  - dataprovider: abcd
  - dataprovider: xyzx
Run Code Online (Sandbox Code Playgroud)

配置.yaml :

sites:
  {{ toYaml .Values.sites | indent 10 }}
Run Code Online (Sandbox Code Playgroud)

  • 也可以将其写在一行上:`sites: {{ toYaml .Values.sites | 宁缺 10 }}`。`nindent` 添加一个前导换行符。 (8认同)
  • 经过一个小改动后,这对我有用了——输出的第一行缩进了 12 个空格,而不是 10 个;我必须完全左对齐上面的第二行才能获得预期的输出。 (2认同)