refactor: run storperf scripts in qtip container 65/38965/4
authorzhihui wu <wu.zhihui1@zte.com.cn>
Wed, 9 Aug 2017 08:34:30 +0000 (16:34 +0800)
committerzhihui wu <wu.zhihui1@zte.com.cn>
Fri, 11 Aug 2017 08:39:03 +0000 (16:39 +0800)
The preious storperf scripts can only be run based on the host.
This patch will make them run in qtip container.

JIRA: QTIP-248

README.md will tell you how to use these scripts.

Change-Id: I4d2d51f859499e6e56ae8692d880cbde27297b82
Signed-off-by: zhihui wu <wu.zhihui1@zte.com.cn>
integration/storperf/README.md
integration/storperf/cleanup.sh [new file with mode: 0755]
integration/storperf/docker-compose.yaml [moved from integration/storperf/storperf-docker-compose.yaml with 83% similarity]
integration/storperf/launch_containers.sh [new file with mode: 0755]
integration/storperf/prepare.sh [moved from integration/storperf/openstack.sh with 78% similarity]
integration/storperf/run_ci.sh [new file with mode: 0755]
integration/storperf/start_job.sh
integration/storperf/storperf.sh [deleted file]
integration/storperf/storperf_docker.sh [deleted file]
integration/storperf/storperf_requirments.txt [moved from integration/storperf/storperf_requirements.txt with 66% similarity]
requirements.txt

index 137e15b..bdcc7e7 100644 (file)
@@ -1,13 +1,45 @@
-# usage
+# Usage
 
 Please make sure pip, docker and docker-compose are installer on your environment.
 
-```
-storperf.sh -t installer_type -i installer_ip -s stack_json_file -j job_json_file
+1. Launch qtip and storperf containers.
 
-options:
-    -t : installer type. For now only supports Apex.
-    -i : installer ip address.
-    -s : Stack configuration json file. If not given, default_stack.json will be used.
-    -j : Storperf job configuration json file. If not given, default_job.json will be used.
-```
\ No newline at end of file
+    ```
+    $ cd qtip/integration/storperf
+    $ bash launch_containers.sh -t apex -n ""
+
+    Arguments:
+
+        -t : Installer type. For now only supports Apex.
+        -n : Node name.
+    ```
+
+    Then you will get 5 containers:
+
+    ```
+    CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                              NAMES
+    2c079d5d88bc        opnfv/qtip                    "/usr/bin/supervisord"   38 minutes ago      Up 38 minutes       5000/tcp                           qtip
+    2032a16dab17        opnfv/storperf-httpfrontend   "nginx -g 'daemon ..."   38 minutes ago      Up 38 minutes       80/tcp, 0.0.0.0:5000->5000/tcp     storperf-httpfrontend
+    c0d3e2763d35        schickling/swagger-ui         "sh run.sh"              39 minutes ago      Up 38 minutes       80/tcp                             storperf-swaggerui
+    0e08a1968829        opnfv/storperf-reporting      "python app.py"          39 minutes ago      Up 38 minutes       0.0.0.0:5080->5000/tcp             storperf-reporting
+    b92967139d8e        opnfv/storperf-master         "/usr/bin/supervisord"   39 minutes ago      Up 39 minutes       5000/tcp, 0.0.0.0:8000->8000/tcp   storperf-master
+    ```
+
+2. Prepare environment.
+
+    ```
+    $ docker exec qtip bash -c "/home/opnfv/repos/qtip/integration/storperf/prepare.sh"
+    ```
+
+    This command can create a flavor and upload a Ubuntu 16.04 image on OpenStack.
+
+3. Run storperf job.
+
+    ```
+    $ docker exec qtip bash -c "/home/opnfv/repos/qtip/integration/storperf/start_job.sh -s stack.json -j job.json"
+
+    Arguments:
+
+        -s : Stack configuration json file. If not given, default_stack.json will be used.
+        -j : Storperf job configuration json file. If not given, default_job.json will be used.
+    ```
diff --git a/integration/storperf/cleanup.sh b/integration/storperf/cleanup.sh
new file mode 100755 (executable)
index 0000000..1aee165
--- /dev/null
@@ -0,0 +1,14 @@
+#! /bin/bash
+##############################################################################
+# Copyright (c) 2017 ZTE 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
+##############################################################################
+
+echo "Deleting image"
+openstack image delete "Ubuntu 16.04 x86_64"
+
+echo "Deteing flavor"
+openstack flavor delete storperf
similarity index 83%
rename from integration/storperf/storperf-docker-compose.yaml
rename to integration/storperf/docker-compose.yaml
index ec12180..8cef5bc 100644 (file)
@@ -1,5 +1,5 @@
 ##############################################################################
