非等元素字典比较规则及Ansible断言优化需求
解决Ansible字典自定义规则断言问题
需求回顾
- 仅校验
dictionary_2中存在的键,与dictionary_1对应键的值对比 - 当
dictionary_2[key] > dictionary_1[key]时断言失败 dictionary_1包含额外键、或dictionary_2[key] <= dictionary_1[key]时均判定成功
解决方案代码
- name: Check dictionaries per custom rules assert: that: - "dictionary_2.items() | all(item => dictionary_1[item.key] >= item.value)" fail_msg: | 以下键的dictionary_2值大于dictionary_1: {% for key, val in dictionary_2.items() %} {% if val > dictionary_1[key] %} - {{ key }}: dictionary_1值为{{ dictionary_1[key] }},dictionary_2值为{{ val }} {% endif %} {% endfor %} success_msg: "所有校验通过"
代码说明
断言条件:
使用all()过滤器遍历dictionary_2的所有键值对,确保每个键对应的dictionary_1值都大于等于dictionary_2的值。只要有一个键不满足,断言就会失败。动态错误提示:
通过Jinja2循环生成精准的错误信息,只列出不符合规则的键,并展示dictionary_1和dictionary_2的具体数值对比,方便定位问题。
示例效果
针对你提供的示例字典:
dictionary_1: apple: 4 banana: 5 orange: 6 dictionary_2: apple: 5 banana: 5
运行该任务会触发断言失败,错误提示如下:
以下键的dictionary_2值大于dictionary_1:
- apple: dictionary_1值为4,dictionary_2值为5
内容的提问来源于stack exchange,提问作者Kooky
相关产品推荐
相关产品推荐

