Ansible如何正确判断列表var1所有元素均包含于列表var2
错误原因
你当前使用的var1 in var2判断逻辑,是检查整个var1列表是否作为单个独立元素存在于var2中。但var2的所有元素都是字符串,不存在和var1完全相等的列表元素,因此永远无法得到正确结果。
正确实现方式
你需要判断var1是否为var2的子集,也就是var1的每一个元素都能在var2中找到,最简便的写法是借助Ansible内置的difference差集过滤器:
- 差集过滤器
var1 | difference(var2)会返回「存在于var1、但不存在于var2」的所有元素组成的新列表 - 如果这个新列表长度为0,就说明var1的所有元素都在var2中,满足校验要求
修正后的完整任务代码如下:
- name: check condition ansible.builtin.shell: "echo all values are there" when: (var1 | difference(var2)) | length == 0
注意:原任务代码里
Shell和When首字母大写不符合Ansible语法要求,关键字和模块名需要使用小写,推荐使用带命名空间的完整模块名ansible.builtin.shell避免模块冲突。
内容的提问来源于stack exchange,提问作者Yashwanth Veeranki
相关产品推荐
相关产品推荐

