Hi,
I want to make sure I am going about this in the cleanest and easiest way
possible. Maybe someone else has done this before or has some better ideas
for me :)?
When a service is restarted i.e. "service networking restart", I want to
check for stderr and stdout to make sure there were no issues with the
ansible push.
I am using "nested" handlers to accomplish this atm:
------------------------------
Here is the Playbook/Handlers:
---
- hosts: spine1
user: root
gather_facts: false
tasks:
- name: copy interfaces file
copy: src=interfaces dest=/etc/network/interfaces
notify: reload networking
- name: copy quagga file
copy: src=quagga dest=/etc/quagga/Quagga.conf
notify: reload quagga
handlers:
- name: reload networking
shell: "service networking reload"
register: networking_reload
*notify*: print networking reload error
changed_when: "networking_reload.stderr != ''"
- name: reload quagga
shell: "service quagga reload"
register: quagga_reload
*notify*: print quagga reload error
changed_when: "quagga_reload.stderr != ''"
- name: print networking reload error
debug: msg="{{networking_reload.stderr}}"
when: networking_reload.stderr is defined
failed_when: "networking_reload.stderr is defined"
- name: print quagga reload error
debug: msg="{{quagga_reload.stderr}}"
when: quagga_reload.stderr is defined
failed_when: "quagga_reload.stderr is defined"
---------------
Tested scenerios:
*config file is different with error:*
root@wbench:~/consulting/testing# ansible-playbook test.yml --diff
PLAY [spine1]
*****************************************************************
TASK: [copy interfaces file]
**************************************************
changed: [spine1]
TASK: [copy quagga file]
******************************************************
ok: [spine1]
NOTIFIED: [reload networking]
*************************************************
changed: [spine1]
NOTIFIED: [print networking reload error]
*************************************
failed: [spine1] => {"failed": true, "failed_when_result": true,
"verbose_always": true}
msg: error: /etc/network/interfaces: iface swp52: unsupported keyword
(this_should_not_be_here,_it_makes_no_sense._GAH)
FATAL: all hosts have already failed -- aborting
*config file is different with no error*
root@wbench:~/consulting/testing# ansible-playbook test.yml --diff
PLAY [spine1]
*****************************************************************
TASK: [copy interfaces file]
**************************************************
changed: [spine1]
TASK: [copy quagga file]
******************************************************
ok: [spine1]
NOTIFIED: [reload networking]
*************************************************
ok: [spine1]
*config file is the same with error:*
(no change to handler isn't called) (only way around this is to ifreload on
every run)
*config file is the same with no error:*
root@wbench:~/consulting/testing# ansible-playbook test.yml --diff
PLAY [spine1]
*****************************************************************
TASK: [copy interfaces file]
**************************************************
ok: [spine1]
TASK: [copy quagga file]
******************************************************
ok: [spine1]
------------------------------------------------------------------------------------------------------------------------------------
It looks like the service module does not actually return stdout/stderr.
Here is a run using the service module and just printing the returned var:
ok: [spine1] => {
"var": {
"networking_reload": {
"changed": true,
"invocation": {
"module_args": "name=networking state=reloaded",
"module_name": "service"
},
"name": "networking",
"state": "started"
}
}
}
--
You received this message because you are subscribed to the Google Groups
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/5d0ab26d-76d4-4035-850b-8468e52d4bb2%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.