blob: d2e2c572c61fc3c7e1608a18ccc80e1ce13802f7 [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 Youngaf6ed6b2011-11-02 07:50:27 -050015# This directory
Mate Lakata8bf0f22013-03-07 18:37:31 +000016THIS_DIR=$(cd $(dirname "$0") && pwd)
Anthony Youngaf6ed6b2011-11-02 07:50:27 -050017
John Garbuttdaadf742012-04-27 18:28:28 +010018# Include onexit commands
Mate Lakata8bf0f22013-03-07 18:37:31 +000019. $THIS_DIR/scripts/on_exit.sh
John Garbuttdaadf742012-04-27 18:28:28 +010020
Mate Lakat57e3da92013-03-22 16:34:05 +000021# xapi functions
22. $THIS_DIR/functions
23
John Garbuttdaadf742012-04-27 18:28:28 +010024#
25# Get Settings
26#
Huan Xiecc6af3f2015-12-23 02:17:01 +000027TOP_DIR=$(cd $THIS_DIR/../../ && pwd)
28source $TOP_DIR/inc/meta-config
29rm -f $TOP_DIR/.localrc.auto
30extract_localrc_section $TOP_DIR/local.conf $TOP_DIR/localrc $TOP_DIR/.localrc.auto
John Garbuttdaadf742012-04-27 18:28:28 +010031
Anthony Youngb3e2f332012-03-16 17:01:49 -070032# Source params - override xenrc params in your localrc to suit your taste
Mate Lakat0b3804b2013-05-07 16:58:17 +010033source $THIS_DIR/xenrc
Anthony Youngaf6ed6b2011-11-02 07:50:27 -050034
Renuka Apte0af143b2012-04-02 15:46:53 -070035xe_min()
36{
Sean Dague0b865a52013-10-22 11:37:35 -040037 local cmd="$1"
38 shift
39 xe "$cmd" --minimal "$@"
Renuka Apte0af143b2012-04-02 15:46:53 -070040}
Anthony Youngb62b4ca2011-10-26 22:29:08 -070041
John Garbuttdaadf742012-04-27 18:28:28 +010042#
43# Prepare Dom0
44# including installing XenAPI plugins
45#
46
Mate Lakata8bf0f22013-03-07 18:37:31 +000047cd $THIS_DIR
John Garbuttdaadf742012-04-27 18:28:28 +010048
Mate Lakatd8511032013-07-03 10:44:44 +010049# Die if multiple hosts listed
50if have_multiple_hosts; then
51 cat >&2 << EOF
52ERROR: multiple hosts found. This might mean that the XenServer is a member
53of a pool - Exiting.
54EOF
55 exit 1
56fi
57
John Garbuttdaadf742012-04-27 18:28:28 +010058#
59# Configure Networking
60#
Bob Ball78ef1f32013-09-29 11:36:28 +010061
62MGT_NETWORK=`xe pif-list management=true params=network-uuid minimal=true`
63MGT_BRIDGE_OR_NET_NAME=`xe network-list uuid=$MGT_NETWORK params=bridge minimal=true`
64
Mate Lakat9e326772013-05-08 16:42:22 +010065setup_network "$VM_BRIDGE_OR_NET_NAME"
66setup_network "$MGT_BRIDGE_OR_NET_NAME"
67setup_network "$PUB_BRIDGE_OR_NET_NAME"
Anthony Youngb62b4ca2011-10-26 22:29:08 -070068
Mark McClainb05c8762013-07-06 23:29:39 -040069# With neutron, one more network is required, which is internal to the
Mate Lakatf652e0f2013-05-21 18:12:48 +010070# hypervisor, and used by the VMs
Mate Lakat6df64892014-10-17 13:09:49 +020071setup_network "$XEN_INT_BRIDGE_OR_NET_NAME"
Mate Lakatf652e0f2013-05-21 18:12:48 +010072
Mate Lakat9e326772013-05-08 16:42:22 +010073if parameter_is_specified "FLAT_NETWORK_BRIDGE"; then
Mate Lakat2b8814d2013-09-25 17:07:06 +010074 if [ "$(bridge_for "$VM_BRIDGE_OR_NET_NAME")" != "$(bridge_for "$FLAT_NETWORK_BRIDGE")" ]; then
75 cat >&2 << EOF
76ERROR: FLAT_NETWORK_BRIDGE is specified in localrc file, and either no network
77found on XenServer by searching for networks by that value as name-label or
78bridge name or the network found does not match the network specified by
79VM_BRIDGE_OR_NET_NAME. Please check your localrc file.
Mate Lakat9e326772013-05-08 16:42:22 +010080EOF
Mate Lakat2b8814d2013-09-25 17:07:06 +010081 exit 1
82 fi
Anthony Youngb62b4ca2011-10-26 22:29:08 -070083fi
84
Mate Lakat9e326772013-05-08 16:42:22 +010085if ! xenapi_is_listening_on "$MGT_BRIDGE_OR_NET_NAME"; then
86 cat >&2 << EOF
87ERROR: XenAPI does not have an assigned IP address on the management network.
88please review your XenServer network configuration / localrc file.
89EOF
90 exit 1
91fi
92
93HOST_IP=$(xenapi_ip_on "$MGT_BRIDGE_OR_NET_NAME")
John Garbuttdaadf742012-04-27 18:28:28 +010094
95# Set up ip forwarding, but skip on xcp-xapi
John Garbuttd8f1a872012-06-26 11:16:38 +010096if [ -a /etc/sysconfig/network ]; then
John Garbuttdaadf742012-04-27 18:28:28 +010097 if ! grep -q "FORWARD_IPV4=YES" /etc/sysconfig/network; then
Sean Dague0b865a52013-10-22 11:37:35 -040098 # FIXME: This doesn't work on reboot!
99 echo "FORWARD_IPV4=YES" >> /etc/sysconfig/network
John Garbuttdaadf742012-04-27 18:28:28 +0100100 fi
101fi
Anthony Youngb62b4ca2011-10-26 22:29:08 -0700102# Also, enable ip forwarding in rc.local, since the above trick isn't working
103if ! grep -q "echo 1 >/proc/sys/net/ipv4/ip_forward" /etc/rc.local; then
104 echo "echo 1 >/proc/sys/net/ipv4/ip_forward" >> /etc/rc.local
105fi
Anthony Youngb62b4ca2011-10-26 22:29:08 -0700106# Enable ip forwarding at runtime as well
107echo 1 > /proc/sys/net/ipv4/ip_forward
108
John Garbuttdaadf742012-04-27 18:28:28 +0100109
110#
Anthony Young346e4912011-11-05 00:22:47 -0500111# Shutdown previous runs
John Garbuttdaadf742012-04-27 18:28:28 +0100112#
113
Anthony Young346e4912011-11-05 00:22:47 -0500114DO_SHUTDOWN=${DO_SHUTDOWN:-1}
John Garbuttdaadf742012-04-27 18:28:28 +0100115CLEAN_TEMPLATES=${CLEAN_TEMPLATES:-false}
Anthony Young346e4912011-11-05 00:22:47 -0500116if [ "$DO_SHUTDOWN" = "1" ]; then
Anthony Young40b57372011-11-05 00:30:07 -0500117 # Shutdown all domU's that created previously
John Garbuttdaadf742012-04-27 18:28:28 +0100118 clean_templates_arg=""
119 if $CLEAN_TEMPLATES; then
120 clean_templates_arg="--remove-templates"
121 fi
122 ./scripts/uninstall-os-vpx.sh $clean_templates_arg
Anthony Young346e4912011-11-05 00:22:47 -0500123
124 # Destroy any instances that were launched
125 for uuid in `xe vm-list | grep -1 instance | grep uuid | sed "s/.*\: //g"`; do
126 echo "Shutting down nova instance $uuid"
Mate Lakat0d97cbe2013-07-29 09:41:50 +0100127 xe vm-uninstall uuid=$uuid force=true
Anthony Young346e4912011-11-05 00:22:47 -0500128 done
Anthony Youngfa4ecc62011-11-11 10:23:22 -0800129
130 # Destroy orphaned vdis
131 for uuid in `xe vdi-list | grep -1 Glance | grep uuid | sed "s/.*\: //g"`; do
132 xe vdi-destroy uuid=$uuid
133 done
Anthony Young346e4912011-11-05 00:22:47 -0500134fi
Anthony Youngb62b4ca2011-10-26 22:29:08 -0700135
Renuka Apte0af143b2012-04-02 15:46:53 -0700136
John Garbuttdaadf742012-04-27 18:28:28 +0100137#
138# Create Ubuntu VM template
139# and/or create VM from template
140#
Renuka Apte0af143b2012-04-02 15:46:53 -0700141
John Garbuttdaadf742012-04-27 18:28:28 +0100142GUEST_NAME=${GUEST_NAME:-"DevStackOSDomU"}
Mate Lakatc02b2f82013-07-30 19:43:10 +0100143TNAME="jeos_template_for_devstack"
144SNAME_TEMPLATE="jeos_snapshot_for_devstack"
John Garbuttdaadf742012-04-27 18:28:28 +0100145SNAME_FIRST_BOOT="before_first_boot"
146
Ian Wienandaee18c72014-02-21 15:35:08 +1100147function wait_for_VM_to_halt {
Bob Ball63c6c2b2013-01-24 13:13:51 +0000148 set +x
Bob Balle356d8c2015-02-17 15:05:34 +0000149 echo "Waiting for the VM to halt. Progress in-VM can be checked with XenCenter or xl console:"
Bob Ball63c6c2b2013-01-24 13:13:51 +0000150 mgmt_ip=$(echo $XENAPI_CONNECTION_URL | tr -d -c '1234567890.')
Mate Lakatd15c8a02014-02-04 12:38:14 +0000151 domid=$(get_domid "$GUEST_NAME")
Bob Balle356d8c2015-02-17 15:05:34 +0000152 echo "ssh root@$mgmt_ip \"xl console $domid\""
Chmouel Boudjnah86a8e972014-02-04 15:20:15 +0100153 while true; do
Renuka Apte0af143b2012-04-02 15:46:53 -0700154 state=$(xe_min vm-list name-label="$GUEST_NAME" power-state=halted)
Sean Dague16dd8b32014-02-03 09:10:54 +0900155 if [ -n "$state" ]; then
Renuka Apte0af143b2012-04-02 15:46:53 -0700156 break
157 else
Bob Ball63c6c2b2013-01-24 13:13:51 +0000158 echo -n "."
John Garbuttdaadf742012-04-27 18:28:28 +0100159 sleep 20
Renuka Apte0af143b2012-04-02 15:46:53 -0700160 fi
161 done
Bob Ball63c6c2b2013-01-24 13:13:51 +0000162 set -x
John Garbuttdaadf742012-04-27 18:28:28 +0100163}
Renuka Apte0af143b2012-04-02 15:46:53 -0700164
John Garbuttdaadf742012-04-27 18:28:28 +0100165templateuuid=$(xe template-list name-label="$TNAME")
166if [ -z "$templateuuid" ]; then
167 #
168 # Install Ubuntu over network
169 #
Bob Ball78ef1f32013-09-29 11:36:28 +0100170 UBUNTU_INST_BRIDGE_OR_NET_NAME=${UBUNTU_INST_BRIDGE_OR_NET_NAME:-"$MGT_BRIDGE_OR_NET_NAME"}
John Garbuttdaadf742012-04-27 18:28:28 +0100171
John Garbuttdaadf742012-04-27 18:28:28 +0100172 # always update the preseed file, incase we have a newer one
173 PRESEED_URL=${PRESEED_URL:-""}
174 if [ -z "$PRESEED_URL" ]; then
175 PRESEED_URL="${HOST_IP}/devstackubuntupreseed.cfg"
Bob Ball5b9adb62015-02-10 08:09:08 +0000176
John Garbuttdaadf742012-04-27 18:28:28 +0100177 HTTP_SERVER_LOCATION="/opt/xensource/www"
178 if [ ! -e $HTTP_SERVER_LOCATION ]; then
179 HTTP_SERVER_LOCATION="/var/www/html"
180 mkdir -p $HTTP_SERVER_LOCATION
181 fi
Bob Ball5b9adb62015-02-10 08:09:08 +0000182
183 # Copy the tools DEB to the XS web server
184 XS_TOOLS_URL="https://github.com/downloads/citrix-openstack/warehouse/xe-guest-utilities_5.6.100-651_amd64.deb"
185 ISO_DIR="/opt/xensource/packages/iso"
Bob Ball5b9adb62015-02-10 08:09:08 +0000186 if [ -e "$ISO_DIR" ]; then
Huan Xief179eb72016-06-02 01:24:22 -0700187 TOOLS_ISO=$(ls -1 $ISO_DIR/*-tools-*.iso | head -1)
Bob Ball5b9adb62015-02-10 08:09:08 +0000188 TMP_DIR=/tmp/temp.$RANDOM
189 mkdir -p $TMP_DIR
190 mount -o loop $TOOLS_ISO $TMP_DIR
jianghua wang78f6c1d2015-09-18 11:17:46 +0100191 # the target deb package maybe *amd64.deb or *all.deb,
192 # so use *amd64.deb by default. If it doesn't exist,
193 # then use *all.deb.
194 DEB_FILE=$(ls $TMP_DIR/Linux/*amd64.deb || ls $TMP_DIR/Linux/*all.deb)
Bob Ball5b9adb62015-02-10 08:09:08 +0000195 cp $DEB_FILE $HTTP_SERVER_LOCATION
196 umount $TMP_DIR
197 rmdir $TMP_DIR
198 XS_TOOLS_URL=${HOST_IP}/$(basename $DEB_FILE)
199 fi
200
Mate Lakata8bf0f22013-03-07 18:37:31 +0000201 cp -f $THIS_DIR/devstackubuntupreseed.cfg $HTTP_SERVER_LOCATION
Bob Ball5b9adb62015-02-10 08:09:08 +0000202 cp -f $THIS_DIR/devstackubuntu_latecommand.sh $HTTP_SERVER_LOCATION/latecommand.sh
Mate Lakatd3740f72013-05-09 15:02:21 +0100203
204 sed \
205 -e "s,\(d-i mirror/http/hostname string\).*,\1 $UBUNTU_INST_HTTP_HOSTNAME,g" \
206 -e "s,\(d-i mirror/http/directory string\).*,\1 $UBUNTU_INST_HTTP_DIRECTORY,g" \
207 -e "s,\(d-i mirror/http/proxy string\).*,\1 $UBUNTU_INST_HTTP_PROXY,g" \
Bob Ball105eaee2014-07-14 15:21:07 +0100208 -e "s,\(d-i passwd/root-password password\).*,\1 $GUEST_PASSWORD,g" \
209 -e "s,\(d-i passwd/root-password-again password\).*,\1 $GUEST_PASSWORD,g" \
Bob Ball5b9adb62015-02-10 08:09:08 +0000210 -e "s,\(d-i preseed/late_command string\).*,\1 in-target mkdir -p /tmp; in-target wget --no-proxy ${HOST_IP}/latecommand.sh -O /root/latecommand.sh; in-target bash /root/latecommand.sh,g" \
Mate Lakatd3740f72013-05-09 15:02:21 +0100211 -i "${HTTP_SERVER_LOCATION}/devstackubuntupreseed.cfg"
Bob Ball5b9adb62015-02-10 08:09:08 +0000212
213 sed \
214 -e "s,@XS_TOOLS_URL@,$XS_TOOLS_URL,g" \
215 -i "${HTTP_SERVER_LOCATION}/latecommand.sh"
John Garbuttdaadf742012-04-27 18:28:28 +0100216 fi
217
John Garbuttd8f1a872012-06-26 11:16:38 +0100218 # Update the template
Mate Lakata8bf0f22013-03-07 18:37:31 +0000219 $THIS_DIR/scripts/install_ubuntu_template.sh $PRESEED_URL
John Garbuttdaadf742012-04-27 18:28:28 +0100220
Mate Lakat2f524bd2013-06-19 12:32:23 +0100221 # create a new VM from the given template with eth0 attached to the given
222 # network
Mate Lakat9e326772013-05-08 16:42:22 +0100223 $THIS_DIR/scripts/install-os-vpx.sh \
224 -t "$UBUNTU_INST_TEMPLATE_NAME" \
Mate Lakat2f524bd2013-06-19 12:32:23 +0100225 -n "$UBUNTU_INST_BRIDGE_OR_NET_NAME" \
Mate Lakat16ed0682013-08-30 13:28:31 +0100226 -l "$GUEST_NAME"
227
Bob Ball1340ee72015-03-06 21:11:55 +0000228 set_vm_memory "$GUEST_NAME" "1024"
Mate Lakat16ed0682013-08-30 13:28:31 +0100229
230 xe vm-start vm="$GUEST_NAME"
John Garbuttdaadf742012-04-27 18:28:28 +0100231
232 # wait for install to finish
233 wait_for_VM_to_halt
234
235 # set VM to restart after a reboot
Renuka Apte0af143b2012-04-02 15:46:53 -0700236 vm_uuid=$(xe_min vm-list name-label="$GUEST_NAME")
237 xe vm-param-set actions-after-reboot=Restart uuid="$vm_uuid"
238
239 # Make template from VM
Mate Lakatc02b2f82013-07-30 19:43:10 +0100240 snuuid=$(xe vm-snapshot vm="$GUEST_NAME" new-name-label="$SNAME_TEMPLATE")
John Garbuttdaadf742012-04-27 18:28:28 +0100241 xe snapshot-clone uuid=$snuuid new-name-label="$TNAME"
242else
243 #
244 # Template already installed, create VM from template
245 #
246 vm_uuid=$(xe vm-install template="$TNAME" new-name-label="$GUEST_NAME")
Renuka Apte0af143b2012-04-02 15:46:53 -0700247fi
248
Mate Lakat2a324dd2014-10-15 17:40:41 +0200249if [ -n "${EXIT_AFTER_JEOS_INSTALLATION:-}" ]; then
zhangyanxianc6f857f2016-07-25 08:44:28 +0000250 echo "User requested to quit after JEOS installation"
Mate Lakat2a324dd2014-10-15 17:40:41 +0200251 exit 0
252fi
253
Mate Lakatc02b2f82013-07-30 19:43:10 +0100254#
255# Prepare VM for DevStack
256#
Bob Ball0df75a72015-02-12 11:59:46 +0000257xe vm-param-set other-config:os-vpx=true uuid="$vm_uuid"
Mate Lakatc02b2f82013-07-30 19:43:10 +0100258
259# Install XenServer tools, and other such things
260$THIS_DIR/prepare_guest_template.sh "$GUEST_NAME"
261
Mate Lakat16ed0682013-08-30 13:28:31 +0100262# Set virtual machine parameters
263set_vm_memory "$GUEST_NAME" "$OSDOMU_MEM_MB"
264
Mate Lakat9f878cb2013-10-04 09:56:24 +0100265# Max out VCPU count for better performance
266max_vcpus "$GUEST_NAME"
267
Mate Lakat8787e0f2013-10-28 18:15:57 +0000268# Wipe out all network cards
269destroy_all_vifs_of "$GUEST_NAME"
270
271# Add only one interface to prepare the guest template
272add_interface "$GUEST_NAME" "$MGT_BRIDGE_OR_NET_NAME" "0"
273
Mate Lakatc02b2f82013-07-30 19:43:10 +0100274# start the VM to run the prepare steps
275xe vm-start vm="$GUEST_NAME"
276
277# Wait for prep script to finish and shutdown system
278wait_for_VM_to_halt
279
Mate Lakat5a56cd62013-06-17 13:54:43 +0100280## Setup network cards
281# Wipe out all
282destroy_all_vifs_of "$GUEST_NAME"
283# Tenant network
284add_interface "$GUEST_NAME" "$VM_BRIDGE_OR_NET_NAME" "$VM_DEV_NR"
285# Management network
286add_interface "$GUEST_NAME" "$MGT_BRIDGE_OR_NET_NAME" "$MGT_DEV_NR"
287# Public network
288add_interface "$GUEST_NAME" "$PUB_BRIDGE_OR_NET_NAME" "$PUB_DEV_NR"
John Garbuttdaadf742012-04-27 18:28:28 +0100289
290#
291# Inject DevStack inside VM disk
292#
Mate Lakata8bf0f22013-03-07 18:37:31 +0000293$THIS_DIR/build_xva.sh "$GUEST_NAME"
Renuka Apte0af143b2012-04-02 15:46:53 -0700294
Mate Lakatf652e0f2013-05-21 18:12:48 +0100295# Attach a network interface for the integration network (so that the bridge
Mark McClainb05c8762013-07-06 23:29:39 -0400296# is created by XenServer). This is required for Neutron. Also pass that as a
Mate Lakat8ff33ce2013-05-30 13:26:58 +0100297# kernel parameter for DomU
Mate Lakat6df64892014-10-17 13:09:49 +0200298attach_network "$XEN_INT_BRIDGE_OR_NET_NAME"
Mate Lakat8ff33ce2013-05-30 13:26:58 +0100299
Huan Xiebea1e192016-04-19 07:01:30 +0100300XEN_INTEGRATION_BRIDGE_DEFAULT=$(bridge_for "$XEN_INT_BRIDGE_OR_NET_NAME")
Mate Lakat6df64892014-10-17 13:09:49 +0200301append_kernel_cmdline \
302 "$GUEST_NAME" \
Huan Xiebea1e192016-04-19 07:01:30 +0100303 "xen_integration_bridge=${XEN_INTEGRATION_BRIDGE_DEFAULT}"
Mate Lakatf652e0f2013-05-21 18:12:48 +0100304
Mate Lakat2b8814d2013-09-25 17:07:06 +0100305FLAT_NETWORK_BRIDGE="${FLAT_NETWORK_BRIDGE:-$(bridge_for "$VM_BRIDGE_OR_NET_NAME")}"
Mate Lakat8ff33ce2013-05-30 13:26:58 +0100306append_kernel_cmdline "$GUEST_NAME" "flat_network_bridge=${FLAT_NETWORK_BRIDGE}"
307
Mate Lakat68ac03c2013-06-06 16:22:34 +0100308# Add a separate xvdb, if it was requested
309if [[ "0" != "$XEN_XVDB_SIZE_GB" ]]; then
310 vm=$(xe vm-list name-label="$GUEST_NAME" --minimal)
311
312 # Add a new disk
313 localsr=$(get_local_sr)
314 extra_vdi=$(xe vdi-create \
315 name-label=xvdb-added-by-devstack \
316 virtual-size="${XEN_XVDB_SIZE_GB}GiB" \
317 sr-uuid=$localsr type=user)
318 xe vbd-create vm-uuid=$vm vdi-uuid=$extra_vdi device=1
319fi
320
John Garbuttdaadf742012-04-27 18:28:28 +0100321# create a snapshot before the first boot
322# to allow a quick re-run with the same settings
323xe vm-snapshot vm="$GUEST_NAME" new-name-label="$SNAME_FIRST_BOOT"
324
John Garbuttdaadf742012-04-27 18:28:28 +0100325#
326# Run DevStack VM
327#
Renuka Apte0af143b2012-04-02 15:46:53 -0700328xe vm-start vm="$GUEST_NAME"
Anthony Young3eb8f592011-10-26 23:11:52 -0700329
Ian Wienandaee18c72014-02-21 15:35:08 +1100330function ssh_no_check {
John Garbuttdaadf742012-04-27 18:28:28 +0100331 ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no "$@"
332}
333
Mate Lakat86446762013-05-12 18:34:29 +0100334# Get hold of the Management IP of OpenStack VM
335OS_VM_MANAGEMENT_ADDRESS=$MGT_IP
336if [ $OS_VM_MANAGEMENT_ADDRESS == "dhcp" ]; then
Mate Lakat5a56cd62013-06-17 13:54:43 +0100337 OS_VM_MANAGEMENT_ADDRESS=$(find_ip_by_name $GUEST_NAME $MGT_DEV_NR)
Mate Lakat86446762013-05-12 18:34:29 +0100338fi
339
340# Get hold of the Service IP of OpenStack VM
Mate Lakat5a56cd62013-06-17 13:54:43 +0100341if [ $HOST_IP_IFACE == "eth${MGT_DEV_NR}" ]; then
Mate Lakat86446762013-05-12 18:34:29 +0100342 OS_VM_SERVICES_ADDRESS=$MGT_IP
John Garbuttdaadf742012-04-27 18:28:28 +0100343 if [ $MGT_IP == "dhcp" ]; then
Mate Lakat5a56cd62013-06-17 13:54:43 +0100344 OS_VM_SERVICES_ADDRESS=$(find_ip_by_name $GUEST_NAME $MGT_DEV_NR)
John Garbuttdaadf742012-04-27 18:28:28 +0100345 fi
346else
Mate Lakat86446762013-05-12 18:34:29 +0100347 OS_VM_SERVICES_ADDRESS=$PUB_IP
John Garbuttdaadf742012-04-27 18:28:28 +0100348 if [ $PUB_IP == "dhcp" ]; then
Mate Lakat5a56cd62013-06-17 13:54:43 +0100349 OS_VM_SERVICES_ADDRESS=$(find_ip_by_name $GUEST_NAME $PUB_DEV_NR)
John Garbuttdaadf742012-04-27 18:28:28 +0100350 fi
Renuka Aptec56885a2012-02-29 16:09:26 -0800351fi
352
Mate Lakatd15c8a02014-02-04 12:38:14 +0000353# Create an ssh-keypair, and set it up for dom0 user
354rm -f /root/dom0key /root/dom0key.pub
355ssh-keygen -f /root/dom0key -P "" -C "dom0"
356DOMID=$(get_domid "$GUEST_NAME")
357
358xenstore-write /local/domain/$DOMID/authorized_keys/$DOMZERO_USER "$(cat /root/dom0key.pub)"
359xenstore-chmod -u /local/domain/$DOMID/authorized_keys/$DOMZERO_USER r$DOMID
360
Ian Wienandaee18c72014-02-21 15:35:08 +1100361function run_on_appliance {
Mate Lakatd15c8a02014-02-04 12:38:14 +0000362 ssh \
363 -i /root/dom0key \
364 -o UserKnownHostsFile=/dev/null \
365 -o StrictHostKeyChecking=no \
366 -o BatchMode=yes \
367 "$DOMZERO_USER@$OS_VM_MANAGEMENT_ADDRESS" "$@"
368}
369
370# Wait until we can log in to the appliance
371while ! run_on_appliance true; do
372 sleep 1
373done
374
375# Remove authenticated_keys updater cronjob
376echo "" | run_on_appliance crontab -
377
378# Generate a passwordless ssh key for domzero user
379echo "ssh-keygen -f /home/$DOMZERO_USER/.ssh/id_rsa -C $DOMZERO_USER@appliance -N \"\" -q" | run_on_appliance
380
381# Authenticate that user to dom0
382run_on_appliance cat /home/$DOMZERO_USER/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
383
Anthony Young1de18c62011-11-01 14:19:18 -0500384# If we have copied our ssh credentials, use ssh to monitor while the installation runs
385WAIT_TILL_LAUNCH=${WAIT_TILL_LAUNCH:-1}
John Garbuttdaadf742012-04-27 18:28:28 +0100386COPYENV=${COPYENV:-1}
Anthony Young1de18c62011-11-01 14:19:18 -0500387if [ "$WAIT_TILL_LAUNCH" = "1" ] && [ -e ~/.ssh/id_rsa.pub ] && [ "$COPYENV" = "1" ]; then
Bob Ball7fcc1572013-02-20 15:56:25 +0000388 set +x
Anthony Young1de18c62011-11-01 14:19:18 -0500389
Bob Ball0686dae2015-01-15 12:48:26 +0000390 echo "VM Launched - Waiting for run.sh"
391 while ! ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "test -e /opt/stack/run_sh.pid"; do
John Garbuttdaadf742012-04-27 18:28:28 +0100392 sleep 10
Anthony Young1de18c62011-11-01 14:19:18 -0500393 done
Bob Balld6b43a02014-07-14 15:18:33 +0100394 echo -n "devstack service is running, waiting for stack.sh to start logging..."
395
Bob Ball0686dae2015-01-15 12:48:26 +0000396 pid=`ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "cat /opt/stack/run_sh.pid"`
Bob Ball1e3a5d22015-01-16 13:06:58 +0000397 if [ -n "$SCREEN_LOGDIR" ]; then
398 while ! ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "test -e ${SCREEN_LOGDIR}/stack.log"; do
399 sleep 10
400 done
Bob Balldc7ebbb2014-06-24 13:59:49 +0100401
Bob Ball1e3a5d22015-01-16 13:06:58 +0000402 ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "tail --pid $pid -n +1 -f ${SCREEN_LOGDIR}/stack.log"
403 else
404 echo -n "SCREEN_LOGDIR not set; just waiting for process $pid to finish"
405 ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "wait $pid"
406 fi
407
408 set -x
Mate Lakat93f3b862013-09-24 17:35:00 +0100409 # Fail if devstack did not succeed
Bob Ball0686dae2015-01-15 12:48:26 +0000410 ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS 'test -e /opt/stack/runsh.succeeded'
Mate Lakat9efcf602012-12-19 10:23:06 +0000411
Bob Ball63c6c2b2013-01-24 13:13:51 +0000412 set +x
John Garbuttdaadf742012-04-27 18:28:28 +0100413 echo "################################################################################"
Anthony Young1de18c62011-11-01 14:19:18 -0500414 echo ""
John Garbuttdaadf742012-04-27 18:28:28 +0100415 echo "All Finished!"
416 echo "You can visit the OpenStack Dashboard"
Mate Lakat86446762013-05-12 18:34:29 +0100417 echo "at http://$OS_VM_SERVICES_ADDRESS, and contact other services at the usual ports."
Anthony Young1de18c62011-11-01 14:19:18 -0500418else
Bob Ball63c6c2b2013-01-24 13:13:51 +0000419 set +x
Anthony Young1de18c62011-11-01 14:19:18 -0500420 echo "################################################################################"
421 echo ""
422 echo "All Finished!"
423 echo "Now, you can monitor the progress of the stack.sh installation by "
Mate Lakat93f3b862013-09-24 17:35:00 +0100424 echo "looking at the console of your domU / checking the log files."
Anthony Young1de18c62011-11-01 14:19:18 -0500425 echo ""
Mate Lakat86446762013-05-12 18:34:29 +0100426 echo "ssh into your domU now: 'ssh stack@$OS_VM_MANAGEMENT_ADDRESS' using your password"
Jianghua Wang6e49cab2017-02-22 11:42:22 +0800427 echo "and then do: 'sudo systemctl status devstack' to check if devstack is still running."
Bob Ball0686dae2015-01-15 12:48:26 +0000428 echo "Check that /opt/stack/runsh.succeeded exists"
Anthony Young1de18c62011-11-01 14:19:18 -0500429 echo ""
Mate Lakat93f3b862013-09-24 17:35:00 +0100430 echo "When devstack completes, you can visit the OpenStack Dashboard"
Mate Lakat86446762013-05-12 18:34:29 +0100431 echo "at http://$OS_VM_SERVICES_ADDRESS, and contact other services at the usual ports."
Anthony Young1de18c62011-11-01 14:19:18 -0500432fi