Esempio n. 1
0
    def create_volume_from_snapshot(self, volume, snapshot):
        ldev = utils.get_ldev(snapshot)

        # When 'ldev' is 0, it should be true.
        # Therefore, it cannot remove 'is not None'.
        if (ldev is not None and self.check_vvol(ldev) and
                _get_access_mode(volume) == 'ro'):

            if 'ro_vol' in _get_snapshot_metadata(snapshot):
                msg = utils.output_log(657, snapshot_id=snapshot['id'])
                raise exception.HPXPError(data=msg)

            self.db.snapshot_metadata_update(
                self.ctxt, snapshot['id'], dict(ro_vol=volume['id']), False)

            metadata = utils.get_volume_metadata(volume)

            return {
                'provider_location': six.text_type(ldev),
                'metadata': dict(
                    metadata, ldev=ldev, type=utils.VVOL_LDEV_TYPE,
                    snapshot=snapshot['id']),
            }

        return super(
            HPXPCommonExtension, self).create_volume_from_snapshot(
                volume, snapshot)
Esempio n. 2
0
 def manage_existing(self, volume, existing_ref):
     ldev = _str2int(existing_ref.get('ldev'))
     metadata = utils.get_volume_metadata(volume)
     return {
         'provider_location': six.text_type(ldev),
         'metadata': dict(
             metadata, ldev=ldev, type=utils.NORMAL_LDEV_TYPE),
     }
Esempio n. 3
0
def _get_access_mode(volume):
    metadata = utils.get_volume_metadata(volume)
    access_mode = metadata.get('access_mode', 'rw')

    if access_mode not in _ACCESS_MODE:
        msg = utils.output_log(602, meta='access_mode')
        raise exception.HPXPError(data=msg)

    return access_mode
Esempio n. 4
0
 def copy_dest_vol_meta_to_src_vol(self, src_vol, dest_vol):
     metadata = utils.get_volume_metadata(dest_vol)
     try:
         self.db.volume_metadata_update(
             self.ctxt, src_vol['id'], metadata, True)
     except Exception as ex:
         utils.output_log(
             318, src_vol_id=src_vol['id'], dest_vol_id=dest_vol['id'],
             reason=six.text_type(ex))
Esempio n. 5
0
 def create_volume(self, volume):
     try:
         ldev = self.create_ldev(volume['size'])
     except Exception:
         with excutils.save_and_reraise_exception():
             utils.output_log(636)
     metadata = utils.get_volume_metadata(volume)
     return {
         'provider_location': six.text_type(ldev),
         'metadata': dict(
             metadata, ldev=ldev, type=utils.NORMAL_LDEV_TYPE),
     }
Esempio n. 6
0
    def create_snapshot(self, snapshot):
        src_vref = self.db.volume_get(self.ctxt, snapshot['volume_id'])
        ldev = utils.get_ldev(src_vref)
        metadata = utils.get_volume_metadata(src_vref)
        # When 'ldev' is 0, it should be true.
        # Therefore, it cannot remove 'is not None'.
        method = (
            self.get_copy_method(metadata)
            if ldev is not None and not self.check_vvol(ldev) else None)

        if 'restore_from' in metadata and method == 'THIN':
            self._restore_volume_from_snapshot(
                src_vref, metadata['restore_from'])
            return {
                'provider_location': _INVALID_LDEV_NUM,
            }

        return super(HPXPCommonExtension, self).create_snapshot(snapshot)
Esempio n. 7
0
 def create_snapshot(self, snapshot):
     src_vref = self.db.volume_get(self.ctxt, snapshot['volume_id'])
     ldev = utils.get_ldev(src_vref)
     # When 'ldev' is 0, it should be true.
     # Therefore, it cannot remove 'is None'.
     if ldev is None:
         msg = utils.output_log(624, type='volume', id=src_vref['id'])
         raise exception.HPXPError(data=msg)
     size = snapshot['volume_size']
     metadata = utils.get_volume_metadata(src_vref)
     new_ldev, ldev_type = self._copy_ldev(ldev, size, metadata)
     if not self.conf.hpxp_driver_cert_mode:
         self.db.snapshot_metadata_update(
             self.ctxt, snapshot['id'],
             dict(ldev=new_ldev, type=ldev_type), False)
     return {
         'provider_location': six.text_type(new_ldev),
     }
Esempio n. 8
0
 def create_cloned_volume(self, volume, src_vref):
     ldev = utils.get_ldev(src_vref)
     # When 'ldev' is 0, it should be true.
     # Therefore, it cannot remove 'is not None'.
     if ldev is None:
         msg = utils.output_log(624, type='volume', id=src_vref['id'])
         raise exception.HPXPError(data=msg)
     size = volume['size']
     if size != src_vref['size']:
         msg = utils.output_log(617, type='volume', volume_id=volume['id'])
         raise exception.HPXPError(data=msg)
     metadata = utils.get_volume_metadata(volume)
     new_ldev, ldev_type = self._copy_ldev(ldev, size, metadata)
     return {
         'provider_location': six.text_type(new_ldev),
         'metadata': dict(
             metadata, ldev=new_ldev,
             type=ldev_type, volume=src_vref['id']),
     }