Using Software Collections (SCL) in Ansible

RHEL and similar OSes have Software Collections (SCL): https://www.softwarecollections.org.
Some typical ways to use Python 3.4 from SCL, for example:

yum -y install rh-python34

Interactive:
scl enable rh-python34 bash
Scripted:
echo pip3 install Django==1.7 | scl enable rh-python34 -
Scripted(alt):
#!/bin/bash
source /opt/rh/rh-python34/enable
pip3 install Django==1.7

Is there any general way to support SCL with Ansible?
Or even a specific way to force the pip module to work with it?
I’m trying to decide whether Ansible has enough advantage over shell scripts for deploying this particular application.

You can probably just enable the software collection before running Ansible.

scl enable rh-python34 ansible-playbook …

or

I think the question is about SCL on the targets not the controller

Yep, this will only work if you’re running Ansible against localhost

Depends on what you’re trying to do. If any of these are true then doing this with ansible might make sense:

A) already have an ansible infrastructure and want to deploy something the same way as the rest of your infra

B) need to deploy this on multiple remote systems

If the following is true then it might not:

A) you just have this single app to deploy to a single host.

I think I’d probably use the script module to use scls at this point in time. Which allows you to integrate a script that you write with ansible. But if you don’t need the other features of ansible then you could just add a little bit of extra smarts to your script instead.

Someone could write an scl module in the future (similar to the virtual env module) which would make things like you want to do more natural but there isn’t one at the moment.

-Toshio

You should be able to set `ansible_python_interpreter` to sth like `/opt/rh/rh-python34/bin/python` and then pip module will do what you want.