Ansible如何动态更新哈希变量中自定义键的已有值?
完全可以通过set_fact配合Ansible内置过滤器实现该需求,无需维护两份变量文件,具体方案如下:
实现逻辑
利用Ansible自带的dict2items/items2dict做字典和列表的格式转换,搭配combine过滤器的递归合并能力,仅覆盖limits下的max、min字段,其余配置完全保留。
具体任务代码
你可以直接把下面的任务放在Assemble config任务之前,和你原有逻辑一样用never+专属标签控制执行:
# 可额外加开关变量控制,不需要的话去掉when条件即可 - name: 统一重置some_hash所有条目的limits阈值为0 set_fact: some_hash: >- {{ some_hash | dict2items | map('combine', { 'value': item.value | combine( {'limits': {'max': 0, 'min': 0}}, recursive=True ) }) | items2dict }} loop: "{{ some_hash | dict2items }}" tags: - never - your_custom_tag # 替换为你自己的专属执行标签
效果验证
如果需要确认转换结果,可在上述任务后加调试任务验证:
- name: 验证转换后的some_hash配置 debug: var: some_hash tags: - never - your_custom_tag
该方案只依赖Ansible 2.10+内置能力,后续维护仅需要修改原默认变量即可,没有额外的变量文件维护成本。
内容的提问来源于stack exchange,提问作者prosto.vint
相关产品推荐
相关产品推荐

