@@ -10,7 +10,6 @@ set -o xtrace
1010
1111DIR=` pwd`
1212DEST=/opt
13- CMD=$1
1413
1514# Set the destination directories for openstack projects
1615NOVA_DIR=$DEST /nova
@@ -41,95 +40,91 @@ NET_MAN=${NET_MAN:-VlanManager}
4140# TODO: switch to mysql for all services
4241SQL_CONN=sqlite:///$NOVA_DIR /nova.sqlite
4342
44- # FIXME: commands should be: stack.sh all or list of services to install/run
45-
46- # You should only have to run this once
47- if [ " $CMD " == " install" ]; then
48- # install apt requirements
49- apt-get install -y -q ` cat $DIR /apts/* | cut -d\# -f1`
50-
51- # install python requirements
52- pip install ` cat $DIR /pips/* `
53-
54- # compute service
55- git clone https://github.com/cloudbuilders/nova.git $NOVA_DIR
56- # image catalog service
57- git clone https://github.com/cloudbuilders/glance.git $GLANCE_DIR
58- # unified auth system (manages accounts/tokens)
59- git clone https://github.com/cloudbuilders/keystone.git $KEYSTONE_DIR
60- # a websockets/html5 or flash powered VNC console for vm instances
61- git clone https://github.com/cloudbuilders/noVNC.git $NOVNC_DIR
62- # django powered web control panel for openstack
63- git clone https://github.com/cloudbuilders/openstack-dashboard.git $DASH_DIR
64- # python client library to nova that dashboard (and others) use
65- git clone https://github.com/cloudbuilders/python-novaclient.git $NOVACLIENT_DIR
66- # openstackx is a collection of extensions to openstack.compute & nova
67- # that is *deprecated*. The code is being moved into python-novaclient & nova.
68- git clone https://github.com/cloudbuilders/openstackx.git $API_DIR
69-
70- # setup our checkouts so they are installed into python path
71- # allowing `import nova` or `import glance.client`
72- cd $NOVACLIENT_DIR ; python setup.py develop
73- cd $KEYSTONE_DIR ; python setup.py develop
74- cd $GLANCE_DIR ; python setup.py develop
75- cd $API_DIR ; python setup.py develop
76- cd $DASH_DIR /django-openstack; python setup.py develop
77- cd $DASH_DIR /openstack-dashboard; python setup.py develop
78-
79- # attempt to load modules: kvm (hardware virt) and nbd (network block
80- # device - used to manage qcow images)
81- modprobe nbd || true
82- modprobe kvm || true
83- # if kvm wasn't running before we need to restart libvirt to enable it
84- /etc/init.d/libvirt-bin restart
85-
86- # setup nova instance directory
87- mkdir -p $NOVA_DIR /instances
88-
89- # if there is a partition labeled nova-instances use it (ext filesystems
90- # can be labeled via e2label)
91- if [ -L /dev/disk/by-label/nova-instances ]; then
92- mount -L nova-instances /$NOVA_DIR /instances
93- fi
94-
95- # *Dashboard*: setup django application to serve via apache/wsgi
96-
97- # Dash currently imports quantum even if you aren't using it. Instead
98- # of installing quantum we can create a simple module that will pass the
99- # initial imports
100- mkdir $DASH_DIR /openstack-dashboard/quantum
101- touch $DASH_DIR /openstack-dashboard/quantum/__init__.py
102- touch $DASH_DIR /openstack-dashboard/quantum/client.py
103- # local_settings has
104- cd $DASH_DIR /openstack-dashboard
105- cp local/local_settings.py.example local/local_settings.py
106- dashboard/manage.py syncdb
107-
108- # # Setup Apache
109- # create an empty directory to use as our
110- mkdir $DASH_DIR /.blackhole
111- # FIXME(ja): can't figure out how to make $DASH_DIR work in sed, also install to available/a2e it
112- cat $DIR /files/000-default.template | sed ' s/%DASH_DIR%/\/opt\/dash/g' > /etc/apache2/sites-enabled/000-default
113-
114- chown -R www-data:www-data $DASH_DIR
115-
116- mkdir -p /var/log/glance
117-
118- # prepare initial images for loading into glance
119- if [ ! -f $DEST /tty.tgz ]; then
120- wget -c http://images.ansolabs.com/tty.tgz -O $DEST /tty.tgz
121- fi
122-
123- mkdir -p $DEST /images
124- tar -C $DEST /images -zxf $DEST /tty.tgz
125-
126- # add useful screenrc
127- cp $DIR /files/screenrc ~ /.screenrc
128-
129- # TODO: update current user to allow sudo for all commands in files/sudo/*
130- exit
43+ # FIXME: commands should be: stack.sh should allow specifying a subset of services
44+
45+ # install apt requirements
46+ apt-get install -y -q ` cat $DIR /apts/* | cut -d\# -f1`
47+
48+ # install python requirements
49+ pip install ` cat $DIR /pips/* `
50+
51+ # compute service
52+ git clone https://github.com/cloudbuilders/nova.git $NOVA_DIR
53+ # image catalog service
54+ git clone https://github.com/cloudbuilders/glance.git $GLANCE_DIR
55+ # unified auth system (manages accounts/tokens)
56+ git clone https://github.com/cloudbuilders/keystone.git $KEYSTONE_DIR
57+ # a websockets/html5 or flash powered VNC console for vm instances
58+ git clone https://github.com/cloudbuilders/noVNC.git $NOVNC_DIR
59+ # django powered web control panel for openstack
60+ git clone https://github.com/cloudbuilders/openstack-dashboard.git $DASH_DIR
61+ # python client library to nova that dashboard (and others) use
62+ git clone https://github.com/cloudbuilders/python-novaclient.git $NOVACLIENT_DIR
63+ # openstackx is a collection of extensions to openstack.compute & nova
64+ # that is *deprecated*. The code is being moved into python-novaclient & nova.
65+ git clone https://github.com/cloudbuilders/openstackx.git $API_DIR
66+
67+ # setup our checkouts so they are installed into python path
68+ # allowing `import nova` or `import glance.client`
69+ cd $NOVACLIENT_DIR ; python setup.py develop
70+ cd $KEYSTONE_DIR ; python setup.py develop
71+ cd $GLANCE_DIR ; python setup.py develop
72+ cd $API_DIR ; python setup.py develop
73+ cd $DASH_DIR /django-openstack; python setup.py develop
74+ cd $DASH_DIR /openstack-dashboard; python setup.py develop
75+
76+ # attempt to load modules: kvm (hardware virt) and nbd (network block
77+ # device - used to manage qcow images)
78+ modprobe nbd || true
79+ modprobe kvm || true
80+ # if kvm wasn't running before we need to restart libvirt to enable it
81+ /etc/init.d/libvirt-bin restart
82+
83+ # setup nova instance directory
84+ mkdir -p $NOVA_DIR /instances
85+
86+ # if there is a partition labeled nova-instances use it (ext filesystems
87+ # can be labeled via e2label)
88+ if [ -L /dev/disk/by-label/nova-instances ]; then
89+ mount -L nova-instances /$NOVA_DIR /instances
13190fi
13291
92+ # *Dashboard*: setup django application to serve via apache/wsgi
93+
94+ # Dash currently imports quantum even if you aren't using it. Instead
95+ # of installing quantum we can create a simple module that will pass the
96+ # initial imports
97+ mkdir $DASH_DIR /openstack-dashboard/quantum
98+ touch $DASH_DIR /openstack-dashboard/quantum/__init__.py
99+ touch $DASH_DIR /openstack-dashboard/quantum/client.py
100+ # local_settings has
101+ cd $DASH_DIR /openstack-dashboard
102+ cp local/local_settings.py.example local/local_settings.py
103+ dashboard/manage.py syncdb
104+
105+ # ## Setup Apache
106+ # create an empty directory to use as our
107+ mkdir $DASH_DIR /.blackhole
108+ # FIXME(ja): can't figure out how to make $DASH_DIR work in sed, also install to available/a2e it
109+ cat $DIR /files/000-default.template | sed ' s/%DASH_DIR%/\/opt\/dash/g' > /etc/apache2/sites-enabled/000-default
110+
111+ chown -R www-data:www-data $DASH_DIR
112+
113+ mkdir -p /var/log/glance
114+
115+ # prepare initial images for loading into glance
116+ if [ ! -f $DEST /tty.tgz ]; then
117+ wget -c http://images.ansolabs.com/tty.tgz -O $DEST /tty.tgz
118+ fi
119+
120+ mkdir -p $DEST /images
121+ tar -C $DEST /images -zxf $DEST /tty.tgz
122+
123+ # add useful screenrc
124+ cp $DIR /files/screenrc ~ /.screenrc
125+
126+ # TODO: update current user to allow sudo for all commands in files/sudo/*
127+
133128NL=` echo -ne ' \015' `
134129
135130function screen_it {
@@ -143,89 +138,71 @@ function add_nova_flag {
143138 echo " $1 " >> $NOVA_DIR /bin/nova.conf
144139}
145140
146- if [ " $CMD " == " run" ] || [ " $CMD " == " run_detached" ]; then
147-
148- # (re)create nova.conf
149- rm -f $NOVA_DIR /bin/nova.conf
150- add_nova_flag " --verbose"
151- add_nova_flag " --nodaemon"
152- add_nova_flag " --dhcpbridge_flagfile=$NOVA_DIR /bin/nova.conf"
153- add_nova_flag " --network_manager=nova.network.manager.$NET_MAN "
154- add_nova_flag " --my_ip=$HOST_IP "
155- add_nova_flag " --public_interface=$INTERFACE "
156- add_nova_flag " --vlan_interface=$INTERFACE "
157- add_nova_flag " --sql_connection=$SQL_CONN "
158- add_nova_flag " --libvirt_type=$LIBVIRT_TYPE "
159- add_nova_flag " --osapi_extensions_path=$API_DIR /extensions"
160- add_nova_flag " --vncproxy_url=http://$HOST_IP :6080"
161- add_nova_flag " --vncproxy_wwwroot=$NOVNC_DIR /noVNC/noVNC"
162- add_nova_flag " --api_paste_config=$KEYSTONE_DIR /examples/paste/nova-api-paste.ini"
163- add_nova_flag " --image_service=nova.image.glance.GlanceImageService"
164- if [ -n " $FLAT_INTERFACE " ]; then
165- add_nova_flag " --flat_interface=$FLAT_INTERFACE "
166- fi
167-
168- # create a new named screen to store things in
169- screen -d -m -S nova -t nova
170- sleep 1
171-
172- # Clean out the instances directory
173- rm -rf $NOVA_DIR /instances/*
174-
175- # delete traces of nova networks from prior runs
176- killall dnsmasq || true
177- rm -rf $NOVA_DIR /networks
178- mkdir -p $NOVA_DIR /networks
179-
180- # (re)create nova database
181- rm -f $NOVA_DIR /nova.sqlite
182- $NOVA_DIR /bin/nova-manage db sync
183-
184- # initialize keystone with default users/endpoints
185- # FIXME(ja): move initial_data.sh into this script
186- rm -f /opt/keystone/keystone.db
187- curl -OL https://raw.github.com/cloudbuilders/deploy.sh/master/initial_data.sh
188- BIN_DIR=$KEYSTONE_DIR /bin bash initial_data.sh
189-
190- # create a small network
191- $NOVA_DIR /bin/nova-manage network create private $FIXED_RANGE 1 32
192-
193- # create some floating ips
194- $NOVA_DIR /bin/nova-manage floating create $FLOATING_RANGE
195-
196- # delete existing glance images/database. Glance will recreate the db
197- # when it is ran.
198- rm -rf /var/lib/glance/images/*
199- rm -f $GLANCE_DIR /glance.sqlite
200-
201- screen_it n-api " $NOVA_DIR /bin/nova-api"
202- screen_it g-api " cd $GLANCE_DIR ; bin/glance-api --config-file=etc/glance-api.conf"
203- screen_it g-reg " cd $GLANCE_DIR ; bin/glance-registry --config-file=etc/glance-registry.conf"
204- screen_it cpu " $NOVA_DIR /bin/nova-compute"
205- screen_it net " $NOVA_DIR /bin/nova-network"
206- screen_it sched " $NOVA_DIR /bin/nova-scheduler"
207- screen_it key " $KEYSTONE_DIR /bin/keystone --config-file $KEYSTONE_DIR /etc/keystone.conf"
208- screen_it vnc " $NOVA_DIR /bin/nova-vncproxy"
209- screen_it dash " /etc/init.d/apache2 restart; tail -f /var/log/apache2/error.log"
210-
211- # FIXME: switch to just importing images
212- # remove previously converted images
213- rm -rf $DIR /images/[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]
214- $NOVA_DIR /bin/nova-manage image convert $DIR /images
215-
216- if [ " $CMD " != " run_detached" ]; then
217- screen -S nova -x
218- fi
141+ # (re)create nova.conf
142+ rm -f $NOVA_DIR /bin/nova.conf
143+ add_nova_flag " --verbose"
144+ add_nova_flag " --nodaemon"
145+ add_nova_flag " --dhcpbridge_flagfile=$NOVA_DIR /bin/nova.conf"
146+ add_nova_flag " --network_manager=nova.network.manager.$NET_MAN "
147+ add_nova_flag " --my_ip=$HOST_IP "
148+ add_nova_flag " --public_interface=$INTERFACE "
149+ add_nova_flag " --vlan_interface=$INTERFACE "
150+ add_nova_flag " --sql_connection=$SQL_CONN "
151+ add_nova_flag " --libvirt_type=$LIBVIRT_TYPE "
152+ add_nova_flag " --osapi_extensions_path=$API_DIR /extensions"
153+ add_nova_flag " --vncproxy_url=http://$HOST_IP :6080"
154+ add_nova_flag " --vncproxy_wwwroot=$NOVNC_DIR /noVNC/noVNC"
155+ add_nova_flag " --api_paste_config=$KEYSTONE_DIR /examples/paste/nova-api-paste.ini"
156+ add_nova_flag " --image_service=nova.image.glance.GlanceImageService"
157+ if [ -n " $FLAT_INTERFACE " ]; then
158+ add_nova_flag " --flat_interface=$FLAT_INTERFACE "
219159fi
220160
221- if [ " $CMD " == " run" ] || [ " $CMD " == " terminate" ]; then
222- virsh list | grep i- | awk ' {print $1}' | xargs -n1 virsh destroy
223- $NOVA_DIR /tools/clean-vlans
224- echo " FIXME: clean networks?"
225- fi
226-
227- if [ " $CMD " == " run" ] || [ " $CMD " == " clean" ]; then
228- screen -S nova -X quit
229- rm -f * .pid*
230- fi
161+ # create a new named screen to store things in
162+ screen -d -m -S nova -t nova
163+ sleep 1
164+
165+ # Clean out the instances directory
166+ rm -rf $NOVA_DIR /instances/*
167+
168+ # delete traces of nova networks from prior runs
169+ killall dnsmasq || true
170+ rm -rf $NOVA_DIR /networks
171+ mkdir -p $NOVA_DIR /networks
172+
173+ # (re)create nova database
174+ rm -f $NOVA_DIR /nova.sqlite
175+ $NOVA_DIR /bin/nova-manage db sync
176+
177+ # initialize keystone with default users/endpoints
178+ # FIXME(ja): move initial_data.sh into this script
179+ rm -f /opt/keystone/keystone.db
180+ curl -OL https://raw.github.com/cloudbuilders/deploy.sh/master/initial_data.sh
181+ BIN_DIR=$KEYSTONE_DIR /bin bash initial_data.sh
182+
183+ # create a small network
184+ $NOVA_DIR /bin/nova-manage network create private $FIXED_RANGE 1 32
185+
186+ # create some floating ips
187+ $NOVA_DIR /bin/nova-manage floating create $FLOATING_RANGE
188+
189+ # delete existing glance images/database. Glance will recreate the db
190+ # when it is ran.
191+ rm -rf /var/lib/glance/images/*
192+ rm -f $GLANCE_DIR /glance.sqlite
193+
194+ screen_it n-api " $NOVA_DIR /bin/nova-api"
195+ screen_it g-api " cd $GLANCE_DIR ; bin/glance-api --config-file=etc/glance-api.conf"
196+ screen_it g-reg " cd $GLANCE_DIR ; bin/glance-registry --config-file=etc/glance-registry.conf"
197+ screen_it cpu " $NOVA_DIR /bin/nova-compute"
198+ screen_it net " $NOVA_DIR /bin/nova-network"
199+ screen_it sched " $NOVA_DIR /bin/nova-scheduler"
200+ screen_it key " $KEYSTONE_DIR /bin/keystone --config-file $KEYSTONE_DIR /etc/keystone.conf"
201+ screen_it vnc " $NOVA_DIR /bin/nova-vncproxy"
202+ screen_it dash " /etc/init.d/apache2 restart; tail -f /var/log/apache2/error.log"
203+
204+ # FIXME: switch to just importing images
205+ # remove previously converted images
206+ rm -rf $DIR /images/[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]
207+ $NOVA_DIR /bin/nova-manage image convert $DIR /images
231208
0 commit comments