Thanks Martin ! 

But the issue still remains, the success_hosts group does not contain all 
the hosts that should be included ( I suspect this is a bug and will open 
an issue in the right place), so doing bid - success will not give you the 
right answer. 
Also, I control for failure with a variable, so those hosts who failed are 
still in the game. This is so if all hosts failed, the playbook will not 
abort and I was supposed to have all hosts in the failed group reported. 

On Tuesday, July 28, 2015 at 10:39:37 AM UTC-4, Martin Marcher wrote:
>
> How about this:
> debug: msg="Failed releases on - {{ groups['bids:!success_hosts' }}. 
> Success releases on  - {{ groups['success_hosts'] }} "
>
> Not sure about the syntax right now but basically:
> * You have a group of all hosts "bid"
> * You record all the hosts that are good (success hosts)
> * You output the inventory of "bid:!success_hosts" -- that is all hosts in 
> the bid group except for the ones that were successfull.
>
>
> Why is that necessary?
>
>
> AFAIK it's necessary because once a host is failed ansible will remove it 
> from the play (or even playbook?). But you can still access the group where 
> it originated from and just exclude all the hosts that were good. This way 
> you also need only one group and not 2 groups :)
>
> Someone with a greater understanding of ansible will probably cringe by 
> now and tell you all the stuff that I was stating falsely :)
>
> HTH,
> Martin
>
> On Mon, Jul 27, 2015 at 11:37 PM Offer Sharabi <[email protected] 
> <javascript:>> wrote:
>
>> Hi there,
>> So my task is quite simple, run a play against a group of hosts. Then , 
>> in the next play report which hosts completed the task successfully and 
>> which don't. I am using the group_by keyword for that, but without much 
>> success. 
>>
>> In more detail , 
>> I am running a deploy playbook against a large group of hosts ( called 
>> bid ) in one play where I also group each host by a boolean variable. 
>> In the next play (same playbook) I am trying to write to screen all hosts 
>> from each group. 
>>
>> This is how it is laid out: 
>>
>> play1: 
>> - name: group by already_failed
>>   group_by: key={{ (already_failed) | ternary('failed_hosts', 
>> 'success_hosts') }}
>>   tags:
>>     - release 
>>
>>
>> play2:
>> - name: set success and failed groups
>>   set_fact:
>>     failed_hosts="{{ groups['failed_hosts'] | default('None') }}"
>>     success_hosts="{{ groups['success_hosts'] | default('None') }}"
>>   run_once: True
>>   tags:
>>     - notification
>>     - release
>>
>> - name: log grouped hosts to screen
>>   debug: msg="Failed releases on - {{ failed_hosts }}. Success releases 
>> on  - {{ groups['success_hosts'] }} "
>>   run_once: True
>>   tags:
>>     - release
>>
>>
>>
>> When I run this task against 3 hosts and serial is 3 or more than this 
>> succeeds : 
>>
>> TASK: [set success and failed groups] 
>> ***************************************** 
>> ok: [54.yyy.32.xxx] => {"ansible_facts": {"failed_hosts": "None", 
>> "success_hosts": "['54.yyy.32.xxx', '54.yyy.32.xxx', '54.yyy.32.xxx']"}}
>>
>>
>> But when I run it with serial which is lower than the number of hosts, 
>> then the output only contains the first hosts in that group, e.g. 
>>
>> TASK: [set success and failed groups] 
>> ***************************************** 
>> ok: [54.yyy.32.xxx] => {"ansible_facts": {"failed_hosts": "None", 
>> "success_hosts": "['54.yyy.32.xxx', '54.yyy.32.xxx']"}}
>>
>>
>> So it looks like the newly created group when accessed from the 
>> group.succes_host is only aware of the first hosts that were set in it. 
>>
>> To make things more confusing, when I ran the second play against the 
>> newly created group, then ALL hosts were actually running it - meaning that 
>> the group actually contains all hosts, but not when accessed from the 
>> groups vars.
>>
>> TASK: [log grouped hosts to screen] 
>> ******************************************* 
>> ok: [54.yyy.32.xxx] => {
>>     "msg": "Failed releases on - None. Success releases on  - 
>> ['54.yyy.32.xxx', '54.yyy.32.xxx'] "
>> }
>> ok: [54.yyy.32.xxx] => {
>>     "msg": "Failed releases on - None. Success releases on  - 
>> ['54.yyy.32.xxx', '54.yyy.32.xxx'] "
>> }
>> ok: [54.yyy.32.xxx] => {
>>     "msg": "Failed releases on - None. Success releases on  - 
>> ['54.yyy.32.xxx', '54.yyy.32.xxx'] "
>> }
>>
>>
>> I got a sense that this is a bug, but would appreciate a second pair of 
>> eyes . 
>>
>> Any help will be much appreciated,
>> Thanks, 
>> Offer 
>>
>>  -- 
>> 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] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/ansible-project/60a226c5-fc87-48d0-b0fc-5bacf0b41ef3%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/ansible-project/60a226c5-fc87-48d0-b0fc-5bacf0b41ef3%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
> -- 
> -- 
> http://www.xing.com/profile/Martin_Marcher
> http://www.linkedin.com/in/martinmarcher
> Mobil: +43 / 660 / 62 45 103
> UID: ATU68801424
>

-- 
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/0843bcb0-534a-4fd9-9886-6262ac564363%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to