Skip to content

Commit 75a3765

Browse files
committed
switch to single pass script
1 parent aec8fa4 commit 75a3765

File tree

1 file changed

+148
-171
lines changed

1 file changed

+148
-171
lines changed

stack.sh

Lines changed: 148 additions & 171 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ set -o xtrace
1010

1111
DIR=`pwd`
1212
DEST=/opt
13-
CMD=$1
1413

1514
# Set the destination directories for openstack projects
1615
NOVA_DIR=$DEST/nova
@@ -41,95 +40,91 @@ NET_MAN=${NET_MAN:-VlanManager}
4140
# TODO: switch to mysql for all services
4241
SQL_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
13190
fi
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+
133128
NL=`echo -ne '\015'`
134129

135130
function 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"
219159
fi
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

Comments
 (0)