diff --git a/nova/scheduler/filter_scheduler.py b/nova/scheduler/filter_scheduler.py index 25fd106a3142..0cfd49a2efc2 100644 --- a/nova/scheduler/filter_scheduler.py +++ b/nova/scheduler/filter_scheduler.py @@ -208,30 +208,38 @@ class FilterScheduler(driver.Scheduler): filter_properties['os_type'] = os_type def _setup_instance_group(self, context, filter_properties): - update_group_hosts = False + """Update filter_properties with server group info. + + :returns: True if filter_properties has been updated, False if not. + """ scheduler_hints = filter_properties.get('scheduler_hints') or {} group_hint = scheduler_hints.get('group', None) - if group_hint: - group = objects.InstanceGroup.get_by_hint(context, group_hint) - policies = set(('anti-affinity', 'affinity')) - if any((policy in policies) for policy in group.policies): - if ('affinity' in group.policies and - not self._supports_affinity): - msg = _("ServerGroupAffinityFilter not configured") - LOG.error(msg) - raise exception.NoValidHost(reason=msg) - if ('anti-affinity' in group.policies and - not self._supports_anti_affinity): - msg = _("ServerGroupAntiAffinityFilter not configured") - LOG.error(msg) - raise exception.NoValidHost(reason=msg) - update_group_hosts = True - filter_properties.setdefault('group_hosts', set()) - user_hosts = set(filter_properties['group_hosts']) - group_hosts = set(group.get_hosts(context)) - filter_properties['group_hosts'] = user_hosts | group_hosts - filter_properties['group_policies'] = group.policies - return update_group_hosts + if not group_hint: + return False + + group = objects.InstanceGroup.get_by_hint(context, group_hint) + policies = set(('anti-affinity', 'affinity')) + if not any((policy in policies) for policy in group.policies): + return False + + if ('affinity' in group.policies and + not self._supports_affinity): + msg = _("ServerGroupAffinityFilter not configured") + LOG.error(msg) + raise exception.NoValidHost(reason=msg) + if ('anti-affinity' in group.policies and + not self._supports_anti_affinity): + msg = _("ServerGroupAntiAffinityFilter not configured") + LOG.error(msg) + raise exception.NoValidHost(reason=msg) + + filter_properties.setdefault('group_hosts', set()) + user_hosts = set(filter_properties['group_hosts']) + group_hosts = set(group.get_hosts(context)) + filter_properties['group_hosts'] = user_hosts | group_hosts + filter_properties['group_policies'] = group.policies + + return True def _schedule(self, context, request_spec, filter_properties): """Returns a list of hosts that meet the required specs,