Add Multi Arch to Docker 91/41791/6
authormbeierl <mark.beierl@dell.com>
Tue, 12 Sep 2017 20:34:24 +0000 (16:34 -0400)
committermbeierl <mark.beierl@dell.com>
Thu, 14 Sep 2017 18:52:26 +0000 (14:52 -0400)
Adds multi arch support to the launching of the
containers.

Change-Id: Iee89cfad3dc455fe8fdd7861d73fadbe314c2c1e
JIRA: STORPERF-220
Signed-off-by: mbeierl <mark.beierl@dell.com>
ci/create_glance_image.sh
ci/daily.sh
ci/detect_installer.sh
ci/generate-admin-rc.sh
ci/launch_docker_container.sh

index 8811897..e99de8c 100755 (executable)
@@ -8,13 +8,38 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 
-echo "Checking for Ubuntu 16.04 image in Glance"
-IMAGE=`openstack image list | grep "Ubuntu 16.04 x86_64"`
+ARCH="${ARCH:-$(uname -m)}"
+
+IMAGE_NAME="Ubuntu 16.04 ${ARCH}"
+
+echo "Checking for ${IMAGE_NAME} in Glance"
+
+IMAGE="$(openstack image list | grep "${IMAGE_NAME}")"
+PROPERTIES=""
 if [ -z "$IMAGE" ]
 then
-    wget -q https://cloud-images.ubuntu.com/releases/16.04/release/ubuntu-16.04-server-cloudimg-amd64-disk1.img
-    openstack image create "Ubuntu 16.04 x86_64" --disk-format qcow2 --public \
-    --container-format bare --file ubuntu-16.04-server-cloudimg-amd64-disk1.img
+
+    case "${ARCH}" in
+    aarch64)
+        FILE=ubuntu-16.04-server-cloudimg-arm64-uefi1.img
+        PROPERTIES="--property hw_firmware_type=uefi --property hw_video_model=vga"
+        ;;
+    armhf)
+        FILE=ubuntu-16.04-server-cloudimg-armhf-disk1.img
+        ;;
+    x86_64)
+        FILE=ubuntu-16.04-server-cloudimg-amd64-disk1.img
+        ;;
+    *)
+        echo "Unsupported architecture: ${ARCH}"
+        exit 1
+        ;;
+    esac
+
+    wget --continue -q "https://cloud-images.ubuntu.com/releases/16.04/release/${FILE}"
+    openstack image create "${IMAGE_NAME}" --disk-format qcow2 --public \
+    ${PROPERTIES} \
+    --container-format bare --file "${FILE}"
 fi
 
-openstack image show "Ubuntu 16.04 x86_64"
+openstack image show "${IMAGE_NAME}"
index 6548cb0..cb9092d 100755 (executable)
@@ -8,10 +8,10 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 
-if [ -z $WORKSPACE ]
+if [ -z "$WORKSPACE" ]
 then
-    cd `dirname $0`/..
-    WORKSPACE=`pwd`
+    cd "$(dirname "$0")/.." || exit 1
+    WORKSPACE="$(pwd)"
 fi
 
 docker-compose --version
@@ -21,10 +21,12 @@ then
     exit 1
 fi
 
-git clone --depth 1 https://gerrit.opnfv.org/gerrit/releng $WORKSPACE/ci/job/releng
+rm -rf "${WORKSPACE}/ci/job/releng"
+git clone --depth 1 https://gerrit.opnfv.org/gerrit/releng "${WORKSPACE}/ci/job/releng"
 
-virtualenv $WORKSPACE/ci/job/storperf_daily_venv
-source $WORKSPACE/ci/job/storperf_daily_venv/bin/activate
+virtualenv "${WORKSPACE}/ci/job/storperf_daily_venv"
+# shellcheck source=/dev/null
+source "${WORKSPACE}/ci/job/storperf_daily_venv/bin/activate"
 
 pip install --upgrade setuptools==33.1.1
 pip install functools32==3.2.3.post2
@@ -33,85 +35,90 @@ pip install osc_lib==1.3.0
 pip install python-openstackclient==3.7.0
 pip install python-heatclient==1.7.0
 
