Browse code

Clean out old instances and iptables rules

Fixes bug 905344

Change-Id: I844a90246bace792d293ef2df9504fb654104e4b

Anthony Young authored on 2011/12/17 09:21:49
Showing 1 changed files
... ...
@@ -88,6 +88,13 @@ function apt_get() {
88 88
         --option "Dpkg::Options::=--force-confold" --assume-yes "$@"
89 89
 }
90 90
 
91
+# Check to see if we are already running a stack.sh
92
+if screen -ls | egrep -q "[0-9].stack"; then
93
+    echo "You are already running a stack.sh session."
94
+    echo "To rejoin this session type 'screen -x stack'."
95
+    echo "To destroy this session, kill the running screen."
96
+    exit 1
97
+fi
91 98
 
92 99
 # OpenStack is designed to be run as a regular user (Horizon will fail to run
93 100
 # as root, since apache refused to startup serve content from root user).  If
... ...
@@ -165,6 +172,7 @@ ENABLED_SERVICES=${ENABLED_SERVICES:-g-api,g-reg,key,n-api,n-cpu,n-net,n-sch,n-v
165 165
 # Name of the lvm volume group to use/create for iscsi volumes
166 166
 VOLUME_GROUP=${VOLUME_GROUP:-nova-volumes}
167 167
 VOLUME_NAME_PREFIX=${VOLUME_NAME_PREFIX:-volume-}
168
+INSTANCE_NAME_PREFIX=${INSTANCE_NAME_PREFIX:-instance-}
168 169
 
169 170
 # Nova hypervisor configuration.  We default to libvirt whth  **kvm** but will
170 171
 # drop back to **qemu** if we are unable to load the kvm module.  Stack.sh can
... ...
@@ -733,6 +741,18 @@ if [[ "$ENABLED_SERVICES" =~ "n-api" ]]; then
733 733
     sed -e "s,%SERVICE_TOKEN%,$SERVICE_TOKEN,g" -i $NOVA_DIR/bin/nova-api-paste.ini
734 734
 fi
735 735
 
736
+# Helper to clean iptables rules
737
+function clean_iptables() {
738
+    # Delete rules
739
+    sudo iptables -S -v | sed "s/-c [0-9]* [0-9]* //g" | grep "nova" | grep "\-A" |  sed "s/-A/-D/g" | awk '{print "sudo iptables",$0}' | bash
740
+    # Delete nat rules
741
+    sudo iptables -S -v -t nat | sed "s/-c [0-9]* [0-9]* //g" | grep "nova" |  grep "\-A" | sed "s/-A/-D/g" | awk '{print "sudo iptables -t nat",$0}' | bash
742
+    # Delete chains
743
+    sudo iptables -S -v | sed "s/-c [0-9]* [0-9]* //g" | grep "nova" | grep "\-N" |  sed "s/-N/-X/g" | awk '{print "sudo iptables",$0}' | bash
744
+    # Delete nat chains
745
+    sudo iptables -S -v -t nat | sed "s/-c [0-9]* [0-9]* //g" | grep "nova" |  grep "\-N" | sed "s/-N/-X/g" | awk '{print "sudo iptables -t nat",$0}' | bash
746
+}
747
+
736 748
 if [[ "$ENABLED_SERVICES" =~ "n-cpu" ]]; then
737 749
 
738 750
     # Virtualization Configuration
... ...
@@ -796,13 +816,24 @@ if [[ "$ENABLED_SERVICES" =~ "n-cpu" ]]; then
796 796
         fi
797 797
     fi
798 798
 
799
+    # Clean iptables from previous runs
800
+    clean_iptables
801
+
802
+    # Destroy old instances
803
+    instances=`virsh list | grep $INSTANCE_NAME_PREFIX | cut -d " " -f3`
804
+    if [ ! $instances = "" ]; then
805
+        echo $instances | xargs -n1 virsh destroy
806
+        echo $instances | xargs -n1 virsh undefine
807
+    fi
808
+
799 809
     # Clean out the instances directory.
800 810
     sudo rm -rf $NOVA_DIR/instances/*
801 811
 fi
802 812
 
803 813
 if [[ "$ENABLED_SERVICES" =~ "n-net" ]]; then
804
-    # delete traces of nova networks from prior runs
814
+    # Delete traces of nova networks from prior runs
805 815
     sudo killall dnsmasq || true
816
+    clean_iptables
806 817
     rm -rf $NOVA_DIR/networks
807 818
     mkdir -p $NOVA_DIR/networks
808 819
 fi
... ...
@@ -1012,6 +1043,7 @@ add_nova_flag "--public_interface=$PUBLIC_INTERFACE"
1012 1012
 add_nova_flag "--vlan_interface=$VLAN_INTERFACE"
1013 1013
 add_nova_flag "--sql_connection=$BASE_SQL_CONN/nova"
1014 1014
 add_nova_flag "--libvirt_type=$LIBVIRT_TYPE"
1015
+add_nova_flag "--instance_name_template=${INSTANCE_NAME_PREFIX}%08x"
1015 1016
 if [[ "$ENABLED_SERVICES" =~ "openstackx" ]]; then
1016 1017
     add_nova_flag "--osapi_extension=nova.api.openstack.v2.contrib.standard_extensions"
1017 1018
     add_nova_flag "--osapi_extension=extensions.admin.Admin"