blob: 6ce334bc00a6f035c425425dc830fecd64ab4f21 [file] [log] [blame]
Anthony Youngb62b4ca2011-10-26 22:29:08 -07001#!/bin/bash
2
Mate Lakat0b3804b2013-05-07 16:58:17 +01003# This script must be run on a XenServer or XCP machine
John Garbuttdaadf742012-04-27 18:28:28 +01004#
5# It creates a DomU VM that runs OpenStack services
6#
7# For more details see: README.md
8
Renuka Apte0af143b2012-04-02 15:46:53 -07009set -o errexit
Mate Lakat0b3804b2013-05-07 16:58:17 +010010set -o nounset
John Garbuttdaadf742012-04-27 18:28:28 +010011set -o xtrace
Renuka Apte0af143b2012-04-02 15:46:53 -070012
Mate Lakat1ca490c2013-09-19 10:03:36 +010013export LC_ALL=C
14
Anthony Youngb62b4ca2011-10-26 22:29:08 -070015# Abort if localrc is not set
16if [ ! -e ../../localrc ]; then
17 echo "You must have a localrc with ALL necessary passwords defined before proceeding."
18 echo "See the xen README for required passwords."
19 exit 1
20fi
21
Anthony Youngaf6ed6b2011-11-02 07:50:27 -050022# This directory
Mate Lakata8bf0f22013-03-07 18:37:31 +000023THIS_DIR=$(cd $(dirname "$0") && pwd)
Anthony Youngaf6ed6b2011-11-02 07:50:27 -050024
Anthony Youngb3e2f332012-03-16 17:01:49 -070025# Source lower level functions
Mate Lakata8bf0f22013-03-07 18:37:31 +000026. $THIS_DIR/../../functions
Anthony Youngb3e2f332012-03-16 17:01:49 -070027
John Garbuttdaadf742012-04-27 18:28:28 +010028# Include onexit commands
Mate Lakata8bf0f22013-03-07 18:37:31 +000029. $THIS_DIR/scripts/on_exit.sh
John Garbuttdaadf742012-04-27 18:28:28 +010030
Mate Lakat57e3da92013-03-22 16:34:05 +000031# xapi functions
32. $THIS_DIR/functions
33
Bob Ball46691222013-08-12 17:28:50 +010034# Determine what system we are running on.
35# Might not be XenServer if we're using xenserver-core
36GetDistro
37
John Garbuttdaadf742012-04-27 18:28:28 +010038#
39# Get Settings
40#
41
Anthony Youngb3e2f332012-03-16 17:01:49 -070042# Source params - override xenrc params in your localrc to suit your taste
Mate Lakat0b3804b2013-05-07 16:58:17 +010043source $THIS_DIR/xenrc
Anthony Youngaf6ed6b2011-11-02 07:50:27 -050044
Renuka Apte0af143b2012-04-02 15:46:53 -070045xe_min()
46{
Sean Dague0b865a52013-10-22 11:37:35 -040047 local cmd="$1"
48 shift
49 xe "$cmd" --minimal "$@"
Renuka Apte0af143b2012-04-02 15:46:53 -070050}
Anthony Youngb62b4ca2011-10-26 22:29:08 -070051
John Garbuttdaadf742012-04-27 18:28:28 +010052#
53# Prepare Dom0
54# including installing XenAPI plugins
55#
56
Mate Lakata8bf0f22013-03-07 18:37:31 +000057cd $THIS_DIR
John Garbuttdaadf742012-04-27 18:28:28 +010058
Mate Lakatd8511032013-07-03 10:44:44 +010059# Die if multiple hosts listed
60if have_multiple_hosts; then
61 cat >&2 << EOF
62ERROR: multiple hosts found. This might mean that the XenServer is a member
63of a pool - Exiting.
64EOF
65 exit 1
66fi
67
Mate Lakat57e3da92013-03-22 16:34:05 +000068# Install plugins
John Garbuttdaadf742012-04-27 18:28:28 +010069
Mate Lakat57e3da92013-03-22 16:34:05 +000070## Nova plugins
71NOVA_ZIPBALL_URL=${NOVA_ZIPBALL_URL:-$(zip_snapshot_location $NOVA_REPO $NOVA_BRANCH)}
Mate Lakatabe56ee2013-07-24 11:06:27 +010072EXTRACTED_NOVA=$(extract_remote_zipball "$NOVA_ZIPBALL_URL")
73install_xapi_plugins_from "$EXTRACTED_NOVA"
74
75LOGROT_SCRIPT=$(find "$EXTRACTED_NOVA" -name "rotate_xen_guest_logs.sh" -print)
76if [ -n "$LOGROT_SCRIPT" ]; then
77 mkdir -p "/var/log/xen/guest"
78 cp "$LOGROT_SCRIPT" /root/consolelogrotate
79 chmod +x /root/consolelogrotate
80 echo "* * * * * /root/consolelogrotate" | crontab
81fi
82
83rm -rf "$EXTRACTED_NOVA"
Maru Newby2298ca42012-10-25 23:46:42 +000084
Mate Lakat57e3da92013-03-22 16:34:05 +000085## Install the netwrap xapi plugin to support agent control of dom0 networking
Maru Newby2298ca42012-10-25 23:46:42 +000086if [[ "$ENABLED_SERVICES" =~ "q-agt" && "$Q_PLUGIN" = "openvswitch" ]]; then
Mark McClainb05c8762013-07-06 23:29:39 -040087 NEUTRON_ZIPBALL_URL=${NEUTRON_ZIPBALL_URL:-$(zip_snapshot_location $NEUTRON_REPO $NEUTRON_BRANCH)}
Mate Lakatabe56ee2013-07-24 11:06:27 +010088 EXTRACTED_NEUTRON=$(extract_remote_zipball "$NEUTRON_ZIPBALL_URL")
89 install_xapi_plugins_from "$EXTRACTED_NEUTRON"
90 rm -rf "$EXTRACTED_NEUTRON"
Maru Newby2298ca42012-10-25 23:46:42 +000091fi
92
Mate Lakat57e3da92013-03-22 16:34:05 +000093create_directory_for_kernels
Bob Ball39aeda22013-06-17 12:51:33 +010094create_directory_for_images
John Garbuttdaadf742012-04-27 18:28:28 +010095
96#
97# Configure Networking
98#
Bob Ball78ef1f32013-09-29 11:36:28 +010099
100MGT_NETWORK=`xe pif-list management=true params=network-uuid minimal=true`
101MGT_BRIDGE_OR_NET_NAME=`xe network-list uuid=$MGT_NETWORK params=bridge minimal=true`
102
Mate Lakat9e326772013-05-08 16:42:22 +0100103setup_network "$VM_BRIDGE_OR_NET_NAME"
104setup_network "$MGT_BRIDGE_OR_NET_NAME"
105setup_network "$PUB_BRIDGE_OR_NET_NAME"
Anthony Youngb62b4ca2011-10-26 22:29:08 -0700106
Mark McClainb05c8762013-07-06 23:29:39 -0400107# With neutron, one more network is required, which is internal to the
Mate Lakatf652e0f2013-05-21 18:12:48 +0100108# hypervisor, and used by the VMs
Mark McClainb05c8762013-07-06 23:29:39 -0400109if is_service_enabled neutron; then
Mate Lakatf652e0f2013-05-21 18:12:48 +0100110 setup_network "$XEN_INT_BRIDGE_OR_NET_NAME"
111fi
112
Mate Lakat9e326772013-05-08 16:42:22 +0100113if parameter_is_specified "FLAT_NETWORK_BRIDGE"; then
Mate Lakat2b8814d2013-09-25 17:07:06 +0100114 if [ "$(bridge_for "$VM_BRIDGE_OR_NET_NAME")" != "$(bridge_for "$FLAT_NETWORK_BRIDGE")" ]; then
115 cat >&2 << EOF
116ERROR: FLAT_NETWORK_BRIDGE is specified in localrc file, and either no network
117found on XenServer by searching for networks by that value as name-label or
118bridge name or the network found does not match the network specified by
119VM_BRIDGE_OR_NET_NAME. Please check your localrc file.
Mate Lakat9e326772013-05-08 16:42:22 +0100120EOF
Mate Lakat2b8814d2013-09-25 17:07:06 +0100121 exit 1
122 fi
Anthony Youngb62b4ca2011-10-26 22:29:08 -0700123fi
124
Mate Lakat9e326772013-05-08 16:42:22 +0100125if ! xenapi_is_listening_on "$MGT_BRIDGE_OR_NET_NAME"; then
126 cat >&2 << EOF
127ERROR: XenAPI does not have an assigned IP address on the management network.
128please review your XenServer network configuration / localrc file.
129EOF
130 exit 1
131fi
132
133HOST_IP=$(xenapi_ip_on "$MGT_BRIDGE_OR_NET_NAME")
John Garbuttdaadf742012-04-27 18:28:28 +0100134
135# Set up ip forwarding, but skip on xcp-xapi
John Garbuttd8f1a872012-06-26 11:16:38 +0100136if [ -a /etc/sysconfig/network ]; then
John Garbuttdaadf742012-04-27 18:28:28 +0100137 if ! grep -q "FORWARD_IPV4=YES" /etc/sysconfig/network; then
Sean Dague0b865a52013-10-22 11:37:35 -0400138 # FIXME: This doesn't work on reboot!
139 echo "FORWARD_IPV4=YES" >> /etc/sysconfig/network
John Garbuttdaadf742012-04-27 18:28:28 +0100140 fi
141fi
Anthony Youngb62b4ca2011-10-26 22:29:08 -0700142# Also, enable ip forwarding in rc.local, since the above trick isn't working
143if ! grep -q "echo 1 >/proc/sys/net/ipv4/ip_forward" /etc/rc.local; then
144 echo "echo 1 >/proc/sys/net/ipv4/ip_forward" >> /etc/rc.local
145fi
Anthony Youngb62b4ca2011-10-26 22:29:08 -0700146# Enable ip forwarding at runtime as well
147echo 1 > /proc/sys/net/ipv4/ip_forward
148
John Garbuttdaadf742012-04-27 18:28:28 +0100149
150#
Anthony Young346e4912011-11-05 00:22:47 -0500151# Shutdown previous runs
John Garbuttdaadf742012-04-27 18:28:28 +0100152#
153
Anthony Young346e4912011-11-05 00:22:47 -0500154DO_SHUTDOWN=${DO_SHUTDOWN:-1}
John Garbuttdaadf742012-04-27 18:28:28 +0100155CLEAN_TEMPLATES=${CLEAN_TEMPLATES:-false}
Anthony Young346e4912011-11-05 00:22:47 -0500156if [ "$DO_SHUTDOWN" = "1" ]; then
Anthony Young40b57372011-11-05 00:30:07 -0500157 # Shutdown all domU's that created previously
John Garbuttdaadf742012-04-27 18:28:28 +0100158 clean_templates_arg=""
159 if $CLEAN_TEMPLATES; then
160 clean_templates_arg="--remove-templates"
161 fi
162 ./scripts/uninstall-os-vpx.sh $clean_templates_arg
Anthony Young346e4912011-11-05 00:22:47 -0500163
164 # Destroy any instances that were launched
165 for uuid in `xe vm-list | grep -1 instance | grep uuid | sed "s/.*\: //g"`; do
166 echo "Shutting down nova instance $uuid"
Mate Lakat0d97cbe2013-07-29 09:41:50 +0100167 xe vm-uninstall uuid=$uuid force=true
Anthony Young346e4912011-11-05 00:22:47 -0500168 done
Anthony Youngfa4ecc62011-11-11 10:23:22 -0800169
170 # Destroy orphaned vdis
171 for uuid in `xe vdi-list | grep -1 Glance | grep uuid | sed "s/.*\: //g"`; do
172 xe vdi-destroy uuid=$uuid
173 done
Anthony Young346e4912011-11-05 00:22:47 -0500174fi
Anthony Youngb62b4ca2011-10-26 22:29:08 -0700175
Renuka Apte0af143b2012-04-02 15:46:53 -0700176
John Garbuttdaadf742012-04-27 18:28:28 +0100177#
178# Create Ubuntu VM template
179# and/or create VM from template
180#
Renuka Apte0af143b2012-04-02 15:46:53 -0700181
John Garbuttdaadf742012-04-27 18:28:28 +0100182GUEST_NAME=${GUEST_NAME:-"DevStackOSDomU"}
Mate Lakatc02b2f82013-07-30 19:43:10 +0100183TNAME="jeos_template_for_devstack"
184SNAME_TEMPLATE="jeos_snapshot_for_devstack"
John Garbuttdaadf742012-04-27 18:28:28 +0100185SNAME_FIRST_BOOT="before_first_boot"
186
187function wait_for_VM_to_halt() {
Bob Ball63c6c2b2013-01-24 13:13:51 +0000188 set +x
189 echo "Waiting for the VM to halt. Progress in-VM can be checked with vncviewer:"
190 mgmt_ip=$(echo $XENAPI_CONNECTION_URL | tr -d -c '1234567890.')
191 domid=$(xe vm-list name-label="$GUEST_NAME" params=dom-id minimal=true)
192 port=$(xenstore-read /local/domain/$domid/console/vnc-port)
Mate Lakat97621a12013-08-30 13:12:17 +0100193 echo "vncviewer -via root@$mgmt_ip localhost:${port:2}"
Renuka Apte0af143b2012-04-02 15:46:53 -0700194 while true
195 do
196 state=$(xe_min vm-list name-label="$GUEST_NAME" power-state=halted)
197 if [ -n "$state" ]
198 then
199 break
200 else
Bob Ball63c6c2b2013-01-24 13:13:51 +0000201 echo -n "."
John Garbuttdaadf742012-04-27 18:28:28 +0100202 sleep 20
Renuka Apte0af143b2012-04-02 15:46:53 -0700203 fi
204 done
Bob Ball63c6c2b2013-01-24 13:13:51 +0000205 set -x
John Garbuttdaadf742012-04-27 18:28:28 +0100206}
Renuka Apte0af143b2012-04-02 15:46:53 -0700207
John Garbuttdaadf742012-04-27 18:28:28 +0100208templateuuid=$(xe template-list name-label="$TNAME")
209if [ -z "$templateuuid" ]; then
210 #
211 # Install Ubuntu over network
212 #
Bob Ball78ef1f32013-09-29 11:36:28 +0100213 UBUNTU_INST_BRIDGE_OR_NET_NAME=${UBUNTU_INST_BRIDGE_OR_NET_NAME:-"$MGT_BRIDGE_OR_NET_NAME"}
John Garbuttdaadf742012-04-27 18:28:28 +0100214
John Garbuttdaadf742012-04-27 18:28:28 +0100215 # always update the preseed file, incase we have a newer one
216 PRESEED_URL=${PRESEED_URL:-""}
217 if [ -z "$PRESEED_URL" ]; then
218 PRESEED_URL="${HOST_IP}/devstackubuntupreseed.cfg"
219 HTTP_SERVER_LOCATION="/opt/xensource/www"
220 if [ ! -e $HTTP_SERVER_LOCATION ]; then
221 HTTP_SERVER_LOCATION="/var/www/html"
222 mkdir -p $HTTP_SERVER_LOCATION
223 fi
Mate Lakata8bf0f22013-03-07 18:37:31 +0000224 cp -f $THIS_DIR/devstackubuntupreseed.cfg $HTTP_SERVER_LOCATION
Mate Lakatd3740f72013-05-09 15:02:21 +0100225
226 sed \
227 -e "s,\(d-i mirror/http/hostname string\).*,\1 $UBUNTU_INST_HTTP_HOSTNAME,g" \
228 -e "s,\(d-i mirror/http/directory string\).*,\1 $UBUNTU_INST_HTTP_DIRECTORY,g" \
229 -e "s,\(d-i mirror/http/proxy string\).*,\1 $UBUNTU_INST_HTTP_PROXY,g" \
230 -i "${HTTP_SERVER_LOCATION}/devstackubuntupreseed.cfg"
John Garbuttdaadf742012-04-27 18:28:28 +0100231 fi
232
John Garbuttd8f1a872012-06-26 11:16:38 +0100233 # Update the template
Mate Lakata8bf0f22013-03-07 18:37:31 +0000234 $THIS_DIR/scripts/install_ubuntu_template.sh $PRESEED_URL
John Garbuttdaadf742012-04-27 18:28:28 +0100235
Mate Lakat2f524bd2013-06-19 12:32:23 +0100236 # create a new VM from the given template with eth0 attached to the given
237 # network
Mate Lakat9e326772013-05-08 16:42:22 +0100238 $THIS_DIR/scripts/install-os-vpx.sh \
239 -t "$UBUNTU_INST_TEMPLATE_NAME" \
Mate Lakat2f524bd2013-06-19 12:32:23 +0100240 -n "$UBUNTU_INST_BRIDGE_OR_NET_NAME" \
Mate Lakat16ed0682013-08-30 13:28:31 +0100241 -l "$GUEST_NAME"
242
243 set_vm_memory "$GUEST_NAME" "$OSDOMU_MEM_MB"
244
245 xe vm-start vm="$GUEST_NAME"
John Garbuttdaadf742012-04-27 18:28:28 +0100246
247 # wait for install to finish
248 wait_for_VM_to_halt
249
250 # set VM to restart after a reboot
Renuka Apte0af143b2012-04-02 15:46:53 -0700251 vm_uuid=$(xe_min vm-list name-label="$GUEST_NAME")
252 xe vm-param-set actions-after-reboot=Restart uuid="$vm_uuid"
253
254 # Make template from VM
Mate Lakatc02b2f82013-07-30 19:43:10 +0100255 snuuid=$(xe vm-snapshot vm="$GUEST_NAME" new-name-label="$SNAME_TEMPLATE")
John Garbuttdaadf742012-04-27 18:28:28 +0100256 xe snapshot-clone uuid=$snuuid new-name-label="$TNAME"
257else
258 #
259 # Template already installed, create VM from template
260 #
261 vm_uuid=$(xe vm-install template="$TNAME" new-name-label="$GUEST_NAME")
Renuka Apte0af143b2012-04-02 15:46:53 -0700262fi
263
Mate Lakatc02b2f82013-07-30 19:43:10 +0100264#
265# Prepare VM for DevStack
266#
267
268# Install XenServer tools, and other such things
269$THIS_DIR/prepare_guest_template.sh "$GUEST_NAME"
270
Mate Lakat16ed0682013-08-30 13:28:31 +0100271# Set virtual machine parameters
272set_vm_memory "$GUEST_NAME" "$OSDOMU_MEM_MB"
273
Mate Lakat9f878cb2013-10-04 09:56:24 +0100274# Max out VCPU count for better performance
275max_vcpus "$GUEST_NAME"
276
Mate Lakat8787e0f2013-10-28 18:15:57 +0000277# Wipe out all network cards
278destroy_all_vifs_of "$GUEST_NAME"
279
280# Add only one interface to prepare the guest template
281add_interface "$GUEST_NAME" "$MGT_BRIDGE_OR_NET_NAME" "0"
282
Mate Lakatc02b2f82013-07-30 19:43:10 +0100283# start the VM to run the prepare steps
284xe vm-start vm="$GUEST_NAME"
285
286# Wait for prep script to finish and shutdown system
287wait_for_VM_to_halt
288
Mate Lakat5a56cd62013-06-17 13:54:43 +0100289## Setup network cards
290# Wipe out all
291destroy_all_vifs_of "$GUEST_NAME"
292# Tenant network
293add_interface "$GUEST_NAME" "$VM_BRIDGE_OR_NET_NAME" "$VM_DEV_NR"
294# Management network
295add_interface "$GUEST_NAME" "$MGT_BRIDGE_OR_NET_NAME" "$MGT_DEV_NR"
296# Public network
297add_interface "$GUEST_NAME" "$PUB_BRIDGE_OR_NET_NAME" "$PUB_DEV_NR"
John Garbuttdaadf742012-04-27 18:28:28 +0100298
299#
300# Inject DevStack inside VM disk
301#
Mate Lakata8bf0f22013-03-07 18:37:31 +0000302$THIS_DIR/build_xva.sh "$GUEST_NAME"
Renuka Apte0af143b2012-04-02 15:46:53 -0700303
Mate Lakatf652e0f2013-05-21 18:12:48 +0100304# Attach a network interface for the integration network (so that the bridge
Mark McClainb05c8762013-07-06 23:29:39 -0400305# is created by XenServer). This is required for Neutron. Also pass that as a
Mate Lakat8ff33ce2013-05-30 13:26:58 +0100306# kernel parameter for DomU
Mark McClainb05c8762013-07-06 23:29:39 -0400307if is_service_enabled neutron; then
Mate Lakatd8511032013-07-03 10:44:44 +0100308 attach_network "$XEN_INT_BRIDGE_OR_NET_NAME"
Mate Lakat8ff33ce2013-05-30 13:26:58 +0100309
310 XEN_INTEGRATION_BRIDGE=$(bridge_for "$XEN_INT_BRIDGE_OR_NET_NAME")
311 append_kernel_cmdline \
312 "$GUEST_NAME" \
313 "xen_integration_bridge=${XEN_INTEGRATION_BRIDGE}"
Mate Lakatf652e0f2013-05-21 18:12:48 +0100314fi
315
Mate Lakat2b8814d2013-09-25 17:07:06 +0100316FLAT_NETWORK_BRIDGE="${FLAT_NETWORK_BRIDGE:-$(bridge_for "$VM_BRIDGE_OR_NET_NAME")}"
Mate Lakat8ff33ce2013-05-30 13:26:58 +0100317append_kernel_cmdline "$GUEST_NAME" "flat_network_bridge=${FLAT_NETWORK_BRIDGE}"
318
Mate Lakat68ac03c2013-06-06 16:22:34 +0100319# Add a separate xvdb, if it was requested
320if [[ "0" != "$XEN_XVDB_SIZE_GB" ]]; then
321 vm=$(xe vm-list name-label="$GUEST_NAME" --minimal)
322
323 # Add a new disk
324 localsr=$(get_local_sr)
325 extra_vdi=$(xe vdi-create \
326 name-label=xvdb-added-by-devstack \
327 virtual-size="${XEN_XVDB_SIZE_GB}GiB" \
328 sr-uuid=$localsr type=user)
329 xe vbd-create vm-uuid=$vm vdi-uuid=$extra_vdi device=1
330fi
331
John Garbuttdaadf742012-04-27 18:28:28 +0100332# create a snapshot before the first boot
333# to allow a quick re-run with the same settings
334xe vm-snapshot vm="$GUEST_NAME" new-name-label="$SNAME_FIRST_BOOT"
335
John Garbuttdaadf742012-04-27 18:28:28 +0100336#
337# Run DevStack VM
338#
Renuka Apte0af143b2012-04-02 15:46:53 -0700339xe vm-start vm="$GUEST_NAME"
Anthony Young3eb8f592011-10-26 23:11:52 -0700340
John Garbuttdaadf742012-04-27 18:28:28 +0100341function ssh_no_check() {
342 ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no "$@"
343}
344
Mate Lakat86446762013-05-12 18:34:29 +0100345# Get hold of the Management IP of OpenStack VM
346OS_VM_MANAGEMENT_ADDRESS=$MGT_IP
347if [ $OS_VM_MANAGEMENT_ADDRESS == "dhcp" ]; then
Mate Lakat5a56cd62013-06-17 13:54:43 +0100348 OS_VM_MANAGEMENT_ADDRESS=$(find_ip_by_name $GUEST_NAME $MGT_DEV_NR)
Mate Lakat86446762013-05-12 18:34:29 +0100349fi
350
351# Get hold of the Service IP of OpenStack VM
Mate Lakat5a56cd62013-06-17 13:54:43 +0100352if [ $HOST_IP_IFACE == "eth${MGT_DEV_NR}" ]; then
Mate Lakat86446762013-05-12 18:34:29 +0100353 OS_VM_SERVICES_ADDRESS=$MGT_IP
John Garbuttdaadf742012-04-27 18:28:28 +0100354 if [ $MGT_IP == "dhcp" ]; then
Mate Lakat5a56cd62013-06-17 13:54:43 +0100355 OS_VM_SERVICES_ADDRESS=$(find_ip_by_name $GUEST_NAME $MGT_DEV_NR)
John Garbuttdaadf742012-04-27 18:28:28 +0100356 fi
357else
Mate Lakat86446762013-05-12 18:34:29 +0100358 OS_VM_SERVICES_ADDRESS=$PUB_IP
John Garbuttdaadf742012-04-27 18:28:28 +0100359 if [ $PUB_IP == "dhcp" ]; then
Mate Lakat5a56cd62013-06-17 13:54:43 +0100360 OS_VM_SERVICES_ADDRESS=$(find_ip_by_name $GUEST_NAME $PUB_DEV_NR)
John Garbuttdaadf742012-04-27 18:28:28 +0100361 fi
Renuka Aptec56885a2012-02-29 16:09:26 -0800362fi
363
Anthony Young1de18c62011-11-01 14:19:18 -0500364# If we have copied our ssh credentials, use ssh to monitor while the installation runs
365WAIT_TILL_LAUNCH=${WAIT_TILL_LAUNCH:-1}
John Garbuttdaadf742012-04-27 18:28:28 +0100366COPYENV=${COPYENV:-1}
Anthony Young1de18c62011-11-01 14:19:18 -0500367if [ "$WAIT_TILL_LAUNCH" = "1" ] && [ -e ~/.ssh/id_rsa.pub ] && [ "$COPYENV" = "1" ]; then
Bob Ball7fcc1572013-02-20 15:56:25 +0000368 set +x
Anthony Young1de18c62011-11-01 14:19:18 -0500369
Bob Ball7fcc1572013-02-20 15:56:25 +0000370 echo "VM Launched - Waiting for startup script"
John Garbuttdaadf742012-04-27 18:28:28 +0100371 # wait for log to appear
Mate Lakat86446762013-05-12 18:34:29 +0100372 while ! ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "[ -e run.sh.log ]"; do
John Garbuttdaadf742012-04-27 18:28:28 +0100373 sleep 10
Anthony Young1de18c62011-11-01 14:19:18 -0500374 done
Bob Ball7fcc1572013-02-20 15:56:25 +0000375 echo -n "Running"
Mate Lakat86446762013-05-12 18:34:29 +0100376 while [ `ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS pgrep -c run.sh` -ge 1 ]
Mate Lakat9efcf602012-12-19 10:23:06 +0000377 do
John Garbuttdaadf742012-04-27 18:28:28 +0100378 sleep 10
Mate Lakat9efcf602012-12-19 10:23:06 +0000379 echo -n "."
Anthony Young1de18c62011-11-01 14:19:18 -0500380 done
Mate Lakat9efcf602012-12-19 10:23:06 +0000381 echo "done!"
382 set -x
Anthony Young1de18c62011-11-01 14:19:18 -0500383
Mate Lakat9efcf602012-12-19 10:23:06 +0000384 # output the run.sh.log
Mate Lakat86446762013-05-12 18:34:29 +0100385 ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS 'cat run.sh.log'
Anthony Young1de18c62011-11-01 14:19:18 -0500386
Mate Lakat9efcf602012-12-19 10:23:06 +0000387 # Fail if the expected text is not found
Mate Lakat86446762013-05-12 18:34:29 +0100388 ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS 'cat run.sh.log' | grep -q 'stack.sh completed in'
Mate Lakat9efcf602012-12-19 10:23:06 +0000389
Bob Ball63c6c2b2013-01-24 13:13:51 +0000390 set +x
John Garbuttdaadf742012-04-27 18:28:28 +0100391 echo "################################################################################"
Anthony Young1de18c62011-11-01 14:19:18 -0500392 echo ""
John Garbuttdaadf742012-04-27 18:28:28 +0100393 echo "All Finished!"
394 echo "You can visit the OpenStack Dashboard"
Mate Lakat86446762013-05-12 18:34:29 +0100395 echo "at http://$OS_VM_SERVICES_ADDRESS, and contact other services at the usual ports."
Anthony Young1de18c62011-11-01 14:19:18 -0500396else
Bob Ball63c6c2b2013-01-24 13:13:51 +0000397 set +x
Anthony Young1de18c62011-11-01 14:19:18 -0500398 echo "################################################################################"
399 echo ""
400 echo "All Finished!"
401 echo "Now, you can monitor the progress of the stack.sh installation by "
402 echo "tailing /opt/stack/run.sh.log from within your domU."
403 echo ""
Mate Lakat86446762013-05-12 18:34:29 +0100404 echo "ssh into your domU now: 'ssh stack@$OS_VM_MANAGEMENT_ADDRESS' using your password"
Anthony Young1de18c62011-11-01 14:19:18 -0500405 echo "and then do: 'tail -f /opt/stack/run.sh.log'"
406 echo ""
407 echo "When the script completes, you can then visit the OpenStack Dashboard"
Mate Lakat86446762013-05-12 18:34:29 +0100408 echo "at http://$OS_VM_SERVICES_ADDRESS, and contact other services at the usual ports."
Anthony Young1de18c62011-11-01 14:19:18 -0500409fi