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.