mirror of
https://github.com/apache/cloudstack.git
synced 2025-11-02 20:02:29 +01:00
CLOUDSTACK-5554: Custom disk offering allows to create a datadisk with size greater than custom.diskoffering.size.max value Fixed both custom.diskoffering.size.max and custom.diskoffering.size.min to ensure input values while deploying the VM and creating volume APIs.
Moved both parameters to VolumeOrchestrationService using ConfigDepot
This commit is contained in:
parent
f2fab9d5b1
commit
707da55fe3
@ -44,6 +44,7 @@ import com.cloud.utils.fsm.NoTransitionException;
|
||||
import com.cloud.vm.DiskProfile;
|
||||
import com.cloud.vm.VirtualMachine;
|
||||
import com.cloud.vm.VirtualMachineProfile;
|
||||
import org.apache.cloudstack.framework.config.ConfigKey;
|
||||
|
||||
/**
|
||||
* VolumeOrchestrationService is a PURE orchestration service on CloudStack
|
||||
@ -53,6 +54,21 @@ import com.cloud.vm.VirtualMachineProfile;
|
||||
* to provision volumes.
|
||||
*/
|
||||
public interface VolumeOrchestrationService {
|
||||
|
||||
static final ConfigKey<Long> CustomDiskOfferingMinSize = new ConfigKey<Long>("Advanced",
|
||||
Long.class,
|
||||
"custom.diskoffering.size.min",
|
||||
"1",
|
||||
"Minimum size in GB for custom disk offering.",
|
||||
true
|
||||
);
|
||||
static final ConfigKey<Long> CustomDiskOfferingMaxSize = new ConfigKey<Long>("Advanced",
|
||||
Long.class,
|
||||
"custom.diskoffering.size.max",
|
||||
"1024",
|
||||
"Maximum size in GB for custom disk offering.",
|
||||
true
|
||||
);
|
||||
VolumeInfo moveVolume(VolumeInfo volume, long destPoolDcId, Long destPoolPodId, Long destPoolClusterId, HypervisorType dataDiskHyperType)
|
||||
throws ConcurrentOperationException, StorageUnavailableException;
|
||||
|
||||
|
||||
@ -1169,7 +1169,7 @@ public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrati
|
||||
|
||||
@Override
|
||||
public ConfigKey<?>[] getConfigKeys() {
|
||||
return new ConfigKey<?>[] {RecreatableSystemVmEnabled, MaxVolumeSize, StorageHAMigrationEnabled};
|
||||
return new ConfigKey<?>[] {RecreatableSystemVmEnabled, MaxVolumeSize, StorageHAMigrationEnabled, CustomDiskOfferingMaxSize, CustomDiskOfferingMinSize};
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -1705,8 +1705,6 @@ public enum Config {
|
||||
"false",
|
||||
"Should be set to true, if there will be multiple NetScaler devices providing EIP service in a zone",
|
||||
null),
|
||||
CustomDiskOfferingMinSize("Advanced", ManagementServer.class, Long.class, "custom.diskoffering.size.min", "1", "Minimum size in GB for custom disk offering", null),
|
||||
CustomDiskOfferingMaxSize("Advanced", ManagementServer.class, Long.class, "custom.diskoffering.size.max", "1024", "Maximum size in GB for custom disk offering", null),
|
||||
ConsoleProxyServiceOffering(
|
||||
"Advanced",
|
||||
ManagementServer.class,
|
||||
|
||||
@ -3270,7 +3270,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
|
||||
}
|
||||
}
|
||||
|
||||
long diskOffMaxSize = Long.valueOf(_configDao.getValue(Config.CustomDiskOfferingMaxSize.key()));
|
||||
long diskOffMaxSize = _volumeMgr.CustomDiskOfferingMaxSize.value();
|
||||
KVMSnapshotEnabled = Boolean.parseBoolean(_configDao.getValue("KVM.snapshot.enabled"));
|
||||
|
||||
boolean userPublicTemplateEnabled = TemplateManager.AllowPublicUserTemplates.valueIn(caller.getId());
|
||||
|
||||
@ -340,8 +340,6 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
|
||||
Long.class, "vm.job.check.interval", "3000",
|
||||
"Interval in milliseconds to check if the job is complete", false);
|
||||
|
||||
private int _customDiskOfferingMinSize = 1;
|
||||
private final int _customDiskOfferingMaxSize = 1024;
|
||||
private long _maxVolumeSizeInGb;
|
||||
private final StateMachine2<Volume.State, Volume.Event, Volume> _volStateMachine;
|
||||
|
||||
@ -541,9 +539,12 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
|
||||
if (size == null) {
|
||||
throw new InvalidParameterValueException("This disk offering requires a custom size specified");
|
||||
}
|
||||
if ((sizeInGB < _customDiskOfferingMinSize) || (sizeInGB > _customDiskOfferingMaxSize)) {
|
||||
throw new InvalidParameterValueException("Volume size: " + sizeInGB + "GB is out of allowed range. Max: " + _customDiskOfferingMaxSize + " Min:" +
|
||||
_customDiskOfferingMinSize);
|
||||
Long customDiskOfferingMaxSize = _volumeMgr.CustomDiskOfferingMaxSize.value();
|
||||
Long customDiskOfferingMinSize = _volumeMgr.CustomDiskOfferingMinSize.value();
|
||||
|
||||
if ((sizeInGB < customDiskOfferingMinSize) || (sizeInGB > customDiskOfferingMaxSize)) {
|
||||
throw new InvalidParameterValueException("Volume size: " + sizeInGB + "GB is out of allowed range. Max: " + customDiskOfferingMaxSize + " Min:" +
|
||||
customDiskOfferingMinSize);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1925,8 +1926,6 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
|
||||
|
||||
@Override
|
||||
public boolean configure(String name, Map<String, Object> params) {
|
||||
String _customDiskOfferingMinSizeStr = _configDao.getValue(Config.CustomDiskOfferingMinSize.toString());
|
||||
_customDiskOfferingMinSize = NumbersUtil.parseInt(_customDiskOfferingMinSizeStr, Integer.parseInt(Config.CustomDiskOfferingMinSize.getDefaultValue()));
|
||||
|
||||
String maxVolumeSizeInGbString = _configDao.getValue(Config.MaxVolumeSize.toString());
|
||||
_maxVolumeSizeInGb = NumbersUtil.parseLong(maxVolumeSizeInGbString, 2000);
|
||||
|
||||
@ -2520,6 +2520,18 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
||||
if (tmp != null) {
|
||||
size = tmp;
|
||||
}
|
||||
DiskOfferingVO diskOffering = _diskOfferingDao.findById(diskOfferingId);
|
||||
if (diskOffering.isCustomized()) {
|
||||
if (diskSize == null) {
|
||||
throw new InvalidParameterValueException("This disk offering requires a custom size specified");
|
||||
}
|
||||
Long customDiskOfferingMaxSize = volumeMgr.CustomDiskOfferingMaxSize.value();
|
||||
Long customDiskOfferingMinSize = volumeMgr.CustomDiskOfferingMinSize.value();
|
||||
if ((diskSize < customDiskOfferingMinSize) || (diskSize > customDiskOfferingMaxSize)) {
|
||||
throw new InvalidParameterValueException("VM Creation failed. Volume size: " + diskSize + "GB is out of allowed range. Max: " + customDiskOfferingMaxSize + " Min:" +
|
||||
customDiskOfferingMinSize);
|
||||
}
|
||||
}
|
||||
if (diskOfferingId != null) {
|
||||
size += _diskOfferingDao.findById(diskOfferingId).getDiskSize();
|
||||
}
|
||||
|
||||
@ -771,6 +771,8 @@ CREATE VIEW `cloud`.`domain_router_view` AS
|
||||
|
||||
INSERT IGNORE INTO `cloud`.`configuration` VALUES ("Advanced", 'DEFAULT', 'management-server', "vmware.vcenter.session.timeout", "1200", "VMware client timeout in seconds", "1200", NULL,NULL,0);
|
||||
INSERT IGNORE INTO `cloud`.`configuration` VALUES ("Advanced", 'DEFAULT', 'management-server', "mgt.server.vendor", "ACS", "the vendor of management server", "ACS", NULL,NULL,0);
|
||||
Update `cloud`.`configuration` set `component` = "VolumeOrchestrationService", `scope` = "Global" where `name`="custom.diskoffering.size.max";
|
||||
Update `cloud`.`configuration` set `component` = "VolumeOrchestrationService", `scope` = "Global" where `name`="custom.diskoffering.size.min";
|
||||
|
||||
ALTER TABLE `cloud_usage`.`usage_vm_instance` ADD COLUMN `cpu_speed` INT(10) UNSIGNED NULL COMMENT 'speed per core in Mhz',
|
||||
ADD COLUMN `cpu_cores` INT(10) UNSIGNED NULL COMMENT 'number of cpu cores',
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user