Exemplo n.º 1
0
    def _get_rbd_handle(self, connection_properties):
        try:
            user = connection_properties['auth_username']
            pool, volume = connection_properties['name'].split('/')
            cluster_name = connection_properties['cluster_name']
            monitor_ips = connection_properties['hosts']
            monitor_ports = connection_properties['ports']
            keyring = connection_properties.get('keyring')
        except (KeyError, ValueError):
            msg = _("Connect volume failed, malformed connection properties.")
            raise exception.BrickException(msg=msg)

        conf = self._create_ceph_conf(monitor_ips, monitor_ports,
                                      str(cluster_name), user, keyring)
        try:
            rbd_client = linuxrbd.RBDClient(user,
                                            pool,
                                            conffile=conf,
                                            rbd_cluster_name=str(cluster_name))
            rbd_volume = linuxrbd.RBDVolume(rbd_client, volume)
            rbd_handle = linuxrbd.RBDVolumeIOWrapper(
                linuxrbd.RBDImageMetadata(rbd_volume, pool, user, conf))
        except Exception:
            fileutils.delete_if_exists(conf)
            raise

        return rbd_handle
Exemplo n.º 2
0
    def _get_rbd_handle(self, connection_properties):
        try:
            user = connection_properties['auth_username']
            pool, volume = connection_properties['name'].split('/')
            cluster_name = connection_properties.get('cluster_name')
            monitor_ips = connection_properties.get('hosts')
            monitor_ports = connection_properties.get('ports')
        except IndexError:
            msg = _("Connect volume failed, malformed connection properties")
            raise exception.BrickException(msg=msg)

        conf = self._create_ceph_conf(monitor_ips, monitor_ports,
                                      str(cluster_name), user)
        rbd_client = linuxrbd.RBDClient(user,
                                        pool,
                                        conffile=conf,
                                        rbd_cluster_name=str(cluster_name))
        rbd_volume = linuxrbd.RBDVolume(rbd_client, volume)
        rbd_handle = linuxrbd.RBDVolumeIOWrapper(
            linuxrbd.RBDImageMetadata(rbd_volume, pool, user, conf))

        if os.path.exists(conf):
            os.remove(conf)

        return rbd_handle
Exemplo n.º 3
0
    def _get_rbd_handle(self, connection_properties):
        try:
            user = connection_properties['auth_username']
            pool, volume = connection_properties['name'].split('/')
            cluster_name = connection_properties['cluster_name']
            monitor_ips = connection_properties['hosts']
            monitor_ports = connection_properties['ports']
            # NOTE: cinder no longer passes keyring data in the connection
            # properties as of the victoria release.  See OSSN-0085.  But
            # cinderlib does, so we must keep the code related to the keyring.
            keyring = connection_properties.get('keyring')
        except (KeyError, ValueError):
            msg = _("Connect volume failed, malformed connection properties.")
            raise exception.BrickException(msg=msg)

        conf = self._create_ceph_conf(monitor_ips, monitor_ports,
                                      str(cluster_name), user, keyring)
        try:
            rbd_client = linuxrbd.RBDClient(user,
                                            pool,
                                            conffile=conf,
                                            rbd_cluster_name=str(cluster_name))
            rbd_volume = linuxrbd.RBDVolume(rbd_client, volume)
            rbd_handle = linuxrbd.RBDVolumeIOWrapper(
                linuxrbd.RBDImageMetadata(rbd_volume, pool, user, conf))
        except Exception:
            fileutils.delete_if_exists(conf)
            raise

        return rbd_handle
Exemplo n.º 4
0
 def test_close(self, rbd_disconnect, mock_rados, mock_rbd):
     rbd_client = linuxrbd.RBDClient('user', 'pool')
     rbd_volume = linuxrbd.RBDVolume(rbd_client, 'volume')
     rbd_handle = linuxrbd.RBDVolumeIOWrapper(
         linuxrbd.RBDImageMetadata(rbd_volume, 'pool', 'user', None))
     rbd_handle.close()
     self.assertEqual(1, rbd_disconnect.call_count)
Exemplo n.º 5
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.º 6
0
 def test():
     with linuxrbd.RBDClient('test_user', 'test_pool'):
         pass