Update default scheduler filters

Make the default set of scheduler filters conditional on the release
being deployed; For Pike or later the CoreFilter, RamFilter and
DiskFilter are superfluous to requirements as this filters are in
effect completed by the Placement API.

Add DiskFilter to list of filters for older OpenStack releases.

Change-Id: Iddb4f1f068b982dcd9a70b11b89df1be9f8aaf20
Closes-Bug: 1731302
Closes-Bug: 1732164
This commit is contained in:
James Page 2019-03-04 16:20:12 +00:00
parent 5add25410d
commit b99d806cf3
3 changed files with 65 additions and 3 deletions

View File

@ -258,10 +258,10 @@ options:
all units on config change.
scheduler-default-filters:
type: string
default: "RetryFilter,AvailabilityZoneFilter,CoreFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,DifferentHostFilter,SameHostFilter"
default:
description: |
List of filter class names to use for filtering hosts when not specified in
the request.
the request. The default filters varies based on OpenStack release.
pci-alias:
type: string
default:

View File

@ -300,11 +300,56 @@ class IdentityServiceContext(ch_context.IdentityServiceContext):
return ctxt
_base_enabled_filters = [
"RetryFilter",
"AvailabilityZoneFilter",
"CoreFilter",
"RamFilter",
"DiskFilter",
"ComputeFilter",
"ComputeCapabilitiesFilter",
"ImagePropertiesFilter",
"ServerGroupAntiAffinityFilter",
"ServerGroupAffinityFilter",
"DifferentHostFilter",
"SameHostFilter",
]
# NOTE: Core,Ram,Disk filters obsolete due
# placement API functionality
_pike_enabled_filters = [
"RetryFilter",
"AvailabilityZoneFilter",
"ComputeFilter",
"ComputeCapabilitiesFilter",
"ImagePropertiesFilter",
"ServerGroupAntiAffinityFilter",
"ServerGroupAffinityFilter",
"DifferentHostFilter",
"SameHostFilter",
]
def default_enabled_filters():
"""
Determine the list of default filters for scheduler use
:returns: list of filters to use
:rtype: list of str
"""
os_rel = ch_utils.os_release('nova-common')
cmp_os_rel = ch_utils.CompareOpenStackReleases(os_rel)
if cmp_os_rel >= 'pike':
return _pike_enabled_filters
return _base_enabled_filters
class NovaConfigContext(ch_context.WorkerConfigContext):
def __call__(self):
ctxt = super(NovaConfigContext, self).__call__()
ctxt['scheduler_default_filters'] = (
hookenv.config('scheduler-default-filters'))
hookenv.config('scheduler-default-filters') or
','.join(default_enabled_filters()))
if hookenv.config('pci-alias'):
aliases = json.loads(hookenv.config('pci-alias'))
if isinstance(aliases, list):

View File

@ -45,6 +45,7 @@ class NovaComputeContextTests(CharmTestCase):
self.relation_get.side_effect = self.test_relation.get
self.config.side_effect = self.test_config.get
self.log.side_effect = fake_log
self.os_release.return_value = 'icehouse'
@mock.patch('charmhelpers.contrib.openstack.ip.resolve_address',
lambda *args, **kwargs: None)
@ -330,6 +331,7 @@ class NovaComputeContextTests(CharmTestCase):
mock_config.side_effect = self.test_config.get
mock_config_ip.side_effect = self.test_config.get
mock_unit_get.return_value = '127.0.0.1'
self.test_config.set('scheduler-default-filters', 'TestFilter')
ctxt = context.NovaConfigContext()()
self.assertEqual(ctxt['scheduler_default_filters'],
self.config('scheduler-default-filters'))
@ -592,3 +594,18 @@ class NovaComputeContextTests(CharmTestCase):
self.related_units.return_value = ['nova-cell-conductor/0']
ctxt = context.NovaCellV2Context()()
self.assertEqual(ctxt, {})
def test_default_enabled_filters_icehouse(self):
self.os_release.return_value = 'icehouse'
self.assertEqual(context.default_enabled_filters(),
context._base_enabled_filters)
def test_default_enabled_filters_pike(self):
self.os_release.return_value = 'pike'
self.assertEqual(context.default_enabled_filters(),
context._pike_enabled_filters)
def test_default_enabled_filters_rocky(self):
self.os_release.return_value = 'rocky'
self.assertEqual(context.default_enabled_filters(),
context._pike_enabled_filters)