Я пытаюсь подключиться к хосту, который представляет собой не что иное, как коммутатор cisco ios, который я получаю, выполняя сценарий PowerShell. Таким образом, в основном переключатель выводится из строки xml из сценария PowerShell. Я могу успешно получить имя переключателя из вывода 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
Как я могу исправить детали, любая помощь приветствуется? Обратите внимание, что устройство, которое я пытаюсь подключить в следующей задаче, будет динамически сгенерировано xml, который возвращается из сценария PS.
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 в разделе вклад / инвентарь.