def _list_volumes(self, req, body):
     """
     Returns Cinder volume lists for specific query params
     :param req: python-cinderclient request
     :param body: python-cinderclient request's body
                 {"list-volumes": {"node_id": "<node_id>"}}
     :return: {"count": <count>, "volumes": [ {<volume data 1st volume>},
                                    {<volume data 2nd volume>},
                             ...
                                  ]}
     """
     cinder_context = req.environ['cinder.context']
     authorize_list_volumes(cinder_context)
     admin_context = cinder.context.get_admin_context()
     kwargs = SafeDict(body).get('list-volumes', {})
     tenant_id = 'admin'
     lunr_client = lunrclient.client.LunrClient(tenant_id)
     data_name = "volumes"
     if 'node_id' in kwargs:
         lunr_node = lunr_except_handler(lambda: lunr_client.nodes.get(node_id=kwargs['node_id']))
         hostname = lunr_node['cinder_host']
         cinder_volumes = cinder_list_handler(volume_get_all_by_host(admin_context, host=hostname), data_name)
         return cinder_volumes
     if 'restore_of' in kwargs:
         lunr_volumes = lunr_except_handler(lambda: lunr_client.volumes.list(restore_of=kwargs['restore_of']))
         cinder_volumes_list = []
         if len(lunr_volumes) > 0:
             for volume in lunr_volumes:
                 if 'id' in volume:
                     cinder_volumes_list.append(volume_get(admin_context, volume_id=volume['id']))
         if isinstance(cinder_volumes_list, list):
             cinder_volumes = {"count": len(cinder_volumes_list), data_name: cinder_volumes_list}
         else:
             cinder_volumes = {"count": 0, "volumes": cinder_volumes_list}
         return cinder_volumes
     elif 'id' in kwargs:
         cinder_volumes = cinder_list_handler(volume_get(admin_context, volume_id=kwargs['id']), data_name)
         return cinder_volumes
     elif 'account_id' in kwargs:
         filters = {'project_id': kwargs['account_id']}
         cinder_volumes = cinder_list_handler(volume_get_all(admin_context, marker=None, limit=None,
                                                             sort_keys=['project_id'],
                                                             sort_dirs=['asc'], filters=filters), data_name)
         return cinder_volumes
     elif 'host' in kwargs:
         filters = {'host': kwargs['host']}
         cinder_volumes = cinder_list_handler(volume_get_all(admin_context, marker=None, limit=None,
                                                             sort_keys=['project_id'], sort_dirs=['asc'],
                                                             filters=filters), data_name)
         return cinder_volumes
     raise exc.HTTPBadRequest(
         explanation=_("Must specify node_id, restore_of, id, account_id, or host"))
Esempio n. 2
0
    def test_set_volume(self):
        res = sqla_api.volume_get_all(self.context)
        self.assertListEqual([], res)

        vol = cinderlib.Volume(self.backend, size=1, name='disk')
        expected = {'availability_zone': vol.availability_zone,
                    'size': vol.size, 'name': vol.name}

        self.persistence.set_volume(vol)

        db_vol = sqla_api.volume_get(self.context, vol.id)
        actual = {'availability_zone': db_vol.availability_zone,
                  'size': db_vol.size, 'name': db_vol.display_name}

        self.assertDictEqual(expected, actual)
 def _list_volumes(self, req, body):
     """
     Returns Cinder volume data for queries with Lunr kwargs filters
     :param req: python-cinderclient request
     :param body: python-cinderclient request's body
                 {"list-volumes": {"node_id": "<node_id>"}}
     :return: {"count": <count>, "volumes": [ {<volume data 1st volume>},
                                    {<volume data 2nd volume>},
                             ...
                                  ]}
     """
     cinder_context = req.environ['cinder.context']
     authorize_list_volumes(cinder_context)
     kwargs = SafeDict(body).get('list-volumes', {})
     tenant_id = 'admin'
     lunr_client = lunrclient.client.LunrClient(tenant_id)
     data_name = "volumes"
     if 'node_id' in kwargs:
         lunr_node = lunr_except_handler(
             lambda: lunr_client.nodes.get(**kwargs))
         hostname = lunr_node['cinder_host']
         cinder_volumes = cinder_list_handler(
             volume_get_all_by_host(cinder_context, host=hostname),
             data_name)
         return cinder_volumes
     if 'restore_of' in kwargs:
         lunr_volumes = lunr_except_handler(
             lambda: lunr_client.volumes.list(**kwargs))
         cinder_volumes_list = []
         if len(lunr_volumes) > 0:
             for volume in lunr_volumes:
                 if 'id' in volume:
                     cinder_volumes_list.append(
                         volume_get(cinder_context, volume_id=volume['id']))
         if isinstance(cinder_volumes_list, list):
             cinder_volumes = {
                 "count": len(cinder_volumes_list),
                 data_name: cinder_volumes_list
             }
         else:
             cinder_volumes = {"count": 0, "volumes": cinder_volumes_list}
         return cinder_volumes
     elif 'id' in kwargs:
         cinder_volumes = cinder_list_handler(
             volume_get(cinder_context, volume_id=kwargs['id']), data_name)
         return cinder_volumes
     elif 'account_id' in kwargs:
         project_id = kwargs['account_id']
         kwargs.clear()
         kwargs.update({'project_id': project_id})
         cinder_volumes = cinder_list_handler(
             volume_get_all(cinder_context,
                            marker=None,
                            limit=None,
                            sort_key='project_id',
                            sort_dir='asc',
                            filters=kwargs), data_name)
         return cinder_volumes
     else:
         cinder_volumes = cinder_list_handler(
             volume_get_all(cinder_context,
                            marker=None,
                            limit=None,
                            sort_key='project_id',
                            sort_dir='asc',
                            filters=kwargs), data_name)
         return cinder_volumes