Hello.
Thx. for your reply.
Changed the IPs as suggested. Yes I see it easier.
What I see from the execution above is, after the 'force a failure' the
debug task is also executed. I understood the rescue section should be
executed just after the failure, instead of any other task.
Perhaps I misunderstood this part.
> ansible-playbook -i ./environments/CD-5525/hosts.yml main_CD-5525.yml -bK
BECOME password:
PLAY [Start MySql cluster databases]
***********************************************************************************************
TASK [CD-5525 : debug]
*************************************************************************************************************
ok: [xxx] => {
"msg": "I execute normally"
}
ok: [yyy] => {
"msg": "I execute normally"
}
ok: [zzz] => {
"msg": "I execute normally"
}
TASK [CD-5525 : i force a failure]
*************************************************************************************************
skipping: [yyy]
skipping: [zzz]
fatal: [xxx]: FAILED! => {"ansible_facts":
{"discovered_interpreter_python": "/usr/bin/python3"}, "changed": true,
"cmd": ["/bin/false"], "delta": "0:00:00.002018", "end": "2022-04-18
06:41:39.602367", "msg": "non-zero return code", "rc": 1, "start":
"2022-04-18 06:41:39.600349", "stderr": "", "stderr_lines": [], "stdout":
"", "stdout_lines": []}
TASK [CD-5525 : debug]
*************************************************************************************************************
ok: [yyy] => {
"msg": "I never execute, due to the above task failing, :-("
}
ok: [zzz] => {
"msg": "I never execute, due to the above task failing, :-("
}
TASK [CD-5525 : debug]
*************************************************************************************************************
ok: [xxx] => {
"msg": "I caught an error"
}
TASK [CD-5525 : i force a failure in middle of recovery! >:-)]
*********************************************************************
fatal: [xxx]: FAILED! => {"ansible_facts":
{"discovered_interpreter_python": "/usr/bin/python3"}, "changed": true,
"cmd": ["/bin/false"], "delta": "0:00:00.002136", "end": "2022-04-18
06:41:43.100661", "msg": "non-zero return code", "rc": 1, "start":
"2022-04-18 06:41:43.098525", "stderr": "", "stderr_lines": [], "stdout":
"", "stdout_lines": []}
PLAY RECAP
*************************************************************************************************************************
xxx : ok=2 changed=0 unreachable=0 failed=1
skipped=0 rescued=1 ignored=0
zzz : ok=2 changed=0 unreachable=0 failed=0
skipped=1 rescued=0 ignored=0
yyy : ok=2 changed=0 unreachable=0 failed=0
skipped=1 rescued=0 ignored=0
In my example, if the first task (Starts the fist node ...) fails, should
it continue with the second task (Start the rest of nodes) instead of going
to the rescue block ?
block:
- name: Starts the first node of the cluster in bootstrap mode
shell: /etc/init.d/mysql bootstrap-pxc
when: inventory_hostname == groups.CD5525[0]
become: yes
register: return_out
- name: Start the rest of nodes
systemd:
state: started
name: mysql
when: inventory_hostname != groups.CD5525[0]
become: yes
register: screen_out
Thank you
Javier
On Monday, April 18, 2022 at 12:14:37 PM UTC+2 [email protected] wrote:
> > […] but the example above shows this does not happen.
> What, exactly, in the posted output leads you to that conclusion?
> What did you expect instead?
> It appears to me to be exactly the expected output - in spite of your
> having changed all three host names to "xxx". (Which, frankly, didn't make
> understanding your output any easier; maybe use "xxx", "yyy", and "zzz"
> next time? And, name your tasks.)
>
> On Monday, April 18, 2022 at 5:01:42 AM UTC-4 [email protected] wrote:
>
>> Hello again.
>>
>> I'm still trying to understand this issue ...
>> I played with the example that comes with the Ansible documentation:
>>
>> - name: Attempt and graceful roll back demo
>> block:
>> - debug:
>> msg: 'I execute normally'
>>
>> - name: i force a failure
>> command: /bin/false
>> when: inventory_hostname == groups.CD5525[0] <<<--- *I added
>> this line to force the failure only in the first node*
>>
>> - debug:
>> msg: 'I never execute, due to the above task failing, :-('
>> rescue:
>> - debug:
>> msg: 'I caught an error'
>> - name: i force a failure in middle of recovery! >:-)
>> command: /bin/false
>> - debug:
>> msg: 'I also never execute :-('
>> always:
>> - debug:
>> msg: "This always executes"
>>
>> *And this is the output:*
>>
>> > ansible-playbook -i ./environments/CD-5525/hosts.yml main_CD-5525.yml
>> -bK
>> BECOME password:
>>
>> PLAY [Start MySql cluster databases]
>> ***********************************************************************************************
>>
>> TASK [CD-5525 : debug]
>> *************************************************************************************************************
>> ok: [xxx] => {
>> "msg": "I execute normally"
>> }
>> ok: [xxx] => {
>> "msg": "I execute normally"
>> }
>> ok: [xxx] => {
>> "msg": "I execute normally"
>> }
>>
>> TASK [CD-5525 : i force a failure]
>> *************************************************************************************************
>> skipping: [xxx]
>> skipping: [xxx]
>> fatal: [xxxx]: FAILED! => {"ansible_facts":
>> {"discovered_interpreter_python": "/usr/bin/python"}, "changed": true,
>> "cmd": ["/bin/false"], "delta": "0:00:00.001826", "end": "2022-04-18
>> 04:43:40.809305", "msg": "non-zero return code", "rc": 1, "start":
>> "2022-04-18 04:43:40.807479", "stderr": "", "stderr_lines": [], "stdout":
>> "", "stdout_lines": []}
>>
>> TASK [CD-5525 : debug]
>> *************************************************************************************************************
>> ok: [xxxx] => {
>> "msg": "I never execute, due to the above task failing, :-("
>> }
>> ok: [xxx] => {
>> "msg": "I never execute, due to the above task failing, :-("
>> }
>>
>> TASK [CD-5525 : debug]
>> *************************************************************************************************************
>> ok: [xxx] => {
>> "msg": "I caught an error"
>> }
>>
>> TASK [CD-5525 : i force a failure in middle of recovery! >:-)]
>> *********************************************************************
>> fatal: [xxx]: FAILED! => {"ansible_facts":
>> {"discovered_interpreter_python": "/usr/bin/python"}, "changed": true,
>> "cmd": ["/bin/false"], "delta": "0:00:00.001778", "end": "2022-04-18
>> 04:43:44.077290", "msg": "non-zero return code", "rc": 1, "start":
>> "2022-04-18 04:43:44.075512", "stderr": "", "stderr_lines": [], "stdout":
>> "", "stdout_lines": []}
>>
>> TASK [CD-5525 : debug]
>> *************************************************************************************************************
>> ok: [xxx] => {
>> "msg": "This always executes"
>> }
>> ok: [xxx] => {
>> "msg": "This always executes"
>> }
>> ok: [xxx] => {
>> "msg": "This always executes"
>> }
>>
>> PLAY RECAP
>> *************************************************************************************************************************
>> xxx : ok=3 changed=0 unreachable=0 failed=1
>> skipped=0 rescued=1 ignored=0
>> xxx : ok=3 changed=0 unreachable=0 failed=0
>> skipped=1 rescued=0 ignored=0
>> xxx : ok=3 changed=0 unreachable=0 failed=0
>> skipped=1 rescued=0 ignored=0
>>
>>
>> What I understand is as soon as the first error occurs the rescue section
>> should be executed but the example above shows this does not happen.
>> Anyone could explain me where the issue is please ?
>>
>> Appreciate your help.
>> Javier
>>
>> On Friday, April 8, 2022 at 11:49:33 AM UTC+2 Fco. Javier Lopez wrote:
>>
>>> Hello guys !
>>>
>>> I have the following role created:
>>>
>>> - name: Recover
>>> block:
>>> - name: Starts the first node of the cluster in bootstrap mode
>>> shell: /etc/init.d/mysql bootstrap-pxc
>>> when: inventory_hostname == groups.CD5525[0]
>>> become: yes
>>> register: return_out
>>>
>>> - name: Start the rest of nodes
>>> systemd:
>>> state: started
>>> name: mysql
>>> when: inventory_hostname != groups.CD5525[0]
>>> become: yes
>>> register: screen_out
>>>
>>> - name: Stop the bootstrapped node to restart it in normal state
>>> shell: service mysql bootstrap-stop
>>> when: inventory_hostname == groups.CD5525[0]
>>> become: yes
>>> register: screen_out
>>>
>>> - name: Start the first node in normal status
>>> systemd:
>>> state: started
>>> name: mysql
>>> when: inventory_hostname == groups.CD5525[0]
>>> become: yes
>>> register: screen_out
>>>
>>> rescue:
>>> - name: Print when errors
>>> debug:
>>> msg: "Found an error, can not continue ! {{ansible_failed_task}}"
>>>
>>> any_errors_fatal: true
>>>
>>>
>>> I have three nodes.
>>> I need to control the failure on the first node but the rescue section
>>> is not executed until I receive failures from all the nodes.
>>>
>>> Went through the documentation and different posts but did not find a
>>> conclusion about how this works with more than one node or, perhaps, I'm
>>> doing something wrong.
>>>
>>> Your comments are welcome, thank you.
>>>
>>> This is the output:
>>>
>>> TASK [CD-5525 : Starts the first node of the cluster in bootstrap mode]
>>> ************************************************************
>>> skipping: [xxx.xx.xxx.xx]
>>> skipping: [xxx.xx.xxx.xx]
>>> fatal: [xxx.xx.xxx.xx]: FAILED! => {"ansible_facts":
>>> {"discovered_interpreter_python": "/usr/bin/python"}, "changed": true,
>>> "cmd": "/etc/init.d/mysql bootstrap-pxc", "delta": "0:00:10.059969", "end":
>>> "2022-04-08 04:45:07.890197", "msg": "non-zero return code", "rc": 1,
>>> "start": "2022-04-08 04:44:57.830228", "stderr": "", "stderr_lines": [],
>>> "stdout": " * Bootstrapping Percona XtraDB Cluster database server mysqld\n
>>> * The server quit without updating PID file (/var/run/mysqld/mysqld.pid).\n
>>> ...fail!", "stdout_lines": [" * Bootstrapping Percona XtraDB Cluster
>>> database server mysqld", " * The server quit without updating PID file
>>> (/var/run/mysqld/mysqld.pid).", " ...fail!"]}
>>>
>>> TASK [CD-5525 : Start the rest of nodes]
>>> *******************************************************************************************
>>> fatal: [xxx.xx.xxx.xx]: FAILED! => {"ansible_facts":
>>> {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false,
>>> "msg": "Unable to start service mysql: Job for mysql.service failed because
>>> the control process exited with error code.\nSee \"systemctl status
>>> mysql.service\" and \"journalctl -xe\" for details.\n"}
>>> fatal: [xxx.xx.xxx.xx]: FAILED! => {"ansible_facts":
>>> {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false,
>>> "msg": "Unable to start service mysql: Job for mysql.service failed because
>>> the control process exited with error code.\nSee \"systemctl status
>>> mysql.service\" and \"journalctl -xe\" for details.\n"}
>>>
>>> TASK [CD-5525 : Print when errors]
>>> *************************************************************************************************
>>> ok: [xxx.xx.xxx.xx] => {
>>> ...
>>> ...
>>>
>>
--
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 view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/466f3aba-f55e-445c-a00f-1bcc2db4e8d3n%40googlegroups.com.