diff options
author | jose.lausuch <jose.lausuch@ericsson.com> | 2015-09-30 15:29:04 +0200 |
---|---|---|
committer | jose.lausuch <jose.lausuch@ericsson.com> | 2015-10-07 10:07:22 +0200 |
commit | 71d85bca9549348b0c2f486bac58923f299e5a88 (patch) | |
tree | 51ba663c21cf3facfe98625839993379c7b0f08d /docker | |
parent | ec6b78ebea4aee67f299d31af99b9e0e2ea4e9a5 (diff) |
Dockerfile for Functest
Includes also:
- script to trigger Functest automatically within the container
- common requirements file to install python modules
- added new parameters in the config_functest.yaml
- other small adjustements
JIRA: FUNCTEST-29
Change-Id: I230631e43e5f7e14938b35903ecec1b17db0f88a
Signed-off-by: jose.lausuch <jose.lausuch@ericsson.com>
Diffstat (limited to 'docker')
-rw-r--r-- | docker/Dockerfile | 50 | ||||
-rw-r--r-- | docker/requirements.pip | 9 | ||||
-rw-r--r-- | docker/start.sh | 142 |
3 files changed, 201 insertions, 0 deletions
diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 00000000..49d9edfe --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,50 @@ +######################################## +# Docker container for FUNCTEST +######################################## +# Purpose: run all the tests against the POD +# from a pre-installed docker image +# +# Maintained by Jose Lausuch +# Build: +# $ docker build -t opnfv/functest:tag . +# +# Execution: +# $ docker run -t -i -e "INSTALLER_TYPE=fuel/foreman" \ +# -e "INSTALLER_IP=10.20.0.2/172.30.10.73" opnfv/functest +# + + +FROM ubuntu:14.04 +MAINTAINER Jose Lausuch <jose.lausuch@ericsson.com> +LABEL version="0.1" description="OPNFV Functest Docker container" + +ENV repos_dir /home/opnfv/repos + +# Packaged dependencies +RUN apt-get update && apt-get install -y \ +ssh \ +sshpass \ +git \ +gcc \ +wget \ +python-dev \ +python-pip \ +postgresql \ +libxslt-dev \ +libssl-dev \ +libgmp3-dev \ +libxml2-dev \ +libffi-dev \ +crudini \ +--no-install-recommends + + +RUN mkdir -p ${repos_dir} + +RUN git config --global http.sslVerify false +RUN git clone https://gerrit.opnfv.org/gerrit/functest ${repos_dir}/functest +RUN git clone https://gerrit.opnfv.org/gerrit/releng ${repos_dir}/releng +RUN git clone https://github.com/openstack/rally.git ${repos_dir}/rally + +RUN pip install -r ${repos_dir}/functest/docker/requirements.pip +RUN chmod 744 ${repos_dir}/functest/docker/start.sh
\ No newline at end of file diff --git a/docker/requirements.pip b/docker/requirements.pip new file mode 100644 index 00000000..22c8199d --- /dev/null +++ b/docker/requirements.pip @@ -0,0 +1,9 @@ +pyyaml==3.10 +gitpython==1.0.1 +python-neutronclient==2.6.0 +python-novaclient==2.28.1 +python-glanceclient==1.1.0 +python-keystoneclient==1.6.0 +cloudify==3.2.1 +virtualenv==1.11.4 +pexpect==4.0
\ No newline at end of file diff --git a/docker/start.sh b/docker/start.sh new file mode 100644 index 00000000..bd2308ca --- /dev/null +++ b/docker/start.sh @@ -0,0 +1,142 @@ +#!/bin/bash + +# +# Author: Jose Lausuch (jose.lausuch@ericsson.com) +# +# Installs the Functest framework within the Docker container +# and run the tests automatically +# + + +config_file=$(find / -name config_functest.yaml) + +REPOS_DIR=$(cat $config_file | grep -w dir_repos | awk 'END {print $NF}') +FUNCTEST_REPO_DIR=$(cat $config_file | grep -w dir_repo_functest | awk 'END {print $NF}') +RALLY_REPO_DIR=$(cat $config_file | grep -w dir_repo_rally | awk 'END {print $NF}') +RELENG_REPO_DIR=$(cat $config_file | grep -w dir_repo_releng | awk 'END {print $NF}') + +FUNCTEST_DIR=$(cat $config_file | grep -w dir_functest | awk 'END {print $NF}') +FUNCTEST_RESULTS_DIR=$(cat $config_file | grep -w dir_results | awk 'END {print $NF}') +FUNCTEST_CONF_DIR=$(cat $config_file | grep -w dir_functest_conf | awk 'END {print $NF}') +FUNCTEST_DATA_DIR=$(cat $config_file | grep -w dir_functest_data | awk 'END {print $NF}') +RALLY_VENV=$(cat $config_file | grep -w dir_rally_inst | awk 'END {print $NF}') +RALLY_COMMIT=$(cat $config_file | grep -w rally_stable_commit | awk 'END {print $NF}') + + +echo "REPOS_DIR=${REPOS_DIR}" +echo "FUNCTEST_REPO_DIR=${FUNCTEST_REPO_DIR}" +echo "RALLY_REPO_DIR=${RALLY_REPO_DIR}" +echo "RELENG_REPO_DIR=${RELENG_REPO_DIR}" +echo "FUNCTEST_DIR=${FUNCTEST_DIR}" +echo "FUNCTEST_RESULTS_DIR=${FUNCTEST_RESULTS_DIR}" +echo "FUNCTEST_CONF_DIR=${FUNCTEST_CONF_DIR}" +echo "FUNCTEST_DATA_DIR=${FUNCTEST_DATA_DIR}" +echo "RALLY_VENV=${RALLY_VENV}" +echo "RALLY_COMMIT=${RALLY_COMMIT}" + + +info () { + logger -s -t "start.info" "$*" +} + + +error () { + logger -s -t "start.error" "$*" + exit 1 +} + +# Check if environment variables are set +if [ -z ${INSTALLER_TYPE} ]; then + error "Environment variable 'INSTALLER_TYPE' is not defined." +elif [ "${INSTALLER_TYPE}" != "fuel" ] && [ "${INSTALLER_TYPE}" != "foreman" ]; then + error "Invalid environment variable INSTALLER_TYPE=${INSTALLER_TYPE}" +fi + +if [ -z ${INSTALLER_IP} ]; then + error "Environment variable 'INSTALLER_IP' is not defined." +fi + + +# Update repos +cd ${FUNCTEST_REPO_DIR} +git pull +cd ${RELENG_REPO_DIR} +git pull +cd ${RALLY_REPO_DIR} +git reset --hard ${RALLY_COMMIT} + + +# Create directories +mkdir -p ${FUNCTEST_CONF_DIR} +mkdir -p ${FUNCTEST_DATA_DIR} +mkdir -p ${FUNCTEST_RESULTS_DIR}/ODL + +# Detect type of installer +# NOTE: this is tricky, since the IPs will have to be the same ALWAYS + + +# Create Openstack credentials file +${REPOS_DIR}/releng/utils/fetch_os_creds.sh -d ${FUNCTEST_CONF_DIR}/openstack.creds \ + -i ${INSTALLER_TYPE} -a ${INSTALLER_IP} +retval=$? +if [ $retval != 0 ]; then + echo "Cannot retrieve credentials file from installation. Check logs." + exit $retval +fi + + +# Source credentials +source ${FUNCTEST_CONF_DIR}/openstack.creds + + +# Prepare Functest Environment +echo "Functest: prepare Functest environment" +python ${FUNCTEST_REPO_DIR}/testcases/config_functest.py --debug ${FUNCTEST_REPO_DIR}/ start +retval=$? +if [ $retval != 0 ]; then + echo "Error when configuring Functest environment" + exit $retval +fi + +# vPing +echo "Functest: run vPing" +python ${FUNCTEST_REPO_DIR}/testcases/vPing/CI/libraries/vPing.py --debug ${FUNCTEST_REPO_DIR}/ -r + +# ODL +echo "Functest: run ODL suite" + +if [ $INSTALLER_TYPE == "fuel" ]; then + odl_ip=$(keystone catalog --service network | grep publicURL | cut -f3 -d"/" | cut -f1 -d":") + neutron_ip=$(keystone catalog --service identity | grep publicURL | cut -f3 -d"/" | cut -f1 -d":") + usr_name=$(env | grep OS | grep OS_USERNAME | cut -f2 -d'=') + pass=$(env | grep OS | grep OS_PASSWORD | cut -f2 -d'=') + odl_port=8181 + ODL_PORT=$odl_port ODL_IP=$odl_ip NEUTRON_IP=$neutron_ip USR_NAME=$usr_name PASS=$pass \ + ${FUNCTEST_REPO_DIR}/testcases/Controllers/ODL/CI/start_tests.sh +elif [ $INSTALLER_TYPE == "foreman" ]; then + #odl_port=8081 + ${FUNCTEST_REPO_DIR}/testcases/Controllers/ODL/CI/start_tests.sh +else + echo "INSTALLER_TYPE not valid." + exit 1 +fi + +# rally +echo "Functest: run Functest Rally Bench suites" +python ${FUNCTEST_REPO_DIR}/testcases/VIM/OpenStack/CI/libraries/run_rally.py --debug ${FUNCTEST_REPO_DIR}/ all + +# tempest +echo "Functest: run Tempest suite" +rally verify start smoke +rally verify list + +# collect results +echo "Functest: copy results and clean Functest environment" + +# save ODL results +cp -Rf ${FUNCTEST_REPO_DIR}/testcases/Controllers/ODL/CI/logs ${FUNCTEST_RESULTS_DIR}/ODL + +# save tempest.conf for further troubleshooting +cp $RALLY_VENV/tempest/for-deployment-*/tempest.conf ${FUNCTEST_CONF_DIR} + + |