Here is another way.  Although I like vladimir Botka's solution.

---

- hosts: localhost

  gather_facts: no



  vars:

    instances:

      - id: 1234

        type: web

      - id: 1456

        type: web

      - id: 1678

        type: web

      - id: 3456

        type: proxy

      - id: 2567

        type: proxy

      - id: 2566

        type: db

      - id: 4900

        type: db


  tasks:

  - name: Set Fact for proxy

    set_fact:

      new_proxy: "{{ new_proxy|default([]) + [ { 'id': item.id } ] }}"

    loop: "{{ instances }}"

    when: item.type == 'proxy'


  - name: set Fact for db

    set_fact:

      new_db: "{{ new_proxy|default([]) + [ {'id': item.id } ] }}"

    loop: "{{ instances }}"

    when: item.type == 'db'


  - name: set Fact for web

    set_fact:

      new_web: "{{ new_proxy|default([]) + [ {'id': item.id } ] }}"

    loop: "{{ instances }}"

    when: item.type == 'web'


  - name: Print facts

    debug:

      msg: "Web - {{ new_web }} - DB - {{ new_db }} - Proxy - {{ new_proxy
}}"



  - name: Final set fact

    set_fact:

      new_instances: "{{ new_instances|default([]) + [ {'db': new_db},
{'web': new_web}, {'proxy': new_proxy} ] }}"


  - name: Print final fact

    debug:

      var: new_instances

On Fri, Nov 22, 2019 at 1:12 PM Vladimir Botka <[email protected]> wrote:

> On Fri, 22 Nov 2019 18:43:31 +0100
> Dick Visser <[email protected]> wrote:
>
> > instances:
> >   - id: i-0fe48c061f6a323a0
> >     type: web
> >   - id: i-0403e39813defda31
> >     type: web
> >   - id: i-0442f13b528e5e1c6
> >     type: proxy
> >   - id: i-0ebea75d008becaa6
> >     type: proxy
> >   - id: i-067c5d985c194e036
> >     type: db
> >   - id: i-0679e87f06d0cf9a2
> >     type: db
> >
> > Which I'd like to turn into this structure:
> >
> > instances:
> >   web:
> >     - id: i-0fe48c061f6a323a0
> >     - id: i-0403e39813defda31
> >   proxy:
> >     - id: i-0442f13b528e5e1c6
> >     - id: i-0ebea75d008becaa6
> >   db:
> >     - id: i-067c5d985c194e036
> >     - id: i-0679e87f06d0cf9a2
>
> The task below does the job
>
>     - set_fact:
>         instances2: "{{ instances2|
>                         default({})|
>                         combine({item.0: item.1|
>                                  json_query('[].{id: id}')}) }}"
>       loop: "{{ instances|groupby('type') }}"
>
> Cheers,
>
>         -vlado
>
> --
> 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 view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/20191122201219.5d637e3c%40gmail.com
> .
>

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/CAB2Y44aogCGKcO-iNxmj7wuBujKd13JHUY1bAW7Jf6MGFZndGw%40mail.gmail.com.

Reply via email to