Назад | Перейти на главную страницу

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.

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