diff --git a/README b/README new file mode 100644 index 0000000000..c8f68c2fd5 --- /dev/null +++ b/README @@ -0,0 +1 @@ +All that's missing is the fork. Heh. \ No newline at end of file diff --git a/README.md b/README.md index 5c3289378a..89c15d9097 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,20 @@ DevStack is a set of scripts and utilities to quickly deploy an OpenStack cloud. +# Devstack + Multi-node Quantum Configurations + +This is a forked devstack repo maintained by del at nicira.com. +I have created it at the request of members of the community and will use +it to track work in progress and store sample multi-node quantum +configurations. Any diffs between this repo and the main devstack repo will +be periodically submitted for review and (where appropriate) inclusion in +the main repo. + +The sample configurations are stored in devstack/samples/scenarios. + +If you have any questions, please feel free to email Dave at the address above. +Feedback, suggestions, comments are appreciated. + + # Goals * To quickly build dev OpenStack environments in a clean Oneiric or Precise environment diff --git a/forkit.gif b/forkit.gif new file mode 100644 index 0000000000..a6a48b38fc Binary files /dev/null and b/forkit.gif differ diff --git a/index.html b/index.html new file mode 100644 index 0000000000..79eddc4d0f --- /dev/null +++ b/index.html @@ -0,0 +1,63 @@ + + + + + + + Spoon-Knife + + + + + + + + + +

+ Fork me? No, fork you! +

