

@base.remotable
def destroy(self):
    if (not self.obj_attr_is_set('id')):
        raise exception.ObjectActionError(action='destroy', reason='already destroyed')
    if (not self.obj_attr_is_set('uuid')):
        raise exception.ObjectActionError(action='destroy', reason='no uuid')
    if ((not self.obj_attr_is_set('host')) or (not self.host)):
        constraint = db.constraint(host=db.equal_any(None))
    else:
        constraint = None
    cell_type = cells_opts.get_cell_type()
    if (cell_type is not None):
        stale_instance = self.obj_clone()
    try:
        db_inst = db.instance_destroy(self._context, self.uuid, constraint=constraint)
        self._from_db_object(self._context, self, db_inst)
    except exception.ConstraintNotMet:
        raise exception.ObjectActionError(action='destroy', reason='host changed')
    if (cell_type == 'compute'):
        cells_api = cells_rpcapi.CellsAPI()
        cells_api.instance_destroy_at_top(self._context, stale_instance)
    delattr(self, base.get_attrname('id'))

dataset/ETHPy150Open BU-NU-CLOUD-SP16/Trusted-Platform-Module-nova/nova/objects/instance.py Instance.destroy/original