Hello. It seems clear now.
Appreciate your reply. Regards Javier On Monday, April 18, 2022 at 4:10:01 PM UTC+2 [email protected] wrote: > You may be reading it as you would a single threaded program, but it would > be closer to a program with a thread *per host*. Your command line: > > $ ansible-playbook -i ./environments/CD-5525/hosts.yml main_CD-5525.yml > -bK > > runs (apparently) on three hosts: xxx, yyy, and zzz. When it's all over, > the tasks that get executed would be exactly the same if you had run these > three commands: > > $ ansible-playbook -i ./environments/CD-5525/hosts.yml main_CD-5525.yml > -bK --limit=xxx > $ ansible-playbook -i ./environments/CD-5525/hosts.yml main_CD-5525.yml > -bK --limit=yyy > $ ansible-playbook -i ./environments/CD-5525/hosts.yml main_CD-5525.yml > -bK --limit=zzz > > The order of each task on each node would be different of course, but the > end result is the same. > > If the first task in your example ("Starts the first node of the cluster > in bootstrap mode") failed on one node, it would not affect the running of > any tasks on other nodes. This is true regardless of these tasks being in a > block. In fact, depending on the strategy you're running under (see > https://docs.ansible.com/ansible/latest/user_guide/playbooks_strategies.html) > the other nodes could complete the entire block before the first node even > starts. > > > On Monday, April 18, 2022 at 6:58:41 AM UTC-4 [email protected] wrote: > >> 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/b99f5c5e-3b53-48f8-a98c-265d901188c2n%40googlegroups.com.
