On 02/24/2010 12:47 PM, Mike Burns wrote:
Allow the user to install on a device that already contains HostVG.
Fail install if HostVG exists on a different drive.

Signed-off-by: Mike Burns<[email protected]>
---
  scripts/ovirt-config-storage |   81 +++++++++++++++++++++++++++++++++++++----
  1 files changed, 73 insertions(+), 8 deletions(-)

diff --git a/scripts/ovirt-config-storage b/scripts/ovirt-config-storage
index a16126c..44389f3 100755
--- a/scripts/ovirt-config-storage
+++ b/scripts/ovirt-config-storage
@@ -349,6 +349,24 @@ do_configure()

          printf "\n\nPlease select the disk to use for the HostVG.\n\n"
          HOSTVGDRIVE=$(get_dev_name) || return 0
+        local skipped=false
+        if check_existing_hostvg $HOSTVGDRIVE devs; then
+            for dev in $devs
+            do
+                printf "Removing HostVG on $dev will erase the drive and cannot be 
undone\n"
+                if ask_yes_or_no "Do you want to remove HostVG from $dev 
(y/n)?"; then
+                    start_log
+                    if ! wipe_lvm_on_disk $dev; then
+                        stop_log
+                        return 1
+                    fi
+                    stop_log
+                else
+                    skipped=true
+                fi
+            done
+        fi
+        $skipped&&  printf "Installation cannot proceed with existing 
HostVG.\n"&&  return 0
          get_drive_size $HOSTVGDRIVE HOSTVGDRIVESPACE
          echo $HOSTVGDRIVESPACE
      fi
@@ -488,15 +506,59 @@ EOF
      return ${is_negative-0}
  }

+#Check for an existing HostVG on any device on the system.
+# Return 0 if then is a HostVG found, unless only one found is on $1
+# Return 1 if no HostVG found or only found on $1
+check_existing_hostvg()
+{
+    local install_dev=$1
+    local devices_var=$2
+    if [ -z "$install_dev" ]; then
+        devices="$(pvs -o pv_name,vg_name --noheadings | \
+            grep "HostVG" | awk '{print $1}' )"
+    else
+        devices="$(pvs -o pv_name,vg_name --noheadings | \
+            grep -v ${install_dev} | grep "HostVG" | awk '{print $1}' )"
+    fi
+    rc=1
+    if [ -n "$devices" ]; then
+        printf "\n"
+        printf "There appears to already be an installation on another 
device:\n"
+        for device in $devices; do
+            get_multipath_devices ${device%p[0-9]} sd_dev
+            sd_dev=$(echo $sd_dev | awk '{print $1}')
+            udi=$(hal-find-by-property --key block.device --string 
/dev/${sd_dev})
+            printf "\t$device ($(basename "$udi"))\n"
+        done
+        printf "The installation cannot proceed until the device is removed\n"
+        printf "from the system of the HostVG volume group is removed.\n"
+        rc=0
+    fi
+
+    test -z $devices_var || eval $devices_var=$devices
+
+    return $rc
+
+}
+
  # cleanup lvms on selected disk
  # - remove mounted filesystems
  # - remove LVM volumes and groups
  wipe_lvm_on_disk()
  {
+    local dev=${1-$HOSTVGDRIVE}
      unmount_logging
      for vg in $(pvs -o vg_name --noheadings $HOSTVGDRIVE* 2>/dev/null|sort 
-u); do
+        if pvs -o pv_name,vg_name --noheadings | \
+            grep $vg | grep -v -q $dev* 2>/dev/null; then
+            log "The volume group \"$vg\" spans multiple disks."
+            log "This operation cannot complete.  Please manullay"
+            log "cleanup the storage using standard linux tools."
+            return 1
+        fi
          wipe_volume_group $vg
      done
+    return 0
  }


@@ -867,19 +929,22 @@ if [ "$1" == "AUTO" ]; then
      log "Beginning automatic disk partitioning.\n"
      if [ -n "$OVIRT_INIT" ]; then
          # do not format if HostVG exists on selected disk...
-       pvs -o vg_name --noheadings $HOSTVGDRIVE* 2>/dev/null|grep -q -m1 
"HostVG"
-       existingHostVG=$?
+        check_existing_hostvg $HOSTVGDRIVE
+        existingHostVG=$?
          # ... unless overridden by ovirt_firstboot parameter
-       if is_firstboot || [ $existingHostVG -ne 0 ]; then
+        if is_firstboot || [ $existingHostVG -ne 0 ]; then
              if check_partition_sizes; then
-               log "Partitioning hard disk..."
-               perform_partitioning
+                       log "Partitioning hard disk..."
+                perform_partitioning
+                exit $?
              fi
-       else
+        else
              log "Skip disk partitioning, HostVG exists"
-       fi
+            exit 1
+        fi
      else
-       log "Missing device parameter: unable to partition any disk"
+        log "Missing device parameter: unable to partition any disk"
+        exit 2
      fi
  else
      OPTIONS="\"Enable iSCSI Target\" \"Configure Storage\" \"Review\" \"Commit Changes And 
Quit\" \"Return To Menu\""
ACK

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

Reply via email to