我试图在Ansible中运行命令,以便在我的网络中找到邻居:
- name: Get neighbors
junos_rpc:
rpc: "get-lldp-interface-neighbors"
output: 'xml'
args:
interface_device: A
register: net_topology
所以我的问题来了,当我需要遍历一个列表并为interface_device提供另一个arg,并且每次都将结果也注册到另一个变量'net_topology'中。
答案 0 :(得分:2)
- name: Get neighbors
junos_rpc:
rpc: "get-lldp-interface-neighbors"
output: 'xml'
args:
interface_device: "{{ item }}"
loop:
- A
- B
- C
register: net_topology
这样修改任务后,它将播放3次:对示例循环中的每个元素一次。变量item
将获得列表中当前元素的值。
您不需要更改register
变量:它将按照ansible documentation中的说明自动进行修改:
在循环中使用
register
时,放置在变量中的数据结构将包含一个results
属性,该属性是模块中所有响应的列表。这与使用register
不带循环时返回的数据结构不同
因此,您可以遍历包含单个结果列表的net_topology.results
来检查后续任务中的所有结果。
答案 1 :(得分:0)
实际上,我执行了与上述操作类似的操作,但是我只是通过另一种方式传递了清单:
- name: building network topology
junos_rpc:
rpc: "get-lldp-interface-neighbors"
output: 'xml'
args:
interface_device: "{{item}}"
loop:
"{{my_list}}"
register: net_topology
这实际上与执行此操作相同:
- name: building network topology
junos_rpc:
rpc: "get-lldp-interface-neighbors"
output: 'xml'
args:
interface_device: "{{item}}"
with_items:
"{{my_list}}"
register: net_topology
我必须说我的最初错误是循环的标识,因为它被放置在junos_rpc内,这样做我无法获得任何结果!