首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查是否只定义了几个变量中的一个

检查是否只定义了几个变量中的一个
EN

Stack Overflow用户
提问于 2018-08-16 09:38:07
回答 2查看 722关注 0票数 0

我想检查是否只定义了几个变量中的一个。似乎Ansible条件不支持xor。到目前为止,我发现最好的方法是这样的:

代码语言:javascript
复制
  - fail:
      msg: "var1 xor var2 xor var3 must be defined"
    when: (var1 is defined | ternary(1, 0) + var2 is defined | ternary(1, 0) + var3 is defined | ternary(1, 0)) != 1

字典版本:

代码语言:javascript
复制
(item.get('key1') | ternary(1, 0) + item.get('key2') | ternary(1, 0) + thedict.get('key3') | ternary(1, 0)) != 1

有更简单的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-17 09:44:35

这应该算得更简单:

代码语言:javascript
复制
- fail:
    msg: "only one of var1, var2, or var3 must be defined"
  when: checklist | select() | list | length != 1
  vars:
    checklist:
      - "{{ var1 is defined }}"
      - "{{ var2 is defined }}"
      - "{{ var3 is defined }}"
票数 1
EN

Stack Overflow用户

发布于 2018-08-17 05:55:51

在Ansible 2.6中,没有更简单的IMHO方法。要测试条件列表(请参见群论检验),只有 (list为all)和OR (list为any)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51873965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档