我想检查是否仅定义了多个Ansible变量之一。似乎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
有没有更简单的方法?
答案 0 :(得分:1)
这应该算是更简单:
- 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 :(得分:0)
从Ansible 2.6开始,恕我直言没有简单的方法。要测试条件的 list (请参阅Group theory tests),只有 AND ( list全部为)和 OR (列表是任意)。