diff options
author | Jo¶rgen Karlsson <jorgen.w.karlsson@ericsson.com> | 2015-10-14 14:41:41 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@172.30.200.206> | 2015-10-14 14:41:41 +0000 |
commit | a1378b700a9234e7fcbf77c7890030b306bc65ea (patch) | |
tree | d8e1b3bfdf484399d4d4aa572612c635fe3e05ea /ci | |
parent | 3bca848a141ba2728d036a1423b514027b0e4b98 (diff) | |
parent | d03858bbac357b6d705c7137d2d20d5c8e34ecc6 (diff) |
Merge "Docker container for Yardstick CI"
Diffstat (limited to 'ci')
-rw-r--r-- | ci/docker/Makefile | 27 | ||||
-rw-r--r-- | ci/docker/yardstick-ci/Dockerfile | 34 | ||||
-rwxr-xr-x | ci/docker/yardstick-ci/run_benchmarks | 60 | ||||
-rw-r--r-- | ci/run_tasks.sh | 43 | ||||
-rwxr-xr-x | ci/yardstick-verify | 182 |
5 files changed, 303 insertions, 43 deletions
diff --git a/ci/docker/Makefile b/ci/docker/Makefile new file mode 100644 index 000000000..81189960d --- /dev/null +++ b/ci/docker/Makefile @@ -0,0 +1,27 @@ +############################################################################## +# Copyright (c) 2015 Ericsson AB and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +SHELL = /bin/bash + +IMAGE = opnfv/yardstick-ci + +.PHONY: all +all: .docker + +.docker: + /usr/bin/docker build --rm=true --no-cache=true -t $(IMAGE):14.04 yardstick-ci + /usr/bin/docker tag -f $(IMAGE):14.04 $(IMAGE) + touch .docker + +.PHONY: clean +clean: + docker ps | grep $(IMAGE) | awk '{print $$1}' | xargs -r docker stop + docker ps -a | grep $(IMAGE) | awk '{print $$1}' | xargs -r docker rm + docker images -a | grep $(IMAGE) | awk '{print $$3}' | sort | uniq | xargs -r docker rmi + rm -f .docker diff --git a/ci/docker/yardstick-ci/Dockerfile b/ci/docker/yardstick-ci/Dockerfile new file mode 100644 index 000000000..15b0f6224 --- /dev/null +++ b/ci/docker/yardstick-ci/Dockerfile @@ -0,0 +1,34 @@ +############################################################################## +# Copyright (c) 2015 Ericsson AB and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +FROM ubuntu:14.04 + +LABEL image=opnfv/yardstick-ci + +ENV YARDSTICK_REPO_DIR /home/yardstick + +RUN apt-get update && apt-get install -y \ + wget \ + git \ + sshpass \ + qemu-utils \ + kpartx \ + libffi-dev \ + libssl-dev \ + python \ + python-dev \ + python-setuptools && \ + easy_install -U setuptools + +RUN apt-get -y autoremove && \ + apt-get clean + +RUN git clone https://gerrit.opnfv.org/gerrit/yardstick ${YARDSTICK_REPO_DIR} + +COPY ./run_benchmarks /usr/local/bin/ diff --git a/ci/docker/yardstick-ci/run_benchmarks b/ci/docker/yardstick-ci/run_benchmarks new file mode 100755 index 000000000..391ee63a4 --- /dev/null +++ b/ci/docker/yardstick-ci/run_benchmarks @@ -0,0 +1,60 @@ +#!/bin/bash +############################################################################## +# Copyright (c) 2015 Ericsson AB and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +set -e + +: ${YARDSTICK_REPO:='https://gerrit.opnfv.org/gerrit/yardstick'} +: ${YARDSTICK_REPO_DIR:='/home/yardstick'} +: ${YARDSTICK_BRANCH:='master'} + +: ${RELENG_REPO:='https://gerrit.opnfv.org/gerrit/releng'} +: ${RELENG_REPO_DIR:='/home/releng'} +: ${RELENG_BRANCH:='master'} + +: ${INSTALLER_TYPE:='fuel'} +: ${INSTALLER_IP:='10.20.0.2'} + +: ${EXTERNAL_NET_ID:='net04_ext'} + +# clone releng +if [ ! -d $RELENG_REPO_DIR ]; then + git clone $RELENG_REPO $RELENG_REPO_DIR +fi +cd $RELENG_REPO_DIR +git fetch --tags --progress $RELENG_REPO $RELENG_BRANCH +git checkout FETCH_HEAD + +# clone yardstick +if [ ! -d $YARDSTICK_REPO_DIR ]; then + git clone YARDSTICK_REPO $YARDSTICK_REPO_DIR +fi +cd $YARDSTICK_REPO_DIR +git fetch --tags --progress $YARDSTICK_REPO $YARDSTICK_BRANCH +git checkout FETCH_HEAD + +# Create openstack credentials +$RELENG_REPO_DIR/utils/fetch_os_creds.sh \ + -d /tmp/openrc \ + -i ${INSTALLER_TYPE} -a ${INSTALLER_IP} + +source /tmp/openrc + +# FIXME: Temporary OPNFV playground hack +if [ "$INSTALLER_TYPE" == "fuel" ]; then + ssh_opts="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" + if sshpass -p r00tme ssh 2>/dev/null $ssh_opts root@${INSTALLER_IP} \ + fuel environment --env 1 | grep opnfv-virt; then + export OS_ENDPOINT_TYPE='publicURL' + fi +fi + +export EXTERNAL_NET_ID + +$YARDSTICK_REPO_DIR/ci/yardstick-verify diff --git a/ci/run_tasks.sh b/ci/run_tasks.sh deleted file mode 100644 index 27ccb3a3c..000000000 --- a/ci/run_tasks.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash - -############################################################################## -# Copyright (c) 2015 Ericsson AB and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## - -# Run yardstick tasks back-to-back -# This script is called from yardstick-{pod} job and decides which tasks -# are executed as part of that job. - - -# verify that virtual environment is activated -# assumes the virtual environment has been created as described in README.rst -if [[ ! $(which python | grep venv) ]]; then - echo "Unable to activate venv...Exiting" - exit 1 -fi - -EXIT_CODE=0 - -# Define tasks to be run -TASK_FILE_NAMES[0]='samples/ping.yaml' -TASK_FILE_NAMES[1]='samples/iperf3.yaml' -TASK_FILE_NAMES[2]='samples/pktgen.yaml' -TASK_FILE_NAMES[3]='samples/fio.yaml' - -# Execute tasks -for TASK_FILE in ${TASK_FILE_NAMES[@]} -do - echo "Executing task from file: $TASK_FILE" - yardstick -d task start $TASK_FILE - - if [ $? -ne 0 ]; then - EXIT_CODE=1 - fi -done - -exit $EXIT_CODE
\ No newline at end of file diff --git a/ci/yardstick-verify b/ci/yardstick-verify new file mode 100755 index 000000000..c940213df --- /dev/null +++ b/ci/yardstick-verify @@ -0,0 +1,182 @@ +#!/bin/bash +############################################################################## +# Copyright (c) 2015 Ericsson AB and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +YARDSTICK_IMAGE_ID= +CIRROS_IMAGE_ID= + +QCOW_IMAGE="/tmp/workspace/yardstick/yardstick-trusty-server.img" + +cleanup() +{ + echo + echo "========== Cleanup ==========" + + if ! glance image-list; then + return + fi + + for image in $(glance image-list | grep -e cirros-0.3.3 -e yardstick-trusty-server | awk '{print $2}'); do + echo "Deleting image $image..." + glance image-delete $image || true + done +} + +exitcode="" + +error_exit() +{ + local rc=$? + + if [ -z "$exitcode" ]; then + # In case of recursive traps (!?) + exitcode=$rc + fi + + cleanup + + echo "Exiting with RC=$exitcode" + + exit $exitcode +} + +set -o errexit +set -o pipefail + +install_yardstick() +{ + echo + echo "========== Installing yardstick ==========" + + if ! sudo python setup.py install; then + echo 'Yardstick installation failed!' + exit 1 + fi +} + +build_yardstick_image() +{ + echo + echo "========== Build yardstick cloud image ==========" + + sudo $(which yardstick-img-modify) $(pwd)/tools/ubuntu-server-cloudimg-modify.sh + if [ ! -f $QCOW_IMAGE ]; then + echo "Failed building QCOW image" + exit 1 + fi +} + +load_cirros_image() +{ + echo + echo "========== Loading cirros cloud image ==========" + + local image_file= + + wget http://download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img -O /tmp/cirros.img + + output=$(glance image-create \ + --name cirros-0.3.3 \ + --disk-format qcow2 \ + --container-format bare \ + --file /tmp/cirros.img) + echo "$output" + + CIRROS_IMAGE_ID=$(echo "$output" | grep " id " | awk '{print $(NF-1)}') + if [ -z "$CIRROS_IMAGE_ID" ]; then + echo 'Failed uploading cirros image to cloud'. + exit 1 + fi + + echo "Cirros image id: $CIRROS_IMAGE_ID" +} + +load_yardstick_image() +{ + echo + echo "========== Loading yardstick cloud image ==========" + + output=$(glance --os-image-api-version 1 image-create \ + --name yardstick-trusty-server \ + --is-public true --disk-format qcow2 \ + --container-format bare \ + --file $QCOW_IMAGE) + echo "$output" + + GLANCE_IMAGE_ID=$(echo "$output" | grep " id " | awk '{print $(NF-1)}') + + if [ -z "$GLANCE_IMAGE_ID" ]; then + echo 'Failed uploading image to cloud'. + exit 1 + fi + + sudo rm -f $QCOW_IMAGE + + echo "Glance image id: $GLANCE_IMAGE_ID" +} + +run_test() +{ + echo + echo "========== Running yardstick test suite ==========" + + # Just run sample ping for now. + if ! yardstick -d task start samples/ping.yaml; then + echo "Yardstick test FAILED" + exit 1 + fi +} + +main() +{ + GITROOT=$(cd $(dirname $0) && git rev-parse --show-toplevel) + + cd $GITROOT + + # install yardstick + install_yardstick + + # check if some necessary variables is set + if [ -z "$OS_AUTH_URL" ]; then + echo "OS_AUTH_URL is unset or empty" + exit 1 + fi + + # extract auth ip + ip=$(echo $OS_AUTH_URL | grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+') + + # check if the auth port is open + echo "Checking if tcp port $ip:5000 is open..." + nc -zv -w 10 $ip 5000; rc=$?; + if [ $rc -eq 0 ]; then + echo "$ip:5000 is open for tcp connections" + else + echo "$ip:5000 is closed" + exit 1 + fi + + # check if the api is up + echo "Checking if OS API is working..." + if ! glance image-list > /dev/null; then + echo "OS API is down" + exit 1 + fi + + cleanup + + trap "error_exit" EXIT SIGTERM + + build_yardstick_image + load_yardstick_image + load_cirros_image + + run_test +} + +main |