Exemplo n.º 1
0
 def schedule_run_instance(self, context, request_spec,
                           admin_password, injected_files,
                           requested_networks, is_first_time,
                           filter_properties, legacy_bdm_in_spec):
     """Create and run an instance or instances."""
     instance_uuids = request_spec.get('instance_uuids')
     for num, instance_uuid in enumerate(instance_uuids):
         request_spec['instance_properties']['launch_index'] = num
         try:
             host = self._schedule(context, CONF.compute_topic,
                                   request_spec, filter_properties)
             updated_instance = driver.instance_update_db(context,
                     instance_uuid)
             self.compute_rpcapi.run_instance(context,
                     instance=updated_instance, host=host,
                     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,
                     legacy_bdm_in_spec=legacy_bdm_in_spec)
         except Exception as ex:
             # NOTE(vish): we don't reraise the exception here to make sure
             #             that all instances in the request get set to
             #             error properly
             driver.handle_schedule_error(context, ex, instance_uuid,
                                          request_spec)
Exemplo n.º 2
0
    def _provision_resource(self, context, weighed_host, request_spec,
            filter_properties, requested_networks, injected_files,
            admin_password, is_first_time, instance_uuid=None,
            legacy_bdm_in_spec=True):
        """Create the requested resource in this Zone."""
        # NOTE(vish): add our current instance back into the request spec
        request_spec['instance_uuids'] = [instance_uuid]
        payload = dict(request_spec=request_spec,
                       weighted_host=weighed_host.to_dict(),
                       instance_id=instance_uuid)
        self.notifier.info(context,
                           'scheduler.run_instance.scheduled', payload)

        # Update the metadata if necessary
        scheduler_hints = filter_properties.get('scheduler_hints') or {}
        try:
            updated_instance = driver.instance_update_db(context,
                                                         instance_uuid)
        except exception.InstanceNotFound:
            LOG.warning(_("Instance disappeared during scheduling"),
                        context=context, instance_uuid=instance_uuid)

        else:
            scheduler_utils.populate_filter_properties(filter_properties,
                    weighed_host.obj)

            self.compute_rpcapi.run_instance(context,
                    instance=updated_instance,
                    host=weighed_host.obj.host,
                    request_spec=request_spec,
                    filter_properties=filter_properties,
                    requested_networks=requested_networks,
                    injected_files=injected_files,
                    admin_password=admin_password, is_first_time=is_first_time,
                    node=weighed_host.obj.nodename,
                    legacy_bdm_in_spec=legacy_bdm_in_spec)