Ejemplo n.º 1
0
    def test_delete_volume(self, list_mount_points):
        self.drv.share2nms = {self.TEST_EXPORT1: self.nms_mock}
        self._create_volume_db_entry()

        self.drv._ensure_share_mounted = lambda *_, **__: 0
        self.drv._execute = lambda *_, **__: 0

        self.nms_mock.server.get_prop.return_value = '/volumes'
        self.nms_mock.folder.get_child_props.return_value = {
            'available': 1,
            'used': 1
        }
        self.drv.delete_volume({
            'id': '1',
            'name': 'volume-1',
            'provider_location': self.TEST_EXPORT1
        })
        self.nms_mock.folder.destroy.assert_called_with(
            'stack/share/volume-1', '-r')
        list_mount_points.assert_called_once()

        # Check that exception not raised if folder does not exist on
        # NexentaStor appliance.
        mock = self.nms_mock.folder.destroy
        mock.side_effect = utils.NexentaException('Folder does not exist')
        self.drv.delete_volume({
            'id': '1',
            'name': 'volume-1',
            'provider_location': self.TEST_EXPORT1
        })
Ejemplo n.º 2
0
    def do_setup(self, context):
        if self.restapi_protocol == 'auto':
            protocol, auto = 'http', True
        else:
            protocol, auto = self.restapi_protocol, False

        try:
            self.restapi = jsonrpc.NexentaEdgeJSONProxy(protocol,
                                                        self.restapi_host,
                                                        self.restapi_port,
                                                        '/',
                                                        self.restapi_user,
                                                        self.restapi_password,
                                                        self.verify_ssl,
                                                        auto=auto)

            data = self.restapi.get('service/' + self.iscsi_service)['data']
            self.target_name = '%s%s' % (data['X-ISCSI-TargetName'],
                                         data['X-ISCSI-TargetID'])
            if 'X-VIPS' in data:
                if self.target_vip not in data['X-VIPS']:
                    raise nexenta_utils.NexentaException(
                        'Configured client IP address does not match any VIP'
                        ' provided by iSCSI service %s' % self.iscsi_service)
                else:
                    self.ha_vip = self.target_vip
        except exception.VolumeBackendAPIException:
            with excutils.save_and_reraise_exception():
                LOG.exception(
                    'Error verifying iSCSI service %(serv)s on '
                    'host %(hst)s', {
                        'serv': self.iscsi_service,
                        'hst': self.restapi_host
                    })
Ejemplo n.º 3
0
 def _stub_all_export_methods(self):
     self.nms_mock.scsidisk.lu_exists.return_value = False
     self.nms_mock.scsidisk.lu_shared.side_effect = (
         utils.NexentaException(['does not exist for zvol']))
     self.nms_mock.scsidisk.create_lu.return_value = {'lun': 0}
     self.nms_mock.stmf.list_targets.return_value = []
     self.nms_mock.stmf.list_targetgroups.return_value = []
     self.nms_mock.stmf.list_targetgroup_members.return_value = []
     self.nms_mock._get_target_name.return_value = ['iqn:1.1.1.1-0']
     self.nms_mock.iscsitarget.create_targetgroup.return_value = ({
         'target_name': 'cinder/1.1.1.1-0'})
     self.nms_mock.scsidisk.add_lun_mapping_entry.return_value = {'lun': 0}
Ejemplo n.º 4
0
    def test_delete_snapshot(self):
        self._create_volume_db_entry()
        self.drv._collect_garbage = lambda vol: vol
        self.drv.delete_snapshot(self.TEST_SNAPSHOT_REF)
        self.nms_mock.snapshot.destroy.assert_called_with(
            'cinder/volume1@snapshot1', '')

        # Check that exception not raised if snapshot does not exist
        self.drv.delete_snapshot(self.TEST_SNAPSHOT_REF)
        self.nms_mock.snapshot.destroy.side_effect = (
            utils.NexentaException('does not exist'))
        self.nms_mock.snapshot.destroy.assert_called_with(
            'cinder/volume1@snapshot1', '')
Ejemplo n.º 5
0
    def __call__(self, *args):
        data = jsonutils.dumps({
            'object': self.obj,
            'method': self.method,
            'params': args
        })

        LOG.debug('Sending JSON data: %s', data)
        r = self.session.post(self.url, data=data, timeout=TIMEOUT)
        response = r.json()

        LOG.debug('Got response: %s', response)
        if response.get('error') is not None:
            message = response['error'].get('message', '')
            raise utils.NexentaException(message)
        return response.get('result')
Ejemplo n.º 6
0
    def test_do_create_volume(self):
        volume = {
            'provider_location': self.TEST_EXPORT1,
            'size': 1,
            'name': 'volume-1'
        }
        self.drv.shares = {self.TEST_EXPORT1: None}
        self.drv.share2nms = {self.TEST_EXPORT1: self.nms_mock}

        compression = self.cfg.nexenta_dataset_compression
        self.nms_mock.folder.get_child_props.return_value = {
            'available': 1,
            'used': 1
        }
        self.nms_mock.server.get_prop.return_value = '/volumes'
        self.nms_mock.netsvc.get_confopts(
            'svc:/network/nfs/server:default',
            'configure').AndReturn({'nfs_server_versmax': {
                'current': u'3'
            }})
        self.nms_mock.netsvc.get_confopts.return_value = {
            'nfs_server_versmax': {
                'current': 4
            }
        }
        self.nms_mock._ensure_share_mounted.return_value = True
        self.drv._do_create_volume(volume)
        self.nms_mock.folder.create_with_props.assert_called_with(
            'stack', 'share/volume-1', {'compression': compression})
        self.nms_mock.netstorsvc.share_folder.assert_called_with(
            self.TEST_SHARE_SVC, 'stack/share/volume-1', self.TEST_SHARE_OPTS)
        mock_chmod = self.nms_mock.appliance.execute
        mock_chmod.assert_called_with(
            'chmod ugo+rw /volumes/stack/share/volume-1/volume')
        mock_truncate = self.nms_mock.appliance.execute
        mock_truncate.side_effect = utils.NexentaException('fake_exception')
        self.nms_mock.server.get_prop.return_value = '/volumes'
        self.nms_mock.folder.get_child_props.return_value = {
            'available': 1,
            'used': 1
        }
        self.assertRaises(utils.NexentaException, self.drv._do_create_volume,
                          volume)