def teardownVolumePath(self, drive): res = {'status': doneCode} try: if vm.isVdsmImage(drive): res = self.irs.teardownImage(drive['domainID'], drive['poolID'], drive['imageID']) except TypeError: # paths (strings) are not deactivated if not isinstance(drive, basestring): self.log.warning("Drive is not a vdsm image: %s", drive, exc_info=True) return res['status']['code']
def prepareVolumePath(self, drive, vmId=None): if type(drive) is dict: # PDIV drive format if drive['device'] == 'disk' and vm.isVdsmImage(drive): res = self.irs.prepareImage(drive['domainID'], drive['poolID'], drive['imageID'], drive['volumeID']) if res['status']['code']: raise vm.VolumeError(drive) volPath = res['path'] drive['volumeChain'] = res['chain'] # GUID drive format elif drive.has_key("GUID"): volPath = os.path.join("/dev/mapper", drive["GUID"]) if not os.path.exists(volPath): raise vm.VolumeError(drive) res = self.irs.appropriateDevice(drive["GUID"], vmId) if res['status']['code']: raise vm.VolumeError(drive) # UUID drive format elif drive.has_key("UUID"): volPath = self._getUUIDSpecPath(drive["UUID"]) elif drive.has_key("path"): volPath = drive['path'] # For BC sake: None as argument elif not drive: volPath = drive # For BC sake: path as a string. elif os.path.exists(drive): volPath = drive else: raise vm.VolumeError(drive) self.log.info("prepared volume path: %s", volPath) return volPath
def prepareVolumePath(self, drive, vmId=None): if type(drive) is dict: # PDIV drive format if drive['device'] == 'disk' and vm.isVdsmImage(drive): res = self.irs.prepareImage( drive['domainID'], drive['poolID'], drive['imageID'], drive['volumeID']) if res['status']['code']: raise vm.VolumeError(drive) volPath = res['path'] # The order of imgVolumesInfo is not guaranteed drive['volumeChain'] = res['imgVolumesInfo'] drive['volumeInfo'] = res['info'] # GUID drive format elif "GUID" in drive: res = self.irs.getDevicesVisibility([drive["GUID"]]) if not res["visible"][drive["GUID"]]: raise vm.VolumeError(drive) res = self.irs.appropriateDevice(drive["GUID"], vmId) if res['status']['code']: raise vm.VolumeError(drive) volPath = os.path.join("/dev/mapper", drive["GUID"]) # UUID drive format elif "UUID" in drive: volPath = self._getUUIDSpecPath(drive["UUID"]) # leave path == '' for empty cdrom and floppy drives ... elif (drive['device'] in ('cdrom', 'floppy') and 'specParams' in drive and # next line can be removed in future, when < 3.3 engine # is not supported drive['specParams'].get('path', '') == '' and drive.get('path', '') == '' and 'vmPayload' not in drive['specParams']): volPath = '' # ... or load the drive from vmPayload: elif drive['device'] in ('cdrom', 'floppy') and \ 'specParams' in drive and \ 'vmPayload' in drive['specParams']: ''' vmPayload is a key in specParams 'vmPayload': {'volId': 'volume id', # volId is optional 'file': {'filename': 'content', ...}} ''' mkFsNames = {'cdrom': 'mkIsoFs', 'floppy': 'mkFloppyFs'} try: mkFsFunction = getattr(supervdsm.getProxy(), mkFsNames[drive['device']]) except AttributeError: raise vm.VolumeError("Unsupported 'device': %s in " "drive: %" % (drive['device'], drive)) else: files = drive['specParams']['vmPayload']['file'] volId = drive['specParams']['vmPayload'].get('volId') volPath = mkFsFunction(vmId, files, volId) elif "path" in drive: volPath = drive['path'] else: raise vm.VolumeError(drive) # For BC sake: None as argument elif not drive: volPath = drive # For BC sake: path as a string. elif os.path.exists(drive): volPath = drive else: raise vm.VolumeError(drive) self.log.info("prepared volume path: %s", volPath) return volPath
def prepareVolumePath(self, drive, vmId=None): if type(drive) is dict: # PDIV drive format if drive['device'] == 'disk' and vm.isVdsmImage(drive): res = self.irs.prepareImage(drive['domainID'], drive['poolID'], drive['imageID'], drive['volumeID']) if res['status']['code']: raise vm.VolumeError(drive) volPath = res['path'] drive['volumeChain'] = res['chain'] drive['volumeInfo'] = res['info'] # GUID drive format elif "GUID" in drive: visible = self.irs.scanDevicesVisibility([drive["GUID"]]) if visible[drive["GUID"]] is False: self.log.error("GUID: %s is not visible", drive["GUID"]) raise vm.VolumeError(drive) volPath = os.path.join("/dev/mapper", drive["GUID"]) res = self.irs.appropriateDevice(drive["GUID"], vmId) if res['status']['code']: self.log.error("Change ownership on device %s failed", drive["GUID"]) raise vm.VolumeError(drive) # UUID drive format elif "UUID" in drive: volPath = self._getUUIDSpecPath(drive["UUID"]) # leave path == '' for empty cdrom and floppy drives ... elif drive['device'] in ('cdrom', 'floppy') and \ 'specParams' in drive and \ 'path' in drive['specParams'] and \ drive['specParams']['path'] == '': volPath = '' # ... or load the drive from vmPayload: elif drive['device'] in ('cdrom', 'floppy') and \ 'specParams' in drive and \ 'vmPayload' in drive['specParams']: ''' vmPayload is a key in specParams 'vmPayload': {'volId': 'volume id', # volId is optional 'file': {'filename': 'content', ...}} ''' mkFsNames = {'cdrom': 'mkIsoFs', 'floppy': 'mkFloppyFs'} try: mkFsFunction = getattr(supervdsm.getProxy(), mkFsNames[drive['device']]) except AttributeError: raise vm.VolumeError("Unsupported 'device': %s in " "drive: %" % (drive['device'], drive)) else: files = drive['specParams']['vmPayload']['file'] volId = drive['specParams']['vmPayload'].get('volId') volPath = mkFsFunction(vmId, files, volId) elif "path" in drive: volPath = drive['path'] else: raise vm.VolumeError(drive) # For BC sake: None as argument elif not drive: volPath = drive # For BC sake: path as a string. elif os.path.exists(drive): volPath = drive else: raise vm.VolumeError(drive) self.log.info("prepared volume path: %s", volPath) return volPath
def prepareVolumePath(self, drive, vmId=None): if type(drive) is dict: # PDIV drive format if drive['device'] == 'disk' and vm.isVdsmImage(drive): res = self.irs.prepareImage( drive['domainID'], drive['poolID'], drive['imageID'], drive['volumeID']) if res['status']['code']: raise vm.VolumeError(drive) volPath = res['path'] drive['volumeChain'] = res['chain'] drive['volumeInfo'] = res['info'] # GUID drive format elif "GUID" in drive: visible = self.irs.scanDevicesVisibility([drive["GUID"]]) if visible[drive["GUID"]] is False: self.log.error("GUID: %s is not visible", drive["GUID"]) raise vm.VolumeError(drive) volPath = os.path.join("/dev/mapper", drive["GUID"]) res = self.irs.appropriateDevice(drive["GUID"], vmId) if res['status']['code']: self.log.error("Change ownership on device %s failed", drive["GUID"]) raise vm.VolumeError(drive) # UUID drive format elif "UUID" in drive: volPath = self._getUUIDSpecPath(drive["UUID"]) # leave path == '' for empty cdrom and floppy drives ... elif drive['device'] in ('cdrom', 'floppy') and \ 'specParams' in drive and \ 'path' in drive['specParams'] and \ drive['specParams']['path'] == '': volPath = '' # ... or load the drive from vmPayload: elif drive['device'] in ('cdrom', 'floppy') and \ 'specParams' in drive and \ 'vmPayload' in drive['specParams']: ''' vmPayload is a key in specParams 'vmPayload': {'file': {'filename': 'content'}} ''' mkFsNames = {'cdrom': 'mkIsoFs', 'floppy': 'mkFloppyFs'} try: mkFsFunction = getattr(supervdsm.getProxy(), mkFsNames[drive['device']]) except AttributeError: raise vm.VolumeError("Unsupported 'device': %s in " "drive: %" % (drive['device'], drive)) else: # the only reason for adding this variable is that # you can not write this without breaking PEP8 file_name = drive['specParams']['vmPayload']['file'] volPath = mkFsFunction(vmId, file_name) elif "path" in drive: volPath = drive['path'] else: raise vm.VolumeError(drive) # For BC sake: None as argument elif not drive: volPath = drive # For BC sake: path as a string. elif os.path.exists(drive): volPath = drive else: raise vm.VolumeError(drive) self.log.info("prepared volume path: %s", volPath) return volPath