ansible - 无法建立 PyEZ 连接 : ConnectUnknownHostError

标签 ansible vagrant junos-automation pyez

我正在尝试使用 Ansible Junos 模块中的 juniper_junos_facts 来查询我使用 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)"}

我在以下文档中看到Here在 juniper.net 上,当您没有在 list 文件中正确定义主机时,就会发生此错误。我不认为这是我的 list 文件的问题,因为当我运行 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"
}

我的剧本是从我从 Here 获得的以下文档中复制的在 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

最佳答案

当您使用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您还可以在其中查看默认值。

为了充分解释“provider”方法,您的剧本应该如下所示:

---
- 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

关于ansible - 无法建立 PyEZ 连接 : ConnectUnknownHostError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55263504/

相关文章:

Ansible 和 Fedora23 - "firewalld required for this module"

ansible - 使用Ansible : How to get stderr and stdout from failing commands to be printed respecting newlines so as to be human readable?进行调试

vagrant - 如何检测当前 guest 在 Vagrantfile 中的操作系统类型

error-handling - 当救援 block 在文件中时,"ansible_failed_task"& "ansible_failed_result"变量未定义

ansible - 使用 ansible-galaxy 直接从 git URI 安装 Ansible 集合

ubuntu - vagrant puppet 符号链接(symbolic link)问题

macos - Vagrant 在 Vagrantfile 中找不到主机操作系统上的文件

python - Pip 错误 - 找不到满足 junos-eznc 要求的版本

python - 正则表达式,包括匹配 juniper srx 输出的变量