Upload volume format check with the supported hypervisor, fail if supported hypervisor not found on zone (#9224)

This commit is contained in:
Suresh Kumar Anaparti 2024-06-12 15:10:29 +05:30 committed by GitHub
parent 0f770194df
commit 503ae64a3d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -158,6 +158,7 @@ import com.cloud.offering.DiskOffering;
import com.cloud.org.Grouping; import com.cloud.org.Grouping;
import com.cloud.projects.Project; import com.cloud.projects.Project;
import com.cloud.projects.ProjectManager; import com.cloud.projects.ProjectManager;
import com.cloud.resource.ResourceManager;
import com.cloud.resource.ResourceState; import com.cloud.resource.ResourceState;
import com.cloud.serializer.GsonHelper; import com.cloud.serializer.GsonHelper;
import com.cloud.server.ManagementService; import com.cloud.server.ManagementService;
@ -258,6 +259,8 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
@Inject @Inject
private ConfigurationManager _configMgr; private ConfigurationManager _configMgr;
@Inject @Inject
private ResourceManager _resourceMgr;
@Inject
private VolumeDao _volsDao; private VolumeDao _volsDao;
@Inject @Inject
private VolumeDetailsDao _volsDetailsDao; private VolumeDetailsDao _volsDetailsDao;
@ -564,7 +567,7 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
_resourceLimitMgr.checkResourceLimit(_accountMgr.getAccount(ownerId), ResourceType.secondary_storage); _resourceLimitMgr.checkResourceLimit(_accountMgr.getAccount(ownerId), ResourceType.secondary_storage);
} }
sanitizeFormat(format); checkFormatWithSupportedHypervisorsInZone(format, zoneId);
// Check that the disk offering specified is valid // Check that the disk offering specified is valid
if (diskOfferingId != null) { if (diskOfferingId != null) {
@ -581,6 +584,15 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
return false; return false;
} }
private void checkFormatWithSupportedHypervisorsInZone(String format, Long zoneId) {
ImageFormat imageformat = ImageFormat.valueOf(format);
final List<HypervisorType> supportedHypervisorTypesInZone = _resourceMgr.getSupportedHypervisorTypes(zoneId, false, null);
final HypervisorType hypervisorTypeFromFormat = ApiDBUtils.getHypervisorTypeFromFormat(zoneId, imageformat);
if (!(supportedHypervisorTypesInZone.contains(hypervisorTypeFromFormat))) {
throw new InvalidParameterValueException(String.format("The %s hypervisor supported for %s file format, is not found on the zone", hypervisorTypeFromFormat.toString(), format));
}
}
public String getRandomVolumeName() { public String getRandomVolumeName() {
return UUID.randomUUID().toString(); return UUID.randomUUID().toString();
} }