blob: 0d5e31eebd96b988a47f24c413bbc0352bc2f634 [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
Anthony Youngb62b4ca2011-10-26 22:29:08 -070013# Abort if localrc is not set
14if [ ! -e ../../localrc ]; then
15 echo "You must have a localrc with ALL necessary passwords defined before proceeding."
16 echo "See the xen README for required passwords."
17 exit 1
18fi
19
Anthony Youngaf6ed6b2011-11-02 07:50:27 -050020# This directory
Mate Lakata8bf0f22013-03-07 18:37:31 +000021THIS_DIR=$(cd $(dirname "$0") && pwd)
Anthony Youngaf6ed6b2011-11-02 07:50:27 -050022
Anthony Youngb3e2f332012-03-16 17:01:49 -070023# Source lower level functions
Mate Lakata8bf0f22013-03-07 18:37:31 +000024. $THIS_DIR/../../functions
Anthony Youngb3e2f332012-03-16 17:01:49 -070025
John Garbuttdaadf742012-04-27 18:28:28 +010026# Include onexit commands
Mate Lakata8bf0f22013-03-07 18:37:31 +000027. $THIS_DIR/scripts/on_exit.sh
John Garbuttdaadf742012-04-27 18:28:28 +010028
Mate Lakat57e3da92013-03-22 16:34:05 +000029# xapi functions
30. $THIS_DIR/functions
31
John Garbuttdaadf742012-04-27 18:28:28 +010032#
33# Get Settings
34#
35
Anthony Youngb3e2f332012-03-16 17:01:49 -070036# Source params - override xenrc params in your localrc to suit your taste
Mate Lakat0b3804b2013-05-07 16:58:17 +010037source $THIS_DIR/xenrc
Anthony Youngaf6ed6b2011-11-02 07:50:27 -050038
Renuka Apte0af143b2012-04-02 15:46:53 -070039xe_min()
40{
41 local cmd="$1"
42 shift
43 xe "$cmd" --minimal "$@"
44}
Anthony Youngb62b4ca2011-10-26 22:29:08 -070045
John Garbuttdaadf742012-04-27 18:28:28 +010046#
47# Prepare Dom0
48# including installing XenAPI plugins
49#
50
Mate Lakata8bf0f22013-03-07 18:37:31 +000051cd $THIS_DIR
John Garbuttdaadf742012-04-27 18:28:28 +010052
Mate Lakat57e3da92013-03-22 16:34:05 +000053# Install plugins
John Garbuttdaadf742012-04-27 18:28:28 +010054
Mate Lakat57e3da92013-03-22 16:34:05 +000055## Nova plugins
56NOVA_ZIPBALL_URL=${NOVA_ZIPBALL_URL:-$(zip_snapshot_location $NOVA_REPO $NOVA_BRANCH)}
57install_xapi_plugins_from_zipball $NOVA_ZIPBALL_URL
Maru Newby2298ca42012-10-25 23:46:42 +000058
Mate Lakat57e3da92013-03-22 16:34:05 +000059## Install the netwrap xapi plugin to support agent control of dom0 networking
Maru Newby2298ca42012-10-25 23:46:42 +000060if [[ "$ENABLED_SERVICES" =~ "q-agt" && "$Q_PLUGIN" = "openvswitch" ]]; then
Mate Lakat57e3da92013-03-22 16:34:05 +000061 QUANTUM_ZIPBALL_URL=${QUANTUM_ZIPBALL_URL:-$(zip_snapshot_location $QUANTUM_REPO $QUANTUM_BRANCH)}
62 install_xapi_plugins_from_zipball $QUANTUM_ZIPBALL_URL
Maru Newby2298ca42012-10-25 23:46:42 +000063fi
64
Mate Lakat57e3da92013-03-22 16:34:05 +000065create_directory_for_kernels
John Garbuttdaadf742012-04-27 18:28:28 +010066
67#
68# Configure Networking
69#
Anthony Youngb62b4ca2011-10-26 22:29:08 -070070
71# Helper to create networks
rootb1153412012-01-19 13:28:21 -080072# Uses echo trickery to return network uuid
Anthony Youngb62b4ca2011-10-26 22:29:08 -070073function create_network() {
rootb1153412012-01-19 13:28:21 -080074 br=$1
75 dev=$2
76 vlan=$3
77 netname=$4
78 if [ -z $br ]
79 then
Renuka Apte0af143b2012-04-02 15:46:53 -070080 pif=$(xe_min pif-list device=$dev VLAN=$vlan)
rootb1153412012-01-19 13:28:21 -080081 if [ -z $pif ]
82 then
83 net=$(xe network-create name-label=$netname)
84 else
Renuka Apte0af143b2012-04-02 15:46:53 -070085 net=$(xe_min network-list PIF-uuids=$pif)
rootb1153412012-01-19 13:28:21 -080086 fi
87 echo $net
88 return 0
89 fi
Renuka Apte0af143b2012-04-02 15:46:53 -070090 if [ ! $(xe_min network-list params=bridge | grep -w --only-matching $br) ]
rootb1153412012-01-19 13:28:21 -080091 then
92 echo "Specified bridge $br does not exist"
93 echo "If you wish to use defaults, please keep the bridge name empty"
94 exit 1
95 else
Renuka Apte0af143b2012-04-02 15:46:53 -070096 net=$(xe_min network-list bridge=$br)
rootb1153412012-01-19 13:28:21 -080097 echo $net
98 fi
99}
100
101function errorcheck() {
102 rc=$?
103 if [ $rc -ne 0 ]
104 then
105 exit $rc
Anthony Youngb62b4ca2011-10-26 22:29:08 -0700106 fi
107}
108
John Garbuttdaadf742012-04-27 18:28:28 +0100109# Create host, vm, mgmt, pub networks on XenServer
rootb1153412012-01-19 13:28:21 -0800110VM_NET=$(create_network "$VM_BR" "$VM_DEV" "$VM_VLAN" "vmbr")
111errorcheck
112MGT_NET=$(create_network "$MGT_BR" "$MGT_DEV" "$MGT_VLAN" "mgtbr")
113errorcheck
114PUB_NET=$(create_network "$PUB_BR" "$PUB_DEV" "$PUB_VLAN" "pubbr")
115errorcheck
Anthony Youngb62b4ca2011-10-26 22:29:08 -0700116
117# Helper to create vlans
118function create_vlan() {
rootb1153412012-01-19 13:28:21 -0800119 dev=$1
Anthony Youngb62b4ca2011-10-26 22:29:08 -0700120 vlan=$2
121 net=$3
rootb1153412012-01-19 13:28:21 -0800122 # VLAN -1 refers to no VLAN (physical network)
123 if [ $vlan -eq -1 ]
124 then
125 return
126 fi
Renuka Apte0af143b2012-04-02 15:46:53 -0700127 if [ -z $(xe_min vlan-list tag=$vlan) ]
rootb1153412012-01-19 13:28:21 -0800128 then
Renuka Apte0af143b2012-04-02 15:46:53 -0700129 pif=$(xe_min pif-list network-uuid=$net)
rootb1153412012-01-19 13:28:21 -0800130 # We created a brand new network this time
131 if [ -z $pif ]
132 then
Renuka Apte0af143b2012-04-02 15:46:53 -0700133 pif=$(xe_min pif-list device=$dev VLAN=-1)
rootb1153412012-01-19 13:28:21 -0800134 xe vlan-create pif-uuid=$pif vlan=$vlan network-uuid=$net
135 else
136 echo "VLAN does not exist but PIF attached to this network"
137 echo "How did we reach here?"
138 exit 1
139 fi
Anthony Youngb62b4ca2011-10-26 22:29:08 -0700140 fi
141}
142
143# Create vlans for vm and management
rootb1153412012-01-19 13:28:21 -0800144create_vlan $PUB_DEV $PUB_VLAN $PUB_NET
145create_vlan $VM_DEV $VM_VLAN $VM_NET
146create_vlan $MGT_DEV $MGT_VLAN $MGT_NET
Anthony Youngb62b4ca2011-10-26 22:29:08 -0700147
John Garbuttdaadf742012-04-27 18:28:28 +0100148# Get final bridge names
149if [ -z $VM_BR ]; then
150 VM_BR=$(xe_min network-list uuid=$VM_NET params=bridge)
151fi
152if [ -z $MGT_BR ]; then
153 MGT_BR=$(xe_min network-list uuid=$MGT_NET params=bridge)
154fi
155if [ -z $PUB_BR ]; then
156 PUB_BR=$(xe_min network-list uuid=$PUB_NET params=bridge)
Anthony Youngb62b4ca2011-10-26 22:29:08 -0700157fi
158
John Garbuttdaadf742012-04-27 18:28:28 +0100159# dom0 ip, XenAPI is assumed to be listening
160HOST_IP=${HOST_IP:-`ifconfig xenbr0 | grep "inet addr" | cut -d ":" -f2 | sed "s/ .*//"`}
161
162# Set up ip forwarding, but skip on xcp-xapi
John Garbuttd8f1a872012-06-26 11:16:38 +0100163if [ -a /etc/sysconfig/network ]; then
John Garbuttdaadf742012-04-27 18:28:28 +0100164 if ! grep -q "FORWARD_IPV4=YES" /etc/sysconfig/network; then
165 # FIXME: This doesn't work on reboot!
166 echo "FORWARD_IPV4=YES" >> /etc/sysconfig/network
167 fi
168fi
Anthony Youngb62b4ca2011-10-26 22:29:08 -0700169# Also, enable ip forwarding in rc.local, since the above trick isn't working
170if ! grep -q "echo 1 >/proc/sys/net/ipv4/ip_forward" /etc/rc.local; then
171 echo "echo 1 >/proc/sys/net/ipv4/ip_forward" >> /etc/rc.local
172fi
Anthony Youngb62b4ca2011-10-26 22:29:08 -0700173# Enable ip forwarding at runtime as well
174echo 1 > /proc/sys/net/ipv4/ip_forward
175
John Garbuttdaadf742012-04-27 18:28:28 +0100176
177#
Anthony Young346e4912011-11-05 00:22:47 -0500178# Shutdown previous runs
John Garbuttdaadf742012-04-27 18:28:28 +0100179#
180
Anthony Young346e4912011-11-05 00:22:47 -0500181DO_SHUTDOWN=${DO_SHUTDOWN:-1}
John Garbuttdaadf742012-04-27 18:28:28 +0100182CLEAN_TEMPLATES=${CLEAN_TEMPLATES:-false}
Anthony Young346e4912011-11-05 00:22:47 -0500183if [ "$DO_SHUTDOWN" = "1" ]; then
Anthony Young40b57372011-11-05 00:30:07 -0500184 # Shutdown all domU's that created previously
John Garbuttdaadf742012-04-27 18:28:28 +0100185 clean_templates_arg=""
186 if $CLEAN_TEMPLATES; then
187 clean_templates_arg="--remove-templates"
188 fi
189 ./scripts/uninstall-os-vpx.sh $clean_templates_arg
Anthony Young346e4912011-11-05 00:22:47 -0500190
191 # Destroy any instances that were launched
192 for uuid in `xe vm-list | grep -1 instance | grep uuid | sed "s/.*\: //g"`; do
193 echo "Shutting down nova instance $uuid"
194 xe vm-unpause uuid=$uuid || true
Armando Migliaccio7a5f7f22012-04-20 22:58:00 +0100195 xe vm-shutdown uuid=$uuid || true
Anthony Young346e4912011-11-05 00:22:47 -0500196 xe vm-destroy uuid=$uuid
197 done
Anthony Youngfa4ecc62011-11-11 10:23:22 -0800198
199 # Destroy orphaned vdis
200 for uuid in `xe vdi-list | grep -1 Glance | grep uuid | sed "s/.*\: //g"`; do
201 xe vdi-destroy uuid=$uuid
202 done
Anthony Young346e4912011-11-05 00:22:47 -0500203fi
Anthony Youngb62b4ca2011-10-26 22:29:08 -0700204
Renuka Apte0af143b2012-04-02 15:46:53 -0700205
John Garbuttdaadf742012-04-27 18:28:28 +0100206#
207# Create Ubuntu VM template
208# and/or create VM from template
209#
Renuka Apte0af143b2012-04-02 15:46:53 -0700210
John Garbuttdaadf742012-04-27 18:28:28 +0100211GUEST_NAME=${GUEST_NAME:-"DevStackOSDomU"}
John Garbuttd8f1a872012-06-26 11:16:38 +0100212TNAME="devstack_template"
John Garbuttdaadf742012-04-27 18:28:28 +0100213SNAME_PREPARED="template_prepared"
214SNAME_FIRST_BOOT="before_first_boot"
215
216function wait_for_VM_to_halt() {
Bob Ball63c6c2b2013-01-24 13:13:51 +0000217 set +x
218 echo "Waiting for the VM to halt. Progress in-VM can be checked with vncviewer:"
219 mgmt_ip=$(echo $XENAPI_CONNECTION_URL | tr -d -c '1234567890.')
220 domid=$(xe vm-list name-label="$GUEST_NAME" params=dom-id minimal=true)
221 port=$(xenstore-read /local/domain/$domid/console/vnc-port)
222 echo "vncviewer -via $mgmt_ip localhost:${port:2}"
Renuka Apte0af143b2012-04-02 15:46:53 -0700223 while true
224 do
225 state=$(xe_min vm-list name-label="$GUEST_NAME" power-state=halted)
226 if [ -n "$state" ]
227 then
228 break
229 else
Bob Ball63c6c2b2013-01-24 13:13:51 +0000230 echo -n "."
John Garbuttdaadf742012-04-27 18:28:28 +0100231 sleep 20
Renuka Apte0af143b2012-04-02 15:46:53 -0700232 fi
233 done
Bob Ball63c6c2b2013-01-24 13:13:51 +0000234 set -x
John Garbuttdaadf742012-04-27 18:28:28 +0100235}
Renuka Apte0af143b2012-04-02 15:46:53 -0700236
John Garbuttdaadf742012-04-27 18:28:28 +0100237templateuuid=$(xe template-list name-label="$TNAME")
238if [ -z "$templateuuid" ]; then
239 #
240 # Install Ubuntu over network
241 #
242
John Garbuttdaadf742012-04-27 18:28:28 +0100243 # always update the preseed file, incase we have a newer one
244 PRESEED_URL=${PRESEED_URL:-""}
245 if [ -z "$PRESEED_URL" ]; then
246 PRESEED_URL="${HOST_IP}/devstackubuntupreseed.cfg"
247 HTTP_SERVER_LOCATION="/opt/xensource/www"
248 if [ ! -e $HTTP_SERVER_LOCATION ]; then
249 HTTP_SERVER_LOCATION="/var/www/html"
250 mkdir -p $HTTP_SERVER_LOCATION
251 fi
Mate Lakata8bf0f22013-03-07 18:37:31 +0000252 cp -f $THIS_DIR/devstackubuntupreseed.cfg $HTTP_SERVER_LOCATION
Mate Lakatd3740f72013-05-09 15:02:21 +0100253
254 sed \
255 -e "s,\(d-i mirror/http/hostname string\).*,\1 $UBUNTU_INST_HTTP_HOSTNAME,g" \
256 -e "s,\(d-i mirror/http/directory string\).*,\1 $UBUNTU_INST_HTTP_DIRECTORY,g" \
257 -e "s,\(d-i mirror/http/proxy string\).*,\1 $UBUNTU_INST_HTTP_PROXY,g" \
258 -i "${HTTP_SERVER_LOCATION}/devstackubuntupreseed.cfg"
John Garbuttdaadf742012-04-27 18:28:28 +0100259 fi
260
John Garbuttd8f1a872012-06-26 11:16:38 +0100261 # Update the template
Mate Lakata8bf0f22013-03-07 18:37:31 +0000262 $THIS_DIR/scripts/install_ubuntu_template.sh $PRESEED_URL
John Garbuttdaadf742012-04-27 18:28:28 +0100263
264 # create a new VM with the given template
265 # creating the correct VIFs and metadata
Mate Lakata8bf0f22013-03-07 18:37:31 +0000266 $THIS_DIR/scripts/install-os-vpx.sh -t "$UBUNTU_INST_TEMPLATE_NAME" -v $VM_BR -m $MGT_BR -p $PUB_BR -l $GUEST_NAME -r $OSDOMU_MEM_MB -k "flat_network_bridge=${VM_BR}"
John Garbuttdaadf742012-04-27 18:28:28 +0100267
268 # wait for install to finish
269 wait_for_VM_to_halt
270
271 # set VM to restart after a reboot
Renuka Apte0af143b2012-04-02 15:46:53 -0700272 vm_uuid=$(xe_min vm-list name-label="$GUEST_NAME")
273 xe vm-param-set actions-after-reboot=Restart uuid="$vm_uuid"
274
John Garbuttdaadf742012-04-27 18:28:28 +0100275 #
276 # Prepare VM for DevStack
277 #
278
279 # Install XenServer tools, and other such things
Mate Lakata8bf0f22013-03-07 18:37:31 +0000280 $THIS_DIR/prepare_guest_template.sh "$GUEST_NAME"
John Garbuttdaadf742012-04-27 18:28:28 +0100281
282 # start the VM to run the prepare steps
283 xe vm-start vm="$GUEST_NAME"
284
285 # Wait for prep script to finish and shutdown system
286 wait_for_VM_to_halt
287
Renuka Apte0af143b2012-04-02 15:46:53 -0700288 # Make template from VM
John Garbuttdaadf742012-04-27 18:28:28 +0100289 snuuid=$(xe vm-snapshot vm="$GUEST_NAME" new-name-label="$SNAME_PREPARED")
290 xe snapshot-clone uuid=$snuuid new-name-label="$TNAME"
291else
292 #
293 # Template already installed, create VM from template
294 #
295 vm_uuid=$(xe vm-install template="$TNAME" new-name-label="$GUEST_NAME")
Renuka Apte0af143b2012-04-02 15:46:53 -0700296fi
297
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
John Garbuttdaadf742012-04-27 18:28:28 +0100304# create a snapshot before the first boot
305# to allow a quick re-run with the same settings
306xe vm-snapshot vm="$GUEST_NAME" new-name-label="$SNAME_FIRST_BOOT"
307
308
309#
310# Run DevStack VM
311#
Renuka Apte0af143b2012-04-02 15:46:53 -0700312xe vm-start vm="$GUEST_NAME"
Anthony Young3eb8f592011-10-26 23:11:52 -0700313
John Garbuttdaadf742012-04-27 18:28:28 +0100314function ssh_no_check() {
315 ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no "$@"
316}
317
Mate Lakat86446762013-05-12 18:34:29 +0100318# Get hold of the Management IP of OpenStack VM
319OS_VM_MANAGEMENT_ADDRESS=$MGT_IP
320if [ $OS_VM_MANAGEMENT_ADDRESS == "dhcp" ]; then
321 OS_VM_MANAGEMENT_ADDRESS=$(find_ip_by_name $GUEST_NAME 2)
322fi
323
324# Get hold of the Service IP of OpenStack VM
John Garbuttdaadf742012-04-27 18:28:28 +0100325if [ $HOST_IP_IFACE == "eth2" ]; then
Mate Lakat86446762013-05-12 18:34:29 +0100326 OS_VM_SERVICES_ADDRESS=$MGT_IP
John Garbuttdaadf742012-04-27 18:28:28 +0100327 if [ $MGT_IP == "dhcp" ]; then
Mate Lakat86446762013-05-12 18:34:29 +0100328 OS_VM_SERVICES_ADDRESS=$(find_ip_by_name $GUEST_NAME 2)
John Garbuttdaadf742012-04-27 18:28:28 +0100329 fi
330else
Mate Lakat86446762013-05-12 18:34:29 +0100331 OS_VM_SERVICES_ADDRESS=$PUB_IP
John Garbuttdaadf742012-04-27 18:28:28 +0100332 if [ $PUB_IP == "dhcp" ]; then
Mate Lakat86446762013-05-12 18:34:29 +0100333 OS_VM_SERVICES_ADDRESS=$(find_ip_by_name $GUEST_NAME 3)
John Garbuttdaadf742012-04-27 18:28:28 +0100334 fi
Renuka Aptec56885a2012-02-29 16:09:26 -0800335fi
336
Anthony Young1de18c62011-11-01 14:19:18 -0500337# If we have copied our ssh credentials, use ssh to monitor while the installation runs
338WAIT_TILL_LAUNCH=${WAIT_TILL_LAUNCH:-1}
John Garbuttdaadf742012-04-27 18:28:28 +0100339COPYENV=${COPYENV:-1}
Anthony Young1de18c62011-11-01 14:19:18 -0500340if [ "$WAIT_TILL_LAUNCH" = "1" ] && [ -e ~/.ssh/id_rsa.pub ] && [ "$COPYENV" = "1" ]; then
Bob Ball7fcc1572013-02-20 15:56:25 +0000341 set +x
Anthony Young1de18c62011-11-01 14:19:18 -0500342
Bob Ball7fcc1572013-02-20 15:56:25 +0000343 echo "VM Launched - Waiting for startup script"
John Garbuttdaadf742012-04-27 18:28:28 +0100344 # wait for log to appear
Mate Lakat86446762013-05-12 18:34:29 +0100345 while ! ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "[ -e run.sh.log ]"; do
John Garbuttdaadf742012-04-27 18:28:28 +0100346 sleep 10
Anthony Young1de18c62011-11-01 14:19:18 -0500347 done
Bob Ball7fcc1572013-02-20 15:56:25 +0000348 echo -n "Running"
Mate Lakat86446762013-05-12 18:34:29 +0100349 while [ `ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS pgrep -c run.sh` -ge 1 ]
Mate Lakat9efcf602012-12-19 10:23:06 +0000350 do
John Garbuttdaadf742012-04-27 18:28:28 +0100351 sleep 10
Mate Lakat9efcf602012-12-19 10:23:06 +0000352 echo -n "."
Anthony Young1de18c62011-11-01 14:19:18 -0500353 done
Mate Lakat9efcf602012-12-19 10:23:06 +0000354 echo "done!"
355 set -x
Anthony Young1de18c62011-11-01 14:19:18 -0500356
Mate Lakat9efcf602012-12-19 10:23:06 +0000357 # output the run.sh.log
Mate Lakat86446762013-05-12 18:34:29 +0100358 ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS 'cat run.sh.log'
Anthony Young1de18c62011-11-01 14:19:18 -0500359
Mate Lakat9efcf602012-12-19 10:23:06 +0000360 # Fail if the expected text is not found
Mate Lakat86446762013-05-12 18:34:29 +0100361 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 +0000362
Bob Ball63c6c2b2013-01-24 13:13:51 +0000363 set +x
John Garbuttdaadf742012-04-27 18:28:28 +0100364 echo "################################################################################"
Anthony Young1de18c62011-11-01 14:19:18 -0500365 echo ""
John Garbuttdaadf742012-04-27 18:28:28 +0100366 echo "All Finished!"
367 echo "You can visit the OpenStack Dashboard"
Mate Lakat86446762013-05-12 18:34:29 +0100368 echo "at http://$OS_VM_SERVICES_ADDRESS, and contact other services at the usual ports."
Anthony Young1de18c62011-11-01 14:19:18 -0500369else
Bob Ball63c6c2b2013-01-24 13:13:51 +0000370 set +x
Anthony Young1de18c62011-11-01 14:19:18 -0500371 echo "################################################################################"
372 echo ""
373 echo "All Finished!"
374 echo "Now, you can monitor the progress of the stack.sh installation by "
375 echo "tailing /opt/stack/run.sh.log from within your domU."
376 echo ""
Mate Lakat86446762013-05-12 18:34:29 +0100377 echo "ssh into your domU now: 'ssh stack@$OS_VM_MANAGEMENT_ADDRESS' using your password"
Anthony Young1de18c62011-11-01 14:19:18 -0500378 echo "and then do: 'tail -f /opt/stack/run.sh.log'"
379 echo ""
380 echo "When the script completes, you can then visit the OpenStack Dashboard"
Mate Lakat86446762013-05-12 18:34:29 +0100381 echo "at http://$OS_VM_SERVICES_ADDRESS, and contact other services at the usual ports."
Anthony Young1de18c62011-11-01 14:19:18 -0500382fi