如何在Ansible azure_rm的conditional_groups中使用多条件语句
问题解答
结论
你修改后的prod_hosts条件写法无法按照预期生效,存在逻辑判断优先级错误。
错误原因
Jinja2表达式本身完全支持or逻辑运算符,但你编写的条件'prod1' or 'prod2' in name存在优先级问题:该表达式会被解析为('prod1') or ('prod2' in name),而非你预期的('prod1' in name) or ('prod2' in name)。由于非空字符串'prod1'的布尔值永远为True,因此该条件对所有主机都会返回True,最终所有虚拟机都会被划入prod_hosts分组。
正确配置
你可以选择以下任意一种正确的表达式写法替换原有条件:
- 完整声明两个匹配条件
conditional_groups: prod_hosts: "'prod1' in name or 'prod2' in name" uat_hosts: "'uat' in name"
- 使用正则匹配简化多关键词判断(适合关键词较多的场景)
conditional_groups: prod_hosts: "name is search('prod1|prod2')" uat_hosts: "'uat' in name"
- 使用any()函数批量判断列表内关键词
conditional_groups: prod_hosts: "any(keyword in name for keyword in ['prod1', 'prod2'])" uat_hosts: "'uat' in name"
以上三种写法均可正确匹配名称包含prod1或prod2的虚拟机,划入prod_hosts分组。
内容的提问来源于stack exchange,提问作者SafiJunaid
相关产品推荐
相关产品推荐

