On 03/24/2010 09:03 AM, Mike Burns wrote:
Previous implementation had staticly defined partitions to remove.
This would break in the case of split Root and HostVG devices.

Signed-off-by: Mike Burns<[email protected]>
---
  scripts/ovirt-config-boot      |   11 +--------
  scripts/ovirt-config-uninstall |   48 ++++++++++++++++++++++++---------------
  scripts/ovirt-functions        |   33 +++++++++++++++++++++++++++
  3 files changed, 63 insertions(+), 29 deletions(-)

diff --git a/scripts/ovirt-config-boot b/scripts/ovirt-config-boot
index 28d1572..ac43daa 100755
--- a/scripts/ovirt-config-boot
+++ b/scripts/ovirt-config-boot
@@ -50,12 +50,7 @@ ovirt_boot_setup() {
      fi

      # check that /boot mounted ok and find partition number for GRUB
-    eval $(readlink -f /dev/disk/by-label/$grub_dev_label|awk {'
-        print "disk=" substr($1,1,length($1)-1);
-        print "disk2=" substr($1,1,length($1)-2);
-        partN=substr($1,length($1),1); partN--;
-        print "partN=" partN;
-    }')
+    get_part_info $(readlink -f /dev/disk/by-label/$grub_dev_label disk partN
      rc=$?
      if [ $rc -ne 0 -o $partN -lt 0 ]; then
        log "unable to determine Root partition"
@@ -70,10 +65,6 @@ ovirt_boot_setup() {
            return 1
          fi

-        if [ ! -e "$disk" ]; then
-            # e.g. c0d0p1
-            disk="$disk2"
-        fi
          # prepare Root partition update
          candidate=
          if [ -e /dev/disk/by-label/RootBackup ]; then
diff --git a/scripts/ovirt-config-uninstall b/scripts/ovirt-config-uninstall
index 3b7b48d..b6675e7 100755
--- a/scripts/ovirt-config-uninstall
+++ b/scripts/ovirt-config-uninstall
@@ -37,27 +37,37 @@ if ask_yes_or_no "Do you wish to continue and uninstall this 
node ([Y]es/[N]o)?"
          rm -f /var/lib/multipath/bindings
          unmount_logging
          unmount_config /etc/default/ovirt
+        #get partition info
+        root2=""
+        if findfs LABEL=RootBackup 2>&1>/dev/null; then
+            root2=RootBackup
+        elif findfs LABEL=RootUpdate 2>&1>/dev/null; then
+            root2=RootUpdate
+        elif findfs LABEL=RootNew 2>&1>/dev/null; then
+            root2=RootNew
+        fi
+        if ! get_part_info $(findfs LABEL=Root 2>/dev/null) root_dev 
root_part; then
+            log "Can't find Root device"
+            exit 2
+        fi
+        if ! get_part_info $(findfs LABEL=${root2} 2>/dev/null) root2_dev 
root2_part; then
+            log "Can't find RootBackup/RootNew/RootUpdate device"
+            exit 3
+        fi
+        if ! get_part_info $(pvs --noheadings -o pv_name,vg_name | grep HostVG 
| awk '{print $1}') pv_dev pv_part; then
+            log "Can't find HostVG device"
+            exit 4
+        fi
          log "Removing volume group"
          wipe_volume_group "HostVG"
-        partition=$(readlink -f $(findfs LABEL=Root))
-        if [ -n "$partition" ]; then
-            log "Removing partitions"
-            eval $(echo $partition | awk ' {
-                print "drive=" substr($0,1,length($1)-1);
-                print "drive2=" substr($0,1,length($1)-2);
-            }')
-            if [ ! -e "$drive" ]; then
-                drive="$drive2"
-                partpv="$drive}p2"
-            else
-                partpv="${drive}2"
-            fi
-               parted -s $drive "rm 1"
-            pvremove ${partpv}
-               parted -s $drive "rm 2"
-            parted -s $drive "rm 3"
-            wipe_partitions $drive
-           fi
+        log "Removing partitions"
+        parted -s $root_dev "rm $root_part"
+        pvremove ${vg_dev}
+        parted -s $root2_dev "rm $root2_part"
+        parted -s $vg_dev "rm $vg_part"
+        wipe_partitions $pv_dev
+        wipe_partitions $root_dev
+        wipe_partitions $root2_dev
          #restart multipath
          multipath -F
          multipath -v3
diff --git a/scripts/ovirt-functions b/scripts/ovirt-functions
index c2ef94b..b98e31a 100644
--- a/scripts/ovirt-functions
+++ b/scripts/ovirt-functions
@@ -851,6 +851,39 @@ get_dm_device ()
      return $rc
  }

+#Function to determine partition and device names
+get_part_info() {
+    local drive_in=$1
+    local dev_var=$2
+    local part_var=$3
+    local devname_1 devname2 part_number
+    local rc=0
+
+    eval $(readlink -f $drive_in|awk {'
+        print "devname_1=" substr($1,1,length($1)-1);
+        print "devname_2=" substr($1,1,length($1)-2);
+        part_number=substr($1,length($1),1);
+        print "part_number=" part_number;
+    }')
+    rc=$?
+
+    if [[ "part_number" -lt 1 ]]; then
+        log "Partition number was invalid"
+        return 2
+    fi
+
+
+    if [ -e ${devname_1} ]; then
+        eval "${dev_var}"="${devname_1}"
+    elif [ -e ${devname_2} ]; then
+        eval "${dev_var}"="${devname_2}"
+    else
+        return 1
+    fi
+    eval "${part_var}"="${part_number}"
+    return $rc
+}
+
  # execute a function if called as a script, e.g.
  #   ovirt-functions ovirt_store_config /etc/hosts

ACK

_______________________________________________
Ovirt-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/ovirt-devel

Reply via email to