Exemplo n.º 1
0
    def test_connect_volume(self, mock_path, mock_conf, mock_rados, mock_rbd):
        """Test the connect volume case."""
        rbd_connector = rbd.RBDConnector(None)
        mock_path.return_value = False
        mock_conf.return_value = "/tmp/fake_dir/fake_ceph.conf"
        device_info = rbd_connector.connect_volume(self.connection_properties)

        # Ensure rados is instantiated correctly
        mock_rados.Rados.assert_called_once_with(
            clustername=self.clustername,
            rados_id=utils.convert_str(self.user),
            conffile='/tmp/fake_dir/fake_ceph.conf')

        # Ensure correct calls to connect to cluster
        self.assertEqual(1, mock_rados.Rados.return_value.connect.call_count)
        mock_rados.Rados.return_value.open_ioctx.assert_called_once_with(
            utils.convert_str(self.pool))

        # Ensure rbd image is instantiated correctly
        mock_rbd.Image.assert_called_once_with(
            mock_rados.Rados.return_value.open_ioctx.return_value,
            utils.convert_str(self.volume), read_only=False,
            snapshot=None)

        # Ensure expected object is returned correctly
        self.assertIsInstance(device_info['path'],
                              linuxrbd.RBDVolumeIOWrapper)
Exemplo n.º 2
0
    def test_connect_volume(self, mock_path, mock_conf, mock_rados, mock_rbd):
        """Test the connect volume case."""
        rbd_connector = rbd.RBDConnector(None)
        mock_path.return_value = False
        mock_conf.return_value = "/tmp/fake_dir/fake_ceph.conf"
        device_info = rbd_connector.connect_volume(self.connection_properties)

        # Ensure rados is instantiated correctly
        mock_rados.Rados.assert_called_once_with(
            clustername=self.clustername,
            rados_id=utils.convert_str(self.user),
            conffile='/tmp/fake_dir/fake_ceph.conf')

        # Ensure correct calls to connect to cluster
        self.assertEqual(1, mock_rados.Rados.return_value.connect.call_count)
        mock_rados.Rados.return_value.open_ioctx.assert_called_once_with(
            utils.convert_str(self.pool))

        # Ensure rbd image is instantiated correctly
        mock_rbd.Image.assert_called_once_with(
            mock_rados.Rados.return_value.open_ioctx.return_value,
            utils.convert_str(self.volume), read_only=False,
            snapshot=None)

        # Ensure expected object is returned correctly
        self.assertIsInstance(device_info['path'],
                              linuxrbd.RBDVolumeIOWrapper)
Exemplo n.º 3
0
    def __init__(self, client, name, snapshot=None, read_only=False):
        if snapshot is not None:
            snapshot = utils.convert_str(snapshot)

        try:
            self.image = client.rbd.Image(client.ioctx,
                                          utils.convert_str(name),
                                          snapshot=snapshot,
                                          read_only=read_only)
        except client.rbd.Error:
            LOG.exception("error opening rbd image %s", name)
            client.disconnect()
            raise

        self.client = client
Exemplo n.º 4
0
    def __init__(self, user, pool, *args, **kwargs):

        self.rbd_user = user
        self.rbd_pool = pool

        for attr in ['rbd_user', 'rbd_pool']:
            val = getattr(self, attr)
            if val is not None:
                setattr(self, attr, utils.convert_str(val))

        # allow these to be overridden for testing
        self.rados = kwargs.get('rados', rados)
        self.rbd = kwargs.get('rbd', rbd)

        if self.rados is None:
            raise exception.InvalidParameterValue(
                err=_('rados module required'))
        if self.rbd is None:
            raise exception.InvalidParameterValue(err=_('rbd module required'))

        self.rbd_conf = kwargs.get('conffile', '/etc/ceph/ceph.conf')
        self.rbd_cluster_name = kwargs.get('rbd_cluster_name', 'ceph')
        self.rados_connect_timeout = kwargs.get('rados_connect_timeout', -1)

        self.client, self.ioctx = self.connect()
