def test_aggregate_metadata_get_by_host_empty_result(self, get_by_host): context = mock.MagicMock() get_by_host.return_value = objects.AggregateList(objects=[]) metadata = utils.aggregate_metadata_get_by_host( context, 'fake-host', 'k3') get_by_host.assert_called_with(context.elevated(), 'fake-host', key='k3') self.assertEqual({}, metadata)
def test_aggregate_values_from_db(self, get_by_host): context = mock.MagicMock() get_by_host.return_value = objects.AggregateList( objects=_AGGREGATE_FIXTURES) values = utils.aggregate_values_from_db(context, 'fake-host', key_name='k1') get_by_host.assert_called_with(context.elevated(), 'fake-host', key='k1') self.assertEqual(set(['1', '3']), values)
def test_aggregate_metadata_get_by_host_with_key(self, get_by_host): context = mock.MagicMock() get_by_host.return_value = objects.AggregateList( objects=_AGGREGATE_FIXTURES) metadata = utils.aggregate_metadata_get_by_host( context, 'fake-host', 'k1') get_by_host.assert_called_with(context.elevated(), 'fake-host', key='k1') self.assertIn('k1', metadata) self.assertEqual(set(['1', '3']), metadata['k1'])
def get_non_matching_by_metadata_keys(cls, context, ignored_keys, key_prefix, value): """Return aggregates that are not matching with metadata. For example, we have aggregates with metadata as below: 'agg1' with trait:HW_CPU_X86_MMX="required" 'agg2' with trait:HW_CPU_X86_SGX="required" 'agg3' with trait:HW_CPU_X86_MMX="required" 'agg3' with trait:HW_CPU_X86_SGX="required" Assume below request: aggregate_obj.AggregateList.get_non_matching_by_metadata_keys( self.context, ['trait:HW_CPU_X86_MMX'], 'trait:', value='required') It will return 'agg2' and 'agg3' as aggregates that are not matching with metadata. :param context: The security context :param ignored_keys: List of keys to match with the aggregate metadata keys that starts with key_prefix. :param key_prefix: Only compares metadata keys that starts with the key_prefix :param value: Value of metadata :returns: List of aggregates that doesn't match metadata keys that starts with key_prefix with the supplied keys. """ db_aggregates = _get_non_matching_by_metadata_keys_from_db( context, ignored_keys, key_prefix, value) return base.obj_make_list(context, objects.AggregateList(context), objects.Aggregate, db_aggregates)
def _make_agg_list(agg_list): return objects.AggregateList(objects=[_make_agg_obj(a) for a in agg_list])