ansible:连接到上一个游戏输出的主机

ansible:连接到上一个游戏输出的主机

我正在尝试连接到一个主机,该主机只不过是一个 cisco ios 交换机,我通过执行 powershell 脚本获得该交换机。因此,交换机基本上是从 powershell 脚本的 xml 字符串输出的。我能够从 Ansible 输出中成功接收交换机名称。现在我的问题是如何连接到交换机并使用 show 命令查看交换机的详细信息。

这是我的剧本:

hosts: localhost
connection: local
tasks:
  - name: Parse the XML output
    xml:
      xmlstring: "{{ hostvars[groups['win'][0]]['splat']['stdout'] }}"
      xpath: "/HostDiscovery/Host/Connection/NetworkDevice[Candidate='true' and  Uplink='false']/DeviceName"
      content: text
    register: data
  - debug:
      msg: "{{ item.DeviceName }}"
    with_items: "{{ data.matches }}"

这将给出如下输出

TASK [debug]
************************************************************************************************************************************************
task path: /etc/ansible/splat_executeps_script.yml:21 ok: [localhost] => (item={u'DeviceName': u'abc'}) => { "msg": "abc" }

其中 abc 是我需要在同一剧本的后续任务中连接到的主机。我尝试在同一个 yaml 文件中写入以下内容

hosts: "{{ item.DeviceName }}"

connection: network_cli
tasks:
  - name: Show VLAN
    ios_command:
      commands:
        - show vlan brief | include {{id}}
        - show interfaces {{interface}} status
    register: vlan
  - debug: var=vlan.stdout_lines
    with_items: "{{ data.matches }}"

但这不能运行并出现以下错误:

META: ran handlers ERROR! The field 'hosts' has an invalid value, which includes an undefined variable. The error was: 'item' is undefined

The error appears to have been in '/etc/ansible/splat_executeps_script.yml': line 27, column 3, but may be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

hosts: "{{ item.DeviceName }}" ^ here

我该如何更正这些细节,任何帮助都会很感激吗?请注意,我在后续任务中尝试连接的设备将由 PS 脚本返回的 xml 动态生成。

答案1

item仅在该任务的循环持续时间内存在。使用您已注册的变量。

add_host是动态修改库存的一种方法。然后针对该组运行剧本中的下一个剧本:

  - name: Add discovered switches to inventory
    add_host:
      name: "{{ item.DeviceName }}"
      groups: switch
    loop: "{{ data.matches }}"

hosts: switch

为了不必每次都按照剧本管理库存,编写动态库存脚本或插件。这可能是该 PowerShell 脚本的一个变体,它会发出 JSON,Ansible 可以将其用作库存脚本示例位于 Ansible 源代码中,位于贡献/库存

相关内容