Minor refactor in nova.scheduler.filters.utils

* Used list comprehension instead of for loop to reduce loop overhead
* Simplify boolean expression with De Morgan's law

Change-Id: I9ac372cf7e4571eaeca56e0686db749839ffd6ec
This commit is contained in:
Ming Yang 2015-06-10 14:42:10 -07:00
parent c9ad954489
commit edeb497cf0
1 changed files with 10 additions and 12 deletions

View File

@ -27,24 +27,22 @@ LOG = logging.getLogger(__name__)
def aggregate_values_from_key(host_state, key_name):
"""Returns a set of values based on a metadata key for a specific host."""
aggrlist = host_state.aggregates
aggregate_vals = set()
for aggr in aggrlist:
if key_name in aggr.metadata:
aggregate_vals.add(aggr.metadata[key_name])
return aggregate_vals
return {aggr.metadata[key_name]
for aggr in aggrlist
if key_name in aggr.metadata
}
def aggregate_metadata_get_by_host(host_state, key=None):
"""Returns a dict of all metadata for a specific host."""
"""Returns a dict of all metadata based on a metadata key for a specific
host. If the key is not provided, returns a dict of all metadata.
"""
aggrlist = host_state.aggregates
metadata = collections.defaultdict(set)
for aggr in aggrlist:
if key is not None and key not in aggr.metadata:
continue
for k, v in six.iteritems(aggr.metadata):
values = v.split(',')
for value in values:
metadata[k].add(value.strip())
if key is None or key in aggr.metadata:
for k, v in aggr.metadata.items():
metadata[k].update(x.strip() for x in v.split(','))
return metadata