如何将字符从 stdout 分离到变量中

How to separate character from stdout into variables

我在寄存器输出的标准输出中有以下输出:

“server1,Running\nserver2,Running\nserver3,Not Activated\nserver4,Not Activated”

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

vmoff:
  - name: server3
  - name: server4

我在标准输出中也有以下输出:

“server1,0.5\nserver2,0.7\nserver3,1.0\nserver4,0.5\n”

我想变成下面的:

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

给定注册的标准输出

reg:
  stdout: server1,Running\nserver2,Running\nserver3,Not Activated\nserver4,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

现在,select未激活的服务器和映射属性名称

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.5\nserver2,0.7\nserver3,1.0\nserver4,0.5\n

创建字典

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'