diff --git a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java index e24d862bb62f..92270e98912e 100644 --- a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java +++ b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java @@ -1099,7 +1099,32 @@ private VolumeVO createVolumeOnStoragePool(Long volumeId, Long storageId) throws if (createVolumeResult.isFailed()) { throw new CloudRuntimeException("Volume creation on storage failed: " + createVolumeResult.getResult()); } - return _volsDao.findById(volumeInfo.getId()); + VolumeVO volVO = _volsDao.findById(volumeInfo.getId()); + if (volVO.getFormat() == null) { + HypervisorType hyperType = storagePool.getHypervisor(); + ImageFormat format = getSupportedImageFormatForHypervisor(hyperType); + if (format != null) { + volVO.setFormat(format); + _volsDao.update(volVO.getId(), volVO); + } + } + return volVO; + } + + private ImageFormat getSupportedImageFormatForHypervisor(HypervisorType hyperType) { + if (hyperType == HypervisorType.XenServer) { + return ImageFormat.VHD; + } else if (hyperType == HypervisorType.KVM) { + return ImageFormat.QCOW2; + } else if (hyperType == HypervisorType.VMware) { + return ImageFormat.OVA; + } else if (hyperType == HypervisorType.Ovm) { + return ImageFormat.RAW; + } else if (hyperType == HypervisorType.Hyperv) { + return ImageFormat.VHDX; + } else { + return null; + } } @Override