Beispiel #1
0
    def okClicked(self, *args):
        createDatastore = False
        name = getSelectionFromView(self.view, column=STORAGEVIEW_DISK_ENTRY)
        assert not name or name in self.diskSet.keys()
        if not name:
            MessageWindow(None, "Storage Selection Error",
                          "Select a place to create the new datastore.")
        else:
            # check and prompt if there is already a vmfs partition on the
            # device
            createDatastore = \
                storage_widgets.promptDeviceHasExistingData(name, False)

            # update the 'Device:' textentry with the appropriate drive name
            if createDatastore == storage_widgets.EXISTING_DATA_CLEAR_DRIVE:
                self.parent.updateCreateDatastore(name)
                self.hide()
Beispiel #2
0
    def okClicked(self, *args):
        createDatastore = False
        name = getSelectionFromView(self.view, column=STORAGEVIEW_DISK_ENTRY)
        assert not name or name in self.diskSet.keys()
        if not name:
            MessageWindow(None,
                "Storage Selection Error",
                "Select a place to create the new datastore.")
        else:
            # check and prompt if there is already a vmfs partition on the
            # device
            createDatastore = \
                storage_widgets.promptDeviceHasExistingData(name, False)

            # update the 'Device:' textentry with the appropriate drive name
            if createDatastore == storage_widgets.EXISTING_DATA_CLEAR_DRIVE:
                self.parent.updateCreateDatastore(name)
                self.hide()
