Thanks, flowerysong.

I went with this:

- set_fact:
     names: []
- set_fact:
     names: "{{ names  + [ item.name ] }}"
  with_items: "{{ things |selectattr('name', 'defined') |list }}"

I want to have the list even if it is empty, that's why there are now two
set_fact calls.

As far as the examples being complete, I have to disagree. These are ALL
the examples for rejectattr() on the page you linked:

{{ users|rejectattr("is_active") }}{{ users|rejectattr("email", "none") }}

Unanswered questions:
- what is "is_active"?
- what is "email"?
- what is "none"?
- what is "users"?
- what are the results of using the two examples?

This filter (like most of the others) needs far more complete
documentation. It should provide a sample "users" variable, and sample
output for the two examples. It should describe clearly what each of the
possible parameters to the filter is.

I have no idea whether ANY of the following is correct:

I'm assuming that users is a structured list and that "is_active" and
"email" are attributes of the elements of that list, e.g.:

vars:
   users:
      - name: Fred Nurk"
        email: f...@example.com
        is_active: true
      - name: "Bob McBobson"
        email: b...@example.com
        is_active: false
      - name: "Mary Nurk"
        is_active: true

I'm also guessing that "none" is some sort of filter. It's described as a
"test" - where are these tests documented? There is no description of it or
link to other documentation, so I really have no idea. It may be selecting
users where the email address is the literal string value "none".

Give the above sample "users" variable, I am guessing that the expected
output of the two examples, if assigned to x, would be:

x:
   - name: "Fred Nurk"
     email: f...@example.com
     is_active: true
   - name: "Mary Nurk"
     is_active: true

x:
     - name: Fred Nurk"
    email: f...@example.com
     is_active: true
   - name: "Bob McBobson"
     email: b...@example.com
     is_active: false
Please don't just tell me I am free to write the documentation myself :-)
This is constructive criticism, not a complaint.

Regards, K.


On Tue, Dec 18, 2018 at 8:27 PM flowerysong <ezeki...@umich.edu> wrote:

> 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 ansible-project+unsubscr...@googlegroups.com.
> To post to this group, send email to ansible-project@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/28329a51-bb25-4efc-be11-990ce9f7e9a1%40googlegroups.com
> <https://groups.google.com/d/msgid/ansible-project/28329a51-bb25-4efc-be11-990ce9f7e9a1%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>


-- 
Karl Auer

Email  : ka...@2pisoftware.com
Website: http://2pisoftware.com

GPG/PGP : 958A 2647 6C44 D376 3D63 86A5 FFB2 20BC 0257 5816
Previous: F0AB 6C70 A49D 1927 6E05 81E7 AD95 268F 2AB6 40EA

-- 
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 ansible-project+unsubscr...@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/CA%2B%2BT08Qr0n5wD%2BipcLeirHJwC0CDJo1uLUU5QSSzExxZsnyT6w%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to