如何将字符从stdout分离为变量



我在stdout寄存器输出中有以下输出:

"服务器1,正在运行的服务器2,正在运行\n服务器3,未激活\n服务器4,未激活">

我只想创建一个未激活服务器的列表:

vmoff:
- name: server3
- name: server4

此外,我在stdout中有以下输出:

"服务器1,0.5\n服务器2,0.7\n服务器3,1.0\n服务器4,0.5\n">

我想变成以下内容:

vmlist:
- name: server1
proc: 0.5
- name: server2
proc: 0.7
- name: server3
proc: 1.0
- name: server4
proc: 0.5

给定已注册的stdout

reg:
stdout: server1,Runningnserver2,Runningnserver3,Not Activatednserver4,Not Activated

创建字典

vm_all: "{{ dict(reg.stdout|
split('\n')|
select()|
map('split', ',')|
list) }}"

给出

vm_all:
server1: Running
server2: Running
server3: Not Activated
server4: Not Activated

现在,选择未激活的服务器并映射属性名称

vm_not_activated: "{{ vm_all|dict2items(key_name='name', value_name='status')|
selectattr('status', 'eq', 'Not Activated')|
map(attribute='name')|
list }}"

给出列表

vm_not_activated:
- server3
- server4

如果您需要字典,请将过滤器community.general.dict_kv添加到管道

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 }}"

给出

vm_not_activated:
- name: server3
- name: server4

类似地,给定已注册的标准输出

reg:
stdout: server1,0.5nserver2,0.7nserver3,1.0nserver4,0.5n

创建字典

vmdict: "{{ dict(reg.stdout|
split('\n')|
select()|
map('split', ',')|
list) }}"

给出

vmdict:
server1: '0.5'
server2: '0.7'
server3: '1.0'
server4: '0.5'

现在,创建列表

vmlist: "{{ vmdict|dict2items(key_name='name', value_name='proc') }}"

给出

vmlist:
- name: server1
proc: '0.5'
- name: server2
proc: '0.7'
- name: server3
proc: '1.0'
- name: server4
proc: '0.5'

最新更新