Не удалось установить соединение PyEZ: ConnectUnknownHostError

Я пытаюсь использовать juniper_junos_facts из модуля Ansible Junos для запроса некоторых виртуальных машин, которые я подготовил с помощью Vagrant. Однако я получаю следующую ошибку.

fatal: [r1]: FAILED! => {"changed": false, "msg": "Unable to make a PyEZ connection: ConnectUnknownHostError(r1)"}
fatal: [r2]: FAILED! => {"changed": false, "msg": "Unable to make a PyEZ connection: ConnectUnknownHostError(r2)"}

Я вижу в следующем документе Здесь на juniper.net эта ошибка возникает, когда хост неправильно определен в файле инвентаризации. Я не думаю, что это проблема с моим файлом инвентаризации, потому что когда я запускаю ansible-inventory --host, все кажется в порядке

~/vagrant-projects/junos$ ansible-inventory --host r1
{
    "ansible_ssh_host": "127.0.0.1", 
    "ansible_ssh_port": 2222, 
    "ansible_ssh_private_key_file": ".vagrant/machines/r1/virtualbox/private_key", 
    "ansible_ssh_user": "root"
}
~/vagrant-projects/junos$ ansible-inventory --host r2
{
    "ansible_ssh_host": "127.0.0.1", 
    "ansible_ssh_port": 2200, 
    "ansible_ssh_private_key_file": ".vagrant/machines/r2/virtualbox/private_key", 
    "ansible_ssh_user": "root"
}

Мой сборник сценариев скопирован из следующего документа, который я получил из Здесь на juniper.net.

Мой инвентарный файл

[vsrx]
r1 ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222 ansible_ssh_private_key_file=.vagrant/machines/r1/virtualbox/private_key
r2 ansible_ssh_host=127.0.0.1 ansible_ssh_port=2200 ansible_ssh_private_key_file=.vagrant/machines/r2/virtualbox/private_key

[vsrx:vars]
ansible_ssh_user=root

Моя книга игр

---
- name: show version
  hosts: vsrx
  roles:
    - Juniper.junos
  connection: local
  gather_facts: no

  tasks:
    - name: retrieve facts
      juniper_junos_facts:
        host: "{{ inventory_hostname }}"
        savedir: "{{ playbook_dir }}"
    - name: print version
      debug:
        var: junos.version

person Barry Keegan    schedule 20.03.2019    source источник
comment
ConnectUnknownHostError(r1) означает, что r1 отправляется как хост, а не IP-адрес в PyEZ. Вам нужно передать ansible_ssh_host в качестве хоста. Я думаю, если вы не пройдете ни одного, мы возьмем их по умолчанию.   -  person Nitin Kr    schedule 20.03.2019
comment
Спасибо за отзыв, могу я спросить, как вы передаете ansible_ssh_host в качестве хоста в PyEZ?   -  person Barry Keegan    schedule 22.03.2019


Ответы (2)


Поскольку вы используете connection: local, вам необходимо предоставить модулю полную информацию о подключении (обычно упакованную в словарь провайдера на уровне воспроизведения, чтобы уменьшить количество повторений):

    - name: retrieve facts
      juniper_junos_facts:
        host: "{{ ansible_ssh_host }}"
        port: "{{ ansible_ssh_port }}"
        user: "{{ ansible_ssh_user }}"
        passwd: "{{ ansible_ssh_pass }}"
        ssh_private_key_file: "{{ ansible_ssh_private_key_file }}" 
        savedir: "{{ playbook_dir }}"

Полная документация находится здесь (обратите внимание на правильную версию роли в URL-адресе): https://junos-ansible-modules.readthedocs.io/en/2.1.0/juniper_junos_facts.html, где вы также можете увидеть значения по умолчанию.

Чтобы полностью объяснить метод «поставщика», ваша книга должна выглядеть примерно так:

---
- name: show version
  hosts: vsrx
  roles:
    - Juniper.junos
  connection: local
  gather_facts: no

  vars:
    connection_info:
        host: "{{ ansible_ssh_host }}"
        port: "{{ ansible_ssh_port }}"
        user: "{{ ansible_ssh_user }}"
        passwd: "{{ ansible_ssh_pass }}"
        ssh_private_key_file: "{{ ansible_ssh_private_key_file }}" 

  tasks:
    - name: retrieve facts
      juniper_junos_facts:
        provider: "{{ connection_info }}"
        savedir: "{{ playbook_dir }}"
    - name: print version
      debug:
        var: junos.version

person cmsirbu    schedule 28.03.2019
comment
Это сработало, большое спасибо cmsirbu. Мне пришлось добавить 1 строку в conncetion_info, чтобы указать на мой ssh_key, который я использовал, который был ssh_private_key_file: {{ ansible_ssh_private_key_file }} - person Barry Keegan; 28.03.2019

Этот ответ для людей, которые найдут этот вопрос по сообщению об ошибке.

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

Ошибка уже исправлена ​​в версии 2.2.1 и выше, попробуйте обновить модуль от Galaxy.

person Villi    schedule 29.04.2020