例えば、以下のようなplaybookを作成して、ansibleに --check
オプションを付与して実行すると
- name: add repo centos 6
tags:
- install-zabbix
yum:
name: http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm
state: present
- name: install lastest zabbix centos 6
tags:
- install-zabbix
yum: name=zabbix-agent state=latest
以下のようにdry-runでは実際にzabbixのリポジトリはインストールされないために、yumインストールの段階で
No package matching 'zabbix-agent' found available, installed or updated
というエラーが発生してdry-runがストップしてしまう。
TASK [zabbix : add repo centos 6] **********************************************
changed: [ad-ssl6] => {"changed": true, "changes": {"installed": ["/tmp/tmpRmWHYC/zabbix-release-2.4-1
.el6.noarch.rpm"]}, "results": []}
TASK [zabbix : install lastest zabbix centos 6] ********************************
fatal: [ad-ssl6]: FAILED! => {"changed": false, "failed": true, "msg": "No package matching 'zabbix-ag
ent' found available, installed or updated", "rc": 126, "results": ["No package matching 'zabbix-agent
' found available, installed or updated"]}
そこで、以下を参考にして、when
と ignore_errors
を用いてdry-runがストップしないようにする
http://docs.ansible.com/ansible/playbooks_checkmode.html
- name: add repo centos 6 (this task will be skipped in check mode)
tags:
- install-zabbix
yum:
name: http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm
state: present
when: not ansible_check_mode
- name: install lastest zabbix centos 6 (this task will be skipped in check mode)
tags:
- install-zabbix
yum: name=zabbix-agent state=latest
ignore_errors: "{{ ansible_check_mode }}"
zabbixのリポジトリインストールの部分で、
when: not ansible_check_mode
でdry-runの判断をさせ、
dry-runの場合は実行せず、それ以外だと実行するように設定。
yumのインストール部分ではdry-run時は必ずエラーが出るため
ignore_errors: "{{ ansible_check_mode }}"
で、dry-run時に発生したエラーの場合は無視するように設定を行う。
そうすると、dry-run実行時以下のようにリポジトリのインストールはスキップされ、
yumインストール時のエラーは無視されるようになり、dry-runが滞りなく進むようになる。
TASK [zabbix : add repo centos 6] **********************************************
skipping: [ad-ssl6] => {"changed": false, "skip_reason": "Conditional check failed", "skipped": true}
TASK [zabbix : install lastest zabbix centos 6] ********************************
fatal: [ad-ssl6]: FAILED! => {"changed": false, "failed": true, "msg": "No package matching 'zabbix-agent' found available, installed or updated", "rc": 126, "results": ["No package matching 'zabbix-agent' found available, installed or updated"]}
...ignoring