How do I use multiple ansible versions on the same machine for different playbooks that require specific versions?

4,664 views
Skip to first unread message

Philip Kirkland

unread,
Feb 10, 2016, 9:27:45 AM2/10/16
to Ansible Project
Hi all,

Perhaps I'm approaching this the wrong way; I would appreciate some feedback.

We have various playbooks that have been developed over a period of time. Due to the (sometimes) lack of backwards compatibility of ansible, some playbooks might require a specific version. I don't want to run this on different ansible runtime/orchestration servers; I'd like to be able to handle this on the one server.

In previous versions (prior to the core/extras submodule being split out), we could typically download some tar.gz releases and unzip/extract them into different directories. Then prior to running a playbook we could source hacking/env-setup for the specific version that we needed and could run the playbook.

For example:
source ansible-1.7.2/hacking/env-setup
# run my ansible-playbook that requires version 1.7.2

source ansible
-1.6.3/hacking/env-setup
#run my ansible-playbook that requires version 1.6.3

The above does not work since the core and extras modules became git submodules as outlined below.

Now I have a couple of options:

1. Take a release (such as http://releases.ansible.com/ansible/ansible-2.0.0.2.tar.gz). This doesn't have the hacking directory so how do I configure my environment? I don't want to run setup since doing this for different versions will override each other, and running jobs in parallel would certainly get issues if I did this. Hence I don't have an easy mechanism of catering for different versions.

2. Take a source tar.gz (such as https://github.com/ansible/ansible/archive/v2.0.0.2-1.tar.gz). Whilst this gives me the hacking directory the lib/ansible/modules/core and lib/ansible/modules/extras (which correspond to the git submodules) are empty, so I would need to obtain those as well. How do I get those?

What I think would solve my issue is a tarball that includes all the source (including the git submodules) as well as the hacking directory.

Or am I going about this the wrong way?

Thanks for any help, advice or pointers.

Phil

Bourgeois, Ghislain (6013905)

unread,
Feb 10, 2016, 10:03:32 AM2/10/16
to ansible...@googlegroups.com
Hi,
 
You can basically do what the env-setup script is doing with that in bash for example:
 
ANSIBLE=path-to-my-ansible-version
export PATH=$PATH:$ANSIBLE/bin
export PYTHONPATH=$ANSIBLE/lib
export ANSIBLE_LIBRARY=$ANSIBLE/library
 
You just need to manipulate those variables, so that should not be too bad to script.
 
Ghislain
--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/b0308811-de7f-45de-95a3-4d1d2241332e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
 

ProfHase

unread,
Feb 11, 2016, 11:33:47 AM2/11/16
to Ansible Project
I would propose you to use python's virtualenvs:

virtualenv ansible17
source ansible17/bin/activate
pip install ansible==1.7
# work with it
deactivate
# next time
source ansible17/bin/activate


It is the same approach as you are using, but as virtualenv encapsulates the whole environment, so you don't need to bother about the dependencies

ProfHase

unread,
Feb 11, 2016, 11:34:04 AM2/11/16
to Ansible Project
I would propose you to use python's virtualenvs:

virtualenv ansible17
source ansible17/bin/activate
pip install ansible==1.7
# work with it
deactivate
# next time
source ansible17/bin/activate


It is the same approach as you are using, but as virtualenv encapsulates the whole environment, so you don't need to bother about the dependencies

Am Mittwoch, 10. Februar 2016 15:27:45 UTC+1 schrieb Philip Kirkland:

Subramanian P V

unread,
Jul 31, 2016, 2:14:41 PM7/31/16
to Ansible Project
Hi Philip,

I am facing the same situation. Is there a way to run ansible like an excutable like sourcing in old environments. I have a setup where ansible 1.5 is present and on the same machine i need to  execute the ansible scripts of 2.0.0.2 version

Thanks

Regards
Subramanian

Carlos A. Carnero Delgado

unread,
Jul 31, 2016, 3:45:04 PM7/31/16
to ansible...@googlegroups.com
2016-07-28 19:57 GMT-04:00 Subramanian P V <subrama...@gmail.com>:
I am facing the same situation. Is there a way to run ansible like an excutable like sourcing in old environments. I have a setup where ansible 1.5 is present and on the same machine i need to  execute the ansible scripts of 2.0.0.2 version

IMO, the best option in this case is to make use of Python virtual environments, and install Ansible via pip. You can have several virtual environments, each with different Ansible versions, and then activate the one you need prior to running your playbooks.

HTH,
Carlos.

Mike Biancaniello

unread,
Aug 1, 2016, 9:38:20 AM8/1/16
to Ansible Project
I would also suggest python virtual environments.

Although, I have also used Docker images for running Ansible. I create a Docker image with 'ansible' as the ENTRYPOINT, then create a shell script to execute 'docker run -it --rm <image_name> <playbook_name> [<other options>]'. This will execute ansible inside the docker and use the playbooks that you put inside the image when you created it.
Reply all
Reply to author
Forward
0 new messages