Browse code

Add clean.sh

clean.sh gets rid of all residue of running DevStack except installed
packages and pip modules.

And it eradicates rabbitmq-server and ts erlang dependencies as well as
the other RPC backends and databases.

Change-Id: I2b9a251a0a151c012bae85a5a2f9c2f72e7700be

Dean Troyer authored on 2013/03/08 07:11:40
Showing 11 changed files
1 1
new file mode 100755
... ...
@@ -0,0 +1,91 @@
0
+#!/usr/bin/env bash
1
+
2
+# **clean.sh**
3
+
4
+# ``clean.sh`` does its best to eradicate traces of a Grenade
5
+# run except for the following:
6
+# - both base and target code repos are left alone
7
+# - packages (system and pip) are left alone
8
+
9
+# This means that all data files are removed.  More??
10
+
11
+# Keep track of the current devstack directory.
12
+TOP_DIR=$(cd $(dirname "$0") && pwd)
13
+
14
+# Import common functions
15
+source $TOP_DIR/functions
16
+
17
+# Load local configuration
18
+source $TOP_DIR/stackrc
19
+
20
+# Get the variables that are set in stack.sh
21
+source $TOP_DIR/.stackenv
22
+
23
+# Determine what system we are running on.  This provides ``os_VENDOR``,
24
+# ``os_RELEASE``, ``os_UPDATE``, ``os_PACKAGE``, ``os_CODENAME``
25
+# and ``DISTRO``
26
+GetDistro
27
+
28
+
29
+# Import database library
30
+source $TOP_DIR/lib/database
31
+source $TOP_DIR/lib/rpc_backend
32
+
33
+source $TOP_DIR/lib/tls
34
+source $TOP_DIR/lib/horizon
35
+source $TOP_DIR/lib/keystone
36
+source $TOP_DIR/lib/glance
37
+source $TOP_DIR/lib/nova
38
+source $TOP_DIR/lib/cinder
39
+source $TOP_DIR/lib/swift
40
+source $TOP_DIR/lib/ceilometer
41
+source $TOP_DIR/lib/heat
42
+source $TOP_DIR/lib/quantum
43
+source $TOP_DIR/lib/baremetal
44
+source $TOP_DIR/lib/ldap
45
+
46
+
47
+# See if there is anything running...
48
+# need to adapt when run_service is merged
49
+SESSION=$(screen -ls | awk '/[0-9].stack/ { print $1 }')
50
+if [[ -n "$SESSION" ]]; then
51
+    # Let unstack.sh do its thing first
52
+    $TOP_DIR/unstack.sh --all
53
+fi
54
+
55
+# Clean projects
56
+cleanup_cinder
57
+cleanup_glance
58
+cleanup_keystone
59
+cleanup_nova
60
+cleanup_quantum
61
+cleanup_swift
62
+
63
+# cinder doesn't clean up the volume group as it might be used elsewhere...
64
+# clean it up if it is a loop device
65
+VG_DEV=$(sudo losetup -j $DATA_DIR/${VOLUME_GROUP}-backing-file | awk -F':' '/backing-file/ { print $1}')
66
+if [[ -n "$VG_DEV" ]]; then
67
+    sudo losetup -d $VG_DEV
68
+fi
69
+
70
+#if mount | grep $DATA_DIR/swift/drives; then
71
+#  sudo umount $DATA_DIR/swift/drives/sdb1
72
+#fi
73
+
74
+
75
+# Clean out /etc
76
+sudo rm -rf /etc/keystone /etc/glance /etc/nova /etc/cinder /etc/swift
77
+
78
+# Clean out tgt
79
+sudo rm /etc/tgt/conf.d/*
80
+
81
+# Clean up the message queue
82
+cleanup_rpc_backend
83
+cleanup_database
84
+
85
+# Clean up networking...
86
+# should this be in nova?
87
+# FIXED_IP_ADDR in br100
88
+
89
+# Clean up files
90
+#rm -f .stackenv
... ...
@@ -775,6 +775,21 @@ function install_package() {
775 775
 }
776 776
 
777 777
 
778
+# Distro-agnostic package uninstaller
779
+# uninstall_package package [package ...]
780
+function uninstall_package() {
781
+    if is_ubuntu; then
782
+        apt_get purge "$@"
783
+    elif is_fedora; then
784
+        yum remove -y "$@"
785
+    elif is_suse; then
786
+        rpm -e "$@"
787
+    else
788
+        exit_distro_not_supported "uninstalling packages"
789
+    fi
790
+}
791
+
792
+
778 793
 # Distro-agnostic function to tell if a package is installed
779 794
 # is_package_installed package [package ...]
780 795
 function is_package_installed() {
... ...
@@ -42,6 +42,11 @@ done
42 42
 # This is not an error as multi-node installs will do this on the compute nodes
43 43
 
44 44
 
45
+# Get rid of everything enough to cleanly change database backends
46
+function cleanup_database {
47
+    cleanup_database_$DATABASE_TYPE
48
+}
49
+
45 50
 # Set the database type based on the configuration
46 51
 function initialize_database_backends {
47 52
     for backend in $DATABASE_BACKENDS; do
... ...
@@ -10,6 +10,24 @@ set +o xtrace
10 10
 
11 11
 register_database mysql
12 12
 
13
+# Get rid of everything enough to cleanly change database backends
14
+function cleanup_database_mysql {
15
+    if is_ubuntu; then
16
+        # Get ruthless with mysql
17
+        stop_service $MYSQL
18
+        sudo aptitude purge -y ~nmysql-server
19
+        sudo rm -rf /var/lib/mysql
20
+        return
21
+    elif is_fedora; then
22
+        MYSQL=mysqld
23
+    elif is_suse; then
24
+        MYSQL=mysql
25
+    else
26
+        return
27
+    fi
28
+    stop_service $MYSQL
29
+}
30
+
13 31
 function recreate_database_mysql {
14 32
     local db=$1
15 33
     local charset=$2
... ...
@@ -10,6 +10,20 @@ set +o xtrace
10 10
 
11 11
 register_database postgresql
12 12
 
13
+# Get rid of everything enough to cleanly change database backends
14
+function cleanup_database_postgresql {
15
+    stop_service postgresql
16
+    if is_ubuntu; then
17
+        # Get ruthless with mysql
18
+        sudo aptitude purge -y  ~npostgresql
19
+        return
20
+    elif is_fedora; then
21
+        uninstall_package postgresql-server
22
+    else
23
+        return
24
+    fi
25
+}
26
+
13 27
 function recreate_database_postgresql {
14 28
     local db=$1
15 29
     local charset=$2
... ...
@@ -59,8 +59,7 @@ GLANCE_HOSTPORT=${GLANCE_HOSTPORT:-$SERVICE_HOST:9292}
59 59
 function cleanup_glance() {
60 60
     # kill instances (nova)
61 61
     # delete image files (glance)
62
-    # This function intentionally left blank
63
-    :
62
+    sudo rm -rf $GLANCE_CACHE_DIR $GLANCE_IMAGE_DIR $GLANCE_AUTH_CACHE_DIR
64 63
 }
65 64
 
66 65
 # configure_glanceclient() - Set config files, create data dirs, etc
... ...
@@ -106,6 +106,8 @@ function cleanup_nova() {
106 106
         # Clean out the instances directory.
107 107
         sudo rm -rf $NOVA_INSTANCES_PATH/*
108 108
     fi
109
+
110
+    sudo rm -rf $NOVA_STATE_PATH $NOVA_AUTH_CACHE_DIR
109 111
 }
110 112
 
111 113
 # configure_novaclient() - Set config files, create data dirs, etc
... ...
@@ -308,9 +310,6 @@ EOF"
308 308
                 sudo chown -R $STACK_USER $NOVA_INSTANCES_PATH
309 309
             fi
310 310
         fi
311
-
312
-        # Clean up old instances
313
-        cleanup_nova
314 311
     fi
315 312
 }
316 313
 
... ...
@@ -211,8 +211,6 @@ function configure_quantum() {
211 211
     fi
212 212
 
213 213
     _configure_quantum_debug_command
214
-
215
-    _cleanup_quantum
216 214
 }
217 215
 
218 216
 function create_nova_conf_quantum() {
... ...
@@ -385,9 +383,9 @@ function stop_quantum() {
385 385
     fi
386 386
 }
387 387
 
388
-# _cleanup_quantum() - Remove residual data files, anything left over from previous
388
+# cleanup_quantum() - Remove residual data files, anything left over from previous
389 389
 # runs that a clean run would need to clean up
390
-function _cleanup_quantum() {
390
+function cleanup_quantum() {
391 391
     :
392 392
 }
393 393
 
... ...
@@ -43,6 +43,38 @@ function check_rpc_backend() {
43 43
     fi
44 44
 }
45 45
 
46
+# clean up after rpc backend - eradicate all traces so changing backends
47
+# produces a clean switch
48
+function cleanup_rpc_backend {
49
+    if is_service_enabled rabbit; then
50
+        # Obliterate rabbitmq-server
51
+        uninstall_package rabbitmq-server
52
+        sudo killall epmd
53
+        if is_ubuntu; then
54
+            # And the Erlang runtime too
55
+            sudo aptitude purge -y ~nerlang
56
+        fi
57
+    elif is_service_enabled qpid; then
58
+        if is_fedora; then
59
+            uninstall_package qpid-cpp-server-daemon
60
+        elif is_ubuntu; then
61
+            uninstall_package qpidd
62
+        else
63
+            exit_distro_not_supported "qpid installation"
64
+        fi
65
+    elif is_service_enabled zeromq; then
66
+        if is_fedora; then
67
+            uninstall_package zeromq python-zmq
68
+        elif is_ubuntu; then
69
+            uninstall_package libzmq1 python-zmq
70
+        elif is_suse; then
71
+            uninstall_package libzmq1 python-pyzmq
72
+        else
73
+            exit_distro_not_supported "zeromq installation"
74
+        fi
75
+    fi
76
+}
77
+
46 78
 # install rpc backend
47 79
 function install_rpc_backend() {
48 80
     if is_service_enabled rabbit; then
... ...
@@ -388,9 +388,11 @@ function start_swift() {
388 388
 # stop_swift() - Stop running processes (non-screen)
389 389
 function stop_swift() {
390 390
     # screen normally killed by unstack.sh
391
-    if type -p swift-init >/dev/null;then
391
+    if type -p swift-init >/dev/null; then
392 392
         swift-init --run-dir=${SWIFT_DATA_DIR}/run all stop || true
393 393
     fi
394
+    # Dump the proxy server
395
+    sudo pkill -f swift-proxy-server
394 396
 }
395 397
 
396 398
 # Restore xtrace
... ...
@@ -725,6 +725,8 @@ fi
725 725
 configure_glanceclient
726 726
 
727 727
 if is_service_enabled nova; then
728
+    # First clean up old instances
729
+    cleanup_nova
728 730
     configure_nova
729 731
 fi
730 732
 if is_service_enabled horizon; then