Hi

You can use the following method (sorry I don't have the playbook ready).

1. Run the upgrade on each host, ignore errors, but register the results
and store them in a file on the controller machine (you can also manually -
fail: once the error is registered for a given host)
2. Once all upgrades are done on all hosts - check the content of the
'results' files on the controller. If any of them show issues - run another
role to revert the changes.

kind regards
Pshem


On Sat, 18 Nov 2017 at 02:53 Aaron Falk <[email protected]> wrote:

> There is no possibility to run the rescue part for all hosts if one host
> fails. I'm working on my deployment for a website. I want to deploy the
> site to multiple hosts. If something fails for one host than all hosts
> should not be deployed. Therefore, a rollback on all hosts should happen.
> The configuration "any_errors_fatal" is not working for it.
>
> I am using ansible 2.4.1.0
>
> Here the steps to reproduce:
>
> - block:
>     - name: Update database schema
>       shell: cd '{{ ansible_web_deployment_webroot }}/releases/{{ 
> ansible_web_deployment_release }}' && php7.1 console.php 
> orm:schema-tool:update --force
>       when: inventory_hostname in groups['schema']
>     - name: Deployment
>       debug:
>         msg: 'Deploying'
>   rescue:
>     - name: Rollback
>       debug:
>         msg: 'Rollback'
>   any_errors_fatal: true
>
>
> Expected results:
>
> PLAY [test] 
> ********************************************************************
>
> TASK [Gathering Facts] 
> *********************************************************
> ok: [x1.example.com]
> ok: [x2.example.com]
> ok: [x3.example.com]
> ok: [x4.example.com]
>
> TASK [ansible_web_deployment : Update database schema] 
> *************************
> skipping: [x2.example.com]
> skipping: [x3.example.com]
> skipping: [x4.example.com]
> fatal: [x1.example.com]: FAILED! => {"changed": true, "cmd": "cd 
> '/var/www/x.example.com/releases/20171113081452' && php7.1 console.php 
> orm:schema-tool:update --force", "delta": "0:00:00.007578", "end": 
> "2017-11-13 08:15:05.709148", "failed": true, "msg": "non-zero return code", 
> "rc": 2, "start": "2017-11-13 08:15:05.701570", "stderr": "/bin/sh: 1: cd: 
> can't cd to /var/www/x.example.com/releases/20171113081452", "stderr_lines": 
> ["/bin/sh: 1: cd: can't cd to 
> /var/www/x.example.com/releases/20171113081452"], "stdout": "", 
> "stdout_lines": []}
>
> TASK [ansible_web_deployment : Rollback] *****************************
> ok: [x1.example.com] => {
>     "msg": "Rollback"
> }
> ok: [x2.example.com] => {
>     "msg": "Rollback"
> }
> ok: [x2.example.com] => {
>     "msg": "Rollback"
> }
> ok: [x4.example.com] => {
>     "msg": "Rollback"
> }
>
> PLAY RECAP 
> *********************************************************************
> 127.0.0.1                  : ok=2    changed=0    unreachable=0    failed=0
> x1.example.com : ok=2    changed=1    unreachable=0    failed=1
> x2.example.com : ok=2    changed=1    unreachable=0    failed=1
> x3.example.com : ok=2    changed=1    unreachable=0    failed=1
> x4.example.com : ok=2    changed=1    unreachable=0    failed=1
>
>
> Actual results:
>
> PLAY [test] 
> ********************************************************************
>
> TASK [Gathering Facts] 
> *********************************************************
> ok: [x1.example.com]
> ok: [x2.example.com]
> ok: [x3.example.com]
> ok: [x4.example.com]
>
> TASK [ansible_web_deployment : Update database schema] 
> *************************
> skipping: [x2.example.com]
> skipping: [x3.example.com]
> skipping: [x4.example.com]
> fatal: [x1.example.com]: FAILED! => {"changed": true, "cmd": "cd 
> '/var/www/x.example.com/releases/20171113081452' && php7.1 console.php 
> orm:schema-tool:update --force", "delta": "0:00:00.007578", "end": 
> "2017-11-13 08:15:05.709148", "failed": true, "msg": "non-zero return code", 
> "rc": 2, "start": "2017-11-13 08:15:05.701570", "stderr": "/bin/sh: 1: cd: 
> can't cd to /var/www/x.example.com/releases/20171113081452", "stderr_lines": 
> ["/bin/sh: 1: cd: can't cd to 
> /var/www/x.example.com/releases/20171113081452"], "stdout": "", 
> "stdout_lines": []}
>
> TASK [ansible_web_deployment : Restart services] *****************************
> ok: [x2.example.com] => {
>     "msg": "Deploying"
> }
> ok: [x2.example.com] => {
>     "msg": "Deploying"
> }
> ok: [x4.example.com] => {
>     "msg": "Deploying"
> }
>
> TASK [ansible_web_deployment : Rollback] *****************************
> ok: [x1.example.com] => {
>     "msg": "Rollback"
> })
>
> PLAY RECAP 
> *********************************************************************
> 127.0.0.1                  : ok=2    changed=0    unreachable=0    failed=0
> x1.example.com : ok=2    changed=1    unreachable=0    failed=1
> x2.example.com : ok=2    changed=1    unreachable=0    failed=0
> x3.example.com : ok=2    changed=1    unreachable=0    failed=0
> x4.example.com : ok=2    changed=1    unreachable=0    failed=0
>
>
> How can I achieve that all hosts go in rescue mode when a single host
> throws an exception?
>
> If you have a look at the Github issue 14024
> <https://github.com/ansible/ansible/issues/14024>, you'll see that this
> should work.
> Unfortunately I was not able to get it to work.
>
> Thank you for your input.
>
> --
> 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/661b16c0-7a35-45ed-9b8d-84eaaf836140%40googlegroups.com
> <https://groups.google.com/d/msgid/ansible-project/661b16c0-7a35-45ed-9b8d-84eaaf836140%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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/CAEaZiRUskC1U8Bx4Z6fZuVLn4z5mrs_kZ6gPr7Fb1HnU6fe2zg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to