xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Anthony PERARD <anthony.perard@citrix.com>
To: xen-devel@lists.xen.org
Cc: Anthony PERARD <anthony.perard@citrix.com>,
	Ian Jackson <Ian.Jackson@eu.citrix.com>,
	Ian Campbell <ian.campbell@citrix.com>
Subject: [PATCH OSSTEST 3/4] ts-devstack: Deploy OpenStack then test it with Tempest
Date: Thu, 16 Jul 2015 12:18:38 +0100	[thread overview]
Message-ID: <1437045519-13914-4-git-send-email-anthony.perard@citrix.com> (raw)
In-Reply-To: <1437045519-13914-1-git-send-email-anthony.perard@citrix.com>

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@citrix.com>
---
 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

  parent reply	other threads:[~2015-07-16 11:18 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-16 11:18 [PATCH OSSTEST 0/4] Have OpenStack tested on top of xen's master and libvirt's master Anthony PERARD
2015-07-16 11:18 ` [PATCH OSSTEST 1/4] ts-kernel-build: Enable CONFIG_NETFILTER_XT_TARGET_CHECKSUM Anthony PERARD
2015-07-17 15:48   ` Ian Campbell
2015-07-16 11:18 ` [PATCH OSSTEST 2/4] Toolstack: Add OpenStack as a toolstack Anthony PERARD
2015-07-17 15:58   ` Ian Campbell
2015-07-17 16:32     ` Anthony PERARD
2015-07-17 16:45       ` Ian Campbell
2015-07-16 11:18 ` Anthony PERARD [this message]
2015-07-17 16:04   ` [PATCH OSSTEST 3/4] ts-devstack: Deploy OpenStack then test it with Tempest Ian Campbell
2015-07-20 14:12     ` Anthony PERARD
2015-07-20 14:31       ` Ian Campbell
2015-07-17 16:10   ` Ian Campbell
2015-07-20 14:16     ` Anthony PERARD
2015-07-16 11:18 ` [PATCH OSSTEST 4/4] Create a flight to test OpenStack with xen-unstable and libvirt Anthony PERARD
2015-07-17 16:08   ` Ian Campbell
2015-07-17 15:51 ` [PATCH OSSTEST 0/4] Have OpenStack tested on top of xen's master and libvirt's master Ian Campbell
2015-07-17 16:22 ` Ian Campbell
2015-07-20 15:07   ` Anthony PERARD
2015-07-20 15:27     ` Ian Jackson
2015-07-20 15:35     ` Ian Campbell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1437045519-13914-4-git-send-email-anthony.perard@citrix.com \
    --to=anthony.perard@citrix.com \
    --cc=Ian.Jackson@eu.citrix.com \
    --cc=ian.campbell@citrix.com \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).