Tôi có nhiệm vụ sau đây trong một playbook Tôi đang viết (kết quả liệt kê bên cạnh báo cáo kết quả debug trong <>):Ansible "khi biến == true" không hành xử như mong đợi
- debug: var=nrpe_installed.stat.exists <true>
- debug: var=force_install <true>
- debug: var=plugins_installed.stat.exists <true>
- name: Run the prep
include: prep.yml
when: (nrpe_installed.stat.exists == false or plugins_installed.stat.exists == true or force_install == true)
tags: ['prep']
- debug: var=nrpe_installed.stat.exists <true>
- debug: var=force_install <true>
- debug: var=force_nrpe_install <false>
- name: Install NRPE
include: install-nrpe.yml
when: (nrpe_installed.stat.exists == false or force_install == true or force_nrpe_install == true)
tags: ['install_nrpe']
vars:
nrpe_url: 'http://url.goes.here'
nrpe_md5: 3921ddc598312983f604541784b35a50
nrpe_version: 2.15
nrpe_artifact: nrpe-{{ nrpe_version }}.tar.gz
nagios_ip: {{ nagios_ip }}
config_dir: /home/ansible/config/
Và Tôi đang chạy nó với lệnh sau đây:
ansible-playbook install.yml -i $invFile --extra-vars="hosts=webservers force_install=True"
đầu tiên bao gồm chạy, nhưng bỏ qua thứ hai với sản lượng này:
skipping: [server1] => {"changed": false, "skip_reason": "Conditional check failed", "skipped": true}
Tôi bị ấn tượng rằng việc kiểm tra có điều kiện phải được chuyển cho tất cả chúng là force_install == true
đánh giá là true
sẽ làm cho toàn bộ số when
được đánh giá là đúng (vì đó là một chuỗi 'HOẶC').
Làm cách nào để có thời điểm chạy khi các biến được đặt thích hợp?
Edit:
Thay đổi thứ hai khi cho Install NRPE
bao gồm các công trình sau đây, nhưng không giải thích lý do tại sao một trong những khác, Run the prep
chạy một cách thích hợp:
làm việc:
when: (not nrpe_installed.stat.exists or force_install or force_nrpe_install)
Cũng hoạt động:
when: (nrpe_installed.stat.exists == false or plugins_installed.stat.exists == true or force_install == true)
Không làm việc:
when: (nrpe_installed.stat.exists == false or force_install == true or force_nrpe_install == true)
Các cắt ngắn đầu ra (bản sao loại bỏ) trong đó phần cụ thể của vở kịch là:
TASK [debug] *******************************************************************
ok: [server2] => {
"nrpe_installed.stat.exists": true
}
TASK [debug] *******************************************************************
ok: [server2] => {
"plugins_installed.stat.exists": true
}
TASK [debug] *******************************************************************
ok: [server2] => {
"force_install": true
}
TASK [Run the prep] ************************************************************
included: /tasks/nrpe-install/prep.yml for server2, server3, server4, server5, server6, server7
TASK [Prep and configure for installation | Install yum packages] **************
ok: [server6] => (item=[u'gcc', u'glibc', u'glibc-common', u'gd', u'gd-devel', u'make', u'net-snmp', u'openssl-devel', u'unzip', u'tar', u'gzip', u'xinetd']) => {"changed": false, "item": ["gcc", "glibc", "glibc-common", "gd", "gd-devel", "make", "net-snmp", "openssl-devel", "unzip", "tar", "gzip", "xinetd"], "msg": "", "rc": 0, "results": ["gcc-4.1.2-55.el5.x86_64 providing gcc is already installed", "glibc-2.5-123.el5_11.3.i686 providing glibc is already installed", "glibc-common-2.5-123.el5_11.3.x86_64 providing glibc-common is already installed", "gd-2.0.33-9.4.el5_4.2.x86_64 providing gd is already installed", "gd-devel-2.0.33-9.4.el5_4.2.i386 providing gd-devel is already installed", "make-3.81-3.el5.x86_64 providing make is already installed", "net-snmp-5.3.2.2-20.el5.x86_64 providing net-snmp is already installed", "openssl-devel-0.9.8e-40.el5_11.x86_64 providing openssl-devel is already installed", "unzip-5.52-3.el5.x86_64 providing unzip is already installed", "tar-1.15.1-32.el5_8.x86_64 providing tar is already installed", "gzip-1.3.5-13.el5.centos.x86_64 providing gzip is already installed", "xinetd-2.3.14-20.el5_10.x86_64 providing xinetd is already installed"]}
TASK [Prep and configure for installation | Make nagios group] *****************
ok: [server2] => {"changed": false, "gid": 20002, "name": "nagios", "state": "present", "system": false}
TASK [Prep and configure for installation | Make nagios user] ******************
ok: [server6] => {"append": false, "changed": false, "comment": "User for Nagios NRPE", "group": 20002, "home": "/home/nagios", "move_home": false, "name": "nagios", "shell": "/bin/bash", "state": "present", "uid": 20002}
TASK [debug] *******************************************************************
ok: [server2] => {
"nrpe_installed.stat.exists": true
}
TASK [debug] *******************************************************************
ok: [server2] => {
"force_install": true
}
TASK [debug] *******************************************************************
ok: [server2] => {
"force_nrpe_install": false
}
TASK [Install NRPE] ************************************************************
skipping: [server2] => {"changed": false, "skip_reason": "Conditional check failed", "skipped": true}
không '== true' dôi dư? –
Phải, bạn có thể bỏ qua điều đó tất nhiên. 'force_install | default (false) | bool' – udondan
Và vì' None', 'False',' 0' và '" "' (chuỗi trống) là các giá trị sai và các chuỗi không trống là các giá trị đúng, bạn thường có thể bỏ qua chuyển đổi 'bool' và chỉ nói ví dụ 'force_install | mặc định (False)'. – akaihola