如何在Ansible中批量更新列表指定元素的order_number属性使其自增1
在Ansible中无法直接通过site_yml_vars[item].order_number的语法修改嵌套列表中的属性值,你可以通过列表拼接+combine过滤器的方式实现需求,以下是可直接运行的任务代码:
首先定义需要更新的索引列表:
- name: 声明需要调整的条目索引 set_fact: update_indexes: - 3 - 4
然后执行批量更新:
- name: 批量更新指定条目的order_number set_fact: site_yml_vars: >- {{ # 取目标索引之前的所有元素 site_yml_vars[:item] + # 替换目标索引的元素,将order_number加1 [site_yml_vars[item] | combine({'order_number': site_yml_vars[item].order_number + 1})] + # 取目标索引之后的所有元素 site_yml_vars[item+1:] }} loop: "{{ update_indexes }}"
运行完成后site_yml_vars就会和你期望的结果完全一致,你可以通过下面的任务验证结果:
- name: 输出更新后的列表 debug: var: site_yml_vars
注意事项
- 如果需要更新的索引存在重叠或者顺序颠倒的情况,建议先将
update_indexes按从小到大排序后再循环,避免修改顺序导致结果不符合预期 - 提前确认你传入的索引没有超出
site_yml_vars的长度范围,否则会触发索引越界报错
内容的提问来源于stack exchange,提问作者ZZTest
相关产品推荐
相关产品推荐

