检查是否仅定义了多个Ansible变量之一

时间:2018-08-16 09:38:08

标签: ansible

我想检查是否仅定义了多个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

有没有更简单的方法?

2 个答案:

答案 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 列表是任意)。