+ + + diff --git a/samples/scenarios/README.rst b/samples/scenarios/README.rst new file mode 100644 index 0000000000..d4cf8b24d1 --- /dev/null +++ b/samples/scenarios/README.rst @@ -0,0 +1,19 @@ +Sample Configurations +===================== + +This directory contains configurations for sample scenarios. Each directory +corresponds got a scenario. A single file captures the git/python version +and localrc information for a machine. + +Scenarios +--------- + +multinode-ovs: + + One controller node (gto), one compute node (mustang) + OVS plugin (without tunneling). + +multinode-ovs-tunnels: + + One controller node (gto), one compute node (mustang). + OVS plugin (with GRE tunneling). diff --git a/samples/scenarios/checkout.sh b/samples/scenarios/checkout.sh new file mode 100755 index 0000000000..e2ce17f48d --- /dev/null +++ b/samples/scenarios/checkout.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# Simple script to setup localrc on test node. +# Execute this script from the root directory. For example: +# +# $ samples/scenarios/setup.sh +# +# Assumes your hostname has been set to one of gto, mustang, or charger. +# +# Modify the SCENARIO variable below to use a different scenario. + +HOSTNAME=`hostname` +SCENARIO=multinode-ovs +INFO_FILE=samples/scenarios/$SCENARIO/$HOSTNAME-info +STACK_ROOT=/opt/stack + +echo $INFO_FILE +for l in `grep git $INFO_FILE` +do + MOD=`echo $l | awk -F"|" '{ print $2; }'` + VER=`echo $l | awk -F"|" '{ print substr($3, 8, 7); }'` + + if [ $MOD != "git-core" ]; then + pushd $STACK_ROOT/$MOD + git checkout $VER + popd + fi +done diff --git a/samples/scenarios/configure.py b/samples/scenarios/configure.py new file mode 100755 index 0000000000..0a994f3484 --- /dev/null +++ b/samples/scenarios/configure.py @@ -0,0 +1,32 @@ +#!/usr/bin/python + +# Copyright (C) 2009-2012 Nicira Networks, Inc. All Rights Reserved. +# +# This software is provided only under the terms and conditions of a written +# license agreement with Nicira. If no such agreement applies to you, you are +# not authorized to use this software. Contact Nicira to obtain an appropriate +# license: www.nicira.com. +# +# Author(s): Dave Lapsley + +import os +import subprocess +import urllib + +stack_root = '/opt/stack' + +try: + os.mkdir(stack_root) +except OSError as e: + print 'Directory: %s' % e + +with open('repos.dat') as input: + for l in input.readlines(): + l = l.strip() + repo, commit = l.split() + host, path = urllib.splithost(repo) + repo_dir = (stack_root + '/' + + os.path.splitext(os.path.basename(path))[0]) + subprocess.call(['git', 'clone', repo, repo_dir]) + subprocess.call('cd %s && git checkout %s' % (repo_dir, commit), + shell=True) diff --git a/samples/scenarios/multinode-ovs-tunnels/charger-info b/samples/scenarios/multinode-ovs-tunnels/charger-info new file mode 100644 index 0000000000..1139945c69 --- /dev/null +++ b/samples/scenarios/multinode-ovs-tunnels/charger-info @@ -0,0 +1,103 @@ +git|glance|master[8e9e0ca] +git|keystone|master[198fe22] +git|nova|master[c147878] +git|python-keystoneclient|master[7b85329] +git|python-novaclient|master[f6014dd] +git|python-quantumclient|master[9b09f53] +git|quantum|master[540f1ed] +os|vendor=Ubuntu +os|release=11.10 +pkg|pep8|0.6.1-2ubuntu1 +pkg|pylint|0.23.0-1 +pkg|python-pip|1.0-1 +pkg|screen|4.0.3-14ubuntu8 +pkg|unzip|6.0-4ubuntu1 +pkg|wget|1.12-3.1ubuntu1 +pkg|psmisc|22.14-1 +pkg|git-core|1:1.7.5.4-1 +pkg|lsof|4.81.dfsg.1-1build1 +pkg|openssh-server|1:5.8p1-7ubuntu1 +pkg|vim-nox|2:7.3.154+hg~74503f6ee649-2ubuntu3 +pkg|locate|4.4.2-1ubuntu3 +pkg|python-virtualenv|1.6.4-0ubuntu1 +pkg|python-unittest2|0.5.1-1 +pkg|iputils-ping|3:20101006-1 +pkg|wget|1.12-3.1ubuntu1 +pkg|curl|7.21.6-3ubuntu3.2 +pkg|tcpdump|4.1.1-2ubuntu2 +pkg|euca2ools|2.0.0~bzr464-0ubuntu2 +pkg|lvm2|2.02.66-4ubuntu3 +pkg|open-iscsi|2.0.871-0ubuntu9 +pkg|open-iscsi-utils|2.0.871-0ubuntu9 +pkg|dnsmasq-base|2.57-1ubuntu1 +pkg|kpartx|0.4.9-2ubuntu1 +pkg|parted|2.3-6ubuntu3 +pkg|mysql-server| +pkg|python-mysqldb|1.2.3-0ubuntu1 +pkg|python-xattr|0.6-1ubuntu2 +pkg|python-lxml|2.3-0.1build1 +pkg|kvm|1:84+dfsg-0ubuntu16+0.14.1+noroms+0ubuntu6.2 +pkg|gawk|1:3.1.8+dfsg-0.1build1 +pkg|iptables|1.4.10-1ubuntu1 +pkg|ebtables|2.0.9.2-2 +pkg|sqlite3|3.7.7-2ubuntu2 +pkg|sudo|1.7.4p6-1ubuntu2 +pkg|kvm|1:84+dfsg-0ubuntu16+0.14.1+noroms+0ubuntu6.2 +pkg|libvirt-bin|0.9.2-4ubuntu15.2 +pkg|vlan|1.9-3ubuntu3.1 +pkg|curl|7.21.6-3ubuntu3.2 +pkg|rabbitmq-server| +pkg|socat|1.7.1.3-1.1ubuntu1 +pkg|python-mox|0.5.3-1ubuntu4 +pkg|python-paste|1.7.5.1-4ubuntu1 +pkg|python-migrate|0.7.1-1 +pkg|python-gflags|1.5.1-1 +pkg|python-greenlet|0.3.1-1ubuntu4 +pkg|python-libvirt|0.9.2-4ubuntu15.2 +pkg|python-libxml2|2.7.8.dfsg-4ubuntu0.2 +pkg|python-routes|1.12.3-1 +pkg|python-netaddr|0.7.5-4 +pkg|python-pastedeploy|1.5.0-2 +pkg|python-eventlet|0.9.15-0ubuntu4 +pkg|python-cheetah|2.4.4-2ubuntu1 +pkg|python-carrot|0.10.7-0ubuntu1 +pkg|python-tempita|0.5.1-1 +pkg|python-sqlalchemy|0.6.8-1 +pkg|python-suds|0.4.1-2 +pkg|python-lockfile|1:0.8-2 +pkg|python-m2crypto|0.20.1+dfsg1-1.1ubuntu1 +pkg|python-boto|2.0-0ubuntu1 +pkg|python-kombu|1.0.4-2 +pkg|python-feedparser|5.0.1-1 +pkg|python-iso8601|0.1.4-1 +pkg|python-dateutil|1.4.1-4 +pip|pycrypto|2.3 +pip|passlib|1.5.3 +localrc| +localrc| +localrc| +localrc| +localrc| +localrc|ENABLED_SERVICES=n-cpu,n-api,quantum,q-agt +localrc|FIXED_NETWORK_SIZE=4096 +localrc|FIXED_RANGE=10.4.128.0/20 +localrc|FLAT_INTERFACE=eth1 +localrc|FLOATING_RANGE=172.16.142.128/25 +localrc|GLANCE_HOSTPORT=192.168.56.3:9292 +localrc|HOST_IP=192.168.56.4 +localrc|KEYSTONE_HOST=192.168.56.3 +localrc|LIBVIRT_TYPE=qemu +localrc|LOGFILE=/home/dlapsley/logs/stack.log +localrc|MULTI_HOST=0 +localrc|MYSQL_HOST=192.168.56.3 +localrc|OFFLINE=0 +localrc|Q_INTERFACE=eth1 +localrc|Q_PLUGIN=openvswitch +localrc|Q_TUNNEL_ENABLE=1 +localrc|Q_TUNNEL_REMOTE_IP_FILE=/home/dlapsley/devstack/samples/scenarios/multinode-ovs-tunnels/remote-ips.txt +localrc|RABBIT_HOST=192.168.56.3 +localrc|RECLONE=no +localrc|SERVICE_TOKEN=xyzpdqlazydog +localrc|SYSLOG_HOST=192.168.56.3 +localrc|SYSLOG=True + diff --git a/samples/scenarios/multinode-ovs-tunnels/gto-info b/samples/scenarios/multinode-ovs-tunnels/gto-info new file mode 100644 index 0000000000..e4e7ec8ef4 --- /dev/null +++ b/samples/scenarios/multinode-ovs-tunnels/gto-info @@ -0,0 +1,154 @@ +git|glance|master[8e9e0ca] +git|horizon|master[c555673] +git|keystone|master[198fe22] +git|nova|master[adb2124] +git|noVNC|master[22b9a75] +git|python-keystoneclient|master[7b85329] +git|python-novaclient|master[f6014dd] +git|python-quantumclient|master[9b09f53] +git|quantum|master[540f1ed] +os|vendor=Ubuntu +os|release=11.10 +pkg|pep8|0.6.1-2ubuntu1 +pkg|pylint|0.23.0-1 +pkg|python-pip|1.0-1 +pkg|screen|4.0.3-14ubuntu8 +pkg|unzip|6.0-4ubuntu1 +pkg|wget|1.12-3.1ubuntu1 +pkg|psmisc|22.14-1 +pkg|git-core|1:1.7.5.4-1 +pkg|lsof|4.81.dfsg.1-1build1 +pkg|openssh-server|1:5.8p1-7ubuntu1 +pkg|vim-nox|2:7.3.154+hg~74503f6ee649-2ubuntu3 +pkg|locate|4.4.2-1ubuntu3 +pkg|python-virtualenv|1.6.4-0ubuntu1 +pkg|python-unittest2|0.5.1-1 +pkg|iputils-ping|3:20101006-1 +pkg|wget|1.12-3.1ubuntu1 +pkg|curl|7.21.6-3ubuntu3.2 +pkg|tcpdump|4.1.1-2ubuntu2 +pkg|euca2ools|2.0.0~bzr464-0ubuntu2 +pkg|python-eventlet|0.9.15-0ubuntu4 +pkg|python-routes|1.12.3-1 +pkg|python-greenlet|0.3.1-1ubuntu4 +pkg|python-sqlalchemy|0.6.8-1 +pkg|python-wsgiref| +pkg|python-pastedeploy|1.5.0-2 +pkg|python-xattr|0.6-1ubuntu2 +pkg|python-iso8601|0.1.4-1 +pkg|python-setuptools|0.6.16-1ubuntu0.1 +pkg|python-dev|2.7.2-7ubuntu2 +pkg|python-lxml|2.3-0.1build1 +pkg|python-pastescript|1.7.3-7 +pkg|python-pastedeploy|1.5.0-2 +pkg|python-paste|1.7.5.1-4ubuntu1 +pkg|sqlite3|3.7.7-2ubuntu2 +pkg|python-pysqlite2|2.6.3-2 +pkg|python-sqlalchemy|0.6.8-1 +pkg|python-mysqldb|1.2.3-0ubuntu1 +pkg|python-webob|1.0.8-1 +pkg|python-greenlet|0.3.1-1ubuntu4 +pkg|python-routes|1.12.3-1 +pkg|libldap2-dev|2.4.25-1.1ubuntu4.1 +pkg|libsasl2-dev|2.1.24~rc1.dfsg1+cvs2011-05-23-4ubuntu2 +pkg|python-bcrypt|0.1-1build2 +pkg|python-dateutil|1.4.1-4 +pkg|dnsmasq-base|2.57-1ubuntu1 +pkg|kpartx|0.4.9-2ubuntu1 +pkg|parted|2.3-6ubuntu3 +pkg|mysql-server|5.1.61-0ubuntu0.11.10.1 +pkg|python-mysqldb|1.2.3-0ubuntu1 +pkg|python-xattr|0.6-1ubuntu2 +pkg|python-lxml|2.3-0.1build1 +pkg|kvm|1:84+dfsg-0ubuntu16+0.14.1+noroms+0ubuntu6.2 +pkg|gawk|1:3.1.8+dfsg-0.1build1 +pkg|iptables|1.4.10-1ubuntu1 +pkg|ebtables|2.0.9.2-2 +pkg|sqlite3|3.7.7-2ubuntu2 +pkg|sudo|1.7.4p6-1ubuntu2 +pkg|kvm|1:84+dfsg-0ubuntu16+0.14.1+noroms+0ubuntu6.2 +pkg|libvirt-bin|0.9.2-4ubuntu15.2 +pkg|vlan|1.9-3ubuntu3.1 +pkg|curl|7.21.6-3ubuntu3.2 +pkg|rabbitmq-server|2.5.0-1ubuntu2 +pkg|socat|1.7.1.3-1.1ubuntu1 +pkg|python-mox|0.5.3-1ubuntu4 +pkg|python-paste|1.7.5.1-4ubuntu1 +pkg|python-migrate|0.7.1-1 +pkg|python-gflags|1.5.1-1 +pkg|python-greenlet|0.3.1-1ubuntu4 +pkg|python-libvirt|0.9.2-4ubuntu15.2 +pkg|python-libxml2|2.7.8.dfsg-4ubuntu0.2 +pkg|python-routes|1.12.3-1 +pkg|python-netaddr|0.7.5-4 +pkg|python-pastedeploy|1.5.0-2 +pkg|python-eventlet|0.9.15-0ubuntu4 +pkg|python-cheetah|2.4.4-2ubuntu1 +pkg|python-carrot|0.10.7-0ubuntu1 +pkg|python-tempita|0.5.1-1 +pkg|python-sqlalchemy|0.6.8-1 +pkg|python-suds|0.4.1-2 +pkg|python-lockfile|1:0.8-2 +pkg|python-m2crypto|0.20.1+dfsg1-1.1ubuntu1 +pkg|python-boto|2.0-0ubuntu1 +pkg|python-kombu|1.0.4-2 +pkg|python-feedparser|5.0.1-1 +pkg|python-iso8601|0.1.4-1 +pkg|tgt|1:1.0.17-1ubuntu1 +pkg|lvm2|2.02.66-4ubuntu3 +pkg|python-numpy|1:1.5.1-2ubuntu2 +pkg|apache2|2.2.20-1ubuntu1.2 +pkg|libapache2-mod-wsgi|3.3-2ubuntu3 +pkg|python-dateutil|1.4.1-4 +pkg|python-paste|1.7.5.1-4ubuntu1 +pkg|python-pastedeploy|1.5.0-2 +pkg|python-anyjson|0.3.1-1 +pkg|python-routes|1.12.3-1 +pkg|python-xattr|0.6-1ubuntu2 +pkg|python-sqlalchemy|0.6.8-1 +pkg|python-webob|1.0.8-1 +pkg|python-kombu|1.0.4-2 +pkg|pylint|0.23.0-1 +pkg|pep8|0.6.1-2ubuntu1 +pkg|python-eventlet|0.9.15-0ubuntu4 +pkg|python-nose|1.0.0-1ubuntu1 +pkg|python-sphinx|1.0.7+dfsg-1 +pkg|python-mox|0.5.3-1ubuntu4 +pkg|python-kombu|1.0.4-2 +pkg|python-coverage|3.4-1 +pkg|python-cherrypy3|3.1.2-1 +pkg|python-django|1.3-2ubuntu1.1 +pkg|python-django-mailer|0.2a1.dev3-0ubuntu1 +pkg|python-django-nose|0.1.2-2 +pkg|python-django-registration|0.7-2 +pkg|python-migrate|0.7.1-1 +pip|django-nose-selenium|0.7.3 +pip|pycrypto|2.3 +pip|python-cloudfiles|1.7.10 +pip|passlib|1.5.3 +localrc| +localrc| +localrc| +localrc| +localrc| +localrc| +localrc| +localrc| +localrc| +localrc|ENABLED_SERVICES=g-api,g-reg,key,n-api,n-crt,n-obj,n-net,n-vol,n-sch,n-novnc,n-xvnc,n-cauth,horizon,mysql,rabbit,quantum,q-svc,q-agt +localrc|FIXED_NETWORK_SIZE=4096 +localrc|FIXED_RANGE=10.4.128.0/20 +localrc|FLAT_INTERFACE=eth1 +localrc|FLOATING_RANGE=172.16.142.128/25 +localrc|HOST_IP=192.168.56.3 +localrc|LIBVIRT_TYPE=qemu +localrc|LOGFILE=/home/dlapsley/logs/stack.log +localrc|MULTI_HOST=0 +localrc|OFFLINE=0 +localrc|Q_INTERFACE=eth1 +localrc|Q_PLUGIN=openvswitch +localrc|Q_TUNNEL_ENABLE=1 +localrc|Q_TUNNEL_REMOTE_IP_FILE=/home/dlapsley/devstack/samples/scenarios/multinode-ovs-tunnels/remote-ips.txt +localrc|RECLONE=no +localrc|SERVICE_TOKEN=xyzpdqlazydog +localrc|SYSLOG=True diff --git a/samples/scenarios/multinode-ovs-tunnels/mustang-info b/samples/scenarios/multinode-ovs-tunnels/mustang-info new file mode 100644 index 0000000000..b9aa310259 --- /dev/null +++ b/samples/scenarios/multinode-ovs-tunnels/mustang-info @@ -0,0 +1,103 @@ +git|glance|master[8e9e0ca] +git|keystone|master[198fe22] +git|nova|master[c147878] +git|python-keystoneclient|master[7b85329] +git|python-novaclient|master[f6014dd] +git|python-quantumclient|master[9b09f53] +git|quantum|master[540f1ed] +os|vendor=Ubuntu +os|release=11.10 +pkg|pep8|0.6.1-2ubuntu1 +pkg|pylint|0.23.0-1 +pkg|python-pip|1.0-1 +pkg|screen|4.0.3-14ubuntu8 +pkg|unzip|6.0-4ubuntu1 +pkg|wget|1.12-3.1ubuntu1 +pkg|psmisc|22.14-1 +pkg|git-core|1:1.7.5.4-1 +pkg|lsof|4.81.dfsg.1-1build1 +pkg|openssh-server|1:5.8p1-7ubuntu1 +pkg|vim-nox|2:7.3.154+hg~74503f6ee649-2ubuntu3 +pkg|locate|4.4.2-1ubuntu3 +pkg|python-virtualenv|1.6.4-0ubuntu1 +pkg|python-unittest2|0.5.1-1 +pkg|iputils-ping|3:20101006-1 +pkg|wget|1.12-3.1ubuntu1 +pkg|curl|7.21.6-3ubuntu3.2 +pkg|tcpdump|4.1.1-2ubuntu2 +pkg|euca2ools|2.0.0~bzr464-0ubuntu2 +pkg|lvm2|2.02.66-4ubuntu3 +pkg|open-iscsi|2.0.871-0ubuntu9 +pkg|open-iscsi-utils|2.0.871-0ubuntu9 +pkg|dnsmasq-base|2.57-1ubuntu1 +pkg|kpartx|0.4.9-2ubuntu1 +pkg|parted|2.3-6ubuntu3 +pkg|mysql-server| +pkg|python-mysqldb|1.2.3-0ubuntu1 +pkg|python-xattr|0.6-1ubuntu2 +pkg|python-lxml|2.3-0.1build1 +pkg|kvm|1:84+dfsg-0ubuntu16+0.14.1+noroms+0ubuntu6.2 +pkg|gawk|1:3.1.8+dfsg-0.1build1 +pkg|iptables|1.4.10-1ubuntu1 +pkg|ebtables|2.0.9.2-2 +pkg|sqlite3|3.7.7-2ubuntu2 +pkg|sudo|1.7.4p6-1ubuntu2 +pkg|kvm|1:84+dfsg-0ubuntu16+0.14.1+noroms+0ubuntu6.2 +pkg|libvirt-bin|0.9.2-4ubuntu15.2 +pkg|vlan|1.9-3ubuntu3.1 +pkg|curl|7.21.6-3ubuntu3.2 +pkg|rabbitmq-server| +pkg|socat|1.7.1.3-1.1ubuntu1 +pkg|python-mox|0.5.3-1ubuntu4 +pkg|python-paste|1.7.5.1-4ubuntu1 +pkg|python-migrate|0.7.1-1 +pkg|python-gflags|1.5.1-1 +pkg|python-greenlet|0.3.1-1ubuntu4 +pkg|python-libvirt|0.9.2-4ubuntu15.2 +pkg|python-libxml2|2.7.8.dfsg-4ubuntu0.2 +pkg|python-routes|1.12.3-1 +pkg|python-netaddr|0.7.5-4 +pkg|python-pastedeploy|1.5.0-2 +pkg|python-eventlet|0.9.15-0ubuntu4 +pkg|python-cheetah|2.4.4-2ubuntu1 +pkg|python-carrot|0.10.7-0ubuntu1 +pkg|python-tempita|0.5.1-1 +pkg|python-sqlalchemy|0.6.8-1 +pkg|python-suds|0.4.1-2 +pkg|python-lockfile|1:0.8-2 +pkg|python-m2crypto|0.20.1+dfsg1-1.1ubuntu1 +pkg|python-boto|2.0-0ubuntu1 +pkg|python-kombu|1.0.4-2 +pkg|python-feedparser|5.0.1-1 +pkg|python-iso8601|0.1.4-1 +pkg|python-dateutil|1.4.1-4 +pip|pycrypto|2.3 +pip|passlib|1.5.3 +localrc| +localrc| +localrc| +localrc| +localrc| +localrc|ENABLED_SERVICES=n-cpu,n-api,quantum,q-agt +localrc|FIXED_NETWORK_SIZE=4096 +localrc|FIXED_RANGE=10.4.128.0/20 +localrc|FLAT_INTERFACE=eth1 +localrc|FLOATING_RANGE=172.16.142.128/25 +localrc|GLANCE_HOSTPORT=192.168.56.3:9292 +localrc|HOST_IP=192.168.56.2 +localrc|KEYSTONE_HOST=192.168.56.3 +localrc|LIBVIRT_TYPE=qemu +localrc|LOGFILE=/home/dlapsley/logs/stack.log +localrc|MULTI_HOST=0 +localrc|MYSQL_HOST=192.168.56.3 +localrc|OFFLINE=0 +localrc|Q_HOST=192.168.56.3 +localrc|Q_INTERFACE=eth1 +localrc|Q_PLUGIN=openvswitch +localrc|Q_TUNNEL_ENABLE=1 +localrc|Q_TUNNEL_REMOTE_IP_FILE=/home/dlapsley/devstack/samples/scenarios/multinode-ovs-tunnels/remote-ips.txt +localrc|RABBIT_HOST=192.168.56.3 +localrc|RECLONE=no +localrc|SERVICE_TOKEN=xyzpdqlazydog +localrc|SYSLOG_HOST=192.168.56.3 +localrc|SYSLOG=True diff --git a/samples/scenarios/multinode-ovs-tunnels/remote-ips.txt b/samples/scenarios/multinode-ovs-tunnels/remote-ips.txt new file mode 100644 index 0000000000..8e042047fe --- /dev/null +++ b/samples/scenarios/multinode-ovs-tunnels/remote-ips.txt @@ -0,0 +1,3 @@ +192.168.56.2 +192.168.56.3 +192.168.56.4 diff --git a/samples/scenarios/multinode-ovs/charger-info b/samples/scenarios/multinode-ovs/charger-info new file mode 100644 index 0000000000..f12abd3d71 --- /dev/null +++ b/samples/scenarios/multinode-ovs/charger-info @@ -0,0 +1,101 @@ +git|glance|master[8e9e0ca] +git|keystone|master[198fe22] +git|nova|master[c147878] +git|python-keystoneclient|master[7b85329] +git|python-novaclient|master[f6014dd] +git|python-quantumclient|master[9b09f53] +git|quantum|master[540f1ed] +os|vendor=Ubuntu +os|release=11.10 +pkg|pep8|0.6.1-2ubuntu1 +pkg|pylint|0.23.0-1 +pkg|python-pip|1.0-1 +pkg|screen|4.0.3-14ubuntu8 +pkg|unzip|6.0-4ubuntu1 +pkg|wget|1.12-3.1ubuntu1 +pkg|psmisc|22.14-1 +pkg|git-core|1:1.7.5.4-1 +pkg|lsof|4.81.dfsg.1-1build1 +pkg|openssh-server|1:5.8p1-7ubuntu1 +pkg|vim-nox|2:7.3.154+hg~74503f6ee649-2ubuntu3 +pkg|locate|4.4.2-1ubuntu3 +pkg|python-virtualenv|1.6.4-0ubuntu1 +pkg|python-unittest2|0.5.1-1 +pkg|iputils-ping|3:20101006-1 +pkg|wget|1.12-3.1ubuntu1 +pkg|curl|7.21.6-3ubuntu3.2 +pkg|tcpdump|4.1.1-2ubuntu2 +pkg|euca2ools|2.0.0~bzr464-0ubuntu2 +pkg|lvm2|2.02.66-4ubuntu3 +pkg|open-iscsi|2.0.871-0ubuntu9 +pkg|open-iscsi-utils|2.0.871-0ubuntu9 +pkg|dnsmasq-base|2.57-1ubuntu1 +pkg|kpartx|0.4.9-2ubuntu1 +pkg|parted|2.3-6ubuntu3 +pkg|mysql-server| +pkg|python-mysqldb|1.2.3-0ubuntu1 +pkg|python-xattr|0.6-1ubuntu2 +pkg|python-lxml|2.3-0.1build1 +pkg|kvm|1:84+dfsg-0ubuntu16+0.14.1+noroms+0ubuntu6.2 +pkg|gawk|1:3.1.8+dfsg-0.1build1 +pkg|iptables|1.4.10-1ubuntu1 +pkg|ebtables|2.0.9.2-2 +pkg|sqlite3|3.7.7-2ubuntu2 +pkg|sudo|1.7.4p6-1ubuntu2 +pkg|kvm|1:84+dfsg-0ubuntu16+0.14.1+noroms+0ubuntu6.2 +pkg|libvirt-bin|0.9.2-4ubuntu15.2 +pkg|vlan|1.9-3ubuntu3.1 +pkg|curl|7.21.6-3ubuntu3.2 +pkg|rabbitmq-server| +pkg|socat|1.7.1.3-1.1ubuntu1 +pkg|python-mox|0.5.3-1ubuntu4 +pkg|python-paste|1.7.5.1-4ubuntu1 +pkg|python-migrate|0.7.1-1 +pkg|python-gflags|1.5.1-1 +pkg|python-greenlet|0.3.1-1ubuntu4 +pkg|python-libvirt|0.9.2-4ubuntu15.2 +pkg|python-libxml2|2.7.8.dfsg-4ubuntu0.2 +pkg|python-routes|1.12.3-1 +pkg|python-netaddr|0.7.5-4 +pkg|python-pastedeploy|1.5.0-2 +pkg|python-eventlet|0.9.15-0ubuntu4 +pkg|python-cheetah|2.4.4-2ubuntu1 +pkg|python-carrot|0.10.7-0ubuntu1 +pkg|python-tempita|0.5.1-1 +pkg|python-sqlalchemy|0.6.8-1 +pkg|python-suds|0.4.1-2 +pkg|python-lockfile|1:0.8-2 +pkg|python-m2crypto|0.20.1+dfsg1-1.1ubuntu1 +pkg|python-boto|2.0-0ubuntu1 +pkg|python-kombu|1.0.4-2 +pkg|python-feedparser|5.0.1-1 +pkg|python-iso8601|0.1.4-1 +pkg|python-dateutil|1.4.1-4 +pip|pycrypto|2.3 +pip|passlib|1.5.3 +localrc| +localrc| +localrc| +localrc| +localrc| +localrc|ENABLED_SERVICES=n-cpu,n-api,quantum,q-agt +localrc|FIXED_NETWORK_SIZE=4096 +localrc|FIXED_RANGE=10.4.128.0/20 +localrc|FLAT_INTERFACE=eth1 +localrc|FLOATING_RANGE=172.16.142.128/25 +localrc|GLANCE_HOSTPORT=192.168.56.3:9292 +localrc|HOST_IP=192.168.56.4 +localrc|KEYSTONE_HOST=192.168.56.3 +localrc|LIBVIRT_TYPE=qemu +localrc|LOGFILE=/home/dlapsley/logs/stack.log +localrc|MULTI_HOST=0 +localrc|MYSQL_HOST=192.168.56.3 +localrc|OFFLINE=0 +localrc|Q_HOST=192.168.56.3 +localrc|Q_INTERFACE=eth1 +localrc|Q_PLUGIN=openvswitch +localrc|RABBIT_HOST=192.168.56.3 +localrc|RECLONE=no +localrc|SERVICE_TOKEN=xyzpdqlazydog +localrc|SYSLOG_HOST=192.168.56.3 +localrc|SYSLOG=True diff --git a/samples/scenarios/multinode-ovs/gto-info b/samples/scenarios/multinode-ovs/gto-info new file mode 100644 index 0000000000..26064303ee --- /dev/null +++ b/samples/scenarios/multinode-ovs/gto-info @@ -0,0 +1,152 @@ +git|glance|master[8e9e0ca] +git|horizon|master[c555673] +git|keystone|master[198fe22] +git|nova|master[adb2124] +git|noVNC|master[22b9a75] +git|python-keystoneclient|master[7b85329] +git|python-novaclient|master[f6014dd] +git|python-quantumclient|master[9b09f53] +git|quantum|master[540f1ed] +os|vendor=Ubuntu +os|release=11.10 +pkg|pep8|0.6.1-2ubuntu1 +pkg|pylint|0.23.0-1 +pkg|python-pip|1.0-1 +pkg|screen|4.0.3-14ubuntu8 +pkg|unzip|6.0-4ubuntu1 +pkg|wget|1.12-3.1ubuntu1 +pkg|psmisc|22.14-1 +pkg|git-core|1:1.7.5.4-1 +pkg|lsof|4.81.dfsg.1-1build1 +pkg|openssh-server|1:5.8p1-7ubuntu1 +pkg|vim-nox|2:7.3.154+hg~74503f6ee649-2ubuntu3 +pkg|locate|4.4.2-1ubuntu3 +pkg|python-virtualenv|1.6.4-0ubuntu1 +pkg|python-unittest2|0.5.1-1 +pkg|iputils-ping|3:20101006-1 +pkg|wget|1.12-3.1ubuntu1 +pkg|curl|7.21.6-3ubuntu3.2 +pkg|tcpdump|4.1.1-2ubuntu2 +pkg|euca2ools|2.0.0~bzr464-0ubuntu2 +pkg|python-eventlet|0.9.15-0ubuntu4 +pkg|python-routes|1.12.3-1 +pkg|python-greenlet|0.3.1-1ubuntu4 +pkg|python-sqlalchemy|0.6.8-1 +pkg|python-wsgiref| +pkg|python-pastedeploy|1.5.0-2 +pkg|python-xattr|0.6-1ubuntu2 +pkg|python-iso8601|0.1.4-1 +pkg|python-setuptools|0.6.16-1ubuntu0.1 +pkg|python-dev|2.7.2-7ubuntu2 +pkg|python-lxml|2.3-0.1build1 +pkg|python-pastescript|1.7.3-7 +pkg|python-pastedeploy|1.5.0-2 +pkg|python-paste|1.7.5.1-4ubuntu1 +pkg|sqlite3|3.7.7-2ubuntu2 +pkg|python-pysqlite2|2.6.3-2 +pkg|python-sqlalchemy|0.6.8-1 +pkg|python-mysqldb|1.2.3-0ubuntu1 +pkg|python-webob|1.0.8-1 +pkg|python-greenlet|0.3.1-1ubuntu4 +pkg|python-routes|1.12.3-1 +pkg|libldap2-dev|2.4.25-1.1ubuntu4.1 +pkg|libsasl2-dev|2.1.24~rc1.dfsg1+cvs2011-05-23-4ubuntu2 +pkg|python-bcrypt|0.1-1build2 +pkg|python-dateutil|1.4.1-4 +pkg|dnsmasq-base|2.57-1ubuntu1 +pkg|kpartx|0.4.9-2ubuntu1 +pkg|parted|2.3-6ubuntu3 +pkg|mysql-server|5.1.61-0ubuntu0.11.10.1 +pkg|python-mysqldb|1.2.3-0ubuntu1 +pkg|python-xattr|0.6-1ubuntu2 +pkg|python-lxml|2.3-0.1build1 +pkg|kvm|1:84+dfsg-0ubuntu16+0.14.1+noroms+0ubuntu6.2 +pkg|gawk|1:3.1.8+dfsg-0.1build1 +pkg|iptables|1.4.10-1ubuntu1 +pkg|ebtables|2.0.9.2-2 +pkg|sqlite3|3.7.7-2ubuntu2 +pkg|sudo|1.7.4p6-1ubuntu2 +pkg|kvm|1:84+dfsg-0ubuntu16+0.14.1+noroms+0ubuntu6.2 +pkg|libvirt-bin|0.9.2-4ubuntu15.2 +pkg|vlan|1.9-3ubuntu3.1 +pkg|curl|7.21.6-3ubuntu3.2 +pkg|rabbitmq-server|2.5.0-1ubuntu2 +pkg|socat|1.7.1.3-1.1ubuntu1 +pkg|python-mox|0.5.3-1ubuntu4 +pkg|python-paste|1.7.5.1-4ubuntu1 +pkg|python-migrate|0.7.1-1 +pkg|python-gflags|1.5.1-1 +pkg|python-greenlet|0.3.1-1ubuntu4 +pkg|python-libvirt|0.9.2-4ubuntu15.2 +pkg|python-libxml2|2.7.8.dfsg-4ubuntu0.2 +pkg|python-routes|1.12.3-1 +pkg|python-netaddr|0.7.5-4 +pkg|python-pastedeploy|1.5.0-2 +pkg|python-eventlet|0.9.15-0ubuntu4 +pkg|python-cheetah|2.4.4-2ubuntu1 +pkg|python-carrot|0.10.7-0ubuntu1 +pkg|python-tempita|0.5.1-1 +pkg|python-sqlalchemy|0.6.8-1 +pkg|python-suds|0.4.1-2 +pkg|python-lockfile|1:0.8-2 +pkg|python-m2crypto|0.20.1+dfsg1-1.1ubuntu1 +pkg|python-boto|2.0-0ubuntu1 +pkg|python-kombu|1.0.4-2 +pkg|python-feedparser|5.0.1-1 +pkg|python-iso8601|0.1.4-1 +pkg|tgt|1:1.0.17-1ubuntu1 +pkg|lvm2|2.02.66-4ubuntu3 +pkg|python-numpy|1:1.5.1-2ubuntu2 +pkg|apache2|2.2.20-1ubuntu1.2 +pkg|libapache2-mod-wsgi|3.3-2ubuntu3 +pkg|python-dateutil|1.4.1-4 +pkg|python-paste|1.7.5.1-4ubuntu1 +pkg|python-pastedeploy|1.5.0-2 +pkg|python-anyjson|0.3.1-1 +pkg|python-routes|1.12.3-1 +pkg|python-xattr|0.6-1ubuntu2 +pkg|python-sqlalchemy|0.6.8-1 +pkg|python-webob|1.0.8-1 +pkg|python-kombu|1.0.4-2 +pkg|pylint|0.23.0-1 +pkg|pep8|0.6.1-2ubuntu1 +pkg|python-eventlet|0.9.15-0ubuntu4 +pkg|python-nose|1.0.0-1ubuntu1 +pkg|python-sphinx|1.0.7+dfsg-1 +pkg|python-mox|0.5.3-1ubuntu4 +pkg|python-kombu|1.0.4-2 +pkg|python-coverage|3.4-1 +pkg|python-cherrypy3|3.1.2-1 +pkg|python-django|1.3-2ubuntu1.1 +pkg|python-django-mailer|0.2a1.dev3-0ubuntu1 +pkg|python-django-nose|0.1.2-2 +pkg|python-django-registration|0.7-2 +pkg|python-migrate|0.7.1-1 +pip|django-nose-selenium|0.7.3 +pip|pycrypto|2.3 +pip|python-cloudfiles|1.7.10 +pip|passlib|1.5.3 +localrc| +localrc| +localrc| +localrc| +localrc| +localrc| +localrc| +localrc| +localrc| +localrc|ENABLED_SERVICES=g-api,g-reg,key,n-api,n-crt,n-obj,n-net,n-vol,n-sch,n-novnc,n-xvnc,n-cauth,horizon,mysql,rabbit,quantum,q-svc,q-agt +localrc|FIXED_NETWORK_SIZE=4096 +localrc|FIXED_RANGE=10.4.128.0/20 +localrc|FLAT_INTERFACE=eth1 +localrc|FLOATING_RANGE=172.16.142.128/25 +localrc|HOST_IP=192.168.56.3 +localrc|LIBVIRT_TYPE=qemu +localrc|LOGFILE=/home/dlapsley/logs/stack.log +localrc|MULTI_HOST=0 +localrc|OFFLINE=0 +localrc|Q_INTERFACE=eth1 +localrc|Q_PLUGIN=openvswitch +localrc|RECLONE=no +localrc|SERVICE_TOKEN=xyzpdqlazydog +localrc|SYSLOG=True diff --git a/samples/scenarios/multinode-ovs/mustang-info b/samples/scenarios/multinode-ovs/mustang-info new file mode 100644 index 0000000000..b7c00d269f --- /dev/null +++ b/samples/scenarios/multinode-ovs/mustang-info @@ -0,0 +1,101 @@ +git|glance|master[8e9e0ca] +git|keystone|master[198fe22] +git|nova|master[c147878] +git|python-keystoneclient|master[7b85329] +git|python-novaclient|master[f6014dd] +git|python-quantumclient|master[9b09f53] +git|quantum|master[540f1ed] +os|vendor=Ubuntu +os|release=11.10 +pkg|pep8|0.6.1-2ubuntu1 +pkg|pylint|0.23.0-1 +pkg|python-pip|1.0-1 +pkg|screen|4.0.3-14ubuntu8 +pkg|unzip|6.0-4ubuntu1 +pkg|wget|1.12-3.1ubuntu1 +pkg|psmisc|22.14-1 +pkg|git-core|1:1.7.5.4-1 +pkg|lsof|4.81.dfsg.1-1build1 +pkg|openssh-server|1:5.8p1-7ubuntu1 +pkg|vim-nox|2:7.3.154+hg~74503f6ee649-2ubuntu3 +pkg|locate|4.4.2-1ubuntu3 +pkg|python-virtualenv|1.6.4-0ubuntu1 +pkg|python-unittest2|0.5.1-1 +pkg|iputils-ping|3:20101006-1 +pkg|wget|1.12-3.1ubuntu1 +pkg|curl|7.21.6-3ubuntu3.2 +pkg|tcpdump|4.1.1-2ubuntu2 +pkg|euca2ools|2.0.0~bzr464-0ubuntu2 +pkg|lvm2|2.02.66-4ubuntu3 +pkg|open-iscsi|2.0.871-0ubuntu9 +pkg|open-iscsi-utils|2.0.871-0ubuntu9 +pkg|dnsmasq-base|2.57-1ubuntu1 +pkg|kpartx|0.4.9-2ubuntu1 +pkg|parted|2.3-6ubuntu3 +pkg|mysql-server| +pkg|python-mysqldb|1.2.3-0ubuntu1 +pkg|python-xattr|0.6-1ubuntu2 +pkg|python-lxml|2.3-0.1build1 +pkg|kvm|1:84+dfsg-0ubuntu16+0.14.1+noroms+0ubuntu6.2 +pkg|gawk|1:3.1.8+dfsg-0.1build1 +pkg|iptables|1.4.10-1ubuntu1 +pkg|ebtables|2.0.9.2-2 +pkg|sqlite3|3.7.7-2ubuntu2 +pkg|sudo|1.7.4p6-1ubuntu2 +pkg|kvm|1:84+dfsg-0ubuntu16+0.14.1+noroms+0ubuntu6.2 +pkg|libvirt-bin|0.9.2-4ubuntu15.2 +pkg|vlan|1.9-3ubuntu3.1 +pkg|curl|7.21.6-3ubuntu3.2 +pkg|rabbitmq-server| +pkg|socat|1.7.1.3-1.1ubuntu1 +pkg|python-mox|0.5.3-1ubuntu4 +pkg|python-paste|1.7.5.1-4ubuntu1 +pkg|python-migrate|0.7.1-1 +pkg|python-gflags|1.5.1-1 +pkg|python-greenlet|0.3.1-1ubuntu4 +pkg|python-libvirt|0.9.2-4ubuntu15.2 +pkg|python-libxml2|2.7.8.dfsg-4ubuntu0.2 +pkg|python-routes|1.12.3-1 +pkg|python-netaddr|0.7.5-4 +pkg|python-pastedeploy|1.5.0-2 +pkg|python-eventlet|0.9.15-0ubuntu4 +pkg|python-cheetah|2.4.4-2ubuntu1 +pkg|python-carrot|0.10.7-0ubuntu1 +pkg|python-tempita|0.5.1-1 +pkg|python-sqlalchemy|0.6.8-1 +pkg|python-suds|0.4.1-2 +pkg|python-lockfile|1:0.8-2 +pkg|python-m2crypto|0.20.1+dfsg1-1.1ubuntu1 +pkg|python-boto|2.0-0ubuntu1 +pkg|python-kombu|1.0.4-2 +pkg|python-feedparser|5.0.1-1 +pkg|python-iso8601|0.1.4-1 +pkg|python-dateutil|1.4.1-4 +pip|pycrypto|2.3 +pip|passlib|1.5.3 +localrc| +localrc| +localrc| +localrc| +localrc| +localrc|ENABLED_SERVICES=n-cpu,n-api,quantum,q-agt +localrc|FIXED_NETWORK_SIZE=4096 +localrc|FIXED_RANGE=10.4.128.0/20 +localrc|FLAT_INTERFACE=eth1 +localrc|FLOATING_RANGE=172.16.142.128/25 +localrc|GLANCE_HOSTPORT=192.168.56.3:9292 +localrc|HOST_IP=192.168.56.2 +localrc|KEYSTONE_HOST=192.168.56.3 +localrc|LIBVIRT_TYPE=qemu +localrc|LOGFILE=/home/dlapsley/logs/stack.log +localrc|MULTI_HOST=0 +localrc|MYSQL_HOST=192.168.56.3 +localrc|OFFLINE=0 +localrc|Q_HOST=192.168.56.3 +localrc|Q_INTERFACE=eth1 +localrc|Q_PLUGIN=openvswitch +localrc|RABBIT_HOST=192.168.56.3 +localrc|RECLONE=no +localrc|SERVICE_TOKEN=xyzpdqlazydog +localrc|SYSLOG_HOST=192.168.56.3 +localrc|SYSLOG=True diff --git a/samples/scenarios/repos.dat b/samples/scenarios/repos.dat new file mode 100644 index 0000000000..78f3a92e0c --- /dev/null +++ b/samples/scenarios/repos.dat @@ -0,0 +1,9 @@ +https://github.com/openstack/nova.git adb2124 +https://github.com/openstack/glance.git 8e9e0ca +https://github.com/openstack/keystone.git 198fe22 +https://github.com/cloudbuilders/noVNC.git 22b9a75 +https://github.com/openstack/horizon.git c555673 +https://github.com/openstack/python-novaclient.git f6014dd +https://github.com/openstack/python-keystoneclient 7b85329 +https://github.com/openstack/quantum 540f1ed +https://github.com/openstack/python-quantumclient 9b09f53 diff --git a/samples/scenarios/setup.sh b/samples/scenarios/setup.sh new file mode 100755 index 0000000000..b6a7373e9a --- /dev/null +++ b/samples/scenarios/setup.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +# Simple script to setup localrc on test node. +# Execute this script from the root directory. For example: +# +# $ samples/scenarios/setup.sh +# +# Assumes your hostname has been set to one of gto, mustang, or charger. +# +# Modify the SCENARIO variable below to use a different scenario. + +HOSTNAME=`hostname` +SCENARIO=multinode-ovs-tunnels +INFO_FILE=samples/scenarios/$SCENARIO/$HOSTNAME-info +echo $INFO_FILE +grep localrc $INFO_FILE | awk -F"|" '{ if (length($2)) { print $2; } }' > localrc diff --git a/stack.sh b/stack.sh index 444a738154..23c46fda68 100755 --- a/stack.sh +++ b/stack.sh @@ -107,7 +107,7 @@ if [[ $EUID -eq 0 ]]; then # since this script runs as a normal user, we need to give that user # ability to run sudo - dpkg -l sudo || apt_get update && install_package sudo + dpkg -l sudo || apt_get update && apt_get install sudo if ! getent passwd stack >/dev/null; then echo "Creating a user called stack" @@ -182,6 +182,12 @@ Q_PLUGIN=${Q_PLUGIN:-openvswitch} Q_PORT=${Q_PORT:-9696} # Default Quantum Host Q_HOST=${Q_HOST:-localhost} +# Tunneling support. +Q_TUNNEL_ENABLE=${Q_TUNNEL_ENABLE:-0} +# Tunneling links. +Q_TUNNEL_REMOTE_IP_FILE=${Q_TUNNEL_REMOTE_IP_FILE:-/dev/null} +Q_TUNNEL_TUN_BRIDGE=${Q_TUNNEL_TUN_BRIDGE:-br-tun} +Q_TUNNEL_INT_BRIDGE=${Q_TUNNEL_INT_BRIDGE:-br-int} # Default Melange Port M_PORT=${M_PORT:-9898} @@ -268,6 +274,29 @@ function read_password { set -o xtrace } +# is_service_enabled() checks if the service(s) specified as arguments are +# enabled by the user in **ENABLED_SERVICES**. +# +# If there are multiple services specified as arguments the test performs a +# boolean OR or if any of the services specified on the command line +# return true. +# +# There is a special cases for some 'catch-all' services:: +# **nova** returns true if any service enabled start with **n-** +# **glance** returns true if any service enabled start with **g-** +# **quantum** returns true if any service enabled start with **q-** + +function is_service_enabled() { + services=$@ + for service in ${services}; do + [[ ,${ENABLED_SERVICES}, =~ ,${service}, ]] && return 0 + [[ ${service} == "nova" && ${ENABLED_SERVICES} =~ "n-" ]] && return 0 + [[ ${service} == "glance" && ${ENABLED_SERVICES} =~ "g-" ]] && return 0 + [[ ${service} == "quantum" && ${ENABLED_SERVICES} =~ "q-" ]] && return 0 + done + return 1 +} + # Nova Network Configuration # -------------------------- @@ -591,7 +620,7 @@ function get_packages() { # install apt requirements apt_get update -install_package $(get_packages $FILES/apts) +apt_get install $(get_packages $FILES/apts) # install python requirements pip_install $(get_packages $FILES/pips | sort -u) @@ -625,6 +654,9 @@ if is_service_enabled horizon; then fi if is_service_enabled quantum; then git_clone $QUANTUM_CLIENT_REPO $QUANTUM_CLIENT_DIR $QUANTUM_CLIENT_BRANCH + if [[ "$Q_PLUGIN" = "openvswitch" ]]; then + git_clone $QUANTUM_REPO $QUANTUM_DIR $QUANTUM_BRANCH + fi fi if is_service_enabled q-svc; then # quantum @@ -678,7 +710,7 @@ fi # ------ if [[ $SYSLOG != "False" ]]; then - install_package rsyslog-relp + apt_get install -y rsyslog-relp if [[ "$SYSLOG_HOST" = "$HOST_IP" ]]; then # Configure the master host to receive cat </tmp/90-stack-m.conf @@ -693,7 +725,7 @@ EOF EOF sudo mv /tmp/90-stack-s.conf /etc/rsyslog.d fi - restart_service rsyslog + sudo /usr/sbin/service rsyslog restart fi @@ -704,7 +736,7 @@ if is_service_enabled rabbit; then # Install and start rabbitmq-server # the temp file is necessary due to LP: #878600 tfile=$(mktemp) - install_package rabbitmq-server > "$tfile" 2>&1 + apt_get install rabbitmq-server > "$tfile" 2>&1 cat "$tfile" rm -f "$tfile" # change the rabbit password since the default is "guest" @@ -739,60 +771,15 @@ EOF fi # Install and start mysql-server - install_package mysql-server + apt_get install mysql-server # Update the DB to give user ‘$MYSQL_USER’@’%’ full control of the all databases: sudo mysql -uroot -p$MYSQL_PASSWORD -h127.0.0.1 -e "GRANT ALL PRIVILEGES ON *.* TO '$MYSQL_USER'@'%' identified by '$MYSQL_PASSWORD';" # Edit /etc/mysql/my.cnf to change ‘bind-address’ from localhost (127.0.0.1) to any (0.0.0.0) and restart the mysql service: sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf - restart_service mysql + sudo service mysql restart fi -# Our screenrc file builder -function screen_rc { - SCREENRC=$TOP_DIR/stack-screenrc - if [[ ! -e $SCREENRC ]]; then - # Name the screen session - echo "sessionname stack" > $SCREENRC - # Set a reasonable statusbar - echo 'hardstatus alwayslastline "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%< %= %H"' >> $SCREENRC - echo "screen -t stack bash" >> $SCREENRC - fi - # If this service doesn't already exist in the screenrc file - if ! grep $1 $SCREENRC 2>&1 > /dev/null; then - NL=`echo -ne '\015'` - echo "screen -t $1 bash" >> $SCREENRC - echo "stuff \"$2$NL\"" >> $SCREENRC - fi -} - -# Our screen helper to launch a service in a hidden named screen -function screen_it { - NL=`echo -ne '\015'` - if is_service_enabled $1; then - # Append the service to the screen rc file - screen_rc "$1" "$2" - - screen -S stack -X screen -t $1 - # sleep to allow bash to be ready to be send the command - we are - # creating a new window in screen and then sends characters, so if - # bash isn't running by the time we send the command, nothing happens - sleep 1.5 - - if [[ -n ${SCREEN_LOGDIR} ]]; then - screen -S stack -p $1 -X logfile ${SCREEN_LOGDIR}/screen-${1}.${CURRENT_LOG_TIME}.log - screen -S stack -p $1 -X log on - ln -sf ${SCREEN_LOGDIR}/screen-${1}.${CURRENT_LOG_TIME}.log ${SCREEN_LOGDIR}/screen-${1}.log - fi - screen -S stack -p $1 -X stuff "$2$NL" - fi -} - -# create a new named screen to run processes in -screen -d -m -S stack -t stack -s /bin/bash -sleep 1 -# set a reasonable statusbar -screen -r stack -X hardstatus alwayslastline "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%< %= %H" # Horizon # ------- @@ -802,7 +789,7 @@ screen -r stack -X hardstatus alwayslastline "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%< if is_service_enabled horizon; then # Install apache2, which is NOPRIME'd - install_package apache2 libapache2-mod-wsgi + apt_get install apache2 libapache2-mod-wsgi # Remove stale session database. @@ -827,7 +814,7 @@ if is_service_enabled horizon; then s,%GROUP%,$APACHE_GROUP,g; s,%HORIZON_DIR%,$HORIZON_DIR,g; " -i /etc/apache2/sites-enabled/000-default - restart_service apache2 + sudo service apache2 restart fi @@ -849,7 +836,7 @@ if is_service_enabled g-reg; then # (re)create glance database mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'DROP DATABASE IF EXISTS glance;' - mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'CREATE DATABASE glance CHARACTER SET utf8;' + mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'CREATE DATABASE glance;' function glance_config { sudo sed -e " @@ -860,7 +847,7 @@ if is_service_enabled g-reg; then s,%KEYSTONE_SERVICE_HOST%,$KEYSTONE_SERVICE_HOST,g; s,%KEYSTONE_SERVICE_PORT%,$KEYSTONE_SERVICE_PORT,g; s,%KEYSTONE_SERVICE_PROTOCOL%,$KEYSTONE_SERVICE_PROTOCOL,g; - s,%SQL_CONN%,$BASE_SQL_CONN/glance?charset=utf8,g; + s,%SQL_CONN%,$BASE_SQL_CONN/glance,g; s,%SERVICE_TENANT_NAME%,$SERVICE_TENANT_NAME,g; s,%SERVICE_USERNAME%,glance,g; s,%SERVICE_PASSWORD%,$SERVICE_PASSWORD,g; @@ -892,88 +879,6 @@ if is_service_enabled g-reg; then fi fi -# Quantum -# ------- - -# Quantum service -if is_service_enabled q-svc; then - QUANTUM_CONF_DIR=/etc/quantum - if [[ ! -d $QUANTUM_CONF_DIR ]]; then - sudo mkdir -p $QUANTUM_CONF_DIR - fi - sudo chown `whoami` $QUANTUM_CONF_DIR - if [[ "$Q_PLUGIN" = "openvswitch" ]]; then - # Install deps - # FIXME add to files/apts/quantum, but don't install if not needed! - kernel_version=`cat /proc/version | cut -d " " -f3` - install_package openvswitch-switch openvswitch-datapath-dkms linux-headers-$kernel_version - # Create database for the plugin/agent - if is_service_enabled mysql; then - mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'DROP DATABASE IF EXISTS ovs_quantum;' - mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'CREATE DATABASE IF NOT EXISTS ovs_quantum CHARACTER SET utf8;' - else - echo "mysql must be enabled in order to use the $Q_PLUGIN Quantum plugin." - exit 1 - fi - QUANTUM_PLUGIN_INI_FILE=$QUANTUM_CONF_DIR/plugins.ini - # must remove this file from existing location, otherwise Quantum will prefer it - if [[ -e $QUANTUM_DIR/etc/plugins.ini ]]; then - sudo mv $QUANTUM_DIR/etc/plugins.ini $QUANTUM_PLUGIN_INI_FILE - fi - # Make sure we're using the openvswitch plugin - sudo sed -i -e "s/^provider =.*$/provider = quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPlugin/g" $QUANTUM_PLUGIN_INI_FILE - fi - if [[ -e $QUANTUM_DIR/etc/quantum.conf ]]; then - sudo mv $QUANTUM_DIR/etc/quantum.conf $QUANTUM_CONF_DIR/quantum.conf - fi - screen_it q-svc "cd $QUANTUM_DIR && PYTHONPATH=.:$QUANTUM_CLIENT_DIR:$PYTHONPATH python $QUANTUM_DIR/bin/quantum-server $QUANTUM_CONF_DIR/quantum.conf" -fi - -# Quantum agent (for compute nodes) -if is_service_enabled q-agt; then - if [[ "$Q_PLUGIN" = "openvswitch" ]]; then - # Set up integration bridge - OVS_BRIDGE=${OVS_BRIDGE:-br-int} - sudo ovs-vsctl --no-wait -- --if-exists del-br $OVS_BRIDGE - sudo ovs-vsctl --no-wait add-br $OVS_BRIDGE - sudo ovs-vsctl --no-wait br-set-external-id $OVS_BRIDGE bridge-id br-int - - # Start up the quantum <-> openvswitch agent - QUANTUM_OVS_CONF_DIR=$QUANTUM_CONF_DIR/plugins/openvswitch - mkdir -p $QUANTUM_OVS_CONF_DIR - QUANTUM_OVS_CONFIG_FILE=$QUANTUM_OVS_CONF_DIR/ovs_quantum_plugin.ini - if [[ -e $QUANTUM_DIR/etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini ]]; then - sudo mv $QUANTUM_DIR/etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini $QUANTUM_OVS_CONFIG_FILE - fi - sudo sed -i -e "s/^sql_connection =.*$/sql_connection = mysql:\/\/$MYSQL_USER:$MYSQL_PASSWORD@$MYSQL_HOST\/ovs_quantum?charset=utf8/g" $QUANTUM_OVS_CONFIG_FILE - screen_it q-agt "sleep 4; sudo python $QUANTUM_DIR/quantum/plugins/openvswitch/agent/ovs_quantum_agent.py $QUANTUM_OVS_CONFIG_FILE -v" - fi - -fi - -# Melange service -if is_service_enabled m-svc; then - if is_service_enabled mysql; then - mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'DROP DATABASE IF EXISTS melange;' - mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'CREATE DATABASE melange CHARACTER SET utf8;' - else - echo "mysql must be enabled in order to use the $Q_PLUGIN Quantum plugin." - exit 1 - fi - MELANGE_CONFIG_FILE=$MELANGE_DIR/etc/melange/melange.conf - cp $MELANGE_CONFIG_FILE.sample $MELANGE_CONFIG_FILE - sed -i -e "s/^sql_connection =.*$/sql_connection = mysql:\/\/$MYSQL_USER:$MYSQL_PASSWORD@$MYSQL_HOST\/melange?charset=utf8/g" $MELANGE_CONFIG_FILE - cd $MELANGE_DIR && PYTHONPATH=.:$PYTHONPATH python $MELANGE_DIR/bin/melange-manage --config-file=$MELANGE_CONFIG_FILE db_sync - screen_it m-svc "cd $MELANGE_DIR && PYTHONPATH=.:$PYTHONPATH python $MELANGE_DIR/bin/melange-server --config-file=$MELANGE_CONFIG_FILE" - echo "Waiting for melange to start..." - if ! timeout $SERVICE_TIMEOUT sh -c "while ! http_proxy= wget -q -O- http://127.0.0.1:9898; do sleep 1; done"; then - echo "melange-server did not start" - exit 1 - fi - melange mac_address_range create cidr=$M_MAC_RANGE -fi - - # Nova # ---- @@ -1028,7 +933,7 @@ if is_service_enabled n-cpu; then # Virtualization Configuration # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - install_package libvirt-bin + apt_get install libvirt-bin # Force IP forwarding on, just on case sudo sysctl -w net.ipv4.ip_forward=1 @@ -1052,7 +957,7 @@ if is_service_enabled n-cpu; then # to simulate multiple systems. if [[ "$LIBVIRT_TYPE" == "lxc" ]]; then if [[ "$DISTRO" > natty ]]; then - install_package cgroup-lite + apt_get install cgroup-lite else cgline="none /cgroup cgroup cpuacct,memory,devices,cpu,freezer,blkio 0 0" sudo mkdir -p /cgroup @@ -1071,7 +976,7 @@ if is_service_enabled n-cpu; then # libvirt detects various settings on startup, as we potentially changed # the system configuration (modules, filesystems), we need to restart # libvirt to detect those changes. - restart_service libvirt-bin + sudo /etc/init.d/libvirt-bin restart # Instance Storage @@ -1122,7 +1027,7 @@ fi # Storage Service if is_service_enabled swift; then # Install memcached for swift. - install_package memcached + apt_get install memcached # We first do a bit of setup by creating the directories and # changing the permissions so we can run it as our user. @@ -1306,7 +1211,7 @@ if is_service_enabled n-vol; then # By default, the backing file is 2G in size, and is stored in /opt/stack. # install the package - install_package tgt + apt_get install tgt if ! sudo vgs $VOLUME_GROUP; then VOLUME_BACKING_FILE=${VOLUME_BACKING_FILE:-$DEST/nova-volumes-backing-file} @@ -1373,6 +1278,12 @@ if is_service_enabled quantum; then add_nova_opt "linuxnet_interface_driver=nova.network.linux_net.LinuxOVSInterfaceDriver" add_nova_opt "quantum_use_dhcp=True" fi + if is_service_enabled q-agt && [[ "$Q_PLUGIN" = "openvswitch" ]]; then + add_nova_opt "libvirt_vif_type=ethernet" + add_nova_opt "libvirt_vif_driver=nova.virt.libvirt.vif.LibvirtOpenVswitchDriver" + add_nova_opt "linuxnet_interface_driver=nova.network.linux_net.LinuxOVSInterfaceDriver" + add_nova_opt "quantum_use_dhcp=True" + fi else add_nova_opt "network_manager=nova.network.manager.$NET_MAN" fi @@ -1390,7 +1301,7 @@ add_nova_opt "flat_network_bridge=$FLAT_NETWORK_BRIDGE" if [ -n "$FLAT_INTERFACE" ]; then add_nova_opt "flat_interface=$FLAT_INTERFACE" fi -add_nova_opt "sql_connection=$BASE_SQL_CONN/nova?charset=utf8" +add_nova_opt "sql_connection=$BASE_SQL_CONN/nova" add_nova_opt "libvirt_type=$LIBVIRT_TYPE" add_nova_opt "instance_name_template=${INSTANCE_NAME_PREFIX}%08x" # All nova-compute workers need to know the vnc configuration options @@ -1490,6 +1401,52 @@ fi # so send the start command by forcing text into the window. # Only run the services specified in ``ENABLED_SERVICES`` +# Our screenrc file builder +function screen_rc { + SCREENRC=$TOP_DIR/stack-screenrc + if [[ ! -e $SCREENRC ]]; then + # Name the screen session + echo "sessionname stack" > $SCREENRC + # Set a reasonable statusbar + echo 'hardstatus alwayslastline "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%< %= %H"' >> $SCREENRC + echo "screen -t stack bash" >> $SCREENRC + fi + # If this service doesn't already exist in the screenrc file + if ! grep $1 $SCREENRC 2>&1 > /dev/null; then + NL=`echo -ne '\015'` + echo "screen -t $1 bash" >> $SCREENRC + echo "stuff \"$2$NL\"" >> $SCREENRC + fi +} + +# Our screen helper to launch a service in a hidden named screen +function screen_it { + NL=`echo -ne '\015'` + if is_service_enabled $1; then + # Append the service to the screen rc file + screen_rc "$1" "$2" + + screen -S stack -X screen -t $1 + # sleep to allow bash to be ready to be send the command - we are + # creating a new window in screen and then sends characters, so if + # bash isn't running by the time we send the command, nothing happens + sleep 1.5 + + if [[ -n ${SCREEN_LOGDIR} ]]; then + screen -S stack -p $1 -X logfile ${SCREEN_LOGDIR}/screen-${1}.${CURRENT_LOG_TIME}.log + screen -S stack -p $1 -X log on + ln -sf ${SCREEN_LOGDIR}/screen-${1}.${CURRENT_LOG_TIME}.log ${SCREEN_LOGDIR}/screen-${1}.log + fi + screen -S stack -p $1 -X stuff "$2$NL" + fi +} + +# create a new named screen to run processes in +screen -d -m -S stack -t stack -s /bin/bash +sleep 1 +# set a reasonable statusbar +screen -r stack -X hardstatus alwayslastline "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%< %= %H" + # launch the glance registry service if is_service_enabled g-reg; then screen_it g-reg "cd $GLANCE_DIR; bin/glance-registry --config-file=$GLANCE_CONF_DIR/glance-registry.conf" @@ -1508,12 +1465,12 @@ fi if is_service_enabled key; then # (re)create keystone database mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'DROP DATABASE IF EXISTS keystone;' - mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'CREATE DATABASE keystone CHARACTER SET utf8;' + mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'CREATE DATABASE keystone;' # Configure keystone.conf KEYSTONE_CONF=$KEYSTONE_DIR/etc/keystone.conf cp $FILES/keystone.conf $KEYSTONE_CONF - sudo sed -e "s,%SQL_CONN%,$BASE_SQL_CONN/keystone?charset=utf8,g" -i $KEYSTONE_CONF + sudo sed -e "s,%SQL_CONN%,$BASE_SQL_CONN/keystone,g" -i $KEYSTONE_CONF sudo sed -e "s,%DEST%,$DEST,g" -i $KEYSTONE_CONF sudo sed -e "s,%SERVICE_TOKEN%,$SERVICE_TOKEN,g" -i $KEYSTONE_CONF sudo sed -e "s,%KEYSTONE_DIR%,$KEYSTONE_DIR,g" -i $KEYSTONE_CONF @@ -1591,11 +1548,98 @@ if is_service_enabled n-api; then fi fi +# Quantum service +if is_service_enabled q-svc; then + QUANTUM_CONF_DIR=/etc/quantum + if [[ ! -d $QUANTUM_CONF_DIR ]]; then + sudo mkdir -p $QUANTUM_CONF_DIR + fi + sudo chown `whoami` $QUANTUM_CONF_DIR + if [[ "$Q_PLUGIN" = "openvswitch" ]]; then + # Install deps + # FIXME add to files/apts/quantum, but don't install if not needed! + apt_get install openvswitch-switch openvswitch-datapath-dkms + # Create database for the plugin/agent + if is_service_enabled mysql; then + mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'DROP DATABASE IF EXISTS ovs_quantum;' + mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'CREATE DATABASE IF NOT EXISTS ovs_quantum;' + else + echo "mysql must be enabled in order to use the $Q_PLUGIN Quantum plugin." + exit 1 + fi + #QUANTUM_PLUGIN_INI_FILE=$QUANTUM_CONF_DIR/plugins.ini + #sudo cp $QUANTUM_DIR/etc/plugins.ini $QUANTUM_PLUGIN_INI_FILE + # Make sure we're using the openvswitch plugin + sudo sed -i -e "s/^provider =.*$/provider = quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPlugin/g" $QUANTUM_DIR/etc/plugins.ini + #sudo sed -i -e "s/^provider =.*$/provider = quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPlugin/g" $QUANTUM_PLUGIN_INI_FILE + fi + sudo cp $QUANTUM_DIR/etc/quantum.conf $QUANTUM_CONF_DIR/quantum.conf + screen_it q-svc "cd $QUANTUM_DIR && PYTHONPATH=.:$QUANTUM_CLIENT_DIR:$PYTHONPATH python $QUANTUM_DIR/bin/quantum-server $QUANTUM_CONF_DIR/quantum.conf" +elif [[ "$Q_PLUGIN" = "openvswitch" ]]; then + apt_get install openvswitch-switch openvswitch-datapath-dkms mysql-client +fi + +# Quantum agent (for compute nodes) +if is_service_enabled q-agt; then + if [[ "$Q_PLUGIN" = "openvswitch" ]]; then + # Set up integration bridge + OVS_BRIDGE=${OVS_BRIDGE:-br-int} + sudo ovs-vsctl --no-wait -- --if-exists del-br $OVS_BRIDGE + sudo ovs-vsctl --no-wait add-br $OVS_BRIDGE + sudo ovs-vsctl --no-wait br-set-external-id $OVS_BRIDGE bridge-id br-int + sudo ovs-vsctl --no-wait add-port $OVS_BRIDGE $Q_INTERFACE + sudo ifconfig $Q_INTERFACE up + sudo ifconfig $OVS_BRIDGE up + + # Start up the quantum <-> openvswitch agent + # QUANTUM_OVS_CONFIG_FILE=$QUANTUM_CONF_DIR/ovs_quantum_plugin.ini + # sudo cp $QUANTUM_DIR/etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini $QUANTUM_OVS_CONFIG_FILE + # sudo sed -i -e "s/^sql_connection =.*$/sql_connection = mysql:\/\/$MYSQL_USER:$MYSQL_PASSWORD@$MYSQL_HOST\/ovs_quantum/g" $QUANTUM_OVS_CONFIG_FILE + QUANTUM_OVS_CONFIG_FILE=$QUANTUM_DIR/etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini + sudo sed -i -e "s/^sql_connection =.*$/sql_connection = mysql:\/\/$MYSQL_USER:$MYSQL_PASSWORD@$MYSQL_HOST\/ovs_quantum/g" $QUANTUM_OVS_CONFIG_FILE + if [[ "$Q_TUNNEL_ENABLE" = "1" ]]; then + sudo sed -i -e "s/^enable-tunneling =.*$/enable-tunneling = True/g"\ + $QUANTUM_OVS_CONFIG_FILE + sudo sed -i -e "s|^.*remote-ip-file =.*$|remote-ip-file = $Q_TUNNEL_REMOTE_IP_FILE|g"\ + $QUANTUM_OVS_CONFIG_FILE + sudo sed -i -e "s|^.*tunnel-bridge =.*$|tunnel-bridge = $Q_TUNNEL_TUN_BRIDGE|g"\ + $QUANTUM_OVS_CONFIG_FILE + sudo sed -i -e "s|^.*integration-bridge =.*$|integration-bridge = $Q_TUNNEL_INT_BRIDGE|g"\ + $QUANTUM_OVS_CONFIG_FILE + sudo sed -i -e "s/^.*local-ip =.*$/local-ip = $HOST_IP/g" $QUANTUM_OVS_CONFIG_FILE + fi + screen_it q-agt "sleep 4; sudo python $QUANTUM_DIR/quantum/plugins/openvswitch/agent/ovs_quantum_agent.py $QUANTUM_OVS_CONFIG_FILE -v" + fi + +fi + +# Melange service +if is_service_enabled m-svc; then + if is_service_enabled mysql; then + mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'DROP DATABASE IF EXISTS melange;' + mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'CREATE DATABASE melange;' + else + echo "mysql must be enabled in order to use the $Q_PLUGIN Quantum plugin." + exit 1 + fi + MELANGE_CONFIG_FILE=$MELANGE_DIR/etc/melange/melange.conf + cp $MELANGE_CONFIG_FILE.sample $MELANGE_CONFIG_FILE + sed -i -e "s/^sql_connection =.*$/sql_connection = mysql:\/\/$MYSQL_USER:$MYSQL_PASSWORD@$MYSQL_HOST\/melange/g" $MELANGE_CONFIG_FILE + cd $MELANGE_DIR && PYTHONPATH=.:$PYTHONPATH python $MELANGE_DIR/bin/melange-manage --config-file=$MELANGE_CONFIG_FILE db_sync + screen_it m-svc "cd $MELANGE_DIR && PYTHONPATH=.:$PYTHONPATH python $MELANGE_DIR/bin/melange-server --config-file=$MELANGE_CONFIG_FILE" + echo "Waiting for melange to start..." + if ! timeout $SERVICE_TIMEOUT sh -c "while ! http_proxy= wget -q -O- http://127.0.0.1:9898; do sleep 1; done"; then + echo "melange-server did not start" + exit 1 + fi + melange mac_address_range create cidr=$M_MAC_RANGE +fi + # If we're using Quantum (i.e. q-svc is enabled), network creation has to # happen after we've started the Quantum service. if is_service_enabled mysql && is_service_enabled nova; then # create a small network - $NOVA_DIR/bin/nova-manage network create private $FIXED_RANGE 1 $FIXED_NETWORK_SIZE $NETWORK_CREATE_ARGS + $NOVA_DIR/bin/nova-manage network create private $FIXED_RANGE 1 $FIXED_NETWORK_SIZE # create some floating ips $NOVA_DIR/bin/nova-manage floating create $FLOATING_RANGE @@ -1651,8 +1695,17 @@ if is_service_enabled g-reg; then TOKEN=`curl -s -d "{\"auth\":{\"passwordCredentials\": {\"username\": \"$ADMIN_USER\", \"password\": \"$ADMIN_PASSWORD\"}, \"tenantName\": \"$ADMIN_TENANT\"}}" -H "Content-type: application/json" http://$HOST_IP:5000/v2.0/tokens | python -c "import sys; import json; tok = json.loads(sys.stdin.read()); print tok['access']['token']['id'];"` # Option to upload legacy ami-tty, which works with xenserver - if [[ -n "$UPLOAD_LEGACY_TTY" ]]; then - IMAGE_URLS="${IMAGE_URLS:+${IMAGE_URLS},}http://images.ansolabs.com/tty.tgz" + if [ $UPLOAD_LEGACY_TTY ]; then + if [ ! -f $FILES/tty.tgz ]; then + wget -c http://images.ansolabs.com/tty.tgz -O $FILES/tty.tgz + fi + + tar -zxf $FILES/tty.tgz -C $FILES/images + RVAL=`glance add --silent-upload -A $TOKEN name="tty-kernel" is_public=true container_format=aki disk_format=aki < $FILES/images/aki-tty/image` + KERNEL_ID=`echo $RVAL | cut -d":" -f2 | tr -d " "` + RVAL=`glance add --silent-upload -A $TOKEN name="tty-ramdisk" is_public=true container_format=ari disk_format=ari < $FILES/images/ari-tty/image` + RAMDISK_ID=`echo $RVAL | cut -d":" -f2 | tr -d " "` + glance add -A $TOKEN name="tty" is_public=true container_format=ami disk_format=ami kernel_id=$KERNEL_ID ramdisk_id=$RAMDISK_ID < $FILES/images/ami-tty/image fi for image_url in ${IMAGE_URLS//,/ }; do @@ -1664,8 +1717,6 @@ if is_service_enabled g-reg; then KERNEL="" RAMDISK="" - DISK_FORMAT="" - CONTAINER_FORMAT="" case "$IMAGE_FNAME" in *.tar.gz|*.tgz) # Extract ami and aki files @@ -1676,68 +1727,43 @@ if is_service_enabled g-reg; then rm -Rf "$xdir"; mkdir "$xdir" tar -zxf $FILES/$IMAGE_FNAME -C "$xdir" - KERNEL=$(for f in "$xdir/"*-vmlinuz* "$xdir/"aki-*/image; do + KERNEL=$(for f in "$xdir/"*-vmlinuz*; do [ -f "$f" ] && echo "$f" && break; done; true) - RAMDISK=$(for f in "$xdir/"*-initrd* "$xdir/"ari-*/image; do + RAMDISK=$(for f in "$xdir/"*-initrd*; do [ -f "$f" ] && echo "$f" && break; done; true) - IMAGE=$(for f in "$xdir/"*.img "$xdir/"ami-*/image; do + IMAGE=$(for f in "$xdir/"*.img; do [ -f "$f" ] && echo "$f" && break; done; true) - if [[ -z "$IMAGE_NAME" ]]; then - IMAGE_NAME=$(basename "$IMAGE" ".img") - fi + [ -n "$IMAGE_NAME" ] + IMAGE_NAME=$(basename "$IMAGE" ".img") ;; *.img) IMAGE="$FILES/$IMAGE_FNAME"; IMAGE_NAME=$(basename "$IMAGE" ".img") - DISK_FORMAT=raw - CONTAINER_FORMAT=bare ;; *.img.gz) IMAGE="$FILES/${IMAGE_FNAME}" IMAGE_NAME=$(basename "$IMAGE" ".img.gz") - DISK_FORMAT=raw - CONTAINER_FORMAT=bare - ;; - *.qcow2) - IMAGE="$FILES/${IMAGE_FNAME}" - IMAGE_NAME=$(basename "$IMAGE" ".qcow2") - DISK_FORMAT=qcow2 - CONTAINER_FORMAT=bare ;; *) echo "Do not know what to do with $IMAGE_FNAME"; false;; esac - if [ "$CONTAINER_FORMAT" = "bare" ]; then - glance add --silent-upload -A $TOKEN name="$IMAGE_NAME" is_public=true container_format=$CONTAINER_FORMAT disk_format=$DISK_FORMAT < <(zcat --force "${IMAGE}") - else - # Use glance client to add the kernel the root filesystem. - # We parse the results of the first upload to get the glance ID of the - # kernel for use when uploading the root filesystem. - KERNEL_ID=""; RAMDISK_ID=""; - if [ -n "$KERNEL" ]; then - RVAL=`glance add --silent-upload -A $TOKEN name="$IMAGE_NAME-kernel" is_public=true container_format=aki disk_format=aki < "$KERNEL"` - KERNEL_ID=`echo $RVAL | cut -d":" -f2 | tr -d " "` - fi - if [ -n "$RAMDISK" ]; then - RVAL=`glance add --silent-upload -A $TOKEN name="$IMAGE_NAME-ramdisk" is_public=true container_format=ari disk_format=ari < "$RAMDISK"` - RAMDISK_ID=`echo $RVAL | cut -d":" -f2 | tr -d " "` - fi - glance add -A $TOKEN name="${IMAGE_NAME%.img}" is_public=true container_format=ami disk_format=ami ${KERNEL_ID:+kernel_id=$KERNEL_ID} ${RAMDISK_ID:+ramdisk_id=$RAMDISK_ID} < <(zcat --force "${IMAGE}") + # Use glance client to add the kernel the root filesystem. + # We parse the results of the first upload to get the glance ID of the + # kernel for use when uploading the root filesystem. + KERNEL_ID=""; RAMDISK_ID=""; + if [ -n "$KERNEL" ]; then + RVAL=`glance add --silent-upload -A $TOKEN name="$IMAGE_NAME-kernel" is_public=true container_format=aki disk_format=aki < "$KERNEL"` + KERNEL_ID=`echo $RVAL | cut -d":" -f2 | tr -d " "` + fi + if [ -n "$RAMDISK" ]; then + RVAL=`glance add --silent-upload -A $TOKEN name="$IMAGE_NAME-ramdisk" is_public=true container_format=ari disk_format=ari < "$RAMDISK"` + RAMDISK_ID=`echo $RVAL | cut -d":" -f2 | tr -d " "` fi + glance add -A $TOKEN name="${IMAGE_NAME%.img}" is_public=true container_format=ami disk_format=ami ${KERNEL_ID:+kernel_id=$KERNEL_ID} ${RAMDISK_ID:+ramdisk_id=$RAMDISK_ID} < <(zcat --force "${IMAGE}") done fi -# Run local script -# ================ - -# Run ``local.sh`` if it exists to perform user-managed tasks -if [[ -x $TOP_DIR/local.sh ]]; then - echo "Running user script $TOP_DIR/local.sh" - $TOP_DIR/local.sh -fi - - # Fin # ===