Ansible 2.0 -- "shade is required for this module"

I’m trying to use the os_server module in Ansible 2.0 and get the following error:

fatal: [jump]: FAILED! => {“changed”: false, “failed”: true, “msg”: “shade is required for this module”}

Here’s what I have:

  • Python 2.7.10 (Mac, installed via Homebrew)
  • Using a virtual environment.
  • shade installed in venv via pip (pulled all of it’s dependencies, at least as far as I can tell)
  • Ansible cloned from git, devel branch at commit 8798ce1973a5fd0f8d84e001281699337ddabda4
  • Installed ansible 2.0 by “python setup.py install” from the venv python interpreter. It installed in site-packages as expected.

With python in the venv, I can import shade without a problem and create some shade objects.

I’m just starting to test with 2.0, so I have a very simply playbook calling just a single role with a single task. My Openstack.rc file is sourced and present in my environment. Other openstack cli tools (nova, neutron, etc.) work fine, so I don’t include an auth dictionary in the task.

Playbook:

  • hosts: jump
    connection: local
    roles:
  • create_vm

create_vm role’s task:

  • os_server:
    state: present
    name: jump
    image: centos7u1-cloud
    flavor: ostck.t2.v3.small
    key_name: mykeyname
    nics:
  • net-name: priv_net
    meta:
    group: jump

Any ideas? Happy to provide more details or test anything.

Thanks,
Chris

Hi Chris. Same here. Did you manage to fix this issue? Thanks.

Exact same setup, same problem. I opened an issue on Github but it got shot down :slight_smile:

Maybe if this is an actual problem it can get re-opened: https://github.com/ansible/ansible-modules-core/issues/1910

Aaron

The problem is your environment. I use Python from Homebrew, but I don’t
use a virtualenv b/c it’s hard to make ansible play nicely with that.

When ansible connects to the host, ‘jump’ for you, it’s going to automatically
use the system python. You can set a different interpreter by adding this to
your ansible hosts file for the ‘jump’ host:

jump ansible_python_interpreter=/path/to/python

The path should point to the interpreter that has shade installed.

Alternatively, install shade in the system python.

-Dave

If you’ve installed shade into a virtualenv on your ansible control machine, you may need to tell ansible to use that virtualenv in order to detect it. I’ve done it like so in my hosts file for other modules (like boto):

localhost ansible_python_interpreter=“/usr/bin/env python”

  • James

Thanks James. Now it works like a charm.

Hi, forgive me for my bad english.

I have exactly the same problem with ansible 2.2 and python 2.7. All packages are installed in system, no venv but ansible continue with
fatal: [localhost]: FAILED! => {“changed”: false, “failed”: true, “msg”: “shade is required for this module”}

I know this post is already solved since 2015, but if someone could help me …

Thanks.

Could you resolve the issue? If yes, please share the solution here. I am not using virtualenv, still getting the same issue.

Thank you

I am having the same issue, where it gives error regarding shade. I have tried running in virtalenv also but no luck.

Same issue here, but I did some experimenting to see what the problem is. I found that running the following command:
python -c “import shade”
provided a lot of useful information about why it wasn’t loading the shade library.

~Rich

In my case, the file permissions were wrong on some of the package directories that pip had created in site-packages, and one undeclared transitive dependency (importlib) was missing.

Try installing ansible using pip because I don’t know why the python environment of the ansible package provided by my distro (ArchLinux) isn’t the same as the shade module (installed using pip).

Thanks Richard that helped a lot!!