add get_by_metadata_key to AggregateList object
This change adds the get_by_metadata_key function to the AggregateList object and the aggregate_get_by_metadata_key function to the DB API. Previously, the only DB API function available for finding aggregates matching a metadata key returned a dictionary of aggregated metadata. The aggregate_get_by_metadata_key function returns all rows matching the specified metadata key, and is called by the existing aggregate_host_get_by_metadata_key DB API function. The get_by_metadata_key function returns a list of Aggregate objects matching the specified metadata key. Related to blueprint compute-manager-objects-juno Change-Id: If50c9f613dd192ab44577f26a81dd5b40e3a7af7
This commit is contained in:
@@ -151,7 +151,8 @@ class AggregateList(base.ObjectListBase, base.NovaObject):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: Added key argument to get_by_host()
|
||||
# Aggregate <= version 1.1
|
||||
VERSION = '1.1'
|
||||
# Version 1.2: Added get_by_metadata_key
|
||||
VERSION = '1.2'
|
||||
|
||||
fields = {
|
||||
'objects': fields.ListOfObjectsField('Aggregate'),
|
||||
@@ -160,8 +161,21 @@ class AggregateList(base.ObjectListBase, base.NovaObject):
|
||||
'1.0': '1.1',
|
||||
'1.1': '1.1',
|
||||
# NOTE(danms): Aggregate was at 1.1 before we added this
|
||||
'1.2': '1.1',
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def _filter_db_aggregates(cls, db_aggregates, hosts):
|
||||
if not isinstance(hosts, set):
|
||||
hosts = set(hosts)
|
||||
filtered_aggregates = []
|
||||
for db_aggregate in db_aggregates:
|
||||
for host in db_aggregate['hosts']:
|
||||
if host in hosts:
|
||||
filtered_aggregates.append(db_aggregate)
|
||||
break
|
||||
return filtered_aggregates
|
||||
|
||||
@base.remotable_classmethod
|
||||
def get_all(cls, context):
|
||||
db_aggregates = db.aggregate_get_all(context)
|
||||
@@ -173,3 +187,11 @@ class AggregateList(base.ObjectListBase, base.NovaObject):
|
||||
db_aggregates = db.aggregate_get_by_host(context, host, key=key)
|
||||
return base.obj_make_list(context, cls(context), objects.Aggregate,
|
||||
db_aggregates)
|
||||
|
||||
@base.remotable_classmethod
|
||||
def get_by_metadata_key(cls, context, key, hosts=None):
|
||||
db_aggregates = db.aggregate_get_by_metadata_key(context, key=key)
|
||||
if hosts:
|
||||
db_aggregates = cls._filter_db_aggregates(db_aggregates, hosts)
|
||||
return base.obj_make_list(context, cls(context), objects.Aggregate,
|
||||
db_aggregates)
|
||||
|
||||
Reference in New Issue
Block a user