'Packer + Ansible - "winrm or requests is not installed: No module named 'winrm'"
I'm trying to integrate Ansible with Packer to configure a Windows Client.
Running from Azure Pipelines:
- Ubuntu-Latest
- Python 3.8.10
- ansible [core 2.12.4]
- packer 1.8.0
In the Pipeline I have tried to install pywinrm
pip install --ignore-installed pywinrm
But still receive this error when packer using the Ansible Provisioner:
==> azure-arm.windowsvm: Waiting for WinRM to become available...
azure-arm.windowsvm: WinRM connected.
==> azure-arm.windowsvm: Connected to WinRM!
==> azure-arm.windowsvm: Provisioning with Ansible...
azure-arm.windowsvm: Not using Proxy adapter for Ansible run:
azure-arm.windowsvm: Using WinRM Password from Packer communicator...
==> azure-arm.windowsvm: Executing Ansible: ansible-playbook -e packer_build_name="windowsvm" -e packer_builder_type=azure-arm -vvv -e ansible_winrm_server_cert_validation=ignore ansible_python_interpreter=/usr/bin/python3 -e ansible_password=***** -i /tmp/packer-provisioner-ansible141521969 /home/vsts/work/1/s/packer/win10-client/ansible/apb_os.yml
azure-arm.windowsvm: ansible-playbook [core 2.12.4]
azure-arm.windowsvm: config file = None
azure-arm.windowsvm: configured module search path = ['/home/vsts/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
azure-arm.windowsvm: ansible python module location = /opt/pipx/venvs/ansible-core/lib/python3.8/site-packages/ansible
azure-arm.windowsvm: ansible collection location = /home/vsts/.ansible/collections:/usr/share/ansible/collections
azure-arm.windowsvm: executable location = /opt/pipx_bin/ansible-playbook
azure-arm.windowsvm: python version = 3.8.10 (default, Mar 15 2022, 12:22:08) [GCC 9.4.0]
azure-arm.windowsvm: jinja version = 3.1.1
azure-arm.windowsvm: libyaml = True
azure-arm.windowsvm: No config file found; using defaults
azure-arm.windowsvm: host_list declined parsing /tmp/packer-provisioner-ansible141521969 as it did not pass its verify_file() method
azure-arm.windowsvm: script declined parsing /tmp/packer-provisioner-ansible141521969 as it did not pass its verify_file() method
azure-arm.windowsvm: auto declined parsing /tmp/packer-provisioner-ansible141521969 as it did not pass its verify_file() method
azure-arm.windowsvm: Parsed /tmp/packer-provisioner-ansible141521969 inventory source with ini plugin
azure-arm.windowsvm: redirecting (type: modules) ansible.builtin.win_acl to ansible.windows.win_acl
azure-arm.windowsvm: redirecting (type: modules) ansible.builtin.win_acl to ansible.windows.win_acl
azure-arm.windowsvm: redirecting (type: modules) ansible.builtin.win_acl to ansible.windows.win_acl
azure-arm.windowsvm: redirecting (type: modules) ansible.builtin.win_acl to ansible.windows.win_acl
azure-arm.windowsvm: redirecting (type: modules) ansible.builtin.win_acl to ansible.windows.win_acl
azure-arm.windowsvm: redirecting (type: modules) ansible.builtin.win_acl to ansible.windows.win_acl
azure-arm.windowsvm: Skipping callback 'default', as we already have a stdout callback.
azure-arm.windowsvm: Skipping callback 'minimal', as we already have a stdout callback.
azure-arm.windowsvm: Skipping callback 'oneline', as we already have a stdout callback.
azure-arm.windowsvm:
azure-arm.windowsvm: PLAYBOOK: apb_os.yml ***********************************************************
azure-arm.windowsvm: 1 plays in /home/vsts/work/1/s/packer/win10-client/ansible/apb_os.yml
azure-arm.windowsvm:
azure-arm.windowsvm: PLAY [Provision Image with OS Config] ******************************************
azure-arm.windowsvm:
azure-arm.windowsvm: TASK [Gathering Facts] *********************************************************
azure-arm.windowsvm: task path: /home/vsts/work/1/s/packer/win10-client/ansible/apb_os.yml:1
azure-arm.windowsvm: redirecting (type: modules) ansible.builtin.setup to ansible.windows.setup
azure-arm.windowsvm: Using module file /opt/pipx/venvs/ansible-core/lib/python3.8/site-packages/ansible_collections/ansible/windows/plugins/modules/setup.ps1
azure-arm.windowsvm: Pipelining is enabled.
azure-arm.windowsvm: fatal: [default]: FAILED! => {
azure-arm.windowsvm: "msg": "winrm or requests is not installed: No module named 'winrm'"
azure-arm.windowsvm: }
azure-arm.windowsvm:
azure-arm.windowsvm: PLAY RECAP *********************************************************************
azure-arm.windowsvm: default : ok=0 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
Here is the Packer Ansible Provsioner:
provisioner "ansible" {
playbook_file = "${var.WorkingDirectory}/packer/win10-client/ansible/apb_os.yml"
user = "Admin"
use_proxy = false
extra_arguments = ["-vvv", "-e", "ansible_winrm_server_cert_validation=ignore ansible_python_interpreter=/usr/bin/python3"]
}
My pip list
Package Version
---------------------- --------------------
argcomplete 2.0.0
attrs 19.3.0
Automat 0.8.0
blinker 1.4
certifi 2021.10.8
cffi 1.15.0
chardet 3.0.4
charset-normalizer 2.0.12
Click 7.0
cloud-init 22.1
colorama 0.4.3
command-not-found 0.3
configobj 5.0.6
constantly 15.1.0
crcmod 1.7
crit 0.0.1
cryptography 36.0.2
dbus-python 1.2.16
distro 1.4.0
distro-info 0.23ubuntu1
entrypoints 0.3
httplib2 0.14.0
hyperlink 19.0.0
idna 3.3
importlib-metadata 1.5.0
incremental 16.10.1
Jinja2 2.10.1
jsonpatch 1.22
jsonpointer 2.0
jsonschema 3.2.0
keyring 18.0.1
language-selector 0.1
launchpadlib 1.10.13
lazr.restfulclient 0.14.2
lazr.uri 1.0.3
MarkupSafe 1.1.0
more-itertools 4.2.0
netifaces 0.10.4
ntlm-auth 1.5.0
oauthlib 3.1.0
packaging 21.3
pexpect 4.6.0
pip 20.0.2
pipx 1.0.0
protobuf 3.6.1
pyasn1 0.4.2
pyasn1-modules 0.2.1
pycparser 2.21
Pygments 2.3.1
PyGObject 3.36.0
PyHamcrest 1.9.0
PyJWT 1.7.1
pymacaroons 0.13.0
PyNaCl 1.3.0
pyOpenSSL 19.0.0
pyparsing 3.0.7
pyparted 3.11.2
pyrsistent 0.15.5
pyserial 3.4
python-apt 2.0.0+ubuntu0.20.4.7
python-debian 0.1.36ubuntu1
pywinrm 0.4.2
PyYAML 5.3.1
requests 2.27.1
requests-ntlm 1.1.0
requests-unixsocket 0.2.0
SecretStorage 2.3.1
service-identity 18.1.0
setuptools 45.2.0
simplejson 3.16.0
six 1.16.0
sos 4.3
ssh-import-id 5.10
systemd-python 234
Twisted 18.9.0
ubuntu-advantage-tools 27.6
ufw 0.36
urllib3 1.26.9
userpath 1.8.0
wadllib 1.3.3
WALinuxAgent 2.2.46
wheel 0.34.2
xmltodict 0.12.0
zipp 1.0.0
zope.interface 4.7.1
Any pointers in the right direction would be greatly appreciated - Thanks!
Solution 1:[1]
The pipeline was running a virtual env which was where ansible was looking for the pywinrm module.
I had to activate this by using
. /opt/pipx/venvs/ansible-core/bin/activate
The ansible provisioner does tell you where it's looking for this module.
Once activated, this allowed me to install the pywinrm module which was missing and allowed it to work.
Alternatively you could create script to create and install everything within a venv using the command attribute for the ansible provisioner.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | ASHR |
