Ansible - winrm or requests is not installed

Viewed 14349

I was trying to connect the Windows 2016 machine from Ansible installed in my Fedora Virtual Box. I have installed python-pip as well as Pywinrm in my fedora machine.

When i tried to connect using following command

ansible all -i hosts -m win_ping -vvv

i am gettting following error

ansible 2.8.0
config file = /etc/ansible/ansible.cfg
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.7/site-packages/ansible
executable location = /usr/bin/ansible
 python version = 3.7.3 (default, May 11 2019, 00:45:16) [GCC 8.3.1 20190223 
(Red Hat 8.3.1-2)]
Using /etc/ansible/ansible.cfg as config file
host_list declined parsing /home/ansible/hosts as it did not pass it's 
verify_file() method
script declined parsing /home/ansible/hosts as it did not pass it's 
verify_file() method
auto declined parsing /home/ansible/hosts as it did not pass it's 
verify_file() method
Parsed /home/ansible/hosts inventory source with ini plugin
META: ran handlers
Using module file /usr/lib/python3.7/site- 
packages/ansible/modules/windows/win_ping.ps1
Pipelining is enabled.
xx.xxx.xx.xxx | FAILED! => {
"msg": "winrm or requests is not installed: No module named 'winrm'"
}

Below is the host file i used

[win]
xx.xxx.xx.xxx

[win:vars]
ansible_user=UserName.admin@test.com
ansibe_password=Password
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore
3 Answers

I also searched this for long, finally this worked out for me

Don't run this in virtual env, run it in the base environment

pip install pywinrm

My python version: 3.7.3

My pip version: pip 19.3.1 from /Users/darcy/code/miniconda3/lib/python3.7/site-packages/pip (python 3.7)

pywinrm version: 0.4.1

Try to run pip via desired python binary as a module -m pip:

python3 -m pip install --user --ignore-installed pywinrm

Then test it:

  1. test if python can find winrm module:

     import winrm
    
     s = winrm.Session('windows:5985', auth=('user', 'password'))
     r = s.run_cmd('ipconfig', ['/all'])
    
     print(r.status_code)
     print(r.std_out.splitlines(True))
    
  2. test if your Ansible has access to winrm module and your target:

     ansible windows -i inventory.ini -m win_ping
    

In my case, I used @salmira's answer to check python with winrm and then I had to install python2-winrm.noarch to get Ansible to work.

yum install python2-winrm.noarch

And voilĂ :

$ ansible winhost -m win_ping
xxxxx | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
Related