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 wrote:
> On Fri, 22 Nov 2019 18:43:31 +0100
> Dick Visser 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 ansible-project+unsubscr...@googlegroups.com.
> 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 ansible-project+unsubscr...@googlegroups.com.
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/CAB2Y44aogCGKcO-iNxmj7wuBujKd13JHUY1bAW7Jf6MGFZndGw%40mail.gmail.com.