Skip to content

Commit 07cbec9

Browse files
committed
bug CS-14957: Return hypervisor type for uploaded volume
1 parent 0e22eed commit 07cbec9

4 files changed

Lines changed: 33 additions & 2 deletions

File tree

server/src/com/cloud/api/ApiDBUtils.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@
9292
import com.cloud.storage.VMTemplateSwiftVO;
9393
import com.cloud.storage.VMTemplateVO;
9494
import com.cloud.storage.VolumeHostVO;
95+
import com.cloud.storage.Storage.ImageFormat;
9596
import com.cloud.storage.Volume.Type;
9697
import com.cloud.storage.VolumeVO;
9798
import com.cloud.storage.dao.DiskOfferingDao;
@@ -560,6 +561,10 @@ public static Long getAccountIdForVlan(long vlanDbId) {
560561
public static HypervisorType getVolumeHyperType(long volumeId) {
561562
return _volumeDao.getHypervisorType(volumeId);
562563
}
564+
565+
public static HypervisorType getHypervisorTypeFromFormat(ImageFormat format){
566+
return _storageMgr.getHypervisorTypeFromFormat(format);
567+
}
563568

564569
public static List<VMTemplateHostVO> listTemplateHostBy(long templateId, Long zoneId, boolean readyOnly) {
565570
if (zoneId != null) {

server/src/com/cloud/api/ApiResponseHelper.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1025,6 +1025,9 @@ public VolumeResponse createVolumeResponse(Volume volume) {
10251025
com.cloud.storage.VolumeHostVO volumeHostRef = ApiDBUtils.findVolumeHostRef(volume.getId(), volume.getDataCenterId());
10261026
volResponse.setSize(volumeHostRef.getSize());
10271027
volResponse.setCreated(volumeHostRef.getCreated());
1028+
Account caller = UserContext.current().getCaller();
1029+
if (caller.getType() == Account.ACCOUNT_TYPE_ADMIN || caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN)
1030+
volResponse.setHypervisor(ApiDBUtils.getHypervisorTypeFromFormat(volumeHostRef.getFormat()).toString());
10281031
if (volumeHostRef.getDownloadState() != Status.DOWNLOADED) {
10291032
String volumeStatus = "Processing";
10301033
if (volumeHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOAD_IN_PROGRESS) {
@@ -1096,8 +1099,8 @@ public VolumeResponse createVolumeResponse(Volume volume) {
10961099

10971100
// return hypervisor for ROOT and Resource domain only
10981101
Account caller = UserContext.current().getCaller();
1099-
if (caller.getType() == Account.ACCOUNT_TYPE_ADMIN || caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) {
1100-
volResponse.setHypervisor(ApiDBUtils.getVolumeHyperType(volume.getId()).toString());
1102+
if ((caller.getType() == Account.ACCOUNT_TYPE_ADMIN || caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) && volume.getState() != Volume.State.UploadOp) {
1103+
volResponse.setHypervisor(ApiDBUtils.getVolumeHyperType(volume.getId()).toString());
11011104
}
11021105

11031106
volResponse.setAttached(volume.getAttached());

server/src/com/cloud/storage/StorageManager.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.cloud.host.HostVO;
2929
import com.cloud.hypervisor.Hypervisor.HypervisorType;
3030
import com.cloud.service.ServiceOfferingVO;
31+
import com.cloud.storage.Storage.ImageFormat;
3132
import com.cloud.storage.Volume.Event;
3233
import com.cloud.storage.Volume.Type;
3334
import com.cloud.user.Account;
@@ -228,4 +229,6 @@ VolumeVO copyVolumeFromSecToPrimary(VolumeVO volume, VMInstanceVO vm,
228229
HypervisorType hyperType) throws NoTransitionException;
229230

230231
String getSupportedImageFormatForCluster(Long clusterId);
232+
233+
HypervisorType getHypervisorTypeFromFormat(ImageFormat format);
231234
}

server/src/com/cloud/storage/StorageManagerImpl.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3824,4 +3824,24 @@ public String getSupportedImageFormatForCluster(Long clusterId) {
38243824
}
38253825
}
38263826

3827+
@Override
3828+
public HypervisorType getHypervisorTypeFromFormat(ImageFormat format) {
3829+
3830+
if(format == null) {
3831+
return HypervisorType.None;
3832+
}
3833+
3834+
if (format == ImageFormat.VHD) {
3835+
return HypervisorType.XenServer;
3836+
} else if (format == ImageFormat.OVA) {
3837+
return HypervisorType.VMware;
3838+
} else if (format == ImageFormat.QCOW2) {
3839+
return HypervisorType.KVM;
3840+
} else if (format == ImageFormat.RAW) {
3841+
return HypervisorType.Ovm;
3842+
} else {
3843+
return HypervisorType.None;
3844+
}
3845+
}
3846+
38273847
}

0 commit comments

Comments
 (0)