-$WORKSPACE/ci/generate-admin-rc.sh
-echo "TEST_DB_URL=http://testresults.opnfv.org/test/api/v1" >> $WORKSPACE/ci/job/admin.rc
-$WORKSPACE/ci/generate-environment.sh
+"${WORKSPACE}/ci/generate-admin-rc.sh"
+echo "TEST_DB_URL=http://testresults.opnfv.org/test/api/v1" >> "${WORKSPACE}/ci/job/admin.rc"
+"${WORKSPACE}/ci/generate-environment.sh"
 
-. $WORKSPACE/ci/job/environment.rc
+# shellcheck source=/dev/null
+source "${WORKSPACE}/ci/job/environment.rc"
 
 while read -r env
 do
     export "$env"
-done < $WORKSPACE/ci/job/admin.rc
+done < "${WORKSPACE}/ci/job/admin.rc"
 
 export AGENT_COUNT=${AGENT_COUNT:-$CINDER_NODES}
 export BLOCK_SIZES=${BLOCK_SIZES:-16384}
 export STEADY_STATE_SAMPLES=${STEADY_STATE_SAMPLES:-10}
-export DEADLINE=${DEADLINE:-`expr $STEADY_STATE_SAMPLES \* 3`}
+export DEADLINE=${DEADLINE:-$((STEADY_STATE_SAMPLES * 3))}
 export DISK_TYPE=${DISK_TYPE:-unspecified}
 export QUEUE_DEPTHS=${QUEUE_DEPTHS:-4}
-export POD_NAME=${NODE_NAME:-`hostname`}
+export POD_NAME=${NODE_NAME:-$(hostname)}
 export SCENARIO_NAME=${DEPLOY_SCENARIO:-none}
 export TEST_CASE=${TEST_CASE:-snia_steady_state}
