Ansible中对比两个字典,值不同时触发任务失败
解决Ansible字典值对比并触发失败的问题
正确实现代码
你可以通过以下任务实现需求,核心是将groups_space的字符串值转为整数后对比,当同键值不匹配时触发任务失败:
- name: 校验用户与组的空间配额是否一致 fail: msg: "键{{ item }}的值不匹配:users_space为{{ users_space[item] }},groups_space为{{ groups_space[item] }}" loop: "{{ users_space.keys() | sort }}" when: users_space[item] != groups_space[item] | int
代码说明
loop: "{{ users_space.keys() | sort }}":遍历users_space的所有键(如果两个字典的键可能存在差异,可改用(users_space.keys() | union(groups_space.keys())) | sort确保覆盖所有键)groups_space[item] | int:将groups_space中字符串类型的值转为整数,保证类型一致后再做对比when条件:当同键的两个值不相等时,触发fail模块输出明确的错误信息
你原有代码的问题
- 变量名错误:
when条件中使用的qsi_disk_space.key和quota_qsi.key并非你定义的字典变量,需替换为实际的users_space[item]和转换后的groups_space[item] | int - 未做类型转换:
groups_space的值是字符串类型,直接与users_space的整数对比会导致判断逻辑错误 - 逻辑不符需求:原有
when条件判断的是键是否不等,而非需求中的值是否不等
内容的提问来源于stack exchange,提问作者Kooky
相关产品推荐
相关产品推荐

