From 1cdc3d7ac2949ffbf21851773314fa73c4ac7a05 Mon Sep 17 00:00:00 2001 From: JingLu5 Date: Sun, 9 Oct 2016 12:25:34 +0800 Subject: [PATCH] Provide yardstick-trusty-server.tar.gz for lxd scenario JIRA: YARDSTICK-325 This patch removes ping_lxd_test.yaml and changes vm image used for lxd senarios. In the *-lxd-* scenariois, Cirros LXC 0.3 image will be used for Ping test case. For yardstick generic test, a dedicated yardstick vm image will be used. Change-Id: I5f9e7a92e3e5dded0014baec77085d80cc904b52 Signed-off-by: JingLu5 --- tests/ci/load_images.sh | 60 ++++++--- tests/opnfv/test_cases/opnfv_yardstick_tc002.yaml | 3 +- tests/opnfv/test_cases/ping_lxd_test.yaml | 44 ------- .../test_suites/opnfv_os-nosdn-lxd-ha_daily.yaml | 9 +- .../test_suites/opnfv_os-nosdn-lxd-noha_daily.yaml | 6 + tools/yardstick-img-lxd-modify | 135 +++++++++++++++++++++ 6 files changed, 188 insertions(+), 69 deletions(-) delete mode 100644 tests/opnfv/test_cases/ping_lxd_test.yaml create mode 100755 tools/yardstick-img-lxd-modify diff --git a/tests/ci/load_images.sh b/tests/ci/load_images.sh index fd14ab631..8c7caf4d9 100755 --- a/tests/ci/load_images.sh +++ b/tests/ci/load_images.sh @@ -25,14 +25,26 @@ build_yardstick_image() echo echo "========== Build yardstick cloud image ==========" - local cmd="sudo $(which yardstick-img-modify) $(pwd)/tools/ubuntu-server-cloudimg-modify.sh" + if [ "$DEPLOY_SCENARIO" == *"-lxd-"* ]; then + local cmd="sudo $(which yardstick-img-lxd-modify) $(pwd)/tools/ubuntu-server-cloudimg-modify.sh" - # Build the image. Retry once if the build fails. - $cmd || $cmd + # Build the image. Retry once if the build fails + $cmd || $cmd - if [ ! -f $QCOW_IMAGE ]; then - echo "Failed building QCOW image" - exit 1 + if [ ! -f $RAW_IMAGE ]; then + echo "Failed building RAW image" + exit 1 + fi + else + local cmd="sudo $(which yardstick-img-modify) $(pwd)/tools/ubuntu-server-cloudimg-modify.sh" + + # Build the image. Retry once if the build fails + $cmd || $cmd + + if [ ! -f $QCOW_IMAGE ]; then + echo "Failed building QCOW image" + exit 1 + fi fi } @@ -76,12 +88,21 @@ load_yardstick_image() EXTRA_PARAMS=$EXTRA_PARAMS" --property hw_mem_page_size=large" fi - output=$(eval glance --os-image-api-version 1 image-create \ - --name yardstick-trusty-server \ - --is-public true --disk-format $DISK_FORMAT \ - --container-format bare \ - $EXTRA_PARAMS \ - --file $QCOW_IMAGE) + if [ "$DEPLOY_SCENARIO" == *"-lxd-"* ]; then + output=$(eval glance --os-image-api-version 1 image-create \ + --name yardstick-trusty-server \ + --is-public true --disk-format root-tar \ + --container-format bare \ + $EXTRA_PARAMS \ + --file $RAW_IMAGE) + else + output=$(eval glance --os-image-api-version 1 image-create \ + --name yardstick-trusty-server \ + --is-public true --disk-format qcow2 \ + --container-format bare \ + $EXTRA_PARAMS \ + --file $QCOW_IMAGE) + fi echo "$output" @@ -92,7 +113,11 @@ load_yardstick_image() exit 1 fi - sudo rm -f $QCOW_IMAGE + if [ "$DEPLOY_SCENARIO" == *"-lxd-"* ]; then + sudo rm -f $RAW_IMAGE + else + sudo rm -f $QCOW_IMAGE + fi echo "Glance image id: $GLANCE_IMAGE_ID" } @@ -112,7 +137,7 @@ load_cirros_image() output=$(glance image-create \ --name cirros-0.3.3 \ - --disk-format $DISK_FORMAT \ + --disk-format qcow2 \ --container-format bare \ $EXTRA_PARAMS \ --file $image_file) @@ -179,12 +204,7 @@ create_nova_flavor() main() { QCOW_IMAGE="/tmp/workspace/yardstick/yardstick-trusty-server.img" - - if [ "$DEPLOY_SCENARIO" == "os-nosdn-lxd-ha" -o "$DEPLOY_SCENARIO" == "os-nosdn-lxd-noha" ]; then - DISK_FORMAT="raw" - else - DISK_FORMAT="qcow2" - fi + RAW_IMAGE="/tmp/workspace/yardstick/yardstick-trusty-server.tar.gz" build_yardstick_image load_yardstick_image diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc002.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc002.yaml index 93d6ac018..3c7b988c0 100644 --- a/tests/opnfv/test_cases/opnfv_yardstick_tc002.yaml +++ b/tests/opnfv/test_cases/opnfv_yardstick_tc002.yaml @@ -2,6 +2,7 @@ # measure network latency using ping schema: "yardstick:task:0.1" +{% set image = image or "cirros-0.3.3" %} scenarios: {% for i in range(2) %} - @@ -23,7 +24,7 @@ scenarios: context: name: demo - image: cirros-0.3.3 + image: {{image}} flavor: yardstick-flavor user: cirros diff --git a/tests/opnfv/test_cases/ping_lxd_test.yaml b/tests/opnfv/test_cases/ping_lxd_test.yaml deleted file mode 100644 index d20035690..000000000 --- a/tests/opnfv/test_cases/ping_lxd_test.yaml +++ /dev/null @@ -1,44 +0,0 @@ ---- -# measure network latency using ping -# this tc is dedicated for os-nosdn-lxd scenario - -schema: "yardstick:task:0.1" -scenarios: -{% for i in range(2) %} -- - type: Ping - options: - packetsize: 100 - host: athena.demo - target: ares.demo - - runner: - type: Duration - duration: 60 - interval: 10 - - sla: - max_rtt: 10 - action: monitor -{% endfor %} - -context: - name: demo - image: Cirros LXC 0.3 - flavor: yardstick-flavor - user: cirros - - placement_groups: - pgrp1: - policy: "availability" - - servers: - athena: - floating_ip: true - placement: "pgrp1" - ares: - placement: "pgrp1" - - networks: - test: - cidr: '10.0.1.0/24' diff --git a/tests/opnfv/test_suites/opnfv_os-nosdn-lxd-ha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-nosdn-lxd-ha_daily.yaml index 730284b9f..01591b9d2 100644 --- a/tests/opnfv/test_suites/opnfv_os-nosdn-lxd-ha_daily.yaml +++ b/tests/opnfv/test_suites/opnfv_os-nosdn-lxd-ha_daily.yaml @@ -7,12 +7,13 @@ name: "os-nosdn-lxd-ha" test_cases_dir: "tests/opnfv/test_cases/" test_cases: - - file_name: ping_lxd_test.yaml + file_name: opnfv_yardstick_tc002.yaml constraint: installer: joid - pod: intel-pod5 -- - file_name: opnfv_yardstick_tc002.yaml + pod: intel-pod5,intel-pod6 + task_args: + intel-pod5: '{"image": "Cirros LXC 0.3"}' + intel-pod6: '{"image": "Cirros LXC 0.3"}' - file_name: opnfv_yardstick_tc005.yaml - diff --git a/tests/opnfv/test_suites/opnfv_os-nosdn-lxd-noha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-nosdn-lxd-noha_daily.yaml index ac8535e81..e1f945b9c 100644 --- a/tests/opnfv/test_suites/opnfv_os-nosdn-lxd-noha_daily.yaml +++ b/tests/opnfv/test_suites/opnfv_os-nosdn-lxd-noha_daily.yaml @@ -8,6 +8,12 @@ test_cases_dir: "tests/opnfv/test_cases/" test_cases: - file_name: opnfv_yardstick_tc002.yaml + constraint: + installer: joid + pod: intel-pod5,intel-pod6 + task_args: + intel-pod5: '{"image": "Cirros LXC 0.3"}' + intel-pod6: '{"image": "Cirros LXC 0.3"}' - file_name: opnfv_yardstick_tc005.yaml - diff --git a/tools/yardstick-img-lxd-modify b/tools/yardstick-img-lxd-modify new file mode 100755 index 000000000..31194554c --- /dev/null +++ b/tools/yardstick-img-lxd-modify @@ -0,0 +1,135 @@ +#!/bin/bash + +############################################################################## +# Copyright (c) 2016 Huawei Technologies Co.,Ltd 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-img-lxd-modify - download and modify a Ubuntu cloud image +# +# The actual customization is done by a script passed with an absolute path as +# the only single argument. The command needs to be invoked as sudo +# +# Example invocation: +# yardstick-img-lxd-modify /home/yardstick/tools/ubuntu-server-cloudimg-modify.sh +# +# Warning: the script will create files by default in: +# /tmp/workspace/yardstick +# the files will be owned by root! +# +# TODO: image resize is needed if the base image is too small +# + +set -e +set -x + +die() { + echo "error: $1" >&2 + exit 1 +} + +test $# -eq 1 || die "no image specific script as argument" +test $(id -u) -eq 0 || die "should invoke using sudo" + +cmd=$1 +test -x $cmd +mountdir="/mnt/yardstick" +workspace=${WORKSPACE:-"/tmp/workspace/yardstick"} +host=${HOST:-"cloud-images.ubuntu.com"} +release=${RELEASE:-"trusty"} +image_path="${release}/current/${release}-server-cloudimg-amd64-root.tar.gz" +image_url=${IMAGE_URL:-"https://${host}/${image_path}"} +md5sums_path="${release}/current/MD5SUMS" +md5sums_url=${MD5SUMS_URL:-"https://${host}/${md5sums_path}"} + +imgfile="${workspace}/yardstick-${release}-server.tar.gz" +filename=$(basename $image_url) + +# download and checksum base image, conditionally if local copy is outdated +download() { + test -d $workspace || mkdir -p $workspace + cd $workspace + rm -f MD5SUMS # always download the checksum file to a detect stale image + wget $md5sums_url + test -e $filename || wget -nc --progress=dot:giga $image_url + grep $filename MD5SUMS | md5sum -c || + if [ $? -ne 0 ]; then + rm $filename + wget -nc --progress=dot:giga $image_url + grep $filename MD5SUMS | md5sum -c + fi + cd - +} + +# extract files +setup() { + mkdir -p $mountdir + + cp $cmd $mountdir/$(basename $cmd) + + cd $workspace + tar zxvf $filename -C $mountdir +} + +# modify image running a script using in a chrooted environment +modify() { + # resolv.conf does not exist in base image, pass nameserver value from host + nameserver_ip=$(grep -m 1 '^nameserver' \ + /etc/resolv.conf | awk '{ print $2 '}) + + # prevent init scripts from running during install + echo $'#!/bin/sh\nexit 101' >$mountdir/usr/sbin/policy-rc.d + chmod a+x $mountdir/usr/sbin/policy-rc.d + + chroot $mountdir /$(basename $cmd) $nameserver_ip + + rm -rf $mountdir/usr/sbin/policy-rc.d + + tar zcvf $(basename $imgfile) $mountdir/ +} + +# cleanup the image +cleanup() { + rm -rf $mountdir +} + +exitcode="" +error_trap() +{ + local rc=$? + + set +e + + if [ -z "$exitcode" ]; then + exitcode=$rc + fi + + dmesg -T | tail -50 + + cleanup + + echo "Image build failed with $exitcode" + + exit $exitcode +} + +main() { + cleanup + + trap "error_trap" EXIT SIGTERM + + download + setup + modify + + trap - EXIT SIGTERM + cleanup + + echo "the modified image is found here: $imgfile" +} + +main -- 2.16.6