Exemplo n.º 5
0
    def __init__(self, user, pool, *args, **kwargs):

        self.rbd_user = user
        self.rbd_pool = pool

        for attr in ['rbd_user', 'rbd_pool']:
            val = getattr(self, attr)
            if val is not None:
                setattr(self, attr, utils.convert_str(val))

        # allow these to be overridden for testing
        self.rados = kwargs.get('rados', rados)
        self.rbd = kwargs.get('rbd', rbd)

        if self.rados is None:
            raise exception.InvalidParameterValue(
                err=_('rados module required'))
        if self.rbd is None:
            raise exception.InvalidParameterValue(
                err=_('rbd module required'))

        self.rbd_conf = kwargs.get('conffile', '/etc/ceph/ceph.conf')
        self.rbd_cluster_name = kwargs.get('rbd_cluster_name', 'ceph')
        self.rados_connect_timeout = kwargs.get('rados_connect_timeout', -1)

        self.client, self.ioctx = self.connect()
Exemplo n.º 6
0
    def __init__(self, client, name, snapshot=None, read_only=False):
        if snapshot is not None:
            snapshot = utils.convert_str(snapshot)

        try:
            self.image = client.rbd.Image(client.ioctx,
                                          utils.convert_str(name),
                                          snapshot=snapshot,
                                          read_only=read_only)
        except client.rbd.Error:
            LOG.exception("error opening rbd image %s", name)
            client.disconnect()
            raise

        # Ceph provides rbd.so to cinder, but we can't
        # get volume name from rbd.Image, so, we record
        # name here, so other modules can easily get
        # volume name.
        self.name = name
        self.client = client
Exemplo n.º 7
0
    def test_with_client(self, mock_rados, mock_rbd):
        with linuxrbd.RBDClient('test_user', 'test_pool') as client:

            # Verify object attributes are assigned as expected
            self.assertEqual('/etc/ceph/ceph.conf', client.rbd_conf)
            self.assertEqual(utils.convert_str('test_user'), client.rbd_user)
            self.assertEqual(utils.convert_str('test_pool'), client.rbd_pool)

            # Assert connect is called with correct paramaters
            mock_rados.Rados.assert_called_once_with(
                clustername='ceph',
                rados_id=utils.convert_str('test_user'),
                conffile='/etc/ceph/ceph.conf')

            # Ensure correct calls to connect to cluster
            self.assertEqual(1,
                             mock_rados.Rados.return_value.connect.call_count)
            mock_rados.Rados.return_value.open_ioctx.assert_called_once_with(
                utils.convert_str('test_pool'))

        self.assertEqual(1, mock_rados.Rados.return_value.shutdown.call_count)
Exemplo n.º 8
0
    def test_with_client(self, mock_rados, mock_rbd):
        with linuxrbd.RBDClient('test_user', 'test_pool') as client:

            # Verify object attributes are assigned as expected
            self.assertEqual('/etc/ceph/ceph.conf', client.rbd_conf)
            self.assertEqual(utils.convert_str('test_user'), client.rbd_user)
            self.assertEqual(utils.convert_str('test_pool'), client.rbd_pool)

            # Assert connect is called with correct paramaters
            mock_rados.Rados.assert_called_once_with(
                clustername='ceph',
                rados_id=utils.convert_str('test_user'),
                conffile='/etc/ceph/ceph.conf')

            # Ensure correct calls to connect to cluster
            self.assertEqual(
                1, mock_rados.Rados.return_value.connect.call_count)
            mock_rados.Rados.return_value.open_ioctx.assert_called_once_with(
                utils.convert_str('test_pool'))

        self.assertEqual(1, mock_rados.Rados.return_value.shutdown.call_count)
Exemplo n.º 9
0
 def __init__(self, image, pool, user, conf):
     self.image = image
     self.pool = utils.convert_str(pool or '')
     self.user = utils.convert_str(user or '')
     self.conf = utils.convert_str(conf or '')
Exemplo n.º 10
0
 def __init__(self, image, pool, user, conf):
     self.image = image
     self.pool = utils.convert_str(pool or '')
     self.user = utils.convert_str(user or '')
     self.conf = utils.convert_str(conf or '')