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 / инвентарь.

Другие вопросы по тегам