Browse code

xenapi: enable user interaction with stack.sh

In XenServer, devstack runs inside a virtual machine. This makes it hard
for the user to interact with stack.sh should a parameter be missing.
This change will create an upstart job (devstack) that runs
stack.sh with console enabled so user can interact with it by running
vncviewer or using XenCenter.

Logging the output is also disabled, stamp files are used instead to
detect the script run status in case install_os_domU.sh is used.

As run.sh.log is removed, standard devstack logging should be used.

The change also removes the environment settings from run.sh, as they
are not needed, they should be specified in localrc. This way user
cannot get different experiences by using unstack.sh/stack.sh or run.sh

Also a proper unstack.sh is called instead of killing screen in run.sh

Change-Id: I7eb12bd74746cc7a1db3aa9fd68ece645a50001d

Mate Lakat authored on 2013/09/25 01:35:00
Showing 2 changed files
... ...
@@ -93,13 +93,34 @@ mkdir -p $STAGING_DIR/opt/stack/devstack
93 93
 tar xf /tmp/devstack.tar -C $STAGING_DIR/opt/stack/devstack
94 94
 cd $TOP_DIR
95 95
 
96
-# Run devstack on launch
97
-cat <<EOF >$STAGING_DIR/etc/rc.local
98
-# network restart required for getting the right gateway
99
-/etc/init.d/networking restart
100
-chown -R $STACK_USER /opt/stack
101
-su -c "/opt/stack/run.sh > /opt/stack/run.sh.log" $STACK_USER
102
-exit 0
96
+# Create an upstart job (task) for devstack, which can interact with the console
97
+cat >$STAGING_DIR/etc/init/devstack.conf << EOF
98
+start on stopped rc RUNLEVEL=[2345]
99
+
100
+console output
101
+task
102
+
103
+pre-start script
104
+    rm -f /var/run/devstack.succeeded
105
+end script
106
+
107
+script
108
+    initctl stop hvc0 || true
109
+
110
+    # Read any leftover characters from standard input
111
+    while read -n 1 -s -t 0.1 -r ignored; do
112
+        true
113
+    done
114
+
115
+    clear
116
+
117
+    chown -R $STACK_USER /opt/stack
118
+
119
+    if su -c "/opt/stack/run.sh" $STACK_USER; then
120
+        touch /var/run/devstack.succeeded
121
+    fi
122
+    initctl start hvc0 > /dev/null 2>&1
123
+end script
103 124
 EOF
104 125
 
105 126
 # Configure the hostname
... ...
@@ -138,8 +159,9 @@ fi
138 138
 # Configure run.sh
139 139
 cat <<EOF >$STAGING_DIR/opt/stack/run.sh
140 140
 #!/bin/bash
141
+set -eux
141 142
 cd /opt/stack/devstack
142
-killall screen
143
-VIRT_DRIVER=xenserver FORCE=yes MULTI_HOST=$MULTI_HOST HOST_IP_IFACE=$HOST_IP_IFACE $STACKSH_PARAMS ./stack.sh
143
+./unstack.sh || true
144
+./stack.sh
144 145
 EOF
145 146
 chmod 755 $STAGING_DIR/opt/stack/run.sh
... ...
@@ -350,25 +350,20 @@ COPYENV=${COPYENV:-1}
350 350
 if [ "$WAIT_TILL_LAUNCH" = "1" ]  && [ -e ~/.ssh/id_rsa.pub  ] && [ "$COPYENV" = "1" ]; then
351 351
     set +x
352 352
 
353
-    echo "VM Launched - Waiting for startup script"
354
-    # wait for log to appear
355
-    while ! ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "[ -e run.sh.log ]"; do
353
+    echo "VM Launched - Waiting for devstack to start"
354
+    while ! ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "service devstack status | grep -q running"; do
356 355
         sleep 10
357 356
     done
358
-    echo -n "Running"
359
-    while [ `ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS pgrep -c run.sh` -ge 1 ]
360
-    do
357
+    echo -n "devstack is running"
358
+    while ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "service devstack status | grep -q running"; do
361 359
         sleep 10
362 360
         echo -n "."
363 361
     done
364 362
     echo "done!"
365 363
     set -x
366 364
 
367
-    # output the run.sh.log
368
-    ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS 'cat run.sh.log'
369
-
370
-    # Fail if the expected text is not found
371
-    ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS 'cat run.sh.log' | grep -q 'stack.sh completed in'
365
+    # Fail if devstack did not succeed
366
+    ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS 'test -e /var/run/devstack.succeeded'
372 367
 
373 368
     set +x
374 369
     echo "################################################################################"
... ...
@@ -382,11 +377,12 @@ else
382 382
     echo ""
383 383
     echo "All Finished!"
384 384
     echo "Now, you can monitor the progress of the stack.sh installation by "
385
-    echo "tailing /opt/stack/run.sh.log from within your domU."
385
+    echo "looking at the console of your domU / checking the log files."
386 386
     echo ""
387 387
     echo "ssh into your domU now: 'ssh stack@$OS_VM_MANAGEMENT_ADDRESS' using your password"
388
-    echo "and then do: 'tail -f /opt/stack/run.sh.log'"
388
+    echo "and then do: 'sudo service devstack status' to check if devstack is still running."
389
+    echo "Check that /var/run/devstack.succeeded exists"
389 390
     echo ""
390
-    echo "When the script completes, you can then visit the OpenStack Dashboard"
391
+    echo "When devstack completes, you can visit the OpenStack Dashboard"
391 392
     echo "at http://$OS_VM_SERVICES_ADDRESS, and contact other services at the usual ports."
392 393
 fi