Robustify service shutdown
* Save PID when using screen in screen_it()
* Add screen_stop()
* Call out service stop_*() in unstack.sh functions so screen_stop()
can do its thing
Closes-bug: 1183449
Change-Id: Iac84231cfda960c4197de5b6e8ba6eb19225169a
diff --git a/unstack.sh b/unstack.sh
index 67c8b7c..77dbe07 100755
--- a/unstack.sh
+++ b/unstack.sh
@@ -36,6 +36,9 @@
# Get project function libraries
source $TOP_DIR/lib/baremetal
source $TOP_DIR/lib/cinder
+source $TOP_DIR/lib/keystone
+source $TOP_DIR/lib/glance
+source $TOP_DIR/lib/nova
source $TOP_DIR/lib/horizon
source $TOP_DIR/lib/swift
source $TOP_DIR/lib/neutron
@@ -75,21 +78,29 @@
teardown_neutron_debug
fi
-# Shut down devstack's screen to get the bulk of OpenStack services in one shot
-SCREEN=$(which screen)
-if [[ -n "$SCREEN" ]]; then
- SESSION=$(screen -ls | awk '/[0-9].stack/ { print $1 }')
- if [[ -n "$SESSION" ]]; then
- screen -X -S $SESSION quit
- fi
+# Call service stop
+if is_service_enabled trove; then
+ stop_trove
fi
-# Shut down Nova hypervisor plugins after Nova
-NOVA_PLUGINS=$TOP_DIR/lib/nova_plugins
-if is_service_enabled nova && [[ -r $NOVA_PLUGINS/hypervisor-$VIRT_DRIVER ]]; then
- # Load plugin
- source $NOVA_PLUGINS/hypervisor-$VIRT_DRIVER
- stop_nova_hypervisor
+if is_service_enabled heat; then
+ stop_heat
+fi
+
+if is_service_enabled ceilometer; then
+ stop_ceilometer
+fi
+
+if is_service_enabled nova; then
+ stop_nova
+fi
+
+if is_service_enabled g-api g-reg; then
+ stop_glance
+fi
+
+if is_service_enabled key; then
+ stop_keystone
fi
# Swift runs daemons
@@ -123,6 +134,7 @@
# Get the iSCSI volumes
if is_service_enabled cinder; then
+ stop_cinder
cleanup_cinder
fi
@@ -152,4 +164,13 @@
cleanup_trove
fi
+# Clean up the remainder of the screen processes
+SCREEN=$(which screen)
+if [[ -n "$SCREEN" ]]; then
+ SESSION=$(screen -ls | awk '/[0-9].stack/ { print $1 }')
+ if [[ -n "$SESSION" ]]; then
+ screen -X -S $SESSION quit
+ fi
+fi
+
cleanup_tmp