mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Merge remote-tracking branch 'apache/4.17' into main
This commit is contained in:
commit
bd6bcffccc
@ -61,7 +61,7 @@ public class Upgrade41610to41700 implements DbUpgrade, DbUpgradeSystemVmTemplate
|
||||
|
||||
@Override
|
||||
public void performDataMigration(Connection conn) {
|
||||
fixWrongPoolUuid(conn);
|
||||
fixWrongDatastoreClusterPoolUuid(conn);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -90,10 +90,11 @@ public class Upgrade41610to41700 implements DbUpgrade, DbUpgradeSystemVmTemplate
|
||||
}
|
||||
}
|
||||
|
||||
public void fixWrongPoolUuid(Connection conn) {
|
||||
LOG.debug("Replacement of faulty pool uuids");
|
||||
public void fixWrongDatastoreClusterPoolUuid(Connection conn) {
|
||||
LOG.debug("Replacement of faulty pool uuids on datastorecluster");
|
||||
try (PreparedStatement pstmt = conn.prepareStatement("SELECT id,uuid FROM storage_pool "
|
||||
+ "WHERE uuid NOT LIKE \"%-%-%-%\" AND removed IS NULL;"); ResultSet rs = pstmt.executeQuery()) {
|
||||
+ "WHERE uuid NOT LIKE \"%-%-%-%\" AND removed IS NULL "
|
||||
+ "AND pool_type = 'DatastoreCluster';"); ResultSet rs = pstmt.executeQuery()) {
|
||||
PreparedStatement updateStmt = conn.prepareStatement("update storage_pool set uuid = ? where id = ?");
|
||||
while (rs.next()) {
|
||||
UUID poolUuid = new UUID(
|
||||
|
||||
@ -469,26 +469,26 @@ public class KubernetesClusterManagerImpl extends ManagerBase implements Kuberne
|
||||
suitable_host_found = false;
|
||||
for (Map.Entry<String, Pair<HostVO, Integer>> hostEntry : hosts_with_resevered_capacity.entrySet()) {
|
||||
Pair<HostVO, Integer> hp = hostEntry.getValue();
|
||||
HostVO h = hp.first();
|
||||
hostDao.loadHostTags(h);
|
||||
if (StringUtils.isNotEmpty(offering.getHostTag()) && !(h.getHostTags() != null && h.getHostTags().contains(offering.getHostTag()))) {
|
||||
HostVO hostVO = hp.first();
|
||||
hostDao.loadHostTags(hostVO);
|
||||
if (!hostVO.checkHostServiceOfferingTags(offering)) {
|
||||
continue;
|
||||
}
|
||||
int reserved = hp.second();
|
||||
reserved++;
|
||||
ClusterVO cluster = clusterDao.findById(h.getClusterId());
|
||||
ClusterVO cluster = clusterDao.findById(hostVO.getClusterId());
|
||||
ClusterDetailsVO cluster_detail_cpu = clusterDetailsDao.findDetail(cluster.getId(), "cpuOvercommitRatio");
|
||||
ClusterDetailsVO cluster_detail_ram = clusterDetailsDao.findDetail(cluster.getId(), "memoryOvercommitRatio");
|
||||
Float cpuOvercommitRatio = Float.parseFloat(cluster_detail_cpu.getValue());
|
||||
Float memoryOvercommitRatio = Float.parseFloat(cluster_detail_ram.getValue());
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
LOGGER.debug(String.format("Checking host ID: %s for capacity already reserved %d", h.getUuid(), reserved));
|
||||
LOGGER.debug(String.format("Checking host ID: %s for capacity already reserved %d", hostVO.getUuid(), reserved));
|
||||
}
|
||||
if (capacityManager.checkIfHostHasCapacity(h.getId(), cpu_requested * reserved, ram_requested * reserved, false, cpuOvercommitRatio, memoryOvercommitRatio, true)) {
|
||||
if (capacityManager.checkIfHostHasCapacity(hostVO.getId(), cpu_requested * reserved, ram_requested * reserved, false, cpuOvercommitRatio, memoryOvercommitRatio, true)) {
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
LOGGER.debug(String.format("Found host ID: %s for with enough capacity, CPU=%d RAM=%s", h.getUuid(), cpu_requested * reserved, toHumanReadableSize(ram_requested * reserved)));
|
||||
LOGGER.debug(String.format("Found host ID: %s for with enough capacity, CPU=%d RAM=%s", hostVO.getUuid(), cpu_requested * reserved, toHumanReadableSize(ram_requested * reserved)));
|
||||
}
|
||||
hostEntry.setValue(new Pair<HostVO, Integer>(h, reserved));
|
||||
hostEntry.setValue(new Pair<HostVO, Integer>(hostVO, reserved));
|
||||
suitable_host_found = true;
|
||||
planCluster = cluster;
|
||||
break;
|
||||
|
||||
@ -1101,6 +1101,7 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C
|
||||
boolean success = _ipAddrMgr.disassociatePublicIpAddress(ipAddressId, userId, caller);
|
||||
|
||||
if (success) {
|
||||
_resourceTagDao.removeByIdAndType(ipAddressId, ResourceObjectType.PublicIpAddress);
|
||||
if (guestNetwork != null) {
|
||||
NetworkOffering offering = _entityMgr.findById(NetworkOffering.class, guestNetwork.getNetworkOfferingId());
|
||||
Long vmId = ipVO.getAssociatedWithVmId();
|
||||
|
||||
@ -4304,6 +4304,15 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
||||
if (!isImport && isIso) {
|
||||
vm.setIsoId(template.getId());
|
||||
}
|
||||
|
||||
long guestOSId = template.getGuestOSId();
|
||||
GuestOSVO guestOS = _guestOSDao.findById(guestOSId);
|
||||
long guestOSCategoryId = guestOS.getCategoryId();
|
||||
GuestOSCategoryVO guestOSCategory = _guestOSCategoryDao.findById(guestOSCategoryId);
|
||||
if (hypervisorType.equals(HypervisorType.VMware)) {
|
||||
updateVMDiskController(vm, customParameters, guestOS);
|
||||
}
|
||||
|
||||
Long rootDiskSize = null;
|
||||
// custom root disk size, resizes base template to larger size
|
||||
if (customParameters.containsKey(VmDetailConstants.ROOT_DISK_SIZE)) {
|
||||
@ -4324,36 +4333,6 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
||||
vm.setDisplayVm(true);
|
||||
}
|
||||
|
||||
long guestOSId = template.getGuestOSId();
|
||||
GuestOSVO guestOS = _guestOSDao.findById(guestOSId);
|
||||
long guestOSCategoryId = guestOS.getCategoryId();
|
||||
GuestOSCategoryVO guestOSCategory = _guestOSCategoryDao.findById(guestOSCategoryId);
|
||||
|
||||
// If hypervisor is vSphere and OS is OS X, set special settings.
|
||||
if (hypervisorType.equals(HypervisorType.VMware)) {
|
||||
if (guestOS.getDisplayName().toLowerCase().contains("apple mac os")) {
|
||||
vm.setDetail(VmDetailConstants.SMC_PRESENT, "TRUE");
|
||||
vm.setDetail(VmDetailConstants.ROOT_DISK_CONTROLLER, "scsi");
|
||||
vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, "scsi");
|
||||
vm.setDetail(VmDetailConstants.FIRMWARE, "efi");
|
||||
s_logger.info("guestOS is OSX : overwrite root disk controller to scsi, use smc and efi");
|
||||
} else {
|
||||
String controllerSetting = StringUtils.defaultIfEmpty(_configDao.getValue(Config.VmwareRootDiskControllerType.key()),
|
||||
Config.VmwareRootDiskControllerType.getDefaultValue());
|
||||
// Don't override if VM already has root/data disk controller detail
|
||||
if (vm.getDetail(VmDetailConstants.ROOT_DISK_CONTROLLER) == null) {
|
||||
vm.setDetail(VmDetailConstants.ROOT_DISK_CONTROLLER, controllerSetting);
|
||||
}
|
||||
if (vm.getDetail(VmDetailConstants.DATA_DISK_CONTROLLER) == null) {
|
||||
if (controllerSetting.equalsIgnoreCase("scsi")) {
|
||||
vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, "scsi");
|
||||
} else {
|
||||
vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, "osdefault");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isImport) {
|
||||
vm.setDataCenterId(zone.getId());
|
||||
vm.setHostId(host.getId());
|
||||
@ -4443,6 +4422,42 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
||||
});
|
||||
}
|
||||
|
||||
private void updateVMDiskController(UserVmVO vm, Map<String, String> customParameters, GuestOSVO guestOS) {
|
||||
// If hypervisor is vSphere and OS is OS X, set special settings.
|
||||
if (guestOS.getDisplayName().toLowerCase().contains("apple mac os")) {
|
||||
vm.setDetail(VmDetailConstants.SMC_PRESENT, "TRUE");
|
||||
vm.setDetail(VmDetailConstants.ROOT_DISK_CONTROLLER, "scsi");
|
||||
vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, "scsi");
|
||||
vm.setDetail(VmDetailConstants.FIRMWARE, "efi");
|
||||
s_logger.info("guestOS is OSX : overwrite root disk controller to scsi, use smc and efi");
|
||||
} else {
|
||||
String rootDiskControllerSetting = customParameters.get(VmDetailConstants.ROOT_DISK_CONTROLLER);
|
||||
String dataDiskControllerSetting = customParameters.get(VmDetailConstants.DATA_DISK_CONTROLLER);
|
||||
if (StringUtils.isNotEmpty(rootDiskControllerSetting)) {
|
||||
vm.setDetail(VmDetailConstants.ROOT_DISK_CONTROLLER, rootDiskControllerSetting);
|
||||
}
|
||||
|
||||
if (StringUtils.isNotEmpty(dataDiskControllerSetting)) {
|
||||
vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, dataDiskControllerSetting);
|
||||
}
|
||||
|
||||
String controllerSetting = StringUtils.defaultIfEmpty(_configDao.getValue(Config.VmwareRootDiskControllerType.key()),
|
||||
Config.VmwareRootDiskControllerType.getDefaultValue());
|
||||
|
||||
// Don't override if VM already has root/data disk controller detail
|
||||
if (vm.getDetail(VmDetailConstants.ROOT_DISK_CONTROLLER) == null) {
|
||||
vm.setDetail(VmDetailConstants.ROOT_DISK_CONTROLLER, controllerSetting);
|
||||
}
|
||||
if (vm.getDetail(VmDetailConstants.DATA_DISK_CONTROLLER) == null) {
|
||||
if (controllerSetting.equalsIgnoreCase("scsi")) {
|
||||
vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, "scsi");
|
||||
} else {
|
||||
vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, "osdefault");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* take the properties and set them on the vm.
|
||||
* consider should we be complete, and make sure all default values are copied as well if known?
|
||||
@ -4495,6 +4510,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
||||
public void validateRootDiskResize(final HypervisorType hypervisorType, Long rootDiskSize, VMTemplateVO templateVO, UserVmVO vm, final Map<String, String> customParameters) throws InvalidParameterValueException
|
||||
{
|
||||
// rootdisksize must be larger than template.
|
||||
boolean isIso = ImageFormat.ISO == templateVO.getFormat();
|
||||
if ((rootDiskSize << 30) < templateVO.getSize()) {
|
||||
String error = "Unsupported: rootdisksize override is smaller than template size " + toHumanReadableSize(templateVO.getSize());
|
||||
s_logger.error(error);
|
||||
@ -4502,7 +4518,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
||||
} else if ((rootDiskSize << 30) > templateVO.getSize()) {
|
||||
if (hypervisorType == HypervisorType.VMware && (vm.getDetails() == null || vm.getDetails().get(VmDetailConstants.ROOT_DISK_CONTROLLER) == null)) {
|
||||
s_logger.warn("If Root disk controller parameter is not overridden, then Root disk resize may fail because current Root disk controller value is NULL.");
|
||||
} else if (hypervisorType == HypervisorType.VMware && vm.getDetails().get(VmDetailConstants.ROOT_DISK_CONTROLLER).toLowerCase().contains("ide")) {
|
||||
} else if (hypervisorType == HypervisorType.VMware && vm.getDetails().get(VmDetailConstants.ROOT_DISK_CONTROLLER).toLowerCase().contains("ide") && !isIso) {
|
||||
String error = String.format("Found unsupported root disk controller [%s].", vm.getDetails().get(VmDetailConstants.ROOT_DISK_CONTROLLER));
|
||||
s_logger.error(error);
|
||||
throw new InvalidParameterValueException(error);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user