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

如何通过Ansible Playbook按键条件替换values.yaml中字典值

如何根据指定key更新YAML文件中的特定值

如果你需要修改values.yaml里嵌套结构中,指定name对应的value字段(比如把operator.operator.env数组里name: namespace1的value从abc改成xyz),可以用以下两种常用方法:

方法1:使用yq工具(推荐)

yq是专门处理YAML的命令行工具,操作简洁高效。执行以下命令即可直接修改原文件:

yq eval '.operator.operator.env[] |= (select(.name == "namespace1").value = "xyz")' values.yaml -i

命令说明:

  • .operator.operator.env[]:定位到目标数组并遍历每一项
  • |=:对遍历到的每一项执行后续修改操作
  • select(.name == "namespace1"):筛选出name字段为namespace1的数组项
  • .value = "xyz":将筛选出的项的value字段设为xyz
  • -i:直接修改原文件(若不加此参数,只会在终端输出修改后的内容,不会改动原文件)

方法2:使用Python脚本

如果没有安装yq,可以用Python脚本实现,能更好地控制格式:

import yaml

# 读取YAML文件
with open('values.yaml', 'r', encoding='utf-8') as f:
    yaml_data = yaml.safe_load(f)

# 遍历目标数组,修改指定项
for env_item in yaml_data['operator']['operator']['env']:
    if env_item['name'] == 'namespace1':
        env_item['value'] = 'xyz'
        break  # 找到目标项后退出循环,提升效率

# 写回YAML文件,保持原有格式
with open('values.yaml', 'w', encoding='utf-8') as f:
    yaml.dump(yaml_data, f, default_flow_style=False, sort_keys=False, indent=2)

脚本说明:

  • yaml.safe_load:安全加载YAML内容,避免执行恶意代码
  • sort_keys=False:防止YAML键被自动排序,保持原有结构顺序
  • indent=2:设置缩进为2,和原文件格式保持一致

修改效果对比

修改前的关键片段:

operator:
  operator:
    replicaCount: 1
    env:
      - name: namespace1
        value: abc
    resources:
      requests:
        cpu: 200m
        memory: 256Mi
        ephemeral-storage: 500Mi

修改后的关键片段:

operator:
  operator:
    replicaCount: 1
    env:
      - name: namespace1
        value: xyz
    resources:
      requests:
        cpu: 200m
        memory: 256Mi
        ephemeral-storage: 500Mi

内容的提问来源于stack exchange,提问作者Sharanya M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 14:56:14