[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH OSSTEST 3/4] ts-devstack: Deploy OpenStack then test it with Tempest
This test configure configure a host via the ./stack.sh from devstack, it then test it with Tempest. Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx> --- sg-run-job | 5 + ts-devstack | 305 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 310 insertions(+) create mode 100755 ts-devstack diff --git a/sg-run-job b/sg-run-job index e44f79c..109f5ad 100755 --- a/sg-run-job +++ b/sg-run-job @@ -340,6 +340,11 @@ proc run-job/test-rumpuserxen {} { ts-guest-destroy-hard host $g + } +proc need-hosts/test-devstack {} { return host } +proc run-job/test-devstack {} { + run-ts . = ts-devstack +} + #---------- builds ---------- proc need-hosts/build {} { return BUILD } diff --git a/ts-devstack b/ts-devstack new file mode 100755 index 0000000..ed6d180 --- /dev/null +++ b/ts-devstack @@ -0,0 +1,305 @@ +#!/usr/bin/perl +# This is part of "osstest", an automated testing framework for Xen. +# Copyright (C) 2015 Citrix Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +use strict qw(vars); +use Osstest; +use Osstest::TestSupport; +use Osstest::BuildSupport; + +tsreadconfig(); +our ($ho,$gho) = ts_get_host_guest(@ARGV); +builddirsprops(); + +sub tgt_init (); + +sub checkout () { + prepbuilddirs(); + build_clone($ho, 'devstack', $builddir, 'devstack'); + my $openstack_git_base = git_massage_url('git://git.openstack.org'); + my $vg = target_choose_vg($ho, 10*1024); # 10GB + target_cmd($ho, <<END, 100); + cd $builddir/devstack + >local.conf + echo >>local.conf '[[local|localrc]]' + echo >>local.conf ADMIN_PASSWORD=`pwgen 20 1` + echo >>local.conf DATABASE_PASSWORD=`pwgen 20 1` + echo >>local.conf RABBIT_PASSWORD=`pwgen 20 1` + echo >>local.conf SERVICE_PASSWORD=`pwgen 20 1` + echo >>local.conf SERVICE_TOKEN=`pwgen 20 1` + echo >>local.conf \\\# make it small because there is no way to not + echo >>local.conf \\\# have this lvm volume created + echo >>local.conf VOLUME_BACKING_FILE_SIZE=500M + echo >>local.conf DEST=/opt/stack + echo >>local.conf LOGFILE=\\\$DEST/logs/stack.sh.log + echo >>local.conf LOG_COLOR=False + echo >>local.conf LIBVIRT_TYPE=xen + echo >>local.conf GIT_BASE="$openstack_git_base" + echo >>local.conf disable_service horizon + echo >>local.conf disable_service n-novnc + echo >>local.conf enable_service n-obj + echo >>local.conf '[[post-config|\$CINDER_CONF]]' + echo >>local.conf '[lvmdriver-1]' + echo >>local.conf volume_group = $vg +END + + # libvirt is already install, but not as a package, so avoid installation of + # the libvirt package with devstack + target_editfile($ho, "$builddir/devstack/files/debs/nova", sub { + while (<EI>) { + next if m/.*libvirt.*/; + print EO or die $!; + } + }); + target_editfile($ho, "$builddir/devstack/lib/nova_plugins/functions-libvirt", sub { + while (<EI>) { + next if m/install_package.*libvirt.*/; + print EO or die $!; + } + }); + + # OpenStack needs access to libvirt from a user. + target_cmd_root($ho, <<END + echo >>/etc/libvirt/libvirtd.conf 'unix_sock_group = "libvirt"' + echo >>/etc/libvirt/libvirtd.conf 'unix_sock_ro_perms = "0777"' + echo >>/etc/libvirt/libvirtd.conf 'unix_sock_rw_perms = "0770"' +END + ); + + # devstack is going to setup the host, install some dependency, clone + # openstack in /opt/stack + target_putfilecontents_root_stash($ho, 100, <<'END',"/etc/sudoers.d/devstack"); +osstest ALL=(ALL) NOPASSWD:ALL +END + + target_putfilecontents_root_stash($ho, 60, tgt_init(), "/etc/init.d/tgt"); + target_cmd_root($ho, <<END); + chmod +x /etc/init.d/tgt +END +} + +sub deploy() { + # This clone many repos and may take sometime until the GitProxyCache is + # filled + target_cmd($ho, <<END, 3600); + cd $builddir/devstack + ./stack.sh +END +} + +sub tempest() { + target_cmd($ho, <<END, 7200); + /opt/stack/tempest/run_tempest.sh -V --serial -- --concurrency=2 '(?!.*\\[.*\\bslow\\b.*\\]|.*test_volume_boot_pattern)(^tempest\\.(api|scenario|thirdparty))' +END +} + +sub cleanup() { + # Try to have less leaked stuff. + target_cmd($ho, <<END, 300); + cd $builddir/devstack + ./unstack.sh +END +} + +checkout(); +deploy(); +tempest(); +cleanup(); + +# This is missing from Debian but required by devstack +# Got it from https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=577925 +sub tgt_init () { + return <<'END'; +#!/bin/bash +### BEGIN INIT INFO +# Provides: tgtd +# Required-Start: $remote_fs $syslog +# Required-Stop: $remote_fs $syslog +# Should-Start: zfs +# Should-Stop: zfs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: iscsi target daemon +# Description: iscsi target daemon +### END INIT INFO + +DESC="target framework daemon" +NAME=tgtd +DAEMON=/usr/sbin/${NAME} + +TGTD_CONFIG=/etc/tgt/targets.conf + +TASK=$1 + +. /lib/lsb/init-functions + +[ -x $DAEMON ] || exit 0 + +start() +{ + log_daemon_msg "Starting $DESC" "$NAME" + # Start tgtd first. + tgtd &>/dev/null + RETVAL=$? + if [ "$RETVAL" -ne 0 ] ; then + log_end_msg 1 + exit 1 + else + log_end_msg 0 + fi + # Put tgtd into "offline" state until all the targets are configured. + # We don't want initiators to (re)connect and fail the connection + # if it's not ready. + tgtadm --op update --mode sys --name State -v offline + # Configure the targets. + tgt-admin -e -c $TGTD_CONFIG + # Put tgtd into "ready" state. + tgtadm --op update --mode sys --name State -v ready +} + +stop() +{ + if [ "$RUNLEVEL" == 0 -o "$RUNLEVEL" == 6 ] ; then + forcedstop + fi + log_daemon_msg "Stopping $DESC" "$NAME" + # Remove all targets. It only removes targets which are not in use. + tgt-admin --update ALL -c /dev/null &>/dev/null + # tgtd will exit if all targets were removed + tgtadm --op delete --mode system &>/dev/null + RETVAL=$? + if [ "$RETVAL" -eq 107 ] ; then + if [ "$TASK" != "restart" ] ; then + log_end_msg 1 + exit 1 + else + log_end_msg 0 + fi + elif [ "$RETVAL" -ne 0 ] ; then + log_end_msg 1 + echo "Some initiators are still connected - could not stop tgtd" + exit 2 + else + log_end_msg 0 + fi + echo -n +} + +forcedstop() +{ + # NOTE: Forced shutdown of the iscsi target may cause data corruption + # for initiators that are connected. + echo "Force-stopping target framework daemon" + # Offline everything first. May be needed if we're rebooting, but + # expect the initiators to reconnect cleanly when we boot again + # (i.e. we don't want them to reconnect to a tgtd which is still + # working, but the target is gone). + tgtadm --op update --mode sys --name State -v offline &>/dev/null + RETVAL=$? + if [ "$RETVAL" -eq 107 ] ; then + echo "tgtd is not running" + [ "$TASK" != "restart" ] && exit 1 + else + tgt-admin --offline ALL + # Remove all targets, even if they are still in use. + tgt-admin --update ALL -c /dev/null -f + # It will shut down tgtd only after all targets were removed. + tgtadm --op delete --mode system + RETVAL=$? + if [ "$RETVAL" -ne 0 ] ; then + echo "Failed to shutdown tgtd" + exit 1 + fi + fi + echo -n +} + +reload() +{ + log_daemon_msg "Reloading configuration of $DESC" "$NAME" + # Update configuration for targets. Only targets which + # are not in use will be updated. + tgt-admin --update ALL -c $TGTD_CONFIG &>/dev/null + RETVAL=$? + if [ "$RETVAL" -eq 107 ] ; then + log_end_msg 1 + echo "tgtd is not running" + exit 1 + fi + log_end_msg 0 +} + +forcedreload() +{ + log_daemon_msg "Forced-reload configuration of $DESC" "$NAME" + # Update configuration for targets, even those in use. + tgt-admin --update ALL -f -c $TGTD_CONFIG &>/dev/null + RETVAL=$? + if [ "$RETVAL" -eq 107 ] ; then + log_end_msg 1 + echo "tgtd is not running" + exit 1 + else + log_end_msg 0 + fi +} + +status() +{ + # Don't name this script "tgtd"... + TGTD_PROC=$(ps -C tgtd | grep -c tgtd) + if [ "$TGTD_PROC" -eq 2 ] ; then + echo "tgtd is running. Run 'tgt-admin -s' to see detailed target info." + else + echo "tgtd is NOT running." + fi +} + +case $1 in + start) + start + ;; + stop) + stop + ;; + forcedstop) + forcedstop + ;; + restart) + TASK=restart + stop && start + ;; + forcedrestart) + TASK=restart + forcedstop && start + ;; + reload) + reload + ;; + force-reload) + forcedreload + ;; + status) + status + ;; + *) + echo "Usage: $0 {start|stop|forcedstop|restart|forcedrestart|reload|force-reload|status}" + exit 2 + ;; +esac +END +} -- Anthony PERARD _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |