运行 Ansible 剧本中每次都有不同参数的命令

Run a command with different args everytime in Ansible playbook

我正在尝试 运行 Ansible 中的命令以便在我的网络中找到邻居:

- name: Get neighbors
  junos_rpc:
    rpc: "get-lldp-interface-neighbors"
    output: 'xml'
    args:
      interface_device: A
  register: net_topology

所以我的问题来了,在这个任务中我需要遍历一个列表并为 interface_device 提供另一个参数,并且每次都将结果也注册到另一个变量 'net_topology' 中。

- name: Get neighbors
  junos_rpc:
    rpc: "get-lldp-interface-neighbors"
    output: 'xml'
    args:
      interface_device: "{{ item }}"
  loop:
    - A
    - B
    - C
  register: net_topology

一旦您像这样修改您的任务,它将播放三次:我的示例循环中的每个元素一次。变量 item 将获取列表中当前元素的值。

您不需要更改 register 变量:它将按照 ansible documentation:

中的说明自动修改

When you use register with a loop, the data structure placed in the variable will contain a results attribute that is a list of all responses from the module. This differs from the data structure returned when using register without a loop

因此,您可以通过遍历包含单个结果列表的 net_topology.results 来检查后续任务中的所有结果。

实际上我做了与上面类似的事情,但我只是用不同的方式传递了我的列表:

- 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 中并且这样做我无法得到任何结果!