You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用yq处理YAML标签并注入到Kustomization模板嵌套位置?

实现JSON数组到Istio discoverySelectors YAML格式的转换与注入

1. 用yq直接生成目标YAML片段

不用先读取JSON数组再二次处理,直接通过yq遍历数组内的标签对象,生成符合要求的matchLabels条目:

# 生成MATCH_LABELS_BLOCK变量,包含所有discoverySelectors条目
MATCH_LABELS_BLOCK=$(yq -r '.cluster.config.istio_ns_scoping_labels[] | "        - matchLabels:\n            " + (keys[] + ": " + .[keys[]])' "$config_file")

命令解释

  • .cluster.config.istio_ns_scoping_labels[]:遍历数组中的每一个标签对象
  • " - matchLabels:\n ":生成固定缩进和条目开头(缩进需和模板层级匹配)
  • (keys[] + ": " + .[keys[]]):提取每个对象的键值对,拼接成标准YAML标签格式

执行后,MATCH_LABELS_BLOCK的内容就是你需要的片段:

- matchLabels:
            istio-discovery: enabled
        - matchLabels:
            kubernetes.io/metadata.name: keycloak-idc-identity-broker
        - matchLabels:
            kubernetes.io/metadata.name: keycloak-idc-identity-broker-2
        - matchLabels:
            kubernetes.io/metadata.name: keycloak-idc-identity-broker-3

2. 调整模板文件

将原模板的discoverySelectors部分修改为(保证层级缩进正确):

meshConfig:
      accessLogFile: /dev/stdout
      discoverySelectors:
${MATCH_LABELS_BLOCK}

3. 用envsubst完成变量注入

执行以下命令,把生成的YAML片段替换到模板中,输出最终配置文件:

# 假设模板文件名为kustomization-template.yaml,输出到kustomization.yaml
envsubst < kustomization-template.yaml > kustomization.yaml

补充说明

  • 若使用yq v4+版本,上述命令完全兼容;旧版本可能需要微调语法,但v4是当前主流版本
  • 原JSON输出中的注释行(#istio_ns_scoping_labels)会被yq自动忽略,不影响处理

内容的提问来源于stack exchange,提问作者Hemant Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 11:12:11