diff --git a/hacking/README.md b/hacking/README.md new file mode 100644 index 0000000..140a519 --- /dev/null +++ b/hacking/README.md @@ -0,0 +1,23 @@ +'Hacking' directory tools +========================= + +Env-setup +--------- + +The 'env-setup' script modifies your environment to allow you to run +tower-cli from a git checkout using python 2.6+. + +First, set up your environment to run from the checkout: + + $ source ./hacking/env-setup + +You will need some basic prerequisites installed. If you do not already have them +and do not wish to install them from your operating system package manager, you +can install them from pip + + $ easy_install pip # if pip is not already available + $ pip install -r requirements.txt + +From there, follow tower-cli instructions on docs.ansible.com as normal. + + diff --git a/hacking/env-setup b/hacking/env-setup new file mode 100644 index 0000000..05dc9a5 --- /dev/null +++ b/hacking/env-setup @@ -0,0 +1,85 @@ +# usage: source hacking/env-setup [-q] +# modifies environment for running Ansible Tower CLI from checkout + +# Default values for shell variables we use +PYTHONPATH=${PYTHONPATH-""} +PATH=${PATH-""} +MANPATH=${MANPATH-""} +PYTHON=$(which python 2>/dev/null || which python3 2>/dev/null) +PYTHON_BIN=${PYTHON_BIN-$PYTHON} + +verbosity=${1-info} # Defaults to `info' if unspecified + +if [ "$verbosity" = -q ]; then + verbosity=silent +fi + +# When run using source as directed, $0 gets set to bash, so we must use $BASH_SOURCE +if [ -n "$BASH_SOURCE" ] ; then + HACKING_DIR=$(dirname "$BASH_SOURCE") +elif [ $(basename -- "$0") = "env-setup" ]; then + HACKING_DIR=$(dirname "$0") +# Works with ksh93 but not pdksh, have to eval to keep ash happy... +elif [ -n "$KSH_VERSION" ] && echo $KSH_VERSION | grep -qv '^@(#)PD KSH'; then + eval "HACKING_DIR=\$(dirname \"\${.sh.file}\")" +else + HACKING_DIR="$PWD/hacking" +fi +# The below is an alternative to readlink -fn which doesn't exist on OS X +# Source: http://stackoverflow.com/a/1678636 +FULL_PATH=$($PYTHON_BIN -c "import os; print(os.path.realpath('$HACKING_DIR'))") +export ANSIBLE_HOME="$(dirname "$FULL_PATH")" + +PREFIX_PYTHONPATH="$ANSIBLE_HOME/lib" +PREFIX_PATH="$ANSIBLE_HOME/bin" +PREFIX_MANPATH="$ANSIBLE_HOME/docs/man" + +expr "$PYTHONPATH" : "${PREFIX_PYTHONPATH}.*" > /dev/null || export PYTHONPATH="$PREFIX_PYTHONPATH:$PYTHONPATH" +expr "$PATH" : "${PREFIX_PATH}.*" > /dev/null || export PATH="$PREFIX_PATH:$PATH" +expr "$MANPATH" : "${PREFIX_MANPATH}.*" > /dev/null || export MANPATH="$PREFIX_MANPATH:$MANPATH" + +# +# Generate egg_info so that pkg_resources works +# + +# Do the work in a function so we don't repeat ourselves later +gen_egg_info() +{ + if [ -e "$PREFIX_PYTHONPATH/ansible_tower_cli.egg-info" ] ; then + \rm -rf "$PREFIX_PYTHONPATH/ansible_tower_cli.egg-info" + fi + $PYTHON_BIN setup.py egg_info +} + +if [ "$ANSIBLE_HOME" != "$PWD" ] ; then + current_dir="$PWD" +else + current_dir="$ANSIBLE_HOME" +fi +( + cd "$ANSIBLE_HOME" + if [ "$verbosity" = silent ] ; then + gen_egg_info > /dev/null 2>&1 + find . -type f -name "*.pyc" -exec rm -f {} \; > /dev/null 2>&1 + else + gen_egg_info + find . -type f -name "*.pyc" -exec rm -f {} \; + fi + cd "$current_dir" +) + +if [ "$verbosity" != silent ] ; then + cat <<- EOF + + Setting up Ansible Tower CLI to run out of checkout... + + PATH=$PATH + PYTHONPATH=$PYTHONPATH + MANPATH=$MANPATH + + Remember, you may wish to specify your host file with -i + + Done! + + EOF +fi diff --git a/hacking/env-setup.fish b/hacking/env-setup.fish new file mode 100644 index 0000000..0096b8e --- /dev/null +++ b/hacking/env-setup.fish @@ -0,0 +1,80 @@ +#!/usr/bin/env fish +# usage: . ./hacking/env-setup [-q] +# modifies environment for running Ansible Tower CLI from checkout +set HACKING_DIR (dirname (status -f)) +set FULL_PATH (python -c "import os; print(os.path.realpath('$HACKING_DIR'))") +set ANSIBLE_HOME (dirname $FULL_PATH) +set PREFIX_PYTHONPATH $ANSIBLE_HOME/lib +set PREFIX_PATH $ANSIBLE_HOME/bin +set PREFIX_MANPATH $ANSIBLE_HOME/docs/man + +# set quiet flag +if set -q argv + switch $argv + case '-q' '--quiet' + set QUIET "true" + case '*' + end +end + +# Set PYTHONPATH +if not set -q PYTHONPATH + set -gx PYTHONPATH $PREFIX_PYTHONPATH +else + switch PYTHONPATH + case "$PREFIX_PYTHONPATH*" + case "*" + if not [ $QUIET ] + echo "Appending PYTHONPATH" + end + set -gx PYTHONPATH "$PREFIX_PYTHONPATH:$PYTHONPATH" + end +end + +# Set PATH +if not contains $PREFIX_PATH $PATH + set -gx PATH $PREFIX_PATH $PATH +end + +# Set MANPATH +if not contains $PREFIX_MANPATH $MANPATH + if not set -q MANPATH + set -gx MANPATH $PREFIX_MANPATH: + else + set -gx MANPATH $PREFIX_MANPATH $MANPATH + end +end + +set -gx ANSIBLE_LIBRARY $ANSIBLE_HOME/library + +# Generate egg_info so that pkg_resources works +pushd $ANSIBLE_HOME +if [ $QUIET ] + python setup.py -q egg_info +else + python setup.py egg_info +end +if test -e $PREFIX_PYTHONPATH/ansible*.egg-info + rm -r $PREFIX_PYTHONPATH/ansible*.egg-info +end +mv ansible*egg-info $PREFIX_PYTHONPATH +find . -type f -name "*.pyc" -delete +popd + + +if not [ $QUIET ] + echo "" + echo "Setting up Ansible Tower CLI to run out of checkout..." + echo "" + echo "PATH=$PATH" + echo "PYTHONPATH=$PYTHONPATH" + echo "ANSIBLE_LIBRARY=$ANSIBLE_LIBRARY" + echo "MANPATH=$MANPATH" + echo "" + echo "Remember, you may wish to specify your host file with -i" + echo "" + echo "Done!" + echo "" +end + +set -e QUIET