An attempt to create an instance with the deleted flag set will
not work as intended, especially from instance.create(), which
can't properly pass the yet-to-be-determined deleted=id protocol.
This makes Instance.create() throw an error like the one for
being already created, and fixes the one test where we depend
on this working.
Change-Id: I60d18ca694a2eb7f333c0cf2a898cf8f17eb83dd
Closes-Bug: #
1644513
if self.obj_attr_is_set('id'):
raise exception.ObjectActionError(action='create',
reason='already created')
+ if self.obj_attr_is_set('deleted') and self.deleted:
+ raise exception.ObjectActionError(action='create',
+ reason='already deleted')
updates = self.obj_get_changes()
expected_attrs = [attr for attr in INSTANCE_DEFAULT_FIELDS
if attr in updates]
admin_context = context.get_admin_context()
deleted_at = (timeutils.utcnow() -
datetime.timedelta(hours=1, minutes=5))
- instance1 = self._create_fake_instance_obj({"deleted_at": deleted_at,
- "deleted": True})
- instance2 = self._create_fake_instance_obj({"deleted_at": deleted_at,
- "deleted": True})
+ instance1 = self._create_fake_instance_obj()
+ instance2 = self._create_fake_instance_obj()
+
+ timeutils.set_time_override(deleted_at)
+ instance1.destroy()
+ instance2.destroy()
+ timeutils.clear_time_override()
+
self.flags(running_deleted_instance_timeout=3600,
running_deleted_instance_action=action)
lambda *args, **kwargs: None)
instance = objects.Instance(context=self.context)
instance.project_id = self.project_id
- instance.deleted = True
instance.create()
+ instance.destroy()
network = db.network_create_safe(self.context.elevated(), {
'project_id': self.project_id,
'host': CONF.host,
inst2 = objects.Instance.get_by_uuid(self.context, inst1.uuid)
self.assertEqual('foo-host', inst2.host)
+ def test_create_deleted(self):
+ inst1 = objects.Instance(context=self.context,
+ user_id=self.context.user_id,
+ project_id=self.context.project_id,
+ deleted=True)
+ self.assertRaises(exception.ObjectActionError, inst1.create)
+
def test_create_with_extras(self):
inst = objects.Instance(context=self.context,
uuid=self.fake_instance['uuid'],