Beispiel #3
0
    def getNext(self):
        haveMountPoint = bool(userchoices.getPartitionMountRequests())

        userchoices.clearPhysicalPartitionRequests()
        userchoices.clearPartitionMountRequests()
        userchoices.clearExistingVmdkLocation()

        (model, diskIter) = self.view.get_selection().get_selected()
        if diskIter and model.get(diskIter, STORAGEVIEW_DISK_ENTRY)[0]:
            drive = model.get(diskIter, STORAGEVIEW_DISK_ENTRY)[0]

            log.debug("Selected drive %s" % (drive))

            diskSet = devices.DiskSet()
            datastoreSet = datastore.DatastoreSet()

            rc = storage_widgets.promptDeviceHasExistingData(drive)

            if rc == storage_widgets.EXISTING_DATA_STAY_ON_SCREEN:
                raise exception.StayOnScreen
            elif rc == storage_widgets.EXISTING_DATA_PRESERVE_VMFS:
                vmdkPath = \
                    esxconf.runtimeActionExtractVmdkPathFromInitrd(drive)
                vmdkSize = \
                    devices.runtimeActionFindExistingVmdkSize(vmdkPath)

                log.debug("VMDK Size = %d Path = %s" % (vmdkSize, vmdkPath))

                if vmdkSize > 0:
                    vmdkCheckBox = True

                    # only turn off the preserveVmdk check button if
                    # we're on the install location screen since the user
                    # can choose to put the vmdk on a different datastore
                    # on the esxlocation screen

                    if self.SCREEN_NAME == 'installlocation':
                        ds = datastoreSet.getEntriesByDriveName(drive)[0]
                        freeSize = ds.getFreeSize() / 1024 / 1024
                        requestSize = partition.getRequestsSize(
                                          partition.getDefaultVirtualRequests())

                        if freeSize + vmdkSize <= requestSize + VMFS_OVERHEAD:
                            MessageWindow(None, "No Free Space",
                                storage_widgets.COSVMDK_TOTALLY_FULL)
                            raise exception.StayOnScreen

                        elif freeSize < requestSize:
                            vmdkCheckBox = False

                    preserveVmdk = PreserveCosVmdkWindow(vmdkCheckBox).run()
                    if preserveVmdk == -1:
                        raise exception.StayOnScreen
                    elif preserveVmdk == 1:
                        pass
                    else:
                        userchoices.setExistingVmdkLocation(vmdkPath)

                # Set up virtual disk and settings
                datastore.preserveDatastoreOnDrive(drive)

                if self.SCREEN_NAME == 'esxlocation':
                    userchoices.setEsxPhysicalDevice(drive)
                    userchoices.setResetEsxLocation(True)

            elif rc == storage_widgets.EXISTING_DATA_CLEAR_DRIVE:
                if self.SCREEN_NAME == 'installlocation':
                    partition.addDefaultPartitionRequests(diskSet[drive])

                else:
                    # clear out the datastore options if the user has changed
                    # their mind about which drive to use -- this will get
                    # changed back to false on the next screen
                    if drive != userchoices.getEsxPhysicalDevice() or \
                       haveMountPoint:
                        userchoices.setResetEsxLocation(True)
                    else:
                        userchoices.setResetEsxLocation(False)

                    userchoices.setEsxPhysicalDevice(drive)
            else:
                raise ValueError, "Got unexpected return code"

        else:
            MessageWindow(self.controlState.gui.getWindow(),
                "Storage Selection Error",
                "You must select a place to install ESX.")
            raise exception.StayOnScreen
    def getNext(self):
        haveMountPoint = bool(userchoices.getPartitionMountRequests())

        userchoices.clearPhysicalPartitionRequests()
        userchoices.clearPartitionMountRequests()
        userchoices.clearExistingVmdkLocation()

        (model, diskIter) = self.view.get_selection().get_selected()
        if diskIter and model.get(diskIter, STORAGEVIEW_DISK_ENTRY)[0]:
            drive = model.get(diskIter, STORAGEVIEW_DISK_ENTRY)[0]

            log.debug("Selected drive %s" % (drive))

            diskSet = devices.DiskSet()
            datastoreSet = datastore.DatastoreSet()

            rc = storage_widgets.promptDeviceHasExistingData(drive)

            if rc == storage_widgets.EXISTING_DATA_STAY_ON_SCREEN:
                raise exception.StayOnScreen
            elif rc == storage_widgets.EXISTING_DATA_PRESERVE_VMFS:
                vmdkPath = \
                    esxconf.runtimeActionExtractVmdkPathFromInitrd(drive)
                vmdkSize = \
                    devices.runtimeActionFindExistingVmdkSize(vmdkPath)

                log.debug("VMDK Size = %d Path = %s" % (vmdkSize, vmdkPath))

                if vmdkSize > 0:
                    vmdkCheckBox = True

                    # only turn off the preserveVmdk check button if
                    # we're on the install location screen since the user
                    # can choose to put the vmdk on a different datastore
                    # on the esxlocation screen

                    if self.SCREEN_NAME == 'installlocation':
                        ds = datastoreSet.getEntriesByDriveName(drive)[0]
                        freeSize = ds.getFreeSize() / 1024 / 1024
                        requestSize = partition.getRequestsSize(
                            partition.getDefaultVirtualRequests())

                        if freeSize + vmdkSize <= requestSize + VMFS_OVERHEAD:
                            MessageWindow(None, "No Free Space",
                                          storage_widgets.COSVMDK_TOTALLY_FULL)
                            raise exception.StayOnScreen

                        elif freeSize < requestSize:
                            vmdkCheckBox = False

                    preserveVmdk = PreserveCosVmdkWindow(vmdkCheckBox).run()
                    if preserveVmdk == -1:
                        raise exception.StayOnScreen
                    elif preserveVmdk == 1:
                        pass
                    else:
                        userchoices.setExistingVmdkLocation(vmdkPath)

                # Set up virtual disk and settings
                datastore.preserveDatastoreOnDrive(drive)

                if self.SCREEN_NAME == 'esxlocation':
                    userchoices.setEsxPhysicalDevice(drive)
                    userchoices.setResetEsxLocation(True)

            elif rc == storage_widgets.EXISTING_DATA_CLEAR_DRIVE:
                if self.SCREEN_NAME == 'installlocation':
                    partition.addDefaultPartitionRequests(diskSet[drive])

                else:
                    # clear out the datastore options if the user has changed
                    # their mind about which drive to use -- this will get
                    # changed back to false on the next screen
                    if drive != userchoices.getEsxPhysicalDevice() or \
                       haveMountPoint:
                        userchoices.setResetEsxLocation(True)
                    else:
                        userchoices.setResetEsxLocation(False)

                    userchoices.setEsxPhysicalDevice(drive)
            else:
                raise ValueError, "Got unexpected return code"

        else:
            MessageWindow(self.controlState.gui.getWindow(),
                          "Storage Selection Error",
                          "You must select a place to install ESX.")
            raise exception.StayOnScreen