我想检查是否只定义了几个变量中的一个。似乎Ansible条件不支持xor。到目前为止,我发现最好的方法是这样的:
- 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字典版本:
(item.get('key1') | ternary(1, 0) + item.get('key2') | ternary(1, 0) + thedict.get('key3') | ternary(1, 0)) != 1有更简单的方法吗?
发布于 2018-08-17 09:44:35
这应该算得更简单:
- 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 }}"发布于 2018-08-17 05:55:51
在Ansible 2.6中,没有更简单的IMHO方法。要测试条件列表(请参见群论检验),只有和 (list为all)和OR (list为any)。
https://stackoverflow.com/questions/51873965
复制相似问题