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: [email protected]
        is_active: true
      - name: "Bob McBobson"
        email: [email protected]
        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: [email protected]
     is_active: true
   - name: "Mary Nurk"
     is_active: true

x:
     - name: Fred Nurk"
    email: [email protected]
     is_active: true
   - name: "Bob McBobson"
     email: [email protected]
     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 <[email protected]> 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 [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
> <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  : [email protected]
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 [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/CA%2B%2BT08Qr0n5wD%2BipcLeirHJwC0CDJo1uLUU5QSSzExxZsnyT6w%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to