-export VERSION=`echo ${BUILD_TAG#*daily-} | cut -d- -f1`
+export VERSION=$(echo ${BUILD_TAG#*daily-} | cut -d- -f1)
 export VOLUME_SIZE=${VOLUME_SIZE:-2}
 export WORKLOADS=${WORKLOADS:-ws,rs,rw}
 
+ARCH="${ARCH:-$(uname -m)}"
+IMAGE_NAME="Ubuntu 16.04 ${ARCH}"
+
 echo ==========================================================================
 echo Environment
 env | sort
 echo ==========================================================================
 
-$WORKSPACE/ci/remove_docker_container.sh
-$WORKSPACE/ci/delete_stack.sh
-$WORKSPACE/ci/create_glance_image.sh
-$WORKSPACE/ci/create_storperf_flavor.sh
-$WORKSPACE/ci/launch_docker_container.sh
-$WORKSPACE/ci/create_stack.sh $AGENT_COUNT $VOLUME_SIZE "Ubuntu 16.04 x86_64" $NETWORK
+"$WORKSPACE/ci/remove_docker_container.sh"
+"$WORKSPACE/ci/delete_stack.sh"
+"$WORKSPACE/ci/create_glance_image.sh"
+"$WORKSPACE/ci/create_storperf_flavor.sh"
+"$WORKSPACE/ci/launch_docker_container.sh"
+"$WORKSPACE/ci/create_stack.sh" "${AGENT_COUNT}" "${VOLUME_SIZE}" "${IMAGE_NAME}" "${NETWORK}"
 
-export WORKLOAD=_warm_up,$WORKLOADS
-export BLOCK_SIZE=$BLOCK_SIZES
-export QUEUE_DEPTH=$QUEUE_DEPTHS
+export WORKLOAD="_warm_up,${WORKLOADS}"
+export BLOCK_SIZE="${BLOCK_SIZES}"
+export QUEUE_DEPTH="${QUEUE_DEPTHS}"
 
-echo ==========================================================================
-echo Starting run of $WORKLOAD $BLOCK_SIZE $QUEUE_DEPTH
-echo ==========================================================================
+echo "=========================================================================="
+echo "Starting run of ${WORKLOAD} ${BLOCK_SIZE} ${QUEUE_DEPTH}"
+echo "=========================================================================="
 
-JOB=`$WORKSPACE/ci/start_job.sh \
-    | awk '/job_id/ {print $2}' | sed 's/"//g'`
-curl -s -X GET "http://127.0.0.1:5000/api/v1.0/jobs?id=$JOB&type=status" \
-    -o $WORKSPACE/ci/job/status.json
+JOB=$("${WORKSPACE}/ci/start_job.sh" \
+    | awk '/job_id/ {print $2}' | sed 's/"//g')
+curl -s -X GET "http://127.0.0.1:5000/api/v1.0/jobs?id=${JOB}&type=status" \
+    -o "${WORKSPACE}/ci/job/status.json"
 
-JOB_STATUS=`cat $WORKSPACE/ci/job/status.json | awk '/Status/ {print $2}' | cut -d\" -f2`
-while [ "$JOB_STATUS" != "Completed" ]
+JOB_STATUS=$(awk '/Status/ {print $2}' "${WORKSPACE}/ci/job/status.json" | cut -d\" -f2)
+while [ "${JOB_STATUS}" != "Completed" ]
 do
     sleep 600
-    mv $WORKSPACE/ci/job/status.json $WORKSPACE/ci/job/old-status.json
-    curl -s -X GET "http://127.0.0.1:5000/api/v1.0/jobs?id=$JOB&type=status" \
-        -o $WORKSPACE/ci/job/status.json
-    JOB_STATUS=`cat $WORKSPACE/ci/job/status.json | awk '/Status/ {print $2}' | cut -d\" -f2`
-    if diff $WORKSPACE/ci/job/status.json $WORKSPACE/ci/job/old-status.json >/dev/null
+    mv "${WORKSPACE}/ci/job/status.json" "${WORKSPACE}/ci/job/old-status.json"
+    curl -s -X GET "http://127.0.0.1:5000/api/v1.0/jobs?id=${JOB}&type=status" \
+        -o "${WORKSPACE}/ci/job/status.json"
+    JOB_STATUS=$(awk '/Status/ {print $2}' "${WORKSPACE}/ci/job/status.json" | cut -d\" -f2)
+    if diff "${WORKSPACE}/ci/job/status.json" "${WORKSPACE}/ci/job/old-status.json" >/dev/null
     then
-        cat $WORKSPACE/ci/job/status.json
+        cat "${WORKSPACE}/ci/job/status.json"
     fi
 done
 
 set +e
 
 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://127.0.0.1:5000/api/v1.0/configurations'
 
-curl -s -X GET "http://127.0.0.1:5000/api/v1.0/jobs?id=$JOB&type=metadata" \
-    -o $WORKSPACE/ci/job/report.json
+curl -s -X GET "http://127.0.0.1:5000/api/v1.0/jobs?id=${JOB&}type=metadata" \
+    -o "${WORKSPACE}/ci/job/report.json"
 
-$WORKSPACE/ci/remove_docker_container.sh
+"${WORKSPACE}/ci/remove_docker_container.sh"
 
-sudo rm -rf $WORKSPACE/ci/job/carbon
-sudo find $WORKSPACE/docker --name '*.db' -exec rm -fv {} \;
+sudo rm -rf "${WORKSPACE}/ci/job/carbon"
+sudo find "${WORKSPACE}/docker" -name '*.db' -exec rm -fv {} \;
 
 echo ==========================================================================
 echo Final report
 echo ==========================================================================
-cat $WORKSPACE/ci/job/report.json
+cat "${WORKSPACE}/ci/job/report.json"
 
 exit 0
index 035b7e2..afa1f74 100755 (executable)
@@ -8,15 +8,16 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 
-which juju 2>/dev/null
-if [ $? -eq 0 ]
-then
+if which juju >/dev/null 2>&1 ; then
     INSTALLER=joid
 fi
-sudo virsh list --all | grep undercloud >/dev/null
-if [ $? -eq 0 ]
-then
+
+if sudo virsh list --all | grep -q undercloud ; then
     INSTALLER=apex
 fi
 
-echo $INSTALLER
\ No newline at end of file
+if sudo virsh list --all | grep -q cfg01 ; then
+    INSTALLER=fuel
+fi
+
+echo $INSTALLER
index 3c0b33a..e1e6bc9 100755 (executable)
@@ -8,21 +8,20 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 
-cd `dirname $0`
-
-# TODO: Switch based on installer type, for now this is hard coded to JOID only
+cd $(dirname "$0")
 
 if [ ! -d job ]
 then
     mkdir job
 fi
 
-export INSTALLER=`./detect_installer.sh`
+SSH_KEY=""
+INSTALLER="$(./detect_installer.sh)"
 case $INSTALLER in
     joid)
-        export OS_AUTH_URL=http://`juju status keystone | grep public | awk '{print $2}'`:5000/v2.0
-        export OS_USERNAME=admin
-        export OS_PASSWORD=openstack
+        OS_AUTH_URL=http://`juju status keystone | grep public | awk '{print $2}'`:5000/v2.0
+        OS_USERNAME=admin
+        OS_PASSWORD=openstack
         cat << EOF > job/openstack.rc
 export OS_AUTH_URL=$OS_AUTH_URL
 export OS_USERNAME=$OS_USERNAME
@@ -31,14 +30,25 @@ export OS_TENANT_NAME=admin
 export OS_PROJECT_NAME=admin
 EOF
         ;;
+    fuel)
+        INSTALLER_IP=$(sudo virsh domifaddr cfg01 | grep ipv4 | awk '{print $4}' | cut -d/ -f1)
+        export BRANCH="${BRANCH:-master}"
+        SSH_KEY="-s /var/lib/opnfv/mcp.rsa"
+        ;;
     apex)
-        INSTALLER_IP=`sudo virsh domifaddr undercloud | grep ipv4 | awk '{print $4}' | cut -d/ -f1`
+        INSTALLER_IP=$(sudo virsh domifaddr undercloud | grep ipv4 | awk '{print $4}' | cut -d/ -f1)
         ;;
+    *)
+        echo "Unknown installer ${INSTALLER}"
+        exit 1
 esac
 
