Ansible中判断主机接口数量为2时条件不生效的原因
问题原因及解决办法
这个问题其实是变量类型搞混啦!ansible_interfaces本身是一个列表类型的变量(比如你的例子里是["lo","eth0"]),你直接用它和数字2做相等判断,本质是在比较“列表”和“数字”这两种完全不同的类型,Ansible自然会返回false。
正确的做法是获取这个列表的元素数量,再和2比较,这里可以用Ansible的length或者count过滤器:
- 推荐写法1:
when: ansible_interfaces | length == 2 - 等价写法2:
when: ansible_interfaces | count == 2
举个实际例子,当主机的接口列表是["lo","eth0"]时,ansible_interfaces | length会返回数字2,这时候条件判断就会成立,对应的任务就会被执行。
总结一下:在Ansible的条件判断里,一定要注意变量的类型——列表不能直接和数字比较,必须先用过滤器把列表转换成它的长度数值,再进行数值比较哦~
内容的提问来源于stack exchange,提问作者Evgeni
相关产品推荐
相关产品推荐

