使用ansible过滤输出
Filter output with ansible
所以我正在使用 ansible 连接到互连设备 运行 PicOS8。我正在发出具有以下输出的命令:
10.240.18.20,fe80::a94:efff:fe50:b516%eth0
fe80::a94:efff:fe71:d996%vlan.4,10.240.23.34
fe80::a94:efff:fe71:daa6%vlan.4,10.240.23.
这并不总是标准的,因为有时 ipv4 地址先于 ipv6,或者有时根本没有 ipv6。
我正在使用 ansible register 注册此输出,假设为 smm_output.
然后我想显示输出,只显示 ipv4 ip 地址(使用下面的剧本):
- debug:
msg: "{{ smm_output.stdout_lines | ipv4('address') }}"
但输出为空白。不确定我在这里做错了什么或如何从该输出中严格显示 ipv4 ip 地址。
你必须遍历列表stdout_lines
并将字符串拆分到列表中。试试这个:
- debug:
msg: "{{ item.split(',') | ipv4('address') }}"
loop: "{{smm_output.stdout_lines}}"
您也可以仅使用 IPv4 创建单独的数组
- set_fact:
ip4: []
- set_fact:
ip4: "{{ ip4 + (item.split(',') | ipv4('address') )}}"
loop: "{{smm_output.stdout_lines}}"
- debug:
var: ip4
应该生成以下输出:
TASK [debug] ***********************************************************************************************************************************************************************************************************
ok: [127.0.0.1] => {
"ip4": [
"10.240.18.20",
"10.240.23.34"
]
}
所以我正在使用 ansible 连接到互连设备 运行 PicOS8。我正在发出具有以下输出的命令:
10.240.18.20,fe80::a94:efff:fe50:b516%eth0
fe80::a94:efff:fe71:d996%vlan.4,10.240.23.34
fe80::a94:efff:fe71:daa6%vlan.4,10.240.23.
这并不总是标准的,因为有时 ipv4 地址先于 ipv6,或者有时根本没有 ipv6。
我正在使用 ansible register 注册此输出,假设为 smm_output.
然后我想显示输出,只显示 ipv4 ip 地址(使用下面的剧本):
- debug:
msg: "{{ smm_output.stdout_lines | ipv4('address') }}"
但输出为空白。不确定我在这里做错了什么或如何从该输出中严格显示 ipv4 ip 地址。
你必须遍历列表stdout_lines
并将字符串拆分到列表中。试试这个:
- debug:
msg: "{{ item.split(',') | ipv4('address') }}"
loop: "{{smm_output.stdout_lines}}"
您也可以仅使用 IPv4 创建单独的数组
- set_fact:
ip4: []
- set_fact:
ip4: "{{ ip4 + (item.split(',') | ipv4('address') )}}"
loop: "{{smm_output.stdout_lines}}"
- debug:
var: ip4
应该生成以下输出:
TASK [debug] ***********************************************************************************************************************************************************************************************************
ok: [127.0.0.1] => {
"ip4": [
"10.240.18.20",
"10.240.23.34"
]
}