无法建立 PyEZ 连接:ConnectUnknownHostError
Unable to make a PyEZ connection: ConnectUnknownHostError
我正在尝试使用 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)"}
我在 juniper.net 上的以下文档 Here 中看到,当您没有在清单文件中正确定义主机时,会发生此错误。我不认为这是我的清单文件的问题,因为当我 运行 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 上从 Here 获得的以下文档复制的。
我的库存文件
[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
此答案适用于通过错误消息找到此问题的人。
如果您使用不同于 local
的连接插件,它可以,并且通常是由这个 bug 引起的,与变量排序有关
错误已在 2.2.1 及更高版本中修复,请尝试从 Galaxy 更新模块。
我正在尝试使用 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)"}
我在 juniper.net 上的以下文档 Here 中看到,当您没有在清单文件中正确定义主机时,会发生此错误。我不认为这是我的清单文件的问题,因为当我 运行 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 上从 Here 获得的以下文档复制的。
我的库存文件
[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
此答案适用于通过错误消息找到此问题的人。
如果您使用不同于 local
的连接插件,它可以,并且通常是由这个 bug 引起的,与变量排序有关
错误已在 2.2.1 及更高版本中修复,请尝试从 Galaxy 更新模块。