Ansible не будет подключаться к эмулируемым сетевым устройствам через Telnet - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь использовать Ansible, чтобы включить SSH-доступ к сетевым устройствам, эмулированным в среде EVE-NG.Моя цель - игровая книга Ansible для настройки SSH.EVE-NG работает аналогично GNS3 в том, что вы подключаетесь к устройству через telnet через определенный порт.В этом примере предположим, что мой сервер EVE-NG находится на 192.168.1.10.EVE-NG назначит этому устройству порт telnet, например, 32899. Если я запусту telnet 192.168.1.10 32899, я получу доступ к устройству, как и ожидалось.Тем не менее, если я выполняю свою playbook, playbook, похоже, ничего не делает во время выполнения модуля telnet.Ниже приведен фрагмент моего списка игр.

- name: Configure new EVE-NG router
  hosts: new_devices:cisco
  gather_facts: no
  tasks:
    - debug:
        msg: '{{ansible_host}} {{ansible_port}}'
    - name: Setup domain information
      telnet:
        port: '{{ansible_port}}'
        prompts:
          - "[>|#]"
        command:
          - term length 0
          - en
          - conf t

Запуск ansible-playbook с -vvv не показывает никакой полезной информации.netstat показывает исходящее соединение в состоянии ESTABLISHED, когда выполняется Ansible.

1 Ответ

0 голосов
/ 19 октября 2018

Я бы решил эту проблему, используя модуль shell в сочетании с / usr / bin / wait в качестве исполняемого файла.Это дает вам больше гибкости во взаимодействии с системой и позволяет следить за ходом процесса в отдельном файле журнала.

- name: Interact with system
  shell: |
    set timeout 120
    log_file {{ '~/logs/your_log_file.explog' }}

    spawn telnet {{ inventory_hostname }}

    expect "username: "
    send "{{ your_username }}\n"

    expect "password:"
    send "{{ your_password }}\n"

    expect "# "
    send "term length 0"

    expect "# "
    send "en"

    expect "# "
    send "conf -t"
  args:
    executable: /usr/bin/expect
  changed_when: yes
  delegate_to: localhost

Или вы можете использовать модуль script , чтобы хранить свои игровые книги.опрятный и чистый.

- name: Interact with system
  script: interact-with-system.expect
  args:
    executable: /usr/bin/expect
  changed_when: yes
  delegate_to: localhost

PS: Если вы используете шебанг, вам даже не нужно добавлять исполняемый файл.

Посмотрите на страницу ожидаемого руководства или онлайн-примеры, чтобы увидетьчто вы можете сделать с ожиданием.Он довольно мощный, но требует некоторого привыкания.

...