【发布时间】:2020-02-17 18:46:51
【问题描述】:
我想像这样获取按master分组的桥接接口列表:
brv100:
- vnet0
- eth0
brv101:
- vnet1
- eth1
我想使用 shell 命令的原生 json 输出。 我唯一能做的就是获得预定义数量的接口,如下所示:
- hosts: localhost
gather_facts: no
tasks:
- shell:
cmd: ip -details -pretty -json link show type bridge
register: list_bridges
- set_fact:
bridges: "{{ list_bridges.stdout }}"
- debug:
msg: "{{ bridges | map(attribute='ifname') | list}}"
- name: get json
shell:
cmd: ip -details -pretty -json link show master "{{ifname}}"
with_items: "{{bridges | map(attribute='ifname') | list}}"
loop_control:
loop_var: ifname
register: list_interfaces
- set_fact:
interfaces: "{{ list_interfaces.results | map(attribute='stdout') | list }}"
- set_fact:
toto: "{{interfaces.1}} + {{interfaces.2}}"
- debug:
msg: "{{toto | map(attribute='ifname')|list}}"
现在如果我想对循环做同样的事情:
- set_fact:
toto: " {{item|default([])}}+ {{ item |default([])}}.{{idx}} "
loop: "{{interfaces}}"
loop_control:
label: "{{item}}"
index_var: idx
- debug: var=toto
结果似乎不是列表列表,而是字符串列表,我无法通过简单的调试提取“ifname”值
- debug:
msg: "{{toto | map(attribute='ifname')|list}}"
我应该怎么做才能从 json 原生输出中受益并获得桥接接口的简单列表(就像以前使用的 brctl show 一样)?
【问题讨论】: