blob: 3a63473d40dde7faca11c8b4d72dec61e35d3567 [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
John Garbuttdaadf742012-04-27 18:28:28 +010025# Include onexit commands
Mate Lakata8bf0f22013-03-07 18:37:31 +000026. $THIS_DIR/scripts/on_exit.sh
John Garbuttdaadf742012-04-27 18:28:28 +010027
Mate Lakat57e3da92013-03-22 16:34:05 +000028# xapi functions
29. $THIS_DIR/functions
30
John Garbuttdaadf742012-04-27 18:28:28 +010031#
32# Get Settings
33#
34
Anthony Youngb3e2f332012-03-16 17:01:49 -070035# Source params - override xenrc params in your localrc to suit your taste
Mate Lakat0b3804b2013-05-07 16:58:17 +010036source $THIS_DIR/xenrc
Anthony Youngaf6ed6b2011-11-02 07:50:27 -050037
Renuka Apte0af143b2012-04-02 15:46:53 -070038xe_min()
39{
Sean Dague0b865a52013-10-22 11:37:35 -040040 local cmd="$1"
41 shift
42 xe "$cmd" --minimal "$@"
Renuka Apte0af143b2012-04-02 15:46:53 -070043}
Anthony Youngb62b4ca2011-10-26 22:29:08 -070044
John Garbuttdaadf742012-04-27 18:28:28 +010045#
46# Prepare Dom0
47# including installing XenAPI plugins
48#
49
Mate Lakata8bf0f22013-03-07 18:37:31 +000050cd $THIS_DIR
John Garbuttdaadf742012-04-27 18:28:28 +010051
Mate Lakatd8511032013-07-03 10:44:44 +010052# Die if multiple hosts listed
53if have_multiple_hosts; then
54 cat >&2 << EOF
55ERROR: multiple hosts found. This might mean that the XenServer is a member
56of a pool - Exiting.
57EOF
58 exit 1
59fi
60
John Garbuttdaadf742012-04-27 18:28:28 +010061#
62# Configure Networking
63#
Bob Ball78ef1f32013-09-29 11:36:28 +010064
65MGT_NETWORK=`xe pif-list management=true params=network-uuid minimal=true`
66MGT_BRIDGE_OR_NET_NAME=`xe network-list uuid=$MGT_NETWORK params=bridge minimal=true`
67
Mate Lakat9e326772013-05-08 16:42:22 +010068setup_network "$VM_BRIDGE_OR_NET_NAME"
69setup_network "$MGT_BRIDGE_OR_NET_NAME"
70setup_network "$PUB_BRIDGE_OR_NET_NAME"
Anthony Youngb62b4ca2011-10-26 22:29:08 -070071
Mark McClainb05c8762013-07-06 23:29:39 -040072# With neutron, one more network is required, which is internal to the
Mate Lakatf652e0f2013-05-21 18:12:48 +010073# hypervisor, and used by the VMs
Mate Lakat6df64892014-10-17 13:09:49 +020074setup_network "$XEN_INT_BRIDGE_OR_NET_NAME"
Mate Lakatf652e0f2013-05-21 18:12:48 +010075
Mate Lakat9e326772013-05-08 16:42:22 +010076if parameter_is_specified "FLAT_NETWORK_BRIDGE"; then
Mate Lakat2b8814d2013-09-25 17:07:06 +010077 if [ "$(bridge_for "$VM_BRIDGE_OR_NET_NAME")" != "$(bridge_for "$FLAT_NETWORK_BRIDGE")" ]; then
78 cat >&2 << EOF
79ERROR: FLAT_NETWORK_BRIDGE is specified in localrc file, and either no network
80found on XenServer by searching for networks by that value as name-label or
81bridge name or the network found does not match the network specified by
82VM_BRIDGE_OR_NET_NAME. Please check your localrc file.
Mate Lakat9e326772013-05-08 16:42:22 +010083EOF
Mate Lakat2b8814d2013-09-25 17:07:06 +010084 exit 1
85 fi
Anthony Youngb62b4ca2011-10-26 22:29:08 -070086fi
87
Mate Lakat9e326772013-05-08 16:42:22 +010088if ! xenapi_is_listening_on "$MGT_BRIDGE_OR_NET_NAME"; then
89 cat >&2 << EOF
90ERROR: XenAPI does not have an assigned IP address on the management network.
91please review your XenServer network configuration / localrc file.
92EOF
93 exit 1
94fi
95
96HOST_IP=$(xenapi_ip_on "$MGT_BRIDGE_OR_NET_NAME")
John Garbuttdaadf742012-04-27 18:28:28 +010097
98# Set up ip forwarding, but skip on xcp-xapi
John Garbuttd8f1a872012-06-26 11:16:38 +010099if [ -a /etc/sysconfig/network ]; then
John Garbuttdaadf742012-04-27 18:28:28 +0100100 if ! grep -q "FORWARD_IPV4=YES" /etc/sysconfig/network; then
Sean Dague0b865a52013-10-22 11:37:35 -0400101 # FIXME: This doesn't work on reboot!
102 echo "FORWARD_IPV4=YES" >> /etc/sysconfig/network
John Garbuttdaadf742012-04-27 18:28:28 +0100103 fi
104fi
Anthony Youngb62b4ca2011-10-26 22:29:08 -0700105# Also, enable ip forwarding in rc.local, since the above trick isn't working
106if ! grep -q "echo 1 >/proc/sys/net/ipv4/ip_forward" /etc/rc.local; then
107 echo "echo 1 >/proc/sys/net/ipv4/ip_forward" >> /etc/rc.local
108fi
Anthony Youngb62b4ca2011-10-26 22:29:08 -0700109# Enable ip forwarding at runtime as well
110echo 1 > /proc/sys/net/ipv4/ip_forward
111
John Garbuttdaadf742012-04-27 18:28:28 +0100112
113#
Anthony Young346e4912011-11-05 00:22:47 -0500114# Shutdown previous runs
John Garbuttdaadf742012-04-27 18:28:28 +0100115#
116
Anthony Young346e4912011-11-05 00:22:47 -0500117DO_SHUTDOWN=${DO_SHUTDOWN:-1}
John Garbuttdaadf742012-04-27 18:28:28 +0100118CLEAN_TEMPLATES=${CLEAN_TEMPLATES:-false}
Anthony Young346e4912011-11-05 00:22:47 -0500119if [ "$DO_SHUTDOWN" = "1" ]; then
Anthony Young40b57372011-11-05 00:30:07 -0500120 # Shutdown all domU's that created previously
John Garbuttdaadf742012-04-27 18:28:28 +0100121 clean_templates_arg=""
122 if $CLEAN_TEMPLATES; then
123 clean_templates_arg="--remove-templates"
124 fi
125 ./scripts/uninstall-os-vpx.sh $clean_templates_arg
Anthony Young346e4912011-11-05 00:22:47 -0500126
127 # Destroy any instances that were launched
128 for uuid in `xe vm-list | grep -1 instance | grep uuid | sed "s/.*\: //g"`; do
129 echo "Shutting down nova instance $uuid"
Mate Lakat0d97cbe2013-07-29 09:41:50 +0100130 xe vm-uninstall uuid=$uuid force=true
Anthony Young346e4912011-11-05 00:22:47 -0500131 done
Anthony Youngfa4ecc62011-11-11 10:23:22 -0800132
133 # Destroy orphaned vdis
134 for uuid in `xe vdi-list | grep -1 Glance | grep uuid | sed "s/.*\: //g"`; do
135 xe vdi-destroy uuid=$uuid
136 done
Anthony Young346e4912011-11-05 00:22:47 -0500137fi
Anthony Youngb62b4ca2011-10-26 22:29:08 -0700138
Renuka Apte0af143b2012-04-02 15:46:53 -0700139
John Garbuttdaadf742012-04-27 18:28:28 +0100140#
141# Create Ubuntu VM template
142# and/or create VM from template
143#
Renuka Apte0af143b2012-04-02 15:46:53 -0700144
John Garbuttdaadf742012-04-27 18:28:28 +0100145GUEST_NAME=${GUEST_NAME:-"DevStackOSDomU"}
Mate Lakatc02b2f82013-07-30 19:43:10 +0100146TNAME="jeos_template_for_devstack"
147SNAME_TEMPLATE="jeos_snapshot_for_devstack"
John Garbuttdaadf742012-04-27 18:28:28 +0100148SNAME_FIRST_BOOT="before_first_boot"
149
Ian Wienandaee18c72014-02-21 15:35:08 +1100150function wait_for_VM_to_halt {
Bob Ball63c6c2b2013-01-24 13:13:51 +0000151 set +x
152 echo "Waiting for the VM to halt. Progress in-VM can be checked with vncviewer:"
153 mgmt_ip=$(echo $XENAPI_CONNECTION_URL | tr -d -c '1234567890.')
Mate Lakatd15c8a02014-02-04 12:38:14 +0000154 domid=$(get_domid "$GUEST_NAME")
Bob Ball6a95b602014-09-17 12:39:50 +0100155 sleep 20 # Wait for the vnc-port to be written
Bob Ball63c6c2b2013-01-24 13:13:51 +0000156 port=$(xenstore-read /local/domain/$domid/console/vnc-port)
Mate Lakat97621a12013-08-30 13:12:17 +0100157 echo "vncviewer -via root@$mgmt_ip localhost:${port:2}"
Chmouel Boudjnah86a8e972014-02-04 15:20:15 +0100158 while true; do
Renuka Apte0af143b2012-04-02 15:46:53 -0700159 state=$(xe_min vm-list name-label="$GUEST_NAME" power-state=halted)
Sean Dague16dd8b32014-02-03 09:10:54 +0900160 if [ -n "$state" ]; then
Renuka Apte0af143b2012-04-02 15:46:53 -0700161 break
162 else
Bob Ball63c6c2b2013-01-24 13:13:51 +0000163 echo -n "."
John Garbuttdaadf742012-04-27 18:28:28 +0100164 sleep 20
Renuka Apte0af143b2012-04-02 15:46:53 -0700165 fi
166 done
Bob Ball63c6c2b2013-01-24 13:13:51 +0000167 set -x
John Garbuttdaadf742012-04-27 18:28:28 +0100168}
Renuka Apte0af143b2012-04-02 15:46:53 -0700169
John Garbuttdaadf742012-04-27 18:28:28 +0100170templateuuid=$(xe template-list name-label="$TNAME")
171if [ -z "$templateuuid" ]; then
172 #
173 # Install Ubuntu over network
174 #
Bob Ball78ef1f32013-09-29 11:36:28 +0100175 UBUNTU_INST_BRIDGE_OR_NET_NAME=${UBUNTU_INST_BRIDGE_OR_NET_NAME:-"$MGT_BRIDGE_OR_NET_NAME"}
John Garbuttdaadf742012-04-27 18:28:28 +0100176
John Garbuttdaadf742012-04-27 18:28:28 +0100177 # always update the preseed file, incase we have a newer one
178 PRESEED_URL=${PRESEED_URL:-""}
179 if [ -z "$PRESEED_URL" ]; then
180 PRESEED_URL="${HOST_IP}/devstackubuntupreseed.cfg"
181 HTTP_SERVER_LOCATION="/opt/xensource/www"
182 if [ ! -e $HTTP_SERVER_LOCATION ]; then
183 HTTP_SERVER_LOCATION="/var/www/html"
184 mkdir -p $HTTP_SERVER_LOCATION
185 fi
Mate Lakata8bf0f22013-03-07 18:37:31 +0000186 cp -f $THIS_DIR/devstackubuntupreseed.cfg $HTTP_SERVER_LOCATION
Mate Lakatd3740f72013-05-09 15:02:21 +0100187
188 sed \
189 -e "s,\(d-i mirror/http/hostname string\).*,\1 $UBUNTU_INST_HTTP_HOSTNAME,g" \
190 -e "s,\(d-i mirror/http/directory string\).*,\1 $UBUNTU_INST_HTTP_DIRECTORY,g" \
191 -e "s,\(d-i mirror/http/proxy string\).*,\1 $UBUNTU_INST_HTTP_PROXY,g" \
Bob Ball105eaee2014-07-14 15:21:07 +0100192 -e "s,\(d-i passwd/root-password password\).*,\1 $GUEST_PASSWORD,g" \
193 -e "s,\(d-i passwd/root-password-again password\).*,\1 $GUEST_PASSWORD,g" \
Mate Lakatd3740f72013-05-09 15:02:21 +0100194 -i "${HTTP_SERVER_LOCATION}/devstackubuntupreseed.cfg"
John Garbuttdaadf742012-04-27 18:28:28 +0100195 fi
196
John Garbuttd8f1a872012-06-26 11:16:38 +0100197 # Update the template
Mate Lakata8bf0f22013-03-07 18:37:31 +0000198 $THIS_DIR/scripts/install_ubuntu_template.sh $PRESEED_URL
John Garbuttdaadf742012-04-27 18:28:28 +0100199
Mate Lakat2f524bd2013-06-19 12:32:23 +0100200 # create a new VM from the given template with eth0 attached to the given
201 # network
Mate Lakat9e326772013-05-08 16:42:22 +0100202 $THIS_DIR/scripts/install-os-vpx.sh \
203 -t "$UBUNTU_INST_TEMPLATE_NAME" \
Mate Lakat2f524bd2013-06-19 12:32:23 +0100204 -n "$UBUNTU_INST_BRIDGE_OR_NET_NAME" \
Mate Lakat16ed0682013-08-30 13:28:31 +0100205 -l "$GUEST_NAME"
206
207 set_vm_memory "$GUEST_NAME" "$OSDOMU_MEM_MB"
208
209 xe vm-start vm="$GUEST_NAME"
John Garbuttdaadf742012-04-27 18:28:28 +0100210
211 # wait for install to finish
212 wait_for_VM_to_halt
213
214 # set VM to restart after a reboot
Renuka Apte0af143b2012-04-02 15:46:53 -0700215 vm_uuid=$(xe_min vm-list name-label="$GUEST_NAME")
216 xe vm-param-set actions-after-reboot=Restart uuid="$vm_uuid"
217
218 # Make template from VM
Mate Lakatc02b2f82013-07-30 19:43:10 +0100219 snuuid=$(xe vm-snapshot vm="$GUEST_NAME" new-name-label="$SNAME_TEMPLATE")
John Garbuttdaadf742012-04-27 18:28:28 +0100220 xe snapshot-clone uuid=$snuuid new-name-label="$TNAME"
221else
222 #
223 # Template already installed, create VM from template
224 #
225 vm_uuid=$(xe vm-install template="$TNAME" new-name-label="$GUEST_NAME")
Renuka Apte0af143b2012-04-02 15:46:53 -0700226fi
227
Mate Lakat2a324dd2014-10-15 17:40:41 +0200228if [ -n "${EXIT_AFTER_JEOS_INSTALLATION:-}" ]; then
229 echo "User requested to quit after JEOS instalation"
230 exit 0
231fi
232
Mate Lakatc02b2f82013-07-30 19:43:10 +0100233#
234# Prepare VM for DevStack
235#
236
237# Install XenServer tools, and other such things
238$THIS_DIR/prepare_guest_template.sh "$GUEST_NAME"
239
Mate Lakat16ed0682013-08-30 13:28:31 +0100240# Set virtual machine parameters
241set_vm_memory "$GUEST_NAME" "$OSDOMU_MEM_MB"
242
Mate Lakat9f878cb2013-10-04 09:56:24 +0100243# Max out VCPU count for better performance
244max_vcpus "$GUEST_NAME"
245
Mate Lakat8787e0f2013-10-28 18:15:57 +0000246# Wipe out all network cards
247destroy_all_vifs_of "$GUEST_NAME"
248
249# Add only one interface to prepare the guest template
250add_interface "$GUEST_NAME" "$MGT_BRIDGE_OR_NET_NAME" "0"
251
Mate Lakatc02b2f82013-07-30 19:43:10 +0100252# start the VM to run the prepare steps
253xe vm-start vm="$GUEST_NAME"
254
255# Wait for prep script to finish and shutdown system
256wait_for_VM_to_halt
257
Mate Lakat5a56cd62013-06-17 13:54:43 +0100258## Setup network cards
259# Wipe out all
260destroy_all_vifs_of "$GUEST_NAME"
261# Tenant network
262add_interface "$GUEST_NAME" "$VM_BRIDGE_OR_NET_NAME" "$VM_DEV_NR"
263# Management network
264add_interface "$GUEST_NAME" "$MGT_BRIDGE_OR_NET_NAME" "$MGT_DEV_NR"
265# Public network
266add_interface "$GUEST_NAME" "$PUB_BRIDGE_OR_NET_NAME" "$PUB_DEV_NR"
John Garbuttdaadf742012-04-27 18:28:28 +0100267
268#
269# Inject DevStack inside VM disk
270#
Mate Lakata8bf0f22013-03-07 18:37:31 +0000271$THIS_DIR/build_xva.sh "$GUEST_NAME"
Renuka Apte0af143b2012-04-02 15:46:53 -0700272
Mate Lakatf652e0f2013-05-21 18:12:48 +0100273# Attach a network interface for the integration network (so that the bridge
Mark McClainb05c8762013-07-06 23:29:39 -0400274# is created by XenServer). This is required for Neutron. Also pass that as a
Mate Lakat8ff33ce2013-05-30 13:26:58 +0100275# kernel parameter for DomU
Mate Lakat6df64892014-10-17 13:09:49 +0200276attach_network "$XEN_INT_BRIDGE_OR_NET_NAME"
Mate Lakat8ff33ce2013-05-30 13:26:58 +0100277
Mate Lakat6df64892014-10-17 13:09:49 +0200278XEN_INTEGRATION_BRIDGE=$(bridge_for "$XEN_INT_BRIDGE_OR_NET_NAME")
279append_kernel_cmdline \
280 "$GUEST_NAME" \
281 "xen_integration_bridge=${XEN_INTEGRATION_BRIDGE}"
Mate Lakatf652e0f2013-05-21 18:12:48 +0100282
Mate Lakat2b8814d2013-09-25 17:07:06 +0100283FLAT_NETWORK_BRIDGE="${FLAT_NETWORK_BRIDGE:-$(bridge_for "$VM_BRIDGE_OR_NET_NAME")}"
Mate Lakat8ff33ce2013-05-30 13:26:58 +0100284append_kernel_cmdline "$GUEST_NAME" "flat_network_bridge=${FLAT_NETWORK_BRIDGE}"
285
Mate Lakat68ac03c2013-06-06 16:22:34 +0100286# Add a separate xvdb, if it was requested
287if [[ "0" != "$XEN_XVDB_SIZE_GB" ]]; then
288 vm=$(xe vm-list name-label="$GUEST_NAME" --minimal)
289
290 # Add a new disk
291 localsr=$(get_local_sr)
292 extra_vdi=$(xe vdi-create \
293 name-label=xvdb-added-by-devstack \
294 virtual-size="${XEN_XVDB_SIZE_GB}GiB" \
295 sr-uuid=$localsr type=user)
296 xe vbd-create vm-uuid=$vm vdi-uuid=$extra_vdi device=1
297fi
298
John Garbuttdaadf742012-04-27 18:28:28 +0100299# create a snapshot before the first boot
300# to allow a quick re-run with the same settings
301xe vm-snapshot vm="$GUEST_NAME" new-name-label="$SNAME_FIRST_BOOT"
302
John Garbuttdaadf742012-04-27 18:28:28 +0100303#
304# Run DevStack VM
305#
Renuka Apte0af143b2012-04-02 15:46:53 -0700306xe vm-start vm="$GUEST_NAME"
Anthony Young3eb8f592011-10-26 23:11:52 -0700307
Ian Wienandaee18c72014-02-21 15:35:08 +1100308function ssh_no_check {
John Garbuttdaadf742012-04-27 18:28:28 +0100309 ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no "$@"
310}
311
Mate Lakat86446762013-05-12 18:34:29 +0100312# Get hold of the Management IP of OpenStack VM
313OS_VM_MANAGEMENT_ADDRESS=$MGT_IP
314if [ $OS_VM_MANAGEMENT_ADDRESS == "dhcp" ]; then
Mate Lakat5a56cd62013-06-17 13:54:43 +0100315 OS_VM_MANAGEMENT_ADDRESS=$(find_ip_by_name $GUEST_NAME $MGT_DEV_NR)
Mate Lakat86446762013-05-12 18:34:29 +0100316fi
317
318# Get hold of the Service IP of OpenStack VM
Mate Lakat5a56cd62013-06-17 13:54:43 +0100319if [ $HOST_IP_IFACE == "eth${MGT_DEV_NR}" ]; then
Mate Lakat86446762013-05-12 18:34:29 +0100320 OS_VM_SERVICES_ADDRESS=$MGT_IP
John Garbuttdaadf742012-04-27 18:28:28 +0100321 if [ $MGT_IP == "dhcp" ]; then
Mate Lakat5a56cd62013-06-17 13:54:43 +0100322 OS_VM_SERVICES_ADDRESS=$(find_ip_by_name $GUEST_NAME $MGT_DEV_NR)
John Garbuttdaadf742012-04-27 18:28:28 +0100323 fi
324else
Mate Lakat86446762013-05-12 18:34:29 +0100325 OS_VM_SERVICES_ADDRESS=$PUB_IP
John Garbuttdaadf742012-04-27 18:28:28 +0100326 if [ $PUB_IP == "dhcp" ]; then
Mate Lakat5a56cd62013-06-17 13:54:43 +0100327 OS_VM_SERVICES_ADDRESS=$(find_ip_by_name $GUEST_NAME $PUB_DEV_NR)
John Garbuttdaadf742012-04-27 18:28:28 +0100328 fi
Renuka Aptec56885a2012-02-29 16:09:26 -0800329fi
330
Mate Lakatd15c8a02014-02-04 12:38:14 +0000331# Create an ssh-keypair, and set it up for dom0 user
332rm -f /root/dom0key /root/dom0key.pub
333ssh-keygen -f /root/dom0key -P "" -C "dom0"
334DOMID=$(get_domid "$GUEST_NAME")
335
336xenstore-write /local/domain/$DOMID/authorized_keys/$DOMZERO_USER "$(cat /root/dom0key.pub)"
337xenstore-chmod -u /local/domain/$DOMID/authorized_keys/$DOMZERO_USER r$DOMID
338
Ian Wienandaee18c72014-02-21 15:35:08 +1100339function run_on_appliance {
Mate Lakatd15c8a02014-02-04 12:38:14 +0000340 ssh \
341 -i /root/dom0key \
342 -o UserKnownHostsFile=/dev/null \
343 -o StrictHostKeyChecking=no \
344 -o BatchMode=yes \
345 "$DOMZERO_USER@$OS_VM_MANAGEMENT_ADDRESS" "$@"
346}
347
348# Wait until we can log in to the appliance
349while ! run_on_appliance true; do
350 sleep 1
351done
352
353# Remove authenticated_keys updater cronjob
354echo "" | run_on_appliance crontab -
355
356# Generate a passwordless ssh key for domzero user
357echo "ssh-keygen -f /home/$DOMZERO_USER/.ssh/id_rsa -C $DOMZERO_USER@appliance -N \"\" -q" | run_on_appliance
358
359# Authenticate that user to dom0
360run_on_appliance cat /home/$DOMZERO_USER/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
361
Anthony Young1de18c62011-11-01 14:19:18 -0500362# If we have copied our ssh credentials, use ssh to monitor while the installation runs
363WAIT_TILL_LAUNCH=${WAIT_TILL_LAUNCH:-1}
John Garbuttdaadf742012-04-27 18:28:28 +0100364COPYENV=${COPYENV:-1}
Anthony Young1de18c62011-11-01 14:19:18 -0500365if [ "$WAIT_TILL_LAUNCH" = "1" ] && [ -e ~/.ssh/id_rsa.pub ] && [ "$COPYENV" = "1" ]; then
Bob Ball7fcc1572013-02-20 15:56:25 +0000366 set +x
Anthony Young1de18c62011-11-01 14:19:18 -0500367
Mate Lakat93f3b862013-09-24 17:35:00 +0100368 echo "VM Launched - Waiting for devstack to start"
369 while ! ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "service devstack status | grep -q running"; do
John Garbuttdaadf742012-04-27 18:28:28 +0100370 sleep 10
Anthony Young1de18c62011-11-01 14:19:18 -0500371 done
Bob Balld6b43a02014-07-14 15:18:33 +0100372 echo -n "devstack service is running, waiting for stack.sh to start logging..."
373
374 while ! ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "test -e /tmp/devstack/log/stack.log"; do
375 sleep 10
376 done
Mate Lakat9efcf602012-12-19 10:23:06 +0000377 set -x
Anthony Young1de18c62011-11-01 14:19:18 -0500378
Bob Balld6b43a02014-07-14 15:18:33 +0100379 # Watch devstack's output (which doesn't start until stack.sh is running,
380 # but wait for run.sh (which starts stack.sh) to exit as that is what
Davanum Srinivas690e3c22014-10-05 20:06:33 -0400381 # hopefully writes the succeeded cookie.
Bob Balldc7ebbb2014-06-24 13:59:49 +0100382 pid=`ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS pgrep run.sh`
383 ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "tail --pid $pid -n +1 -f /tmp/devstack/log/stack.log"
384
Mate Lakat93f3b862013-09-24 17:35:00 +0100385 # Fail if devstack did not succeed
386 ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS 'test -e /var/run/devstack.succeeded'
Mate Lakat9efcf602012-12-19 10:23:06 +0000387
Bob Ball63c6c2b2013-01-24 13:13:51 +0000388 set +x
John Garbuttdaadf742012-04-27 18:28:28 +0100389 echo "################################################################################"
Anthony Young1de18c62011-11-01 14:19:18 -0500390 echo ""
John Garbuttdaadf742012-04-27 18:28:28 +0100391 echo "All Finished!"
392 echo "You can visit the OpenStack Dashboard"
Mate Lakat86446762013-05-12 18:34:29 +0100393 echo "at http://$OS_VM_SERVICES_ADDRESS, and contact other services at the usual ports."
Anthony Young1de18c62011-11-01 14:19:18 -0500394else
Bob Ball63c6c2b2013-01-24 13:13:51 +0000395 set +x
Anthony Young1de18c62011-11-01 14:19:18 -0500396 echo "################################################################################"
397 echo ""
398 echo "All Finished!"
399 echo "Now, you can monitor the progress of the stack.sh installation by "
Mate Lakat93f3b862013-09-24 17:35:00 +0100400 echo "looking at the console of your domU / checking the log files."
Anthony Young1de18c62011-11-01 14:19:18 -0500401 echo ""
Mate Lakat86446762013-05-12 18:34:29 +0100402 echo "ssh into your domU now: 'ssh stack@$OS_VM_MANAGEMENT_ADDRESS' using your password"
Mate Lakat93f3b862013-09-24 17:35:00 +0100403 echo "and then do: 'sudo service devstack status' to check if devstack is still running."
404 echo "Check that /var/run/devstack.succeeded exists"
Anthony Young1de18c62011-11-01 14:19:18 -0500405 echo ""
Mate Lakat93f3b862013-09-24 17:35:00 +0100406 echo "When devstack completes, you can visit the OpenStack Dashboard"
Mate Lakat86446762013-05-12 18:34:29 +0100407 echo "at http://$OS_VM_SERVICES_ADDRESS, and contact other services at the usual ports."
Anthony Young1de18c62011-11-01 14:19:18 -0500408fi