这是我写的Ansible剧本的一部分。
- name: Check OS Version
fail:
msg: "{{ ansible_distribution }} {{ ansible_distribution_version }} is not compatible with this role"
when: ansible_distribution != 'Ubuntu' and ansible_distribution_release != 'trusty'
我正在使用ubuntu / trusty的Vagrant机器上运行该剧本,但剧本跳过相关任务:
# ansible-playbook /tmp/project/deploy/main.yml
[WARNING]: provided hosts list is empty, only localhost is available
PLAY [Deploy] ******************************************************************
TASK [setup] *******************************************************************
ok: [localhost]
TASK [install-docker : Check OS Version] ***************************************
skipping: [localhost]
# lsb_release -a:
root@vagrant-ubuntu-trusty-64:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.5 LTS
Release: 14.04
Codename: trusty
跳过的原因是什么?
答案 0 :(得分:3)
我在一台Ubuntu / trusty的Vagrant机器上运行该剧本,但剧本跳过了相关的任务:
when: ansible_distribution != 'Ubuntu' and ansible_distribution_release != 'trusty'
这不是一个"跳过的任务"。任务本身已执行,when
中的条件将根据此结果进行评估:执行指定的模块(fail
case)跳过。
这种行为似乎完全符合你的意图。
只有在第一个条件为真且第二个条件为真时才执行任务(简化when: true and true
)。
由于机器是ubuntu / trusty:
ansible_distribution
等于Ubuntu
,因此第一个条件(!=
"不等于")为false ansible_distribution_release
等于trusty
,因此第二个条件(!=
"不等于")为false 在这种情况下,两个条件都是假的(when: false and false
),整个表达式(when: false
)也是假的,因此任务会跳过。
如果您希望ubuntu / trusty上的任务失败(这是fail
模块的目的),您需要将条件更改为:
when: ansible_distribution == 'Ubuntu' and ansible_distribution_release == 'trusty'