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

如何用jq将Deployment中符合规则的configMapKeyRef转为secretKeyRef

解决Kubernetes Deployment配置转换的jq命令

直接上符合需求的jq命令:

.spec.template.spec.containers[].env[] |= (
  if .name | test("SECRET|PASSWORD|KEY") then
    .valueFrom |= (
      .secretKeyRef = {
        name: .configMapKeyRef.key | ascii_downcase,
        key: .configMapKeyRef.key
      }
      | del(.configMapKeyRef)
    )
  else
    .
  end
)

命令说明

  • 遍历所有容器的环境变量条目,对每个条目做原地修改(|=)
  • 用test("SECRET|PASSWORD|KEY")匹配name字段包含指定关键词的条目;如果需要忽略大小写,改成test("SECRET|PASSWORD|KEY"; "i")
  • 匹配到的条目:
    1. 基于原configMapKeyRef的key生成secretKeyRef,其中name设为该key的小写形式(用ascii_downcase转小写)
    2. 删除原有的configMapKeyRef字段
  • 未匹配的环境变量保持原样

示例转换

假设原环境变量条目:

{
  "name": "API_KEY",
  "valueFrom": {
    "configMapKeyRef": {
      "name": "api-config",
      "key": "API_KEY"
    }
  }
}

处理后会变成:

{
  "name": "API_KEY",
  "valueFrom": {
    "secretKeyRef": {
      "name": "api_key",
      "key": "API_KEY"
    }
  }
}

如果你的需求中“对应key”指的是环境变量的name字段(而非configMapKeyRef的key),只需把secretKeyRef的name字段修改为.name | ascii_downcase即可。

内容的提问来源于stack exchange,提问作者Nathanaël Blanchet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:22:49