Reputation: 91
I have the following output in stdout of register output:
“server1,Running\nserver2,Running\nserver3,Not Activated\nserver4,Not Activated”
I want to create a list of just the Not Activated server:
vmoff:
- name: server3
- name: server4
Also I have following output in stdout:
“server1,0.5\nserver2,0.7\nserver3,1.0\nserver4,0.5\n”
I want to turn into the following:
vmlist:
- name: server1
proc: 0.5
- name: server2
proc: 0.7
- name: server3
proc: 1.0
- name: server4
proc: 0.5
Upvotes: 2
Views: 3876
Reputation: 68004
Given the registered stdout
reg:
stdout: server1,Running\nserver2,Running\nserver3,Not Activated\nserver4,Not Activated
Create a dictionary
vm_all: "{{ dict(reg.stdout|
split('\\n')|
select()|
map('split', ',')|
list) }}"
gives
vm_all:
server1: Running
server2: Running
server3: Not Activated
server4: Not Activated
Now, select the not activated servers and map the attribute name
vm_not_activated: "{{ vm_all|dict2items(key_name='name', value_name='status')|
selectattr('status', 'eq', 'Not Activated')|
map(attribute='name')|
list }}"
gives the list
vm_not_activated:
- server3
- server4
If you need the dictionaries, add the filter community.general.dict_kv to the pipe
vm_not_activated: "{{ vm_all|dict2items(key_name='name', value_name='status')|
selectattr('status', 'eq', 'Not Activated')|
map(attribute='name')|
map('community.general.dict_kv', 'name')|
list }}"
gives
vm_not_activated:
- name: server3
- name: server4
Similarly, given the registered stdout
reg:
stdout: server1,0.5\nserver2,0.7\nserver3,1.0\nserver4,0.5\n
Create a dictionary
vmdict: "{{ dict(reg.stdout|
split('\\n')|
select()|
map('split', ',')|
list) }}"
gives
vmdict:
server1: '0.5'
server2: '0.7'
server3: '1.0'
server4: '0.5'
Now, create the list
vmlist: "{{ vmdict|dict2items(key_name='name', value_name='proc') }}"
gives
vmlist:
- name: server1
proc: '0.5'
- name: server2
proc: '0.7'
- name: server3
proc: '1.0'
- name: server4
proc: '0.5'
Upvotes: 1