Merge "Remove metadata/system_metadata filter handling from get_all"

This commit is contained in:
Zuul 2017-11-15 20:30:19 +00:00 committed by Gerrit Code Review
commit 9451dbec9f
3 changed files with 1 additions and 84 deletions

View File

@ -2315,21 +2315,13 @@ class API(base.Base):
# any character, we need to use regexp escaping for it.
filters['ip'] = '^%s$' % fixed_ip.replace('.', '\\.')
def _remap_metadata_filter(metadata):
filters['metadata'] = jsonutils.loads(metadata)
def _remap_system_metadata_filter(metadata):
filters['system_metadata'] = jsonutils.loads(metadata)
# search_option to filter_name mapping.
filter_mapping = {
'image': 'image_ref',
'name': 'display_name',
'tenant_id': 'project_id',
'flavor': _remap_flavor_filter,
'fixed_ip': _remap_fixed_ip_filter,
'metadata': _remap_metadata_filter,
'system_metadata': _remap_system_metadata_filter}
'fixed_ip': _remap_fixed_ip_filter}
# copy from search_opts, doing various remappings as necessary
for opt, value in search_opts.items():

View File

@ -9012,75 +9012,6 @@ class ComputeAPITestCase(BaseTestCase):
power_state.RUNNING]})
self.assertEqual(len(instances), 3)
def test_get_all_by_metadata(self):
# Test searching instances by metadata.
c = context.get_admin_context()
self._create_fake_instance_obj() # instance0
self._create_fake_instance_obj({ # instance1
'metadata': {'key1': 'value1'}})
instance2 = self._create_fake_instance_obj({
'metadata': {'key2': 'value2'}})
instance3 = self._create_fake_instance_obj({
'metadata': {'key3': 'value3'}})
instance4 = self._create_fake_instance_obj({
'metadata': {'key3': 'value3',
'key4': 'value4'}})
# get all instances
instances = self.compute_api.get_all(c,
search_opts={'metadata': u"{}"})
self.assertEqual(len(instances), 5)
# wrong key/value combination
instances = self.compute_api.get_all(c,
search_opts={'metadata': u'{"key1": "value3"}'})
self.assertEqual(len(instances), 0)
# non-existing keys
instances = self.compute_api.get_all(c,
search_opts={'metadata': u'{"key5": "value1"}'})
self.assertEqual(len(instances), 0)
# find existing instance
instances = self.compute_api.get_all(c,
search_opts={'metadata': u'{"key2": "value2"}'})
self.assertEqual(len(instances), 1)
self.assertEqual(instances[0]['uuid'], instance2['uuid'])
instances = self.compute_api.get_all(c,
search_opts={'metadata': u'{"key3": "value3"}'})
self.assertEqual(len(instances), 2)
instance_uuids = [instance['uuid'] for instance in instances]
self.assertIn(instance3['uuid'], instance_uuids)
self.assertIn(instance4['uuid'], instance_uuids)
# multiple criteria as a dict
instances = self.compute_api.get_all(c,
search_opts={'metadata': u'{"key3": "value3","key4": "value4"}'})
self.assertEqual(len(instances), 1)
self.assertEqual(instances[0]['uuid'], instance4['uuid'])
# multiple criteria as a list
instances = self.compute_api.get_all(c,
search_opts=
{'metadata': u'[{"key4": "value4"},{"key3": "value3"}]'})
self.assertEqual(len(instances), 1)
self.assertEqual(instances[0]['uuid'], instance4['uuid'])
def test_get_all_by_system_metadata(self):
# Test searching instances by system metadata.
c = context.get_admin_context()
instance1 = self._create_fake_instance_obj({
'system_metadata': {'key1': 'value1'}})
# find existing instance
instances = self.compute_api.get_all(c,
search_opts={'system_metadata': u'{"key1": "value1"}'})
self.assertEqual(len(instances), 1)
self.assertEqual(instances[0]['uuid'], instance1['uuid'])
def test_instance_metadata(self):
meta_changes = [None]
self.flags(notify_on_state_change='vm_state', group='notifications')

View File

@ -4299,12 +4299,6 @@ class _ComputeAPIUnitTestMixIn(object):
filters = mock_get.call_args_list[0][0][1]
self.assertEqual({'project_id': 'foo'}, filters)
def test_metadata_invalid_return_empty_object(self):
api = compute_api.API()
ret = api.get_all(self.context, search_opts={'metadata': 'foo'})
self.assertIsInstance(ret, objects.InstanceList)
self.assertEqual(0, len(ret))
def test_populate_instance_names_host_name(self):
params = dict(display_name="vm1")
instance = self._create_instance_obj(params=params)