Script which installs variety of Ansible versions and sets them up using virtualenv.
source ./ansible_version 2.7.0
Mostly based on original script by @gbolo
#!/bin/bash | |
# Some default versions | |
ANSIBLE_VERSIONS="2.4.3 2.4.6 2.5.0 2.5.11 2.6.7 2.7.0 2.7.1" | |
# Setting virtualenv directory | |
VIRTUALENV_DIR=${HOME}/virtualenv/ansible | |
# Function to install ansible versions | |
INSTALL_ANSIBLE_VERSIONS() { | |
local version=${1} | |
# If a version is specified then use that for installation instead of using a list of versions | |
if [ "x${version}" != "x" ]; then | |
ANSIBLE_VERSIONS=${version} | |
fi | |
if [ ! -d "${VIRTUALENV_DIR}" ]; then | |
echo ">> CREATING VIRTUALENV DIR: ${VIRTUALENV_DIR}" | |
mkdir -p "${VIRTUALENV_DIR}" | |
fi | |
for v in ${ANSIBLE_VERSIONS}; do | |
if [ ! -d "${VIRTUALENV_DIR}/${v}" ]; then | |
echo ">> INSTALLING ANSIBLE VERSION: ${v}" | |
virtualenv "${VIRTUALENV_DIR}/${v}" | |
source "${VIRTUALENV_DIR}/${v}/bin/activate" | |
# Installing docker-py for docker operations on local machine | |
# Installing jmespath for json_query | |
# Installing mitogen for speed up | |
pip install ansible==${v} docker-py jmespath mitogen | |
deactivate | |
fi | |
done | |
} | |
# List installed versions | |
SHOW_INSTALLED_VERSIONS() { | |
echo ">> AVAILABLE ANSIBLE VERSIONS:" | |
for v in ${ANSIBLE_VERSIONS}; do | |
echo " ${v}" | |
done | |
echo | |
} | |
# Load specified version of ansible | |
LOAD_ANSIBLE_VERSION() { | |
local CHOSEN_VERSION="${1}" | |
if [ -d "${VIRTUALENV_DIR}/${CHOSEN_VERSION}" ]; then | |
source "${VIRTUALENV_DIR}/${CHOSEN_VERSION}/bin/activate" | |
# Setting environment variables to use mitogen | |
export ANSIBLE_STRATEGY_PLUGINS=`find "${VIRTUALENV_DIR}/${CHOSEN_VERSION}" -type d -name "ansible_mitogen"` | |
export ANSIBLE_STRATEGY="mitogen_linear" | |
else | |
echo "VERSION NOT AVAILABLE" | |
exit 1 | |
fi | |
} | |
# ------------------------------------------------------------------------------ | |
# check for Required program(s) | |
req_progs=(virtualenv pip) | |
for p in ${req_progs[@]}; do | |
hash "$p" 2>&- || \ | |
{ echo >&2 " Required program \"$p\" not installed."; exit 1; } | |
done | |
# Calling install function | |
INSTALL_ANSIBLE_VERSIONS ${1} | |
# If all good load it | |
if [ $# -eq 0 ]; then | |
SHOW_INSTALLED_VERSIONS | |
read -p "SELECT VERSION: " ANSIBLE_VERSION | |
LOAD_ANSIBLE_VERSION ${ANSIBLE_VERSION} | |
else | |
LOAD_ANSIBLE_VERSION ${1} | |
fi |
nice!
can you add a quick check for required bins? for example:
# Required program(s) req_progs=(virtualenv pip) for p in ${req_progs[@]}; do hash "$p" 2>&- || \ { echo >&2 " Required program \"$p\" not installed."; exit 1; } done
Done!!!
Thanks for suggestion 👍
nice!
can you add a quick check for required bins? for example: