Shade not available via yum?

I installed Ansible using yum on CentOS 6.8 via a corporate mirror of EPEL. However, when I attempted to use the os_server module to interact with the OpenStack API, it failed saying that “shade” is required. When I went to install Shade via Yum, I discovered to my horror and dismay that Shade (python-shade) is not available from EPEL, making it impossible to install via Yum. I attempted to install it via pip but quickly fell into the ninth circle of Python Dependency Hell.

How could Ansible be available via EPEL while not also making available one of the libraries that a module it ships with depends upon? Was this an oversight?

Ansible isn’t responsible for packaging and shipping of the libraries that the
modules may use. Shade isn’t packaged on Centos or EPEL simply because
no one from the community has stepped up to make those packages available.
It is available on Ubuntu and Fedora distributions, but that doesn’t help you
unfortunately.

Installing it via pip was the right thing for you to do in your circumstance, but
I’m curious as the “Python Dependency Hell” you mentioned. Could you elaborate
on that a bit (if nothing else just to satisfy my curiosity)?

-Dave

The first thing I ran into was a conflict with the installed version of pbr.

To get around this, I set up a virtualenv, and tried installing into that.

I then went down a rabbit hole of dealing with a few dozen transitive dependencies, at least a few of which required me to install gcc in order to install them.

In a few cases, I found that the latest installed version of a transitive dependency depended on a newer version of another library than what was available from the corporate Pypi mirror. I got around these issues by manually specifying older versions of the libraries that had such dependencies.

I managed to get pretty far like this, until pip tried to install cffi, which resulted in a compilation error from gcc:
UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe2 in position 75: ordinal not in range(128)

I then tried setting the environment variable LC_ALL=C as I had seen suggested in various places. This resulted in another error:

‘FFI_DEFAULT_ABI’ undeclared

Another Google search later, and I yum installed libffi-devel and tried again. cffi installed successfully.

I then attempted to install shade again. This resulted in dozens of compilation errors from _openssl.c while attempting to transitively install the cryptography library.

I had no idea what to do at this point and gave up.

~Rich

Oh yuck.

Yeah, mixing distribution packages with pip packages can get really ugly, especially
as the operating system distribution gets older and package versions get further apart.

-Dave

I just go pip route when it comes to ansible. Here is my vagrant repo to get you up and running for anyone interested (if nothing else but to cheat off)

https://github.com/OldCrowEW/vagrant-ansible

I also tried forgoing the virtualenv insanity and just upgrading (via pip) the pbr library in site-packages (which was installed via yum). I was able to upgrade it (to 1.10.0), but when I went to install shade, pip didn’t seem to recognize that pbr had been upgraded (it still gave me the same “pbr>=1.8” dependency failure). I even tried installing pbr 1.8.0 specifically, to no avail.

~ Rich

Installing everything via pip didn’t work either. I still wound up with the same error when attempting to install cryptography.

I guess I’ll be stuck using shell commands to interact with OpenStack. :-/

Richard,

Could you dump your ~/.bash_history ? I have had to work around this issue too. Perhaps we can find a working solution with help from this mailing list.

Unfortunately, that’s not an option. I’m working on a private network, and that sort of thing would not meet the approval of the Network Nazis.

I can try reproducing the problem at home, though I might not be able to, since it’s a different OS (Ubuntu instead of CentOS) with a different network environment (direct Internet access instead of a corporate enclave).

~Rich.

Here is what is required:

yum install -y epel-release
yum install -y python-pip python-devel libffi-devel openssl-devel gcc
pip install -U pip
pip install shade

You could skip epel-release and python-pip by doing:

yum install -y python-devel libffi-devel openssl-devel gcc
curl -s https://bootstrap.pypa.io/get-pip.py | python
pip install shade

Ah yes, closed networks. Fun times. You can test on vagrant box to get centos.

This worked, though I had to make the following tweak:

pip install -U “pip<8.1.2”

Otherwise, transitive installation of oslo.i18n fails due to conversion of the dot to a dash when it queries the pypi mirror.

Thanks a lot!

~Rich

I also needed to yum install python-importlib, as well as fix the file permissions on the files added by pip to site-packages.

However, now I’m running into a version conflict with the stevedore package. python-keystoneclient wants stevedore >= 1.16.0, but stevedore 1.10+ doesn’t support Python 2.6.

~Rich

Doh! I just realized that there is NO version of Shade that officially supports Python 2.6. :frowning:

I finally got os_server_facts working. I even created an Ansible role to configure the control server to get it to work. :slight_smile:

I ended up creating a pip requirements file to get the right set of dependencies for Shade:

shade
stevedore<1.10
python-keystoneclient<2.0
wrapt
oslo.serialization<2.0
oslo.i18n<3.0
oslo.config<3.0
python-swiftclient<3.0
python-designateclient<2.0