From 4f072b79d3045020ab4c39f5909ff6f1de6e683b Mon Sep 17 00:00:00 2001 From: Victor Ryzhenkin Date: Tue, 9 Aug 2016 03:38:50 +0300 Subject: [PATCH] Add tempest configure scripts and rally dockerfiles Change-Id: I452f73f8af2f9dfbdb970e680062f0ae1af28e33 --- utils/jenkins/prepare_controller.sh | 40 ++++++++ utils/jenkins/rally-tempest/latest/Dockerfile | 18 ++++ .../rally-tempest/latest/setup_tempest.sh | 11 +++ utils/jenkins/tempest_tests.sh | 97 +++++++++++++++++++ 4 files changed, 166 insertions(+) create mode 100755 utils/jenkins/prepare_controller.sh create mode 100644 utils/jenkins/rally-tempest/latest/Dockerfile create mode 100755 utils/jenkins/rally-tempest/latest/setup_tempest.sh create mode 100755 utils/jenkins/tempest_tests.sh diff --git a/utils/jenkins/prepare_controller.sh b/utils/jenkins/prepare_controller.sh new file mode 100755 index 0000000..b8323df --- /dev/null +++ b/utils/jenkins/prepare_controller.sh @@ -0,0 +1,40 @@ +#!/bin/bash -xe + +CONTAINER_MOUNT_HOME_DIR="${CONTAINER_MOUNT_HOME_DIR:-/var/lib/rally-tempest-container-home-dir}" +KEYSTONE_API_VERSION="v2.0" +CA_CERT_PATH="/var/lib/astute/haproxy/public_haproxy.pem" + +if [ ! -d ${CONTAINER_MOUNT_HOME_DIR} ]; then + mkdir ${CONTAINER_MOUNT_HOME_DIR} +fi +chown 65500 ${CONTAINER_MOUNT_HOME_DIR} + +cp /root/openrc ${CONTAINER_MOUNT_HOME_DIR}/ +chown 65500 ${CONTAINER_MOUNT_HOME_DIR}/openrc +echo "export HTTP_PROXY='$CONTROLLER_PROXY_URL'" >> ${CONTAINER_MOUNT_HOME_DIR}/openrc +echo "export HTTPS_PROXY='$CONTROLLER_PROXY_URL'" >> ${CONTAINER_MOUNT_HOME_DIR}/openrc + +IS_TLS=`. openrc; openstack endpoint show identity 2>/dev/null | awk '/https/'` + +if [ "${IS_TLS}" ]; then + cp ${CA_CERT_PATH} ${CONTAINER_MOUNT_HOME_DIR}/ + chown 65500 ${CONTAINER_MOUNT_HOME_DIR}/$(basename ${CA_CERT_PATH}) + echo "export OS_CACERT='/home/rally/$(basename ${CA_CERT_PATH})'" >> ${CONTAINER_MOUNT_HOME_DIR}/openrc +fi + +cat > ${CONTAINER_MOUNT_HOME_DIR}/bashrc </dev/null || export PATH="\${PATH}:\${HOME}/bin" +if [ \$(id -u) -eq 0 ]; then + export PS1='\[\033[01;41m\]\u@\h:\[\033[01;44m\] \W \[\033[01;41m\] #\[\033[0m\] ' +else + export PS1='\[\033[01;33m\]\u@\h\[\033[01;0m\]:\[\033[01;34m\]\W\[\033[01;0m\]$ ' +fi +source /home/rally/openrc +EOF \ No newline at end of file diff --git a/utils/jenkins/rally-tempest/latest/Dockerfile b/utils/jenkins/rally-tempest/latest/Dockerfile new file mode 100644 index 0000000..d5f16ac --- /dev/null +++ b/utils/jenkins/rally-tempest/latest/Dockerfile @@ -0,0 +1,18 @@ +FROM rallyforge/rally:latest +MAINTAINER Yaroslav Lobankov + +# We need to switch to 'root' user to avoid permission issues. +USER root + +WORKDIR /tmp +RUN git clone https://git.openstack.org/openstack/tempest && \ + pip install -r tempest/requirements.txt -r tempest/test-requirements.txt && \ + mv tempest/ /var/lib/ + +COPY setup_tempest.sh /usr/bin/setup-tempest +RUN chown rally /usr/bin/setup-tempest + +WORKDIR /home/rally + +# Switch to 'rally' user back. +USER rally diff --git a/utils/jenkins/rally-tempest/latest/setup_tempest.sh b/utils/jenkins/rally-tempest/latest/setup_tempest.sh new file mode 100755 index 0000000..474e4f9 --- /dev/null +++ b/utils/jenkins/rally-tempest/latest/setup_tempest.sh @@ -0,0 +1,11 @@ +#!/bin/bash -xe + +source /home/rally/openrc + +rally-manage db recreate +rally deployment create --fromenv --name=tempest +rally verify install --source /var/lib/tempest +rally verify genconfig +rally verify showconfig +rally verify installplugin --source https://github.com/openstack/murano +rally verify listplugins diff --git a/utils/jenkins/tempest_tests.sh b/utils/jenkins/tempest_tests.sh new file mode 100755 index 0000000..7217613 --- /dev/null +++ b/utils/jenkins/tempest_tests.sh @@ -0,0 +1,97 @@ +#!/usr/bin/env bash +set -x + +export SSH_OPTS='-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' +export FUEL_PASSWD='r00tme' + +SNAPSHOT_NAME=$(dos.py snapshot-list "$ENV_NAME" | tail -1 | awk '{print $1}') + +dos.py revert-resume "$ENV_NAME" "$SNAPSHOT_NAME" + +ADMIN_NODE_IP=$(dos.py net-list $ENV_NAME | tail -1 | awk '{print $2}' | sed 's|/.*||g' | sed 's|.$|2|g') + +echo "LOG: fuel-master ip=$ADMIN_NODE_IP" + +CONTROLLER_ID=`echo 'fuel node | \ + grep controller | \ + awk '\''{print $1}'\'' | \ + head -1' | \ + sshpass -p "$FUEL_PASSWD" \ + ssh ${SSH_OPTS} -T root@"$ADMIN_NODE_IP"` + +wget -qO- https://get.docker.com/ | sh + +##### Generating docker file and copying it to admin node,##### +##### and then to controller node ##### +sudo -H docker build -t rally-tempest "$WORKSPACE/utils/jenkins/rally-tempest/latest" +sudo -H docker save -o ./dimage rally-tempest +sudo chown "${USER}:${USER}" ./dimage +sshpass -p "$FUEL_PASSWD" scp ${SSH_OPTS} dimage root@"$ADMIN_NODE_IP":/root/rally + +echo "scp /root/rally node-$CONTROLLER_ID:/root/rally" | sshpass -p "$FUEL_PASSWD" ssh ${SSH_OPTS} -T root@"$ADMIN_NODE_IP" + +echo 'wget -qO- https://get.docker.com/ | sh' > ssh_scr.sh + +cat "$WORKSPACE/utils/jenkins/prepare_controller.sh" >> ssh_scr.sh + +echo '' >> ssh_scr.sh + +cat >> ssh_scr.sh <<'EOF' + +docker load -i /root/rally +ID=$(docker images | awk '/rally/ {print $3}') +echo "LOG: INFO rally image id=$ID" + +export DOCK_ID=$(docker run -tid -v /var/lib/rally-tempest-container-home-dir:/home/rally --net host "$ID") + +sed -i "s|:5000|:5000/v2.0|g" /var/lib/rally-tempest-container-home-dir/openrc + +docker exec -u root "$DOCK_ID" sed -i "s|\#swift_operator_role = Member|swift_operator_role=SwiftOperator|g" /etc/rally/rally.conf +docker exec "$DOCK_ID" setup-tempest + +tempest_file=$(find / -name tempest.conf) + +sed -i "79i max_template_size = 5440000" $tempest_file +sed -i "80i max_resources_per_stack = 20000" $tempest_file +sed -i "81i max_json_body_size = 10880000" $tempest_file +sed -i "24i volume_device_name = vdc" $tempest_file +sed -i "/[service_available]/a murano = True" $tempest_file +sed -i "/[service_available]/a glare = True" $tempest_file + +echo "[application_catalog]" >> $tempest_file +echo "glare_backend = True" >> $tempest_file + +deployment=$(docker exec "$DOCK_ID" bash -c "rally deployment list | awk '/tempest/ {print \$2}'") + +docker exec "$DOCK_ID" bash -c "source /home/rally/openrc && rally verify start --regex application_catalog --concurrency 2" + +docker exec "$DOCK_ID" bash -c "rally verify results --json --output-file output.json" +docker exec "$DOCK_ID" bash -c "rm -rvf rally_json2junit && git clone https://github.com/greatehop/rally_json2junit && python rally_json2junit/rally_json2junit/results_parser.py output.json" +EOF + +chmod +x ssh_scr.sh + +##### Copying script to master node, then to controller ##### +sshpass -p "$FUEL_PASSWD" scp ${SSH_OPTS} ssh_scr.sh root@"$ADMIN_NODE_IP":/root/ssh_scr.sh +echo "scp /root/ssh_scr.sh node-$CONTROLLER_ID:/root/ssh_scr.sh" | sshpass -p "$FUEL_PASSWD" ssh ${SSH_OPTS} -T root@"$ADMIN_NODE_IP" + +##### Executing script from admin node on controller node: ##### +EXEC_CMD="echo 'chmod +x /root/ssh_scr.sh && /bin/bash -xe /root/ssh_scr.sh > /root/log.log' | ssh -T node-$CONTROLLER_ID" +echo "$EXEC_CMD" | sshpass -p "$FUEL_PASSWD" ssh ${SSH_OPTS} -T root@"$ADMIN_NODE_IP" + +########################################################## +##### Copying results from controller to admin node: ##### +##### and then to host in workspace folder ##### +########################################################## +GET_RES_CMD="scp node-$CONTROLLER_ID:/var/lib/rally-tempest-container-home-dir/verification.xml /root/verification.xml" +echo "$GET_RES_CMD" | sshpass -p "$FUEL_PASSWD" ssh ${SSH_OPTS} -T root@"$ADMIN_NODE_IP" +sshpass -p "$FUEL_PASSWD" scp ${SSH_OPTS} root@"$ADMIN_NODE_IP":/root/verification.xml "$WORKSPACE/logs/" + +GET_LOG_CMD="scp node-$CONTROLLER_ID:/root/log.log /root/log.log" +echo "$GET_LOG_CMD" | sshpass -p "$FUEL_PASSWD" ssh ${SSH_OPTS} -T root@"$ADMIN_NODE_IP" +sshpass -p "$FUEL_PASSWD" scp ${SSH_OPTS} root@"$ADMIN_NODE_IP":/root/log.log "$WORKSPACE/logs/" + +sudo rm -vf dimage +sudo rm -vf ssh_scr.sh + +set +x