summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/scheduler/chance.py14
-rw-r--r--nova/scheduler/driver.py5
-rw-r--r--nova/scheduler/filter_scheduler.py20
-rw-r--r--nova/scheduler/manager.py14
-rw-r--r--nova/tests/scheduler/test_chance_scheduler.py29
-rw-r--r--nova/tests/scheduler/test_filter_scheduler.py14
-rw-r--r--nova/tests/scheduler/test_scheduler.py13
7 files changed, 69 insertions, 40 deletions
diff --git a/nova/scheduler/chance.py b/nova/scheduler/chance.py
index 0cdcff09e..f7427ea6e 100644
--- a/nova/scheduler/chance.py
+++ b/nova/scheduler/chance.py
@@ -60,11 +60,12 @@ class ChanceScheduler(driver.Scheduler):
host = self._schedule(context, topic, None, filter_properties)
driver.cast_to_host(context, topic, host, method, **kwargs)
- def schedule_run_instance(self, context, request_spec, reservations,
- *_args, **kwargs):
+ def schedule_run_instance(self, context, topic, request_spec,
+ admin_password, injected_files,
+ requested_networks, is_first_time,
+ filter_properties, reservations):
"""Create and run an instance or instances"""
num_instances = request_spec.get('num_instances', 1)
- filter_properties = kwargs.get('filter_properties', {})
instances = []
for num in xrange(num_instances):
host = self._schedule(context, 'compute', request_spec,
@@ -73,7 +74,12 @@ class ChanceScheduler(driver.Scheduler):
instance = self.create_instance_db_entry(context, request_spec,
reservations)
driver.cast_to_compute_host(context, host,
- 'run_instance', instance_uuid=instance['uuid'], **kwargs)
+ 'run_instance', instance_uuid=instance['uuid'],
+ requested_networks=requested_networks,
+ injected_files=injected_files,
+ admin_password=admin_password, is_first_time=is_first_time,
+ request_spec=request_spec,
+ filter_properties=filter_properties)
instances.append(driver.encode_instance(instance))
# So if we loop around, create_instance_db_entry will actually
# create a new entry, instead of assume it's been created
diff --git a/nova/scheduler/driver.py b/nova/scheduler/driver.py
index 8f98a3ffc..e70776f53 100644
--- a/nova/scheduler/driver.py
+++ b/nova/scheduler/driver.py
@@ -192,7 +192,10 @@ class Scheduler(object):
msg = _("Driver must implement schedule_prep_resize")
raise NotImplementedError(msg)
- def schedule_run_instance(self, context, request_spec, *_args, **_kwargs):
+ def schedule_run_instance(self, context, topic, request_spec,
+ admin_password, injected_files,
+ requested_networks, is_first_time,
+ filter_properties, reservations):
"""Must override schedule_run_instance method for scheduler to work."""
msg = _("Driver must implement schedule_run_instance")
raise NotImplementedError(msg)
diff --git a/nova/scheduler/filter_scheduler.py b/nova/scheduler/filter_scheduler.py
index f77acfd19..4e4411c56 100644
--- a/nova/scheduler/filter_scheduler.py
+++ b/nova/scheduler/filter_scheduler.py
@@ -51,8 +51,10 @@ class FilterScheduler(driver.Scheduler):
msg = _("No host selection for %s defined.") % topic
raise exception.NoValidHost(reason=msg)
- def schedule_run_instance(self, context, request_spec, reservations,
- *args, **kwargs):
+ def schedule_run_instance(self, context, topic, request_spec,
+ admin_password, injected_files,
+ requested_networks, is_first_time,
+ filter_properties, reservations):
"""This method is called from nova.compute.api to provision
an instance. We first create a build plan (a list of WeightedHosts)
and then provision.
@@ -68,7 +70,6 @@ class FilterScheduler(driver.Scheduler):
notifier.notify(context, notifier.publisher_id("scheduler"),
'scheduler.run_instance.start', notifier.INFO, payload)
- filter_properties = kwargs.pop('filter_properties', {})
weighted_hosts = self._schedule(context, "compute", request_spec,
filter_properties)
@@ -89,7 +90,10 @@ class FilterScheduler(driver.Scheduler):
instance = self._provision_resource(elevated, weighted_host,
request_spec, reservations,
- filter_properties, kwargs)
+ filter_properties,
+ requested_networks,
+ injected_files, admin_password,
+ is_first_time)
# scrub retry host list in case we're scheduling multiple
# instances:
retry = filter_properties.get('retry', {})
@@ -124,7 +128,8 @@ class FilterScheduler(driver.Scheduler):
instance_type, host.host_state.host)
def _provision_resource(self, context, weighted_host, request_spec,
- reservations, filter_properties, kwargs):
+ reservations, filter_properties, requested_networks,
+ injected_files, admin_password, is_first_time):
"""Create the requested resource in this Zone."""
instance = self.create_instance_db_entry(context, request_spec,
reservations)
@@ -142,7 +147,10 @@ class FilterScheduler(driver.Scheduler):
driver.cast_to_compute_host(context, weighted_host.host_state.host,
'run_instance', instance_uuid=instance['uuid'],
request_spec=request_spec, filter_properties=filter_properties,
- **kwargs)
+ requested_networks=requested_networks,
+ injected_files=injected_files,
+ admin_password=admin_password, is_first_time=is_first_time)
+
inst = driver.encode_instance(instance, local=True)
# So if another instance is created, create_instance_db_entry will
diff --git a/nova/scheduler/manager.py b/nova/scheduler/manager.py
index 6f96b988b..b1befc55e 100644
--- a/nova/scheduler/manager.py
+++ b/nova/scheduler/manager.py
@@ -115,17 +115,17 @@ class SchedulerManager(manager.Manager):
{'vm_state': vm_states.ERROR},
context, ex, request_spec)
- def run_instance(self, context, topic, *args, **kwargs):
+ def run_instance(self, context, topic, request_spec, admin_password,
+ injected_files, requested_networks, is_first_time,
+ filter_properties, reservations):
"""Tries to call schedule_run_instance on the driver.
Sets instance vm_state to ERROR on exceptions
"""
- args = (context,) + args
- reservations = kwargs.get('reservations', None)
- # NOTE(russellb): We know request_spec will be specified as it is a
- # required argument in scheduler/rpcapi.py.
- request_spec = kwargs['request_spec']
try:
- result = self.driver.schedule_run_instance(*args, **kwargs)
+ result = self.driver.schedule_run_instance(context, topic,
+ request_spec, admin_password, injected_files,
+ requested_networks, is_first_time, filter_properties,
+ reservations)
return result
except exception.NoValidHost as ex:
# don't reraise
diff --git a/nova/tests/scheduler/test_chance_scheduler.py b/nova/tests/scheduler/test_chance_scheduler.py
index eabfa93dc..0a27375df 100644
--- a/nova/tests/scheduler/test_chance_scheduler.py
+++ b/nova/tests/scheduler/test_chance_scheduler.py
@@ -97,7 +97,10 @@ class ChanceSchedulerTestCase(test_scheduler.SchedulerTestCase):
reservations).WithSideEffects(_add_uuid1).AndReturn(
instance1)
driver.cast_to_compute_host(ctxt, 'host3', 'run_instance',
- instance_uuid=instance1['uuid'], **fake_kwargs)
+ instance_uuid=instance1['uuid'], requested_networks=None,
+ injected_files=None, admin_password=None, is_first_time=None,
+ request_spec=request_spec, filter_properties={})
+
driver.encode_instance(instance1).AndReturn(instance1_encoded)
# instance 2
ctxt.elevated().AndReturn(ctxt_elevated)
@@ -108,12 +111,15 @@ class ChanceSchedulerTestCase(test_scheduler.SchedulerTestCase):
reservations).WithSideEffects(_add_uuid2).AndReturn(
instance2)
driver.cast_to_compute_host(ctxt, 'host1', 'run_instance',
- instance_uuid=instance2['uuid'], **fake_kwargs)
+ instance_uuid=instance2['uuid'], requested_networks=None,
+ injected_files=None, admin_password=None, is_first_time=None,
+ request_spec=request_spec, filter_properties={})
+
driver.encode_instance(instance2).AndReturn(instance2_encoded)
self.mox.ReplayAll()
- result = self.driver.schedule_run_instance(ctxt, request_spec,
- reservations, *fake_args, **fake_kwargs)
+ result = self.driver.schedule_run_instance(ctxt, None, request_spec,
+ None, None, None, None, {}, reservations)
expected = [instance1_encoded, instance2_encoded]
self.assertEqual(result, expected)
@@ -155,7 +161,9 @@ class ChanceSchedulerTestCase(test_scheduler.SchedulerTestCase):
ctxt, mox.Func(_has_launch_index(0)), None
).WithSideEffects(_add_uuid(1)).AndReturn(instance1)
driver.cast_to_compute_host(ctxt, 'host', 'run_instance',
- instance_uuid=instance1['uuid'])
+ instance_uuid=instance1['uuid'], requested_networks=None,
+ injected_files=None, admin_password=None, is_first_time=None,
+ request_spec=request_spec, filter_properties={})
driver.encode_instance(instance1).AndReturn(instance1)
# instance 2
self.driver._schedule(ctxt, 'compute', request_spec,
@@ -164,11 +172,14 @@ class ChanceSchedulerTestCase(test_scheduler.SchedulerTestCase):
ctxt, mox.Func(_has_launch_index(1)), None
).WithSideEffects(_add_uuid(2)).AndReturn(instance2)
driver.cast_to_compute_host(ctxt, 'host', 'run_instance',
- instance_uuid=instance2['uuid'])
+ instance_uuid=instance2['uuid'], requested_networks=None,
+ injected_files=None, admin_password=None, is_first_time=None,
+ request_spec=request_spec, filter_properties={})
driver.encode_instance(instance2).AndReturn(instance2)
self.mox.ReplayAll()
- self.driver.schedule_run_instance(ctxt, request_spec, None)
+ self.driver.schedule_run_instance(ctxt, '', request_spec, None, None,
+ None, None, {}, None)
def test_basic_schedule_run_instance_no_hosts(self):
ctxt = context.RequestContext('fake', 'fake', False)
@@ -189,8 +200,8 @@ class ChanceSchedulerTestCase(test_scheduler.SchedulerTestCase):
self.mox.ReplayAll()
self.assertRaises(exception.NoValidHost,
- self.driver.schedule_run_instance, ctxt, request_spec,
- *fake_args, **fake_kwargs)
+ self.driver.schedule_run_instance, ctxt, '', request_spec,
+ None, None, None, None, {}, None)
def test_basic_schedule_fallback(self):
ctxt = context.RequestContext('fake', 'fake', False)
diff --git a/nova/tests/scheduler/test_filter_scheduler.py b/nova/tests/scheduler/test_filter_scheduler.py
index 648373945..4de0bb645 100644
--- a/nova/tests/scheduler/test_filter_scheduler.py
+++ b/nova/tests/scheduler/test_filter_scheduler.py
@@ -50,7 +50,8 @@ class FilterSchedulerTestCase(test_scheduler.SchedulerTestCase):
'ephemeral_gb': 0},
'instance_properties': {'project_id': 1}}
self.assertRaises(exception.NoValidHost, sched.schedule_run_instance,
- fake_context, request_spec, None)
+ fake_context, '', request_spec, None, None, None,
+ None, {}, None)
def test_run_instance_non_admin(self):
"""Test creating an instance locally using run_instance, passing
@@ -71,7 +72,8 @@ class FilterSchedulerTestCase(test_scheduler.SchedulerTestCase):
request_spec = {'instance_type': {'memory_mb': 1, 'local_gb': 1},
'instance_properties': {'project_id': 1}}
self.assertRaises(exception.NoValidHost, sched.schedule_run_instance,
- fake_context, request_spec, None)
+ fake_context, '', request_spec, None, None, None,
+ None, {}, None)
self.assertTrue(self.was_admin)
def test_schedule_bad_topic(self):
@@ -117,16 +119,16 @@ class FilterSchedulerTestCase(test_scheduler.SchedulerTestCase):
self.driver._provision_resource(
ctxt, 'host1',
mox.Func(_has_launch_index(0)), None,
- {}, fake_kwargs).AndReturn(instance1)
+ {}, None, None, None, None).AndReturn(instance1)
# instance 2
self.driver._provision_resource(
ctxt, 'host2',
mox.Func(_has_launch_index(1)), None,
- {}, fake_kwargs).AndReturn(instance2)
+ {}, None, None, None, None).AndReturn(instance2)
self.mox.ReplayAll()
- self.driver.schedule_run_instance(context_fake, request_spec, None,
- **fake_kwargs)
+ self.driver.schedule_run_instance(context_fake, '', request_spec,
+ None, None, None, None, {}, None)
def test_schedule_happy_day(self):
"""Make sure there's nothing glaringly wrong with _schedule()
diff --git a/nova/tests/scheduler/test_scheduler.py b/nova/tests/scheduler/test_scheduler.py
index c4f30ed74..baf6b3f64 100644
--- a/nova/tests/scheduler/test_scheduler.py
+++ b/nova/tests/scheduler/test_scheduler.py
@@ -220,17 +220,16 @@ class SchedulerManagerTestCase(test.TestCase):
request_spec = {'instance_properties':
{'uuid': fake_instance_uuid}}
- self.fake_kwargs['request_spec'] = request_spec
- self.manager.driver.schedule_run_instance(self.context,
- *self.fake_args, **self.fake_kwargs).AndRaise(
+ self.manager.driver.schedule_run_instance(self.context, self.topic,
+ request_spec, None, None, None, None, {}, None).AndRaise(
exception.NoValidHost(reason=""))
db.instance_update_and_get_original(self.context, fake_instance_uuid,
{"vm_state": vm_states.ERROR}).AndReturn((inst, inst))
self.mox.ReplayAll()
- self.manager.run_instance(self.context, self.topic,
- *self.fake_args, **self.fake_kwargs)
+ self.manager.run_instance(self.context, self.topic, request_spec,
+ None, None, None, None, {}, None)
def test_prep_resize_no_valid_host_back_in_active_state(self):
"""Test that a NoValidHost exception for prep_resize puts
@@ -772,8 +771,8 @@ class SchedulerDriverBaseTestCase(SchedulerTestCase):
self.assertRaises(NotImplementedError,
self.driver.schedule_run_instance,
- self.context, fake_request_spec,
- *fake_args, **fake_kwargs)
+ self.context, '', fake_request_spec, None, None, None,
+ None, None, None)
def test_unimplemented_schedule_prep_resize(self):
fake_args = (1, 2, 3)