Невозможно установить соединение PyEZ: ConnectUnknownHostError - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь использовать 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

1 Ответ

1 голос
/ 28 марта 2019

Поскольку вы используете 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...