LINUX.ORG.RU
решено ФорумAdmin

Ansible и коммутаторы

 


1

3

Привет всем. Пытаюсь использовать ansible для настройки коммутаторов.

Содержимое файла hosts:

[eltex]
192.168.90.33

Создал playbook test.yml

---.

- name: Run show commands on routers
  hosts: eltex

  tasks:

    - name: run sh ip int br
      cli_command:
        command: show version

При запуске ansible-playbook test.yml -vvv -u user

SSH password: /etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected /etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected Parsed /etc/ansible/hosts inventory source with ini plugin

PLAYBOOK: test.yml ************************************************************************************************************************************************************************************************************************** 1 plays in test.yml

PLAY [Run show commands on routers] *********************************************************************************************************************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************************************************************************************************************************** task path: /etc/ansible/group_vars/test.yml:3 <192.168.90.33> ESTABLISH SSH CONNECTION FOR USER: user <192.168.90.33> SSH: EXEC sshpass -d11 ssh -o StrictHostKeyChecking=no -o User=user -o ConnectTimeout=10 192.168.90.33 '/bin/sh -c '«'»'echo ~user && sleep 0'«'»"

И зависает. При этом устройство пингуется, на него по ssh я захожу. Впервые использую ansible, прошу помощи!)

И зависает.

Ну как бы вот:

SSH password:

router ★★★★★ ()
Ответ на: комментарий от router

Если eltex это вендор, то скорее всего для тебя плохие новости

https://docs.ansible.com/ansible/latest/network/user_guide/index.html#network...

https://docs.ansible.com/ansible/latest/modules/list_of_network_modules.html

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

router ★★★★★ ()
Последнее исправление: router (всего исправлений: 2)
Ответ на: комментарий от router

Пробую использовать модуль raw

---

- name: Run show commands on routers
  hosts: eltex
  gather_facts: no

  tasks:

    - name: run sh ip int br
      raw: show version
Получаю:

TASK [run sh ip int br]

<192.168.90.84> ESTABLISH SSH CONNECTION FOR USER: user

<192.168.90.84> SSH: EXEC sshpass -d11 ssh -o StrictHostKeyChecking=no -o User=user -o ConnectTimeout=10 -tt 192.168.90.84 'show version'

И на этом просто зависает. Подскажите в чем может быть проблема, ведь в документации написано что модуль raw работает с любым сетевым оборудованием

dan4ex ()
Ответ на: комментарий от dan4ex

<192.168.90.84> SSH: EXEC sshpass -d11 ssh -o StrictHostKeyChecking=no -o User=user -o ConnectTimeout=10 -tt 192.168.90.84 'show version'

1) А вручную команда ( начиная с sshpass ) проходит? Скорее всего, опять либо пароль, либо нужно принять ssh ключ.

2) в ansible можно использовать несколько реализаций ssh. Если сейчас используешь родной ssh, попробуй paramiko и наоборот

3) если есть возможность, попробуй из другого DE ( gnome вместо kde или наоборот ). Это звучит бредово, я бы сам не поверил если бы не видел. ansible без проблем работает с linux. Если на другой стороне не linux, то бывают очень неожиданные вещи при получении псевдотерминала

router ★★★★★ ()
Последнее исправление: router (всего исправлений: 1)
Ответ на: комментарий от router

Выполняю

sshpass -d11 ssh -o StrictHostKeyChecking=no -o User=user -o ConnectTimeout=10 -tt 192.168.90.84 'show version'
Пишет Permission denied, please try again

Пробовал указывать пароль через ключ -p, такая же проблема.

dan4ex ()
Ответ на: комментарий от router

Попробовал с параметром anisble_connection=paramiko, Так же зависает на sshpass, при чем пробовал на микротик eltex dlink. Даже уже не знаю куда копать

dan4ex ()
Ответ на: комментарий от dan4ex

Обычно используется доступ по ключам. Реже по паролям, при этом пароль указывают в vault'е, playbook'е или inventory

Если ничего этого нет, то пароль спрашивают у тебя с консоли

попробуй пока без playbook'а

ansible hostname -i inventory_file -m raw -a 'show version'

router ★★★★★ ()
Ответ на: комментарий от dan4ex

Пишет Permission denied, please try again

тут я был неправ. выполнять эту команду как есть бессмысленно. -d11 указывает, что ansible будет общаться с sshpass через открытый pipe

router ★★★★★ ()
Ответ на: комментарий от router

