diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index 7292f0a3dc5..69a2f435010 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -7833,8 +7833,22 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir private void detachVolumesFromVm(List volumes) { for (VolumeVO volume : volumes) { + CallContext vmContext = CallContext.current(); + // Create new context and inject correct event resource type, id and details, + // otherwise VOLUME.DETACH event will be associated with VirtualMachine and contain VM id and other information. + CallContext volumeContext = CallContext.register(vmContext.getCallingUserId(), vmContext.getCallingAccountId()); + volumeContext.setEventDetails("Volume Id: " + this._uuidMgr.getUuid(Volume.class, volume.getId()) + " Vm Id: " + this._uuidMgr.getUuid(VirtualMachine.class, volume.getInstanceId())); + volumeContext.setEventResourceType(ApiCommandResourceType.Volume); + volumeContext.setEventResourceId(volume.getId()); + volumeContext.setStartEventId(vmContext.getStartEventId()); - Volume detachResult = _volumeService.detachVolumeViaDestroyVM(volume.getInstanceId(), volume.getId()); + Volume detachResult = null; + try { + detachResult = _volumeService.detachVolumeViaDestroyVM(volume.getInstanceId(), volume.getId()); + } finally { + // Remove volumeContext and pop vmContext back + CallContext.unregister(); + } if (detachResult == null) { s_logger.error("DestroyVM remove volume - failed to detach and delete volume " + volume.getInstanceId() + " from instance " + volume.getId());