首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建包含带Helm引用元素列表的json可解析的k8s configmap

创建包含带Helm引用元素列表的json可解析的k8s configmap
EN

Stack Overflow用户
提问于 2020-08-03 15:37:47
回答 1查看 998关注 0票数 0

我试图修改一个舵图(这一个),其中一个模板用于生成一个configMap。

然后由不同的模块加载配置映射并将其解析为json。

问题是,我需要在某个时候在json中放置一个字符串列表。只传递模板中的值,就会产生一个未引用的列表。然后我试着用一个范围逐个元素来完成它,但是之后我得到了一个最后的逗号。我所部署的映像所使用的json解析器(我无法控制)将不接受非严格的json。也就是说,列表中的最后一个元素不能有后缀逗号。

下面是一个示例values.yaml

代码语言:javascript
复制
val:
  - "a"
  - "b"
  - "c"

和一些template.tpl

代码语言:javascript
复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: some-configmap
data:
  cfg.json: |
    {
      "val": [{{ range .Values.val }}{{ . | quote }},{{ end }}]
    }

但这会产生:

代码语言:javascript
复制
{
  "val": ["a","b","c",]
}

它被json解析器拒绝,消息如下:

代码语言:javascript
复制
internal/modules/cjs/loader.js:1008
    throw err;
    ^

SyntaxError: /etc/config/..2020_08_03_15_32_26.221540866/pelias.json: Unexpected token ] in JSON at position 1744
    at JSON.parse (<anonymous>)
    at Object.Module._extensions..json (internal/modules/cjs/loader.js:1005:27)
    at Module.load (internal/modules/cjs/loader.js:811:32)
    at Function.Module._load (internal/modules/cjs/loader.js:723:14)
    at Module.require (internal/modules/cjs/loader.js:848:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at getConfig (/code/pelias/schema/node_modules/pelias-config/index.js:66:21)
    at Object.generate (/code/pelias/schema/node_modules/pelias-config/index.js:24:18)
    at Object.<anonymous> (/code/pelias/schema/scripts/create_index.js:2:41)
    at Module._compile (internal/modules/cjs/loader.js:955:30)

如果我只传递空列表,json解析器就会很高兴,但是在剩下的过程中,我需要这些参数。

是否有一种方法可以删除最后一个逗号,或者甚至使用helm模板以更优雅的方式加载字符串列表?

(我知道我可以在模板中硬编码这个值,但是我希望这个部署可以与其他参数一起重用)

提前谢谢。

编辑

我通过以下操作找到了一个有点工作的策略:"val": [{{ join "," .Values.val }}]

现在唯一的问题是我需要在我的values.yaml中使用双引号

代码语言:javascript
复制
val:
  - '"a"'
  - '"b"'
  - '"c"'

没关系,但如果有人有清洁的解决方案,我会感兴趣的。

EN

回答 1

Stack Overflow用户

发布于 2021-07-30 12:20:00

您可以使用toJson函数将部分(在您的值文件中)转换为JSON:

这两项工作(不同之处在于您所喜欢的,以及您是否希望在此之前应用其他功能):

代码语言:javascript
复制
"val": {{ toJson .Values.val }}
代码语言:javascript
复制
"val": {{ .Values.val | toJson }}

还有一个toYaml函数。

示例

所有示例都使用稍微修改过的values.yaml

代码语言:javascript
复制
config:
  val:
    - a
    - b
    - c

示例1:只是数组

代码语言:javascript
复制
data:
  cfg.json: |-
    {
      "val": {{ toJson .Values.config.val }}
    }

结果:

代码语言:javascript
复制
data:
  cfg.json: |-
    {
      "val": ["a","b","c"]
    } 

例2:整个章节

代码语言:javascript
复制
data:
  cfg.json: {{ .Values.config | toJson | quote }}

结果:

代码语言:javascript
复制
data:
  cfg.json: "{\"val\":[\"a\",\"b\",\"c\"]}"

示例3:漂亮的JSON

代码语言:javascript
复制
data:
  cfg.json: |-
    {{- .Values.config | toPrettyJson | nindent 4 }}

结果:

代码语言:javascript
复制
data:
  cfg.json: |-
    {
      "val": [
        "a",
        "b",
        "c"
      ]
    }

例4: YAML

代码语言:javascript
复制
data:
  cfg.json: |-
    {{- .Values.config | toYaml | nindent 4 }}

结果:

代码语言:javascript
复制
data:
  cfg.json: |-
    val:
    - a
    - b
    - c
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63232517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档