diff --git a/devstack-vm-gate-dev.sh b/devstack-vm-gate-dev.sh index 0625e0ae..fdb08a62 100755 --- a/devstack-vm-gate-dev.sh +++ b/devstack-vm-gate-dev.sh @@ -11,13 +11,19 @@ export SKIP_DEVSTACK_GATE_PROJECT=1 export DEVSTACK_GATE_TEMPEST=1 export ZUUL_BRANCH=master export ZUUL_PROJECT=testing +export ZUUL_REF=refs/zuul/Ztest export JOB_NAME=test export BUILD_NUMBER=42 export GERRIT_CHANGE_NUMBER=1234 export GERRIT_PATCHSET_NUMBER=1 +export DEVSTACK_GATE_TEMPEST=${DEVSTACK_GATE_TEMPEST:-0} +export DEVSTACK_GATE_CINDER=${DEVSTACK_GATE_CINDER:-0} +export DEVSTACK_GATE_QUANTUM=${DEVSTACK_GATE_QUANTUM:-0} +export DEVSTACK_GATE_GRENADE=${DEVSTACK_GATE_GRENADE:-""} EOF -rsync -az --delete $WORKSPACE/ jenkins@$NODE_IP_ADDR:workspace/ +rsync -az $WORKSPACE/ jenkins@$NODE_IP_ADDR:workspace-cache/ +rsync -az $WORKSPACE/ jenkins@$NODE_IP_ADDR:workspace/ RETVAL=$? if [ $RETVAL != 0 ]; then exit $RETVAL diff --git a/devstack-vm-gate-wrap.sh b/devstack-vm-gate-wrap.sh index c71b1cb6..f85ea89b 100755 --- a/devstack-vm-gate-wrap.sh +++ b/devstack-vm-gate-wrap.sh @@ -40,6 +40,9 @@ export DEVSTACK_CINDER_SECURE_DELETE=${DEVSTACK_CINDER_SECURE_DELETE:-0} # Only applicable to master branch export DEVSTACK_GATE_QUANTUM=${DEVSTACK_GATE_QUANTUM:-0} +# Set to the name of the "old" branch to run grenade (eg "stable/folsom") +export DEVSTACK_GATE_GRENADE=${DEVSTACK_GATE_GRENADE:-""} + # Set the virtualization driver to: libvirt, openvz export DEVSTACK_GATE_VIRT_DRIVER=${DEVSTACK_GATE_VIRT_DRIVER:-libvirt} @@ -56,12 +59,13 @@ if [ -z "$SKIP_DEVSTACK_GATE_PROJECT" ]; then PROJECTS="openstack-ci/devstack-gate $PROJECTS" fi -export DEST=/opt/stack +export BASE=/opt/stack # Most of the work of this script is done in functions so that we may # easily redirect their stdout / stderr to log files. function setup_workspace { + DEST=$1 # Enabled detailed logging, since output of this function is redirected set -o xtrace @@ -75,6 +79,21 @@ function setup_workspace { sudo bash -c 'echo "127.0.1.1 $HOSTNAME" >>/etc/hosts' fi + # Hpcloud provides no swap, but does have a virtual disk mounted + # at /mnt we can use. It also doesn't have enough space on / for + # two devstack installs, so we partition the vdisk: + if [ `grep SwapTotal /proc/meminfo | awk '{ print $2; }'` -eq 0 ] && \ + [ -b /dev/vdb ]; then + sudo umount /dev/vdb + sudo parted /dev/vdb --script -- mklabel msdos + sudo parted /dev/vdb --script -- mkpart primary linux-swap 0 8192 + sudo parted /dev/vdb --script -- mkpart primary ext2 8192 -1 + sudo mkswap /dev/vdb1 + sudo mkfs.ext4 /dev/vdb2 + sudo swapon /dev/vdb1 + sudo mount /dev/vdb2 /opt + fi + sudo mkdir -p $DEST sudo chown -R jenkins:jenkins $DEST cd $DEST @@ -82,9 +101,10 @@ function setup_workspace { # The vm template update job should cache the git repos # Move them to where we expect: if ls ~/workspace-cache/*; then - mv ~/workspace-cache/* $DEST + rsync -a ~/workspace-cache/ $DEST/ fi + echo "Using branch: $ZUUL_BRANCH" for PROJECT in $PROJECTS do echo "Setting up $PROJECT" @@ -142,9 +162,11 @@ function setup_workspace { cd $DEST done - # Set GATE_SCRIPT_DIR to point to devstack-gate in the workspace so that - # we are testing the proposed change from this point forward. - GATE_SCRIPT_DIR=$DEST/devstack-gate + # The vm template update job should cache some images in ~/files. + # Move them to where devstack expects: + if [ -e ~/cache/files/* ]; then + rsync -a ~/cache/files/ $DEST/devstack/files/ + fi # Disable detailed logging as we return to the main script set +o xtrace @@ -157,20 +179,6 @@ function setup_host { # Make sure headers for the currently running kernel are installed: sudo apt-get install -y --force-yes linux-headers-`uname -r` - # Hpcloud provides no swap, but does have a partition mounted at /mnt - # we can use: - if [ `cat /proc/meminfo | grep SwapTotal | awk '{ print $2; }'` -eq 0 ] && [ -b /dev/vdb ]; then - sudo umount /dev/vdb - sudo mkswap /dev/vdb - sudo swapon /dev/vdb - fi - - # The vm template update job should cache some images in ~/files. - # Move them to where devstack expects: - if ls ~/cache/files/*; then - mv ~/cache/files/* $DEST/devstack/files - fi - # Move the PIP cache into position: sudo mkdir -p /var/cache/pip sudo mv ~/cache/pip/* /var/cache/pip @@ -191,7 +199,7 @@ function setup_host { # Create a stack user for devstack to run as, so that we can # revoke sudo permissions from that user when appropriate. - sudo useradd -U -s /bin/bash -d $DEST -m stack + sudo useradd -U -s /bin/bash -d $BASE/new -m stack TEMPFILE=`mktemp` echo "stack ALL=(root) NOPASSWD:ALL" >$TEMPFILE chmod 0440 $TEMPFILE @@ -216,11 +224,23 @@ function cleanup_host { sudo cp /var/log/syslog $WORKSPACE/logs/syslog.txt sudo cp /var/log/kern.log $WORKSPACE/logs/kern_log.txt - sudo cp $DEST/screen-logs/* $WORKSPACE/logs/ - sudo cp $DEST/devstacklog.txt $WORKSPACE/logs/ - # Make the devstack localrc available with the logs - sudo cp $DEST/devstack/localrc $WORKSPACE/logs/localrc.txt + if [ -d $BASE/old ]; then + mkdir -p $WORKSPACE/logs/old/ + mkdir -p $WORKSPACE/logs/new/ + mkdir -p $WORKSPACE/logs/grenade/ + sudo cp $BASE/old/screen-logs/* $WORKSPACE/logs/old/ + sudo cp $BASE/old/devstacklog.txt $WORKSPACE/logs/old/ + sudo cp $BASE/old/devstack/localrc $WORKSPACE/logs/old/localrc.txt + sudo cp $BASE/logs/* $WORKSPACE/logs/ + sudo cp $BASE/new/grenade/localrc $WORKSPACE/logs/grenade/localrc.txt + NEWLOGTARGET=$WORKSPACE/logs/new + else + NEWLOGTARGET=$WORKSPACE/logs + fi + sudo cp $BASE/new/screen-logs/* $NEWLOGTARGET/ + sudo cp $BASE/new/devstacklog.txt $NEWLOGTARGET/ + sudo cp $BASE/new/devstack/localrc $NEWLOGTARGET/localrc.txt # Make sure jenkins can read all the logs sudo chown -R jenkins:jenkins $WORKSPACE/logs/ @@ -232,7 +252,7 @@ function cleanup_host { rm $WORKSPACE/logs/*.*.txt # Save the tempest nosetests results - sudo cp $DEST/tempest/nosetests*.xml $WORKSPACE/ + sudo cp $BASE/new/tempest/nosetests*.xml $WORKSPACE/ sudo chown jenkins:jenkins $WORKSPACE/nosetests*.xml sudo chmod a+r $WORKSPACE/nosetests*.xml @@ -241,10 +261,15 @@ function cleanup_host { } # Make a directory to store logs +rm -rf logs mkdir -p logs -rm -f logs/* -setup_workspace &> $WORKSPACE/logs/devstack-gate-setup-workspace.txt +setup_workspace $BASE/new &> \ + $WORKSPACE/logs/devstack-gate-setup-workspace-new.txt + +# Set GATE_SCRIPT_DIR to point to devstack-gate in the workspace so that +# we are testing the proposed change from this point forward. +GATE_SCRIPT_DIR=$BASE/new/devstack-gate # Also, if we're testing devstack-gate, re-exec this script once so # that we can test the new version of it. @@ -254,6 +279,14 @@ if [[ $ZUUL_PROJECT == "openstack-ci/devstack-gate" ]] && [[ $RE_EXEC != "true" exec $GATE_SCRIPT_DIR/devstack-vm-gate-wrap.sh fi +if [ "$DEVSTACK_GATE_GRENADE" ]; then + ORIGBRANCH=$ZUUL_BRANCH + ZUUL_BRANCH=$DEVSTACK_GATE_GRENADE + setup_workspace $BASE/old &> \ + $WORKSPACE/logs/devstack-gate-setup-workspace-old.txt + ZUUL_BRANCH=$ORIGBRANCH +fi + echo "Triggered by: https://review.openstack.org/$ZUUL_CHANGE patchset $ZUUL_PATCHSET" echo "Pipeline: $ZUUL_PIPELINE" diff --git a/devstack-vm-gate.sh b/devstack-vm-gate.sh index a811cc3d..70f9e7f5 100755 --- a/devstack-vm-gate.sh +++ b/devstack-vm-gate.sh @@ -21,7 +21,7 @@ set -o errexit -cd $DEST/devstack +cd $BASE/new/devstack rm -f localrc @@ -62,6 +62,7 @@ EOF fi cat <>localrc +DEST=$BASE/new ACTIVE_TIMEOUT=60 BOOT_TIMEOUT=90 ASSOCIATE_TIMEOUT=60 @@ -78,8 +79,8 @@ ENABLED_SERVICES=$ENABLED_SERVICES SKIP_EXERCISES=$SKIP_EXERCISES SERVICE_HOST=127.0.0.1 SYSLOG=True -SCREEN_LOGDIR=$DEST/screen-logs -LOGFILE=$DEST/devstacklog.txt +SCREEN_LOGDIR=$BASE/new/screen-logs +LOGFILE=$BASE/new/devstacklog.txt VERBOSE=True FIXED_RANGE=10.1.0.0/24 FIXED_NETWORK_SIZE=256 @@ -124,21 +125,42 @@ if [ "$DEVSTACK_GATE_TEMPEST" -eq "1" ]; then fi # Make the workspace owned by the stack user -sudo chown -R stack:stack $DEST +sudo chown -R stack:stack $BASE/new +if [ -d $BASE/old ]; then + sed -e 's|$BASE/new|$BASE/old|' < $BASE/new/devstack/localrc \ + > $BASE/old/devstack/localrc + sed -e 's|$BASE/new|$BASE/old|' < $BASE/new/devstack/exerciserc \ + > $BASE/old/devstack/exerciserc -echo "Running devstack" -sudo -H -u stack ./stack.sh + sudo chown -R stack:stack $BASE/old +fi -echo "Removing sudo privileges for devstack user" -sudo rm /etc/sudoers.d/50_stack_sh +if [ "$DEVSTACK_GATE_GRENADE" != "" ]; then + sudo echo "GRENADE_PHASE=work" >>$BASE/old/devstack/localrc + sudo echo "GRENADE_PHASE=trunk" >>$BASE/new/devstack/localrc + cat <$BASE/new/grenade/localrc +WORK_DEVSTACK_DIR=$BASE/old/devstack +TRUNK_DEVSTACK_DIR=$BASE/new/devstack +EOF -echo "Running devstack exercises" -sudo -H -u stack ./exercise.sh + cd $BASE + sudo -H -u stack ./grenade.sh +else + echo "Running devstack" + sudo -H -u stack ./stack.sh + + echo "Removing sudo privileges for devstack user" + sudo rm /etc/sudoers.d/50_stack_sh + + echo "Running devstack exercises" + sudo -H -u stack ./exercise.sh +fi if [ "$DEVSTACK_GATE_TEMPEST" -eq "1" ]; then echo "Configuring tempest" + cd $BASE/new/devstack sudo -H -u stack ./tools/configure_tempest.sh - cd $DEST/tempest + cd $BASE/new/tempest echo "Running tempest smoke tests" sudo -H -u stack NOSE_XUNIT_FILE=nosetests-smoke.xml nosetests --with-xunit -sv --nologcapture --attr=type=smoke tempest RETVAL=$?