我正在尝试连接到主机,该主机不过是通过执行Powershell脚本而获得的cisco ios开关。因此,基本上,开关是从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 }}"
这将给出如下输出
任务[调试] *********************************************** ****************************************************** ****************************************************** * 任务路径:/etc/ansible/splat_executeps_script.yml:21 好的:[localhost] =>(item = {u'DeviceName':u'abc'})=> { “ msg”:“ abc” }
其中abc是我在同一剧本的后续任务中需要连接到的主机。 我试图在同一个yaml文件中编写以下内容: 主机:“ {{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:运行处理程序 错误! “主机”字段的值无效,其中包括未定义的变量。错误是:“ item”未定义
错误似乎出在'/etc/ansible/splat_executeps_script.yml'中:第27行第3列,但可能 根据确切的语法问题放在文件的其他位置。
违规行似乎是:
我该如何更正详细信息,请提供任何帮助? 请注意,我在后续任务中尝试连接的设备将由PS脚本返回的xml动态生成。
答案 0 :(得分:0)
我认为您必须写:主机:“ {{data.matches.DeviceName}}”。 您必须在同一本Playbook中拥有两个主机:
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 }}"
hosts: "{{ data.matches.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 }}"
答案 1 :(得分:0)
我使用以下代码解决了上述问题: