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.