-if [ ! -z $INSTALLER_IP ]
+if [ ! -z "${INSTALLER_IP}" ]
 then
-    ./job/releng/utils/fetch_os_creds.sh -i $INSTALLER -a $INSTALLER_IP -d job/openstack.rc
+    CMD="./job/releng/utils/fetch_os_creds.sh -i $INSTALLER -a $INSTALLER_IP $SSH_KEY -d job/openstack.rc"
+    echo $CMD
+    $CMD
+
     echo export OS_PROJECT_NAME=admin >> job/openstack.rc
 fi
 
index 2411ce0..ff28e05 100755 (executable)
@@ -8,32 +8,25 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 
-cd `dirname $0`
-ci=`pwd`
+cd "$(dirname "$0")" || exit 1
+ci=$(pwd)
 
-cd ${ci}/../docker-compose
+cd "${ci}/../docker-compose" || exit 1
 
-export ENV_FILE=${ci}/job/admin.rc
-export CARBON_DIR=${ci}/job/carbon/
+export ENV_FILE="${ci}/job/admin.rc"
+export CARBON_DIR="${ci}/job/carbon/"
 
-if [ ! -d ${ci}/job/carbon ]
+if [ ! -d "${ci}/job/carbon" ]
 then
-    mkdir ${ci}/job/carbon
-fi
-
-if [ -z ${ARCH} ]
-then
-    ARCH=x86_64
+    mkdir -p "${ci}/job/carbon"
 fi
 
+ARCH="${ARCH:-$(uname -m)}"
 export ARCH
 
-if [ -z ${DOCKER_TAG} ]
-then
-    DOCKER_TAG=latest
-fi
+DOCKER_TAG="${DOCKER_TAG:-latest}"
 
-export TAG=${DOCKER_TAG}
+export TAG="${ARCH}-${DOCKER_TAG}"
 
 docker-compose pull
 docker-compose up -d
@@ -42,7 +35,7 @@ echo "Waiting for StorPerf to become active"
 
 ATTEMPTS=20
 
-while [ $(curl -s -o /dev/null -I -w "%{http_code}" -X GET http://127.0.0.1:5000/api/v1.0/configurations) != "200" ]
+while [ "$(curl -s -o /dev/null -I -w '%{http_code}' -X GET http://127.0.0.1:5000/api/v1.0/configurations)" != "200" ]
 do
     ATTEMPTS=$((ATTEMPTS - 1))
     if [ ${ATTEMPTS} -le 1 ]