【问题标题】:Ansible msg: "winrm or requests is not installed: cannot import name certs"Ansible 消息:“未安装 winrm 或请求:无法导入名称证书”
【发布时间】:2019-01-04 19:21:01
【问题描述】:

我正在尝试使用 Ansible 的 win_ping 模块从 Linux 控制机器 ping Windows 主机。

问题:
我从与“hosts”文件相同的目录运行以下命令并遇到“winrm or requests is not installed: cannot import name certs”错误。

$> ansible win -i ./hosts -m win_ping
dev-app1 | FAILED! => {
    "msg": "winrm or requests is not installed: cannot import name certs"
}


“主机”中的定义:

[win]
dev-app1 ansible_host=10.123.456.78

[win:vars]
ansible_user=admin
ansible_password=adminspassword
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore

我的 Linux 机器上安装的所有内容的版本:
* ansible 2.7.2
* python 版本 = 2.7.5(默认,2018 年 9 月 12 日,05:31:16)[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
* Winrm:python2-winrm-0.3.0-1.el7.noarch
* 请求:
python-requests-2.6.0-1.el7_1.noarch
python2-requests_ntlm-1.1.0-1.el7.noarch

知道是什么导致了错误吗?会不会是版本不兼容或者缺少其他模块?

谢谢!

【问题讨论】:

  • 我强烈建议尝试不使用这么多 rpm,因为它们通常无法正确获取依赖关系树。创建一个 virtualenv,pip install ansible==2.7 pywinrm,然后尝试使用该 virtualenv 的 ansible。另外,您似乎没有指定ansible_winrm_transport

标签: python ansible winrm


【解决方案1】:

即使已经通过 yum 安装了 python2-winrm 0.3.0 版,这也会失败。 原因:yum 没有为winrm 安装所有依赖模块。请改用 python 包管理器 (pip)。

thinkred1cartoon:$ ansible all -i hosts.txt -m win_ping
172.16.96.135 | FAILED! => {
    "msg": "winrm or requests is not installed: cannot import name certs"

找到准确安装的 winrm 包 -

yum list installed | grep winrm
python2-winrm.noarch              0.3.0-1.el7                @epel

运行接下来的 2 个命令 -

1)    yum autoremove python2-winrm.noarch   #uninstalls python2-winrm.noarch along with all its dependencies

2)    pip install "pywinrm>=0.3.0"          # Installs pywinrm using pip. 

More detail here

然后 ping:pong 在 https 上工作得很好,端口 = 5986

ram@thinkred1cartoon$ ansible all -i hosts.txt -m win_ping
172.16.96.135 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

快速浏览我的 ansible 库存:

ram@thinkred1cartoon$ cat hosts.txt           

[win]
172.16.96.135

[win:vars]
ansible_user='Raman'
ansible_password='XXXXX'
#ansible_port=5985
ansible_port=5986
ansible_connection=winrm
#ansible_winrm_scheme=http
ansible_winrm_scheme=https
ansible_winrm_server_cert_validation=ignore

相反,如果您不能/不想运行命令 1,那么命令 2 将不适合您。 在这种情况下,只运行命令 3。

3 ) pip install --ignore-installed "pywinrm>=0.3.0"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多