Add option to force hosts to scheduler
Change-Id: I7364115e247ebeb441fa838ac66db5ef5f608b55
This commit is contained in:
@@ -467,3 +467,5 @@ DEFINE_boolean('allow_ec2_admin_api', False, 'Enable/Disable EC2 Admin API')
|
|||||||
|
|
||||||
DEFINE_integer('service_down_time', 60,
|
DEFINE_integer('service_down_time', 60,
|
||||||
'maximum time since last check-in for up service')
|
'maximum time since last check-in for up service')
|
||||||
|
DEFINE_string('default_schedule_zone', None,
|
||||||
|
'zone to use when user doesnt specify one')
|
||||||
|
|||||||
@@ -117,6 +117,9 @@ class HostState(object):
|
|||||||
|
|
||||||
if self.host in filter_properties.get('ignore_hosts', []):
|
if self.host in filter_properties.get('ignore_hosts', []):
|
||||||
return False
|
return False
|
||||||
|
force_hosts = filter_properties.get('force_hosts', [])
|
||||||
|
if force_hosts:
|
||||||
|
return self.host in force_hosts
|
||||||
for filter_fn in filter_fns:
|
for filter_fn in filter_fns:
|
||||||
if not filter_fn(self, filter_properties):
|
if not filter_fn(self, filter_properties):
|
||||||
return False
|
return False
|
||||||
|
|||||||
@@ -35,8 +35,6 @@ flags.DEFINE_integer("max_gigabytes", 10000,
|
|||||||
"maximum number of volume gigabytes to allow per host")
|
"maximum number of volume gigabytes to allow per host")
|
||||||
flags.DEFINE_integer("max_networks", 1000,
|
flags.DEFINE_integer("max_networks", 1000,
|
||||||
"maximum number of networks to allow per host")
|
"maximum number of networks to allow per host")
|
||||||
flags.DEFINE_string('default_schedule_zone', None,
|
|
||||||
'zone to use when user doesnt specify one')
|
|
||||||
flags.DEFINE_list('isolated_images', [], 'Images to run on isolated host')
|
flags.DEFINE_list('isolated_images', [], 'Images to run on isolated host')
|
||||||
flags.DEFINE_list('isolated_hosts', [], 'Host reserved for specific images')
|
flags.DEFINE_list('isolated_hosts', [], 'Host reserved for specific images')
|
||||||
flags.DEFINE_boolean('skip_isolated_core_check', True,
|
flags.DEFINE_boolean('skip_isolated_core_check', True,
|
||||||
|
|||||||
@@ -18,8 +18,6 @@ Tests For HostManager
|
|||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
import mox
|
|
||||||
|
|
||||||
from nova import db
|
from nova import db
|
||||||
from nova import exception
|
from nova import exception
|
||||||
from nova import log as logging
|
from nova import log as logging
|
||||||
@@ -364,3 +362,21 @@ class HostStateTestCase(test.TestCase):
|
|||||||
result = fake_host.passes_filters(filter_fns, filter_properties)
|
result = fake_host.passes_filters(filter_fns, filter_properties)
|
||||||
self.mox.VerifyAll()
|
self.mox.VerifyAll()
|
||||||
self.assertFalse(result)
|
self.assertFalse(result)
|
||||||
|
|
||||||
|
def test_host_state_passes_filters_skipped_from_force(self):
|
||||||
|
fake_host = host_manager.HostState('host1', 'compute')
|
||||||
|
filter_properties = {'force_hosts': ['host1']}
|
||||||
|
|
||||||
|
cls1 = ComputeFilterClass1()
|
||||||
|
cls2 = ComputeFilterClass2()
|
||||||
|
self.mox.StubOutWithMock(cls1, 'host_passes')
|
||||||
|
self.mox.StubOutWithMock(cls2, 'host_passes')
|
||||||
|
filter_fns = [cls1.host_passes, cls2.host_passes]
|
||||||
|
|
||||||
|
# cls[12].host_passes() not called because of short circuit
|
||||||
|
# with matching host to force
|
||||||
|
|
||||||
|
self.mox.ReplayAll()
|
||||||
|
result = fake_host.passes_filters(filter_fns, filter_properties)
|
||||||
|
self.mox.VerifyAll()
|
||||||
|
self.assertTrue(result)
|
||||||
|
|||||||
Reference in New Issue
Block a user