#!/bin/bash # # Testing script which spins up a docker instance each time # a major change is made to a file DOCKER="/usr/bin/docker" DOCKER_ACCT_DEST=lf_tooldev DOCKER_ACCT_SRC=herlolf DOCKER_IMG_REV=latest DISTROS=(centos:7 centos:6 ubuntu:14.04 opensuse:13.2) SCRIPT_HOME=${PWD} TOOLS_DIR=${SCRIPT_HOME}/tmp/tools/tools TOOLS_FILES=(__init__.py linux/linuxtools.py tools.pth) DELETE_IMAGE=y BUILD_ONLY=n NOSETESTS="FALSE" while getopts :d:s:khbn FLAG; do case "${FLAG}" in d) #get distro list IFS=' ' read -a DISTROS <<< ${OPTARG} # DISTROS="${OPTARG}" ;; k) # keep image flag DELETE_IMAGE=n ;; n) # run nosetests NOSETESTS="TRUE" ;; s) # docker source account DOCKER_ACCT_SRC=${OPTARG} ;; b) # docker source account BUILD_ONLY=y ;; h) echo "Usage: $0 [-d ] [-k] [-s ] [-h] " echo echo "-d: distributions for which to build docker images." echo ' Default: (centos:7 centos:6 ubuntu:14.04 opensuse:13.2)' echo echo "-k: keep generated docker images" echo echo "-s: source docker account used for building images" echo " Default: herlolf" echo " See examples at https://hub.docker.com/u/herlolf/" echo echo "-h: help" echo echo -e "(eg $0 -d "centos:7 ubuntu:14.04" -s herlolf -k '/path/to/tool')"\\n exit 0 ;; :) echo "Option -${OPTARG} requires an argument" exit 1 ;; esac done shift $((OPTIND-1)) if [ $# -lt 1 ]; then echo "For Help, use '$0 -h'" exit 1 else if [ -d "${1}" ]; then DEV_PATH=$1 else echo "${1} is not a valid path. Please check and try again." exit 1 fi fi for file in ${TOOLS_FILES[*]}; do if [ ! -e "${TOOLS_DIR}/${file}" ]; then echo "Please copy ${file} from git" echo "to ${TOOLS_DIR}/." exit 1 fi done if [ "${NOSETESTS}" == "TRUE" ]; then CMD_TO_RUN="[ \"/srv/tools/run_tests.sh\", \"TRUE\" ]" else CMD_TO_RUN="[ \"/srv/tools/run_tests.sh\" ]" fi #echo "CMD_TO_RUN: ${CMD_TO_RUN}" # clean up ${DEV_PATH} find ${DEV_PATH} -name '.*sw*' -delete for DISTRO in ${DISTROS[*]}; do D=${DISTRO/:*/} V=${DISTRO##*:} rm -rf ${SCRIPT_HOME}/tmp/${D}-${V} case ${DISTRO} in "centos:7" ) PYTHON_PATH='/usr/lib/python2.7/site-packages' ;; "centos:6" ) PYTHON_PATH='/usr/lib/python2.6/site-packages' ;; "ubuntu:14.04" ) PYTHON_PATH='/usr/lib/python2.7/dist-packages' ;; "opensuse:13.2" ) PYTHON_PATH='/usr/lib/python2.7/site-packages' ;; esac if [ ! -d "${SCRIPT_HOME}/tmp/${D}-${V}" ]; then mkdir -p ${SCRIPT_HOME}/tmp/${D}-${V} fi if [ ! -d "${SCRIPT_HOME}/tmp/tools" ]; then mkdir -p ${SCRIPT_HOME}/tmp/tools fi cp -pr ${DEV_PATH} ${SCRIPT_HOME}/tmp/${D}-${V}/ cat <<__EOF__ > ${SCRIPT_HOME}/Dockerfile.${D}-${V} FROM ${DOCKER_ACCT_SRC}/${D}-${V}:${DOCKER_IMG_REV} MAINTAINER "Clint Savage" # copy in salt minion configs COPY salt/conf/minion /etc/salt/minion # copy in tools to test COPY tmp/tools/ /srv/tools/tools/ ADD tmp/tools/tools/tools.pth ${PYTHON_PATH}/tools.pth COPY tmp/${D}-${V} /srv/tools/ COPY run_tests.sh /srv/tools/ RUN chmod +x /srv/tools/run_tests.sh CMD ${CMD_TO_RUN} __EOF__ DATE=$(date +%Y%m%d%H%M) echo echo "BUILDING DOCKER IMAGE ${DOCKER_ACCT_DEST}/${D}-${V}:${DATE}" echo "===========================================================" ${DOCKER} build --rm=true --pull=false -t ${DOCKER_ACCT_DEST}/${D}-${V}:${DATE} \ --file=${SCRIPT_HOME}/Dockerfile.${D}-${V} ${SCRIPT_HOME} &> /dev/null if [ "${BUILD_ONLY}" == "y" ]; then echo "BUILD_ONLY (-b) flag was passed, stopping" echo "To run the image, try:" echo "${DOCKER} run -it ${DOCKER_ACCT_DEST}/${D}-${V}:${DATE} '/bin/bash'" exit 0 fi ${DOCKER} run -it ${DOCKER_ACCT_DEST}/${D}-${V}:${DATE} if [ "${DELETE_IMAGE}" == "y" ]; then echo echo "DELETING DOCKER IMAGE ${DOCKER_ACCT_DEST}/${D}-${V}:${DATE}" echo "===========================================================" ${DOCKER} rmi --force ${DOCKER_ACCT_DEST}/${D}-${V}:${DATE} &> /dev/null fi done