On Tuesday, December 18, 2018 at 2:47:30 AM UTC-5, Karl Auer wrote:
>
> I am trying to build a list of names from a list of objects. It works 
> fine, but some of the objects don't have a name. No problem, I use the 
> default() filter to set those elements of my list to empty strings, like 
> this:
>    
> # Build a list of names from a list of things
> - set_fact:
>      names: "{{ names |default([]) + [ item.name |default('') ] }}"
>   with_items: "{{ things }}"
>
> This got me, as expected, this result (because at the moment, my test list 
> of things has two items, and neither has a name attribute):
>
> ok: [localhost] => {
>     "names": [
>         "", 
>         ""
>     ]
> }
>
> Now, how can I remove those empty strings from my list? I have read 
> numerous articles that mention "rejectattr", but I don't understand how 
> to use it.
>

Well, the easiest way is not to put them in there in the first place.

- set_fact:
    names: "{{ things | selectattr('name', 'defined') | 
map(attribute='name') | list }}"
 

>  
>
I tried this:
>
> # Remove any empty elements from the list of instance profile names
> - set_fact:
>      names: "{{ names |default([]) |reject('equalto', '') }}"
>
> And got this mystifying  output:
>
> ok: [localhost] => {
>     "names": "<generator object _select_or_reject at 0x7f4ecd9c9aa0>"
> }
>

map(), select(), and friends return generators; use the list filter (as 
I've done above) to convert it to a list.

PS: Pointers to USEFUL, COMPLETE examples of how to use rejectattr(), 
> reject() and so on would be useful too. All the examples I have found seem 
> to assume a huge amount of knowledge I don't have, or are tiny fragments of 
> code...
>

They're very simple filters, so useful, complete examples are going to *be* 
tiny fragments of 
code. http://jinja.pocoo.org/docs/latest/templates/#rejectattr

-- 
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/28329a51-bb25-4efc-be11-990ce9f7e9a1%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to