Respect CONF.scheduler_use_baremetal_filters
This fixes an issue where the default filters are loaded before IronicHostManager overrides the default, which is the intended behavior when CONF.scheduler_use_baremetal_filters is True. Creates a _load_filters method on the base HostManager class that returns a list of filters to be loaded at initialization, and overrides it in IronicHostManager to return the default baremetal filters when scheduler_use_baremetal_filters is set. Change-Id: I1801c62d85665a6a3423428e91e1aeeb546613d7 Closes-Bug: #1439868
This commit is contained in:
parent
7c5e7effe4
commit
c4dc66994c
@ -310,8 +310,7 @@ class HostManager(object):
|
||||
CONF.scheduler_available_filters)
|
||||
self.filter_cls_map = {cls.__name__: cls for cls in filter_classes}
|
||||
self.filter_obj_map = {}
|
||||
self.default_filters = self._choose_host_filters(
|
||||
CONF.scheduler_default_filters)
|
||||
self.default_filters = self._choose_host_filters(self._load_filters())
|
||||
self.weight_handler = weights.HostWeightHandler()
|
||||
weigher_classes = self.weight_handler.get_matching_classes(
|
||||
CONF.scheduler_weight_classes)
|
||||
@ -328,6 +327,9 @@ class HostManager(object):
|
||||
if self.tracks_instance_changes:
|
||||
self._init_instance_info()
|
||||
|
||||
def _load_filters(self):
|
||||
return CONF.scheduler_default_filters
|
||||
|
||||
def _init_aggregates(self):
|
||||
elevated = context_module.get_admin_context()
|
||||
aggs = objects.AggregateList.get_all(elevated)
|
||||
|
@ -98,11 +98,10 @@ class IronicNodeState(host_manager.HostState):
|
||||
class IronicHostManager(host_manager.HostManager):
|
||||
"""Ironic HostManager class."""
|
||||
|
||||
def __init__(self):
|
||||
super(IronicHostManager, self).__init__()
|
||||
def _load_filters(self):
|
||||
if CONF.scheduler_use_baremetal_filters:
|
||||
baremetal_default = CONF.baremetal_scheduler_default_filters
|
||||
CONF.scheduler_default_filters = baremetal_default
|
||||
return CONF.baremetal_scheduler_default_filters
|
||||
return super(IronicHostManager, self)._load_filters()
|
||||
|
||||
def host_state_cls(self, host, node, **kwargs):
|
||||
"""Factory function/property to create a new HostState."""
|
||||
|
@ -69,6 +69,10 @@ class HostManagerTestCase(test.NoDBTestCase):
|
||||
self.fake_hosts += [host_manager.HostState('fake_multihost',
|
||||
'fake-node%s' % x) for x in xrange(1, 5)]
|
||||
|
||||
def test_load_filters(self):
|
||||
filters = self.host_manager._load_filters()
|
||||
self.assertEqual(filters, ['FakeFilterClass1'])
|
||||
|
||||
@mock.patch.object(nova.objects.InstanceList, 'get_by_filters')
|
||||
@mock.patch.object(nova.objects.ComputeNodeList, 'get_all')
|
||||
@mock.patch('nova.utils.spawn_n')
|
||||
|
@ -242,6 +242,7 @@ class IronicHostManagerTestFilters(test.NoDBTestCase):
|
||||
cls in ['FakeFilterClass1',
|
||||
'FakeFilterClass2']])
|
||||
self.flags(scheduler_default_filters=['FakeFilterClass1'])
|
||||
self.flags(baremetal_scheduler_default_filters=['FakeFilterClass2'])
|
||||
self.host_manager = ironic_host_manager.IronicHostManager()
|
||||
self.fake_hosts = [ironic_host_manager.IronicNodeState(
|
||||
'fake_host%s' % x, 'fake-node') for x in range(1, 5)]
|
||||
@ -270,6 +271,30 @@ class IronicHostManagerTestFilters(test.NoDBTestCase):
|
||||
self.assertEqual(1, len(default_filters))
|
||||
self.assertIsInstance(default_filters[0], FakeFilterClass1)
|
||||
|
||||
@mock.patch.object(host_manager.HostManager, '_init_instance_info')
|
||||
@mock.patch.object(host_manager.HostManager, '_init_aggregates')
|
||||
def test_host_manager_default_filters_uses_baremetal(self, mock_init_agg,
|
||||
mock_init_inst):
|
||||
self.flags(scheduler_use_baremetal_filters=True)
|
||||
host_manager = ironic_host_manager.IronicHostManager()
|
||||
|
||||
# ensure the defaults come from baremetal_scheduler_default_filters
|
||||
# and not scheduler_default_filters
|
||||
default_filters = host_manager.default_filters
|
||||
self.assertEqual(1, len(default_filters))
|
||||
self.assertIsInstance(default_filters[0], FakeFilterClass2)
|
||||
|
||||
def test_load_filters(self):
|
||||
# without scheduler_use_baremetal_filters
|
||||
filters = self.host_manager._load_filters()
|
||||
self.assertEqual(['FakeFilterClass1'], filters)
|
||||
|
||||
def test_load_filters_baremetal(self):
|
||||
# with scheduler_use_baremetal_filters
|
||||
self.flags(scheduler_use_baremetal_filters=True)
|
||||
filters = self.host_manager._load_filters()
|
||||
self.assertEqual(['FakeFilterClass2'], filters)
|
||||
|
||||
def _mock_get_filtered_hosts(self, info):
|
||||
info['got_objs'] = []
|
||||
info['got_fprops'] = []
|
||||
|
Loading…
Reference in New Issue
Block a user