From 86961b79c3bcd0c5e34feea6c7fc565fcdf473d6 Mon Sep 17 00:00:00 2001 From: Nitin Mehta Date: Wed, 16 May 2012 21:45:48 +0530 Subject: [PATCH] bug CS-14321: Correcting listVolumes API call to return valid value for isExtractable for ISO derived disk and DATA disk. --- server/src/com/cloud/api/ApiResponseHelper.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 3984ec5bad4..740e1ac08f1 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -114,6 +114,7 @@ import com.cloud.dc.VlanVO; import com.cloud.domain.Domain; import com.cloud.event.Event; import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.PermissionDeniedException; import com.cloud.host.Host; import com.cloud.host.HostStats; import com.cloud.host.HostVO; @@ -158,6 +159,7 @@ import com.cloud.storage.Snapshot; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.storage.Storage.TemplateType; +import com.cloud.storage.Storage; import com.cloud.storage.StoragePool; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.StorageStats; @@ -1100,9 +1102,15 @@ public class ApiResponseHelper implements ResponseGenerator { } volResponse.setAttached(volume.getAttached()); - volResponse.setDestroyed(volume.getState() == Volume.State.Destroy); - VMTemplateVO template = ApiDBUtils.findTemplateById(volume.getTemplateId()); - boolean isExtractable = template != null && template.isExtractable() && !(template.getTemplateType() == TemplateType.SYSTEM); + volResponse.setDestroyed(volume.getState() == Volume.State.Destroy); + boolean isExtractable = true; + if (volume.getVolumeType() != Volume.Type.DATADISK) { // Datadisk dont have any template dependence. + VMTemplateVO template = ApiDBUtils.findTemplateById(volume.getTemplateId()); + if (template != null) { // For ISO based volumes template = null and we allow extraction of all ISO based volumes + isExtractable = template.isExtractable() && template.getTemplateType() != Storage.TemplateType.SYSTEM; + } + } + volResponse.setExtractable(isExtractable); volResponse.setObjectName("volume"); return volResponse;