diff options
-rw-r--r-- | nova/scheduler/chance.py | 14 | ||||
-rw-r--r-- | nova/scheduler/driver.py | 5 | ||||
-rw-r--r-- | nova/scheduler/filter_scheduler.py | 20 | ||||
-rw-r--r-- | nova/scheduler/manager.py | 14 | ||||
-rw-r--r-- | nova/tests/scheduler/test_chance_scheduler.py | 29 | ||||
-rw-r--r-- | nova/tests/scheduler/test_filter_scheduler.py | 14 | ||||
-rw-r--r-- | nova/tests/scheduler/test_scheduler.py | 13 |
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) |