This script installs any necessary packages and clones all of the OpenStack trees which are used by devstack to deploy OpenStack.
Signed-off-by: Anthony PERARD <anthony.per...@citrix.com> Acked-by: Ian Jackson <ian.jack...@eu.citrix.com> --- sg-run-job | 5 ++ ts-openstack-deploy | 148 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 153 insertions(+) create mode 100755 ts-openstack-deploy diff --git a/sg-run-job b/sg-run-job index b1f94f4..6092384 100755 --- a/sg-run-job +++ b/sg-run-job @@ -629,6 +629,11 @@ proc run-job/test-rumprun {} { ts-guest-destroy-hard host $g + } +proc need-hosts/test-devstack {} { return host } +proc run-job/test-devstack {} { + run-ts . = ts-openstack-deploy + host +} + if {[file exists sg-run-job-adhoc]} { source sg-run-job-adhoc } diff --git a/ts-openstack-deploy b/ts-openstack-deploy new file mode 100755 index 0000000..6f061eb --- /dev/null +++ b/ts-openstack-deploy @@ -0,0 +1,148 @@ +#!/usr/bin/perl +# This is part of "osstest", an automated testing framework for Xen. +# Copyright (C) 2016 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 ($whhost) = @ARGV; +$whhost ||= 'host'; +our $ho = selecthost($whhost); +our $builddir = target_jobdir($ho); + +sub packages () { + target_install_packages($ho, qw(git sudo)); +} +sub checkout () { + prepbuilddirs(); + build_clone($ho, 'openstack_cinder', $builddir, 'cinder'); + build_clone($ho, 'openstack_devstack', $builddir, 'devstack'); + build_clone($ho, 'openstack_glance', $builddir, 'glance'); + build_clone($ho, 'openstack_keystone', $builddir, 'keystone'); + build_clone($ho, 'openstack_nova', $builddir, 'nova'); + build_clone($ho, 'openstack_requirements', $builddir, 'requirements'); + build_clone($ho, 'openstack_tempest', $builddir, 'tempest'); + + my $vg = target_choose_vg($ho, 10*1024); # 10GB + target_putfilecontents_stash($ho, 60, + <<END, $builddir.'/devstack/local.conf'); +[[local|localrc]] +# Everything should be cloned by osstest, so devstack don't have to do it +ERROR_ON_CLONE=True +USE_SCREEN=False +ADMIN_PASSWORD=secretadmin +DATABASE_PASSWORD=secretdatabase +RABBIT_PASSWORD=secretrabbit +SERVICE_PASSWORD=secretservice +SERVICE_TOKEN=atokenserviced +# make it small because there is no way to not have this lvm volume created +VOLUME_BACKING_FILE_SIZE=50M +CINDER_LVM_TYPE=default +DEST=$builddir +DATA_DIR=\$DEST/data +SERVICE_DIR=\$DEST/status +SUBUNIT_OUTPUT=\$DEST/devstack.subunit +LOGFILE=\$DEST/logs/stack.sh.log +LOG_COLOR=False +LIBVIRT_TYPE=xen +disable_service horizon +disable_service n-novnc +disable_service dstat +# Disable neutron and switch back to nova-network +disable_service q-svc +disable_service q-dhcp +disable_service q-meta +disable_service q-agt +disable_service q-l3 +enable_service n-net +[[post-config|\$CINDER_CONF]] +[lvmdriver-1] +volume_group = $vg +END + + # libvirt is already installed, but not as a package, so avoid installation + # of the libvirt package with devstack + # https://bugs.launchpad.net/devstack/+bug/1641144 + 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>) { + if (m/install_package.*libvirt.*/) { + s#install_package.*#:# + } + print EO or die $!; + } + } + ); + + # Package python-systemd does not exist in Debian installed by osstest + target_editfile($ho, "$builddir/devstack/files/debs/general", sub { + while (<EI>) { + next if m/^python-systemd$/; + print EO or die $!; + } + }); + + # devstack blindly assume that systemd is used if systemctl is present + # https://bugs.launchpad.net/devstack/+bug/1641112 + target_editfile($ho, "$builddir/devstack/functions-common", sub { + while (<EI>) { + if (m#\[ -x /bin/systemctl#) { + s#\[ -x /bin/systemctl \]#false# + } + print EO or die $!; + } + }); + + # OpenStack needs access to libvirt from a user. + target_cmd_root($ho, <<END); + set -e + addgroup --system libvirt + cat >> /etc/libvirt/libvirtd.conf <<EOF +unix_sock_group = "libvirt" +unix_sock_ro_perms = "0777" +unix_sock_rw_perms = "0770" +EOF + service libvirtd restart +END + + # devstack is going to setup the host, install some dependency. + target_putfilecontents_root_stash($ho, 100, + <<END, "/etc/sudoers.d/devstack"); +osstest ALL=(ALL) NOPASSWD:ALL +END +} + +sub deploy() { + target_cmd($ho, <<END, 1800); + set -e + cd $builddir/devstack + ./stack.sh +END +} + +packages(); +checkout(); +deploy(); -- Anthony PERARD _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org https://lists.xen.org/xen-devel