-# Copyright (c) 2017 Dell EMC and others.
+# Copyright (c) 2017 Dell EMC, ZTE and others.
 #
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Apache License, Version 2.0
@@ -10,6 +10,7 @@
 version: '2'
 services:
 
+
     storperf-master:
         container_name: "storperf-master"
         image: opnfv/storperf-master
@@ -18,15 +19,12 @@ services:
         env_file: ${ENV_FILE}
         volumes:
             - ${CARBON_DIR}:/opt/graphite/storage/whisper
-            - ./storperf-master/:/home/opnfv/repos/storperf
 
     storperf-reporting:
         container_name: "storperf-reporting"
         image: opnfv/storperf-reporting
         ports:
             - "5080:5000"
-        volumes:
-            - ./storperf-reporting/:/home/opnfv/storperf-reporting
 
     storperf-swaggerui:
         container_name: "storperf-swaggerui"
@@ -40,4 +38,11 @@ services:
         links:
             - storperf-master
             - storperf-reporting
-            - storperf-swaggerui
\ No newline at end of file
+            - storperf-swaggerui
+
+    qtip:
+        container_name: qtip
+        image: opnfv/qtip
+        env_file: ${ENV_FILE}
+        links:
+          - storperf-httpfrontend
diff --git a/integration/storperf/launch_containers.sh b/integration/storperf/launch_containers.sh
new file mode 100755 (executable)
index 0000000..3fcf805
--- /dev/null
@@ -0,0 +1,100 @@
+#! /bin/bash
+##############################################################################
+# Copyright (c) 2017 ZTE 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
+##############################################################################
+
+usage(){
+   echo "usage: $0 -t <installer_type> -n <node_name>" >&2
+}
+
+#Get options
+while getopts ":t:n:he" optchar; do
+   case "${optchar}" in
+       t) installer_type=${OPTARG} ;;
+       n) node_name=${OPTARG} ;;
+       h) usage
+          exit 0
+          ;;
+       *) echo "Non-option argument: '-${OPTARG}'" >&2
+          usage
+          exit 2
+          ;;
+   esac
+done
+
+
+#set vars from env if not provided by user as options
+installer_type=${installer_type:-$INSTALLER_TYPE}
+node_name=${node_name:-$NODE_NAME}
+
+case $installer_type in
+    apex)
+        installer_ip=`sudo virsh domifaddr undercloud | grep ipv4 | awk '{print $4}' | cut -d/ -f1`
+        ;;
+    *)
+
+        echo "Unsupported $installer_type. Cannot continue!"
+        exit 1
+esac
+
+if [[ -z $WORKSPACE ]];then
+    WORKSPACE=`pwd`
+fi
+
+git clone --depth 1 https://gerrit.opnfv.org/gerrit/releng $WORKSPACE/releng
+
+$WORKSPACE/releng/utils/fetch_os_creds.sh -i ${installer_type} -a ${installer_ip} -d $WORKSPACE/openrc
+
+grep "export" $WORKSPACE/openrc | sed "s/export //"  > $WORKSPACE/admin.rc
+echo "INSTALLER_TYPE=${installer_type}" >> $WORKSPACE/admin.rc
+echo "INSTALLER_IP=${installer_ip}" >> $WORKSPACE/admin.rc
+echo "NODE_NAME=${node_name}" >> $WORKSPACE/admin.rc
+export ENV_FILE=$WORKSPACE/admin.rc
+
+export CARBON_DIR=$WORKSPACE/carbon/
+WWW_DATA_UID=33
+WWW_DATA_GID=33
+sudo install --owner=${WWW_DATA_UID} --group=${WWW_DATA_GID} -d "${CARBON_DIR}"
+
+clean_storperf_container()
+{
+    docker-compose -f docker-compose.yaml down
+
+    for name in qtip storperf-master storperf-swaggerui storperf-httpfrontend storperf-reporting
+    do
+        container=`docker ps -a -q -f name=$name`
+        if [[ ! -z $container ]];then
+            echo "Stopping any existing $name container"
+            docker rm -fv $container
+        fi
+
+        image=`docker images opnfv/$name`
+        if [[ ! -z $image ]];then
+            echo "Deleteing any existing opnfv/$name image"
+            docker rmi -f opnfv/$container_name
+        fi
+    done
+}
+
+launch_storperf_container()
+{
+    docker-compose pull
+    docker-compose -f docker-compose.yaml up -d
+
+    echo "Waiting for StorPerf to become active"
+
+    while [ $(curl -s -o /dev/null -I -w "%{http_code}" -X GET http://127.0.0.1:5000/api/v1.0/configurations) != "200" ]
+    do
+        sleep 1
+    done
+}
+
+echo "Clean existing storperf containers"
+clean_storperf_container
+
+echo "Launch new storperf containers"
+launch_storperf_container
\ No newline at end of file
similarity index 78%
rename from integration/storperf/openstack.sh
rename to integration/storperf/prepare.sh
index 9970187..345a80b 100755 (executable)
@@ -7,6 +7,16 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 
+# See https://stackoverflow.com/questions/59895/getting-the-source-directory-of-a-bash-script-from-within
+script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+
+pip install -r $script_dir/storperf_requirements.txt
+
+if [[ -z $WORKSPACE ]];then
+    WORKSPACE=`pwd`
+fi
+
+
 delete_storperf_stack()
 {
     echo "Checking for an existing stack"
@@ -16,6 +26,7 @@ delete_storperf_stack()
     fi
 }
 
+
 load_ubuntu_image()
 {
     echo "Checking for Ubuntu 16.04 image in Glance"
@@ -24,8 +35,8 @@ load_ubuntu_image()
         cd $WORKSPACE
         if [[ ! -f ubuntu-16.04-server-cloudimg-amd64-disk1.img ]];then
             echo "download Ubuntu 16.04 image"
-            wget https://cloud-images.ubuntu.com/releases/16.04/release/ubuntu-16.04-server-cloudimg-amd64-disk1.img
-            wget https://cloud-images.ubuntu.com/releases/16.04/release/MD5SUMS
+            wget -q https://cloud-images.ubuntu.com/releases/16.04/release/ubuntu-16.04-server-cloudimg-amd64-disk1.img
+            wget -q https://cloud-images.ubuntu.com/releases/16.04/release/MD5SUMS
             checksum=$(cat ./MD5SUMS |grep ubuntu-16.04-server-cloudimg-amd64-disk1.img | md5sum -c)
             if [[ $checksum =~ 'FAILED' ]];then
                 echo "Check image md5sum failed. Exit!"
@@ -58,8 +69,6 @@ create_storperf_flavor()
 }
 
 
-nova_vm_mapping()
-{
-    rm ./nova_vm.json
-    openstack server list --name storperf-agent -c ID -c Host --long -f json > nova_vm.json
-}
\ No newline at end of file
+delete_storperf_stack
+load_ubuntu_image
+create_storperf_flavor
diff --git a/integration/storperf/run_ci.sh b/integration/storperf/run_ci.sh
new file mode 100755 (executable)
index 0000000..ca67ac6
--- /dev/null
@@ -0,0 +1,21 @@
+#! /bin/bash
+##############################################################################
+# Copyright (c) 2017 ZTE 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
+##############################################################################
+
+
+source $WORKSPACE/integration/storperf/launch_containers.sh -t $INSTALLER_TYPE -n $NODE_NAME
+
+docker exec qtip bash -c "/home/opnfv/repos/qtip/integration/storperf/prepare.sh"
+
+docker exec qtip bash -c "/home/opnfv/repos/qtip/integration/storperf/start_job.sh"
+
+docker exec qtip bash -c "/home/opnfv/repos/qtip/integration/storperf/cleanup.sh"
+
+exit 0
+
+
index e94356e..672dabe 100755 (executable)
@@ -29,11 +29,22 @@ done
 # See https://stackoverflow.com/questions/59895/getting-the-source-directory-of-a-bash-script-from-within
 script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
 
+stack_json=${stack_json:-"$script_dir/default_stack.json"}
+job_json=${job_json:-"$script_dir/default_job.json"}
+
 if [[ -z $WORKSPACE ]];then
     WORKSPACE=`pwd`
 fi
 
-source $script_dir/openstack.sh
+nova_vm_mapping()
+{
+    rm $WORKSPACE/nova_vm.json
+    openstack server list --name storperf-agent -c ID -c Host --long -f json > $WORKSPACE/nova_vm.json
+
+    echo ==========================================================================
+    cat $WORKSPACE/nova_vm.json
+    echo ==========================================================================
+}
 
 echo ==========================================================================
 echo "Start to create storperf stack"
@@ -42,7 +53,7 @@ echo ==========================================================================
 
 curl -X POST --header 'Content-Type: application/json' \
      --header 'Accept: application/json' -d @${stack_json} \
-     'http://127.0.0.1:5000/api/v1.0/configurations'
+     'http://storperf-httpfrontend:5000/api/v1.0/configurations'
 
 nova_vm_mapping
 
@@ -54,23 +65,26 @@ echo ==========================================================================
 
 JOB=$(curl -s -X POST --header 'Content-Type: application/json' \
     --header 'Accept: application/json' \
-    -d @${job_json} 'http://127.0.0.1:5000/api/v1.0/jobs' | \
+    -d @${job_json} 'http://storperf-httpfrontend:5000/api/v1.0/jobs' | \
     awk '/job_id/ {print $2}' | sed 's/"//g')
 
 echo "JOB ID: $JOB"
 if [[ -z "$JOB" ]]; then
     echo "Oops, JOB ID is empty!"
 else
-    echo "Loop: check job status"
-    curl -s -X GET "http://127.0.0.1:5000/api/v1.0/jobs?id=$JOB&type=status" \
+    echo "checking job status..."
+    curl -s -X GET "http://storperf-httpfrontend:5000/api/v1.0/jobs?id=$JOB&type=status" \
         -o $WORKSPACE/status.json
 
+    cat $WORKSPACE/status.json
+
     JOB_STATUS=`cat $WORKSPACE/status.json | awk '/Status/ {print $2}' | cut -d\" -f2`
+
     while [ "$JOB_STATUS" != "Completed" ]
     do
-        sleep 30
+        sleep 180
         mv $WORKSPACE/status.json $WORKSPACE/old-status.json
-        curl -s -X GET "http://127.0.0.1:5000/api/v1.0/jobs?id=$JOB&type=status" \
+        curl -s -X GET "http://storperf-httpfrontend:5000/api/v1.0/jobs?id=$JOB&type=status" \
             -o $WORKSPACE/status.json
         JOB_STATUS=`cat $WORKSPACE/status.json | awk '/Status/ {print $2}' | cut -d\" -f2`
         diff $WORKSPACE/status.json $WORKSPACE/old-status.json >/dev/null
@@ -80,19 +94,16 @@ else
         fi
     done
 
-    echo ==========================================================================
+    echo
     echo "Storperf test completed!"
-    echo ==========================================================================
-
-    curl -s -X GET "http://127.0.0.1:5000/api/v1.0/jobs?id=$JOB&type=metadata" \
-    -o $WORKSPACE/report.json
 
     echo ==========================================================================
     echo Final report
     echo ==========================================================================
+    curl -s -X GET "http://storperf-httpfrontend:5000/api/v1.0/jobs?id=$JOB&type=metadata" \
+    -o $WORKSPACE/report.json
     cat $WORKSPACE/report.json
 fi
 
 echo "Deleting stack for cleanup"
-curl -s -X DELETE --header 'Accept: application/json' 'http://127.0.0.1:5000/api/v1.0/configurations'
-
+curl -s -X DELETE --header 'Accept: application/json' 'http://storperf-httpfrontend:5000/api/v1.0/configurations'
\ No newline at end of file
diff --git a/integration/storperf/storperf.sh b/integration/storperf/storperf.sh
deleted file mode 100755 (executable)
index 31e059d..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-#! /bin/bash
-##############################################################################
-# Copyright (c) 2017 ZTE 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
-##############################################################################
-
-usage(){
-   echo "usage: $0 -t <installer_type> -i <installer_ip> -s <stack_json_path> -j <job_json_path> " >&2
-}
-
-#Get options
-while getopts ":t:i:s:j:he" optchar; do
-   case "${optchar}" in
-       t) installer_type=${OPTARG} ;;
-       i) installer_ip=${OPTARG} ;;
-       s) stack_json=${OPTARG} ;;
-       j) job_json=${OPTARG} ;;
-       h) usage
-          exit 0
-          ;;
-       *) echo "Non-option argument: '-${OPTARG}'" >&2
-          usage
-          exit 2
-          ;;
-   esac
-done
-
-# See https://stackoverflow.com/questions/59895/getting-the-source-directory-of-a-bash-script-from-within
-script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-
-if [[ -z $WORKSPACE ]];then
-    WORKSPACE=`pwd`
-fi
-
-#set vars from env if not provided by user as options
-installer_type=${installer_type:-$INSTALLER_TYPE}
-installer_ip=${installer_ip:-$INSTALLER_IP}
-stack_json=${stack_json:-"$script_dir/default_stack.json"}
-job_json=${job_json:-"$script_dir/default_job.json"}
-
-source $script_dir/openstack.sh
-source $script_dir/storperf_docker.sh
-
-git clone --depth 1 https://gerrit.opnfv.org/gerrit/storperf $WORKSPACE/storperf
-git clone --depth 1 https://gerrit.opnfv.org/gerrit/releng $WORKSPACE/releng
-
-virtualenv $WORKSPACE/storperf_venv
-source $WORKSPACE/storperf_venv/bin/activate
-
-pip install -r $script_dir/storperf_requirements.txt
-
-$WORKSPACE/releng/utils/fetch_os_creds.sh -i ${installer_type} -a ${installer_ip} -d $WORKSPACE/openrc
-source $WORKSPACE/openrc
-
-grep "export" $WORKSPACE/openrc | sed "s/export //"  > $WORKSPACE/admin.rc
-echo "INSTALLER_TYPE=${installer_type}" >> $WORKSPACE/admin.rc
-export ENV_FILE=$WORKSPACE/admin.rc
-
-if [[ ! -d $WORKSPACE/carbon ]];then
-    mkdir -p $WORKSPACE/carbon
-    sudo chown 33:33 $WORKSPACE/carbon
-fi
-export CARBON_DIR=$WORKSPACE/carbon/
-
-delete_storperf_stack
-load_ubuntu_image
-create_storperf_flavor
-
-cd $WORKSPACE/storperf/docker
-cp $script_dir/storperf-docker-compose.yaml ./
-echo "Clean existing storperf containers"
-clean_storperf_container
-echo "Launch new storperf containers"
-launch_storperf_container
-
-$script_dir/start_job.sh -s $stack_json -j $job_json
-
-echo "Clean up environment"
-cd $WORKSPACE/storperf/docker
-clean_storperf_container
-openstack flavor delete storperf
-openstack image delete "Ubuntu 16.04 x86_64"
-
-echo "Done!"
-
diff --git a/integration/storperf/storperf_docker.sh b/integration/storperf/storperf_docker.sh
deleted file mode 100755 (executable)
index 629a4ed..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-#! /bin/bash
-##############################################################################
-# Copyright (c) 2017 ZTE 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
-##############################################################################
-
-clean_storperf_container()
-{
-    docker-compose -f storperf-docker-compose.yaml down
-
-    for container_name in storperf storperf-master storperf-swaggerui storperf-httpfrontend storperf-reporting
-    do
-        container=`docker ps -a -q -f name=$container_name`
-        if [[ ! -z $container ]];then
-            echo "Stopping any existing $container_name container"
-            docker rm -fv $container
-        fi
-    done
-}
-
-
-launch_storperf_container()
-{
-    docker-compose -f storperf-docker-compose.yaml up -d
-
-    echo "Waiting for StorPerf to become active"
-
-    while [ $(curl -s -o /dev/null -I -w "%{http_code}" -X GET http://127.0.0.1:5000/api/v1.0/configurations) != "200" ]
-    do
-        sleep 1
-    done
-}
\ No newline at end of file
@@ -1,6 +1,5 @@
-setuptools==33.1.1
 functools32==3.2.3.post2
 pytz==2016.10
 osc_lib==1.3.0
 python-openstackclient==3.7.0
-python-heatclient==1.7.0
\ No newline at end of file
+python-heatclient==1.7.0
index 3a13361..3b1d749 100644 (file)
@@ -11,4 +11,4 @@ six
 PyYAML
 humanfriendly
 asq
-Django
+Django
\ No newline at end of file