每次在Ansible剧本中使用不同的参数运行命令

时间:2020-04-27 10:57:24

标签: loops ansible ansible-2.x

我试图在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'中。

2 个答案:

答案 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内,这样做我无法获得任何结果!