Попробовал на mikrotik

 sshpass -p 'пароль' ssh -vvv -o StrictHostKeyChecking=no -o User=user -o ConnectTimeout=10 -tt 192.168.100.70 'export compact'
все заработало

Пробую запускать без плейбука:

ansible eltex -i hosts -m raw -a 'export compact' -u user -vvvvvv
Также нависает на <192.168.100.70> SSH: EXEC sshpass -d11 ssh -vvv -o StrictHostKeyChecking=no -o User=user -o ConnectTimeout=10 -tt 192.168.100.70 'export compact'

dan4ex ()
Ответ на: комментарий от dan4ex

попробуй указать пароль в конфиге. ну или самому sshpass чего-то не хватает

тут я не подскажу, везде использую ssh ключи

router ★★★★★ ()
Ответ на: комментарий от dan4ex

все заработало

на всякий случай: заработало БЕЗ каких либо запросов ? Если ssh предгалает принять fingerprint или просит подтвердить, что хоть fingerptint дублируется, всё равно подключиться - всё это может смутить sshpass

-vvvvvv

Можешь привести полный вывод?

router ★★★★★ ()
Ответ на: комментарий от router

Да, заработало просто командой выше. Попробовал пароль прописать в hosts: ansible_ssh_pass=пароль

Все равно не работает. Выводм дебага:

ansible 2.7.10
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Apr  9 2019, 14:30:50) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
Using /etc/ansible/ansible.cfg as config file
setting up inventory plugins
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected
Parsed /etc/ansible/hosts inventory source with ini plugin
Loading callback plugin minimal of type stdout, v2.0 from /usr/lib/python2.7/site-packages/ansible/plugins/callback/minimal.pyc
META: ran handlers
<192.168.100.70> ESTABLISH SSH CONNECTION FOR USER: btk
<192.168.100.70> SSH: ansible.cfg set ssh_args: (-o)(StrictHostKeyChecking=no)
<192.168.100.70> SSH: ANSIBLE_REMOTE_USER/remote_user/ansible_user/user/-u set: (-o)(User=user)
<192.168.100.70> SSH: ANSIBLE_TIMEOUT/timeout set: (-o)(ConnectTimeout=10)
<192.168.100.70> SSH: EXEC sshpass -d11 ssh -vvv -o StrictHostKeyChecking=no -o User=user -o ConnectTimeout=10 -tt 192.168.100.70 'export compact'

dan4ex ()
Ответ на: комментарий от router

Попробовал дать команду

ansible eltex -i hosts -m raw -a 'system identity set name=1234' -u user -vvvvvv
Все получилось, на микротике имя поменялось, но ansible также завис на строчке sshpass. Очень странно

dan4ex ()
Ответ на: комментарий от dan4ex

Попробуй подождать. час, день, как получится. Может ещё что интересное в консоль напишет

Все получилось, на микротике имя поменялось, но ansible также завис на строчке sshpass

1) Как уже говорил, у ansible не очень хорошо с не-linux хостами. Какие-то особенности работы с псевдотерминалами

Кто-то ругается, что не работает с маком. У меня с аиксами виснет ~ 25% . Вендоры, которые поддерживают ansible ( cisco, juniper, arista и т.д. ) как-то решают свои проблемы

Попробуй написать в техподдержку. Ну можно ещё на каком-нибудь профильном форуме

2) попробуй поставить последний ansible

ansible vs rhel5 (комментарий)

и python поновее

router ★★★★★ ()
Ответ на: комментарий от router

Получилось с использованием модуля eos

---

- name: Run show commands on routers
  hosts: eltex
  gather_facts: no
  connection: local

  tasks:

    - name: run sh ip int br
      eos_command:
        commands: show version

dan4ex ()
Ответ на: комментарий от dan4ex

Еще подошел конфиг для Eltex MES и OLT:

- hosts: test
  gather_facts: false
  connection: network_cli
  
  vars:
    ansible_user: admin
    ansible_ssh_pass: password
    ansible_network_os: eos

  tasks:
    - eos_command:
        commands: show version
Kartograf ()
Ответ на: комментарий от Kartograf

Для версии ansible 2.8.4:

- hosts: test
  gather_facts: false
  connection: network_cli
  
  vars:
    ansible_user: admin
    ansible_ssh_pass: password
    ansible_network_os: ios

  tasks:
    - ios_command:
        commands: show version
Kartograf ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.