ansible: подключение к хосту, который является выходом из предыдущей игры
Я пытаюсь подключиться к хосту, который является ничем иным, как коммутатором 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.
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, в разделе contrib / инвентарь.