Advertisement
Guest User

Untitled

a guest
Nov 28th, 2016
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.82 KB | None | 0 0
  1. diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py
  2. index db6699f..1fef027 100644
  3. --- a/nova/db/sqlalchemy/api.py
  4. +++ b/nova/db/sqlalchemy/api.py
  5. @@ -1747,63 +1747,66 @@ def _handle_objects_related_type_conversions(values):
  6. def _check_instance_exists_in_project(context, instance_uuid):
  7. if not model_query(context, models.Instance, read_deleted="no",
  8. project_only=True).filter_by(
  9. uuid=instance_uuid).first():
  10. raise exception.InstanceNotFound(instance_id=instance_uuid)
  11.  
  12.  
  13. @require_context
  14. @oslo_db_api.wrap_db_retry(max_retries=5, retry_on_deadlock=True)
  15. @pick_context_manager_writer
  16. def instance_create(context, values):
  17. """Create a new Instance record in the database.
  18.  
  19. context - request context object
  20. values - dict containing column values.
  21. """
  22.  
  23. security_group_ensure_default(context)
  24.  
  25. values = values.copy()
  26. + deleted = values.pop('deleted', None)
  27. values['metadata'] = _metadata_refs(
  28. values.get('metadata'), models.InstanceMetadata)
  29.  
  30. values['system_metadata'] = _metadata_refs(
  31. values.get('system_metadata'), models.InstanceSystemMetadata)
  32. _handle_objects_related_type_conversions(values)
  33.  
  34. instance_ref = models.Instance()
  35. if not values.get('uuid'):
  36. values['uuid'] = uuidutils.generate_uuid()
  37. instance_ref['info_cache'] = models.InstanceInfoCache()
  38. info_cache = values.pop('info_cache', None)
  39. if info_cache is not None:
  40. instance_ref['info_cache'].update(info_cache)
  41. security_groups = values.pop('security_groups', [])
  42. instance_ref['extra'] = models.InstanceExtra()
  43. instance_ref['extra'].update(
  44. {'numa_topology': None,
  45. 'pci_requests': None,
  46. 'vcpu_model': None,
  47. })
  48. instance_ref['extra'].update(values.pop('extra', {}))
  49. instance_ref.update(values)
  50. + if deleted:
  51. + instance_ref.delete()
  52.  
  53. def _get_sec_group_models(security_groups):
  54. models = []
  55. default_group = _security_group_ensure_default(context)
  56. if 'default' in security_groups:
  57. models.append(default_group)
  58. # Generate a new list, so we don't modify the original
  59. security_groups = [x for x in security_groups if x != 'default']
  60. if security_groups:
  61. models.extend(_security_group_get_by_names(
  62. context, security_groups))
  63. return models
  64.  
  65. if 'hostname' in values:
  66. _validate_unique_server_name(context, values['hostname'])
  67. instance_ref.security_groups = _get_sec_group_models(security_groups)
  68. context.session.add(instance_ref)
  69.  
  70. # create the instance uuid to ec2_id mapping entry for instance
  71. ec2_instance_create(context, instance_ref['uuid'])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement