Restore VMware VM naming convention option (#4581)

* initial chanes

Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>

* changes

Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>

* fix

Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>

* make check explicit for instance name flag

Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>

* allow hiding vm details (in ui)

Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>

* condition based on name instead of displayname

Signed-off-by: Abhishek Kumar <abhishek.kumar@shapeblue.com>
This commit is contained in:
Abhishek Kumar 2021-03-29 16:13:14 +05:30 committed by GitHub
parent 8903647187
commit d763169b1c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 30 additions and 5 deletions

View File

@ -21,6 +21,7 @@ public interface VmDetailConstants {
String CPU_CORE_PER_SOCKET = "cpu.corespersocket";
String ROOT_DISK_SIZE = "rootdisksize";
String BOOT_MODE = "boot.mode";
String NAME_ON_HYPERVISOR= "nameonhypervisor";
// VMware specific
String NIC_ADAPTER = "nicAdapter";

View File

@ -75,6 +75,8 @@ public interface UserVmDao extends GenericDao<UserVmVO, Long> {
void saveDetails(UserVmVO vm);
void saveDetails(UserVmVO vm, List<String> hiddenDetails);
List<Long> listPodIdsHavingVmsforAccount(long zoneId, long accountId);
public Long countAllocatedVMsForAccount(long accountId, boolean runningVMsonly);

View File

@ -29,13 +29,13 @@ import java.util.Set;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
import org.apache.commons.collections.CollectionUtils;
import org.apache.log4j.Logger;
import com.cloud.network.Network;
import com.cloud.network.dao.NetworkDao;
import com.cloud.network.dao.NetworkVO;
import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
import com.cloud.server.ResourceTag.ResourceObjectType;
import com.cloud.tags.dao.ResourceTagDao;
import com.cloud.user.Account;
@ -373,6 +373,11 @@ public class UserVmDaoImpl extends GenericDaoBase<UserVmVO, Long> implements Use
@Override
public void saveDetails(UserVmVO vm) {
saveDetails(vm, new ArrayList<String>());
}
@Override
public void saveDetails(UserVmVO vm, List<String> hiddenDetails) {
Map<String, String> detailsStr = vm.getDetails();
if (detailsStr == null) {
return;
@ -382,7 +387,7 @@ public class UserVmDaoImpl extends GenericDaoBase<UserVmVO, Long> implements Use
List<UserVmDetailVO> details = new ArrayList<UserVmDetailVO>();
for (Map.Entry<String, String> entry : detailsStr.entrySet()) {
boolean display = visibilityMap.getOrDefault(entry.getKey(), true);
boolean display = !hiddenDetails.contains(entry.getKey()) && visibilityMap.getOrDefault(entry.getKey(), true);
details.add(new UserVmDetailVO(vm.getId(), entry.getKey(), entry.getValue(), display));
}

View File

@ -2986,7 +2986,13 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
private Pair<String, String> composeVmNames(VirtualMachineTO vmSpec) {
String vmInternalCSName = vmSpec.getName();
String vmNameOnVcenter = vmSpec.getName();
if (_instanceNameFlag && vmSpec.getHostName() != null) {
String hostNameInDetails = null;
if (_instanceNameFlag && MapUtils.isNotEmpty(vmSpec.getDetails()) && vmSpec.getDetails().containsKey(VmDetailConstants.NAME_ON_HYPERVISOR)) {
hostNameInDetails = vmSpec.getDetails().get(VmDetailConstants.NAME_ON_HYPERVISOR);
}
if (StringUtils.isNotBlank(hostNameInDetails)) {
vmNameOnVcenter = hostNameInDetails;
} else if (_instanceNameFlag && vmSpec.getHostName() != null) {
vmNameOnVcenter = vmSpec.getHostName();
}
return new Pair<String, String>(vmInternalCSName, vmNameOnVcenter);

View File

@ -3870,8 +3870,12 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
}
String instanceName = null;
String instanceSuffix = _instance;
String uuidName = _uuidMgr.generateUuid(UserVm.class, customId);
if (_instanceNameFlag && HypervisorType.VMware.equals(hypervisorType)) {
if (StringUtils.isNotEmpty(hostName)) {
instanceSuffix = hostName;
}
if (hostName == null) {
if (displayName != null) {
hostName = displayName;
@ -3896,7 +3900,10 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
// Check is hostName is RFC compliant
checkNameForRFCCompliance(hostName);
}
instanceName = VirtualMachineName.getVmName(id, owner.getId(), _instance);
instanceName = VirtualMachineName.getVmName(id, owner.getId(), instanceSuffix);
if (_instanceNameFlag && HypervisorType.VMware.equals(hypervisorType) && !instanceSuffix.equals(_instance)) {
customParameters.put(VmDetailConstants.NAME_ON_HYPERVISOR, instanceName);
}
// Check if VM with instanceName already exists.
VMInstanceVO vmObj = _vmInstanceDao.findVMByInstanceName(instanceName);
@ -4124,7 +4131,11 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
persistVMDeployAsIsProperties(vm, userVmOVFPropertiesMap);
_vmDao.saveDetails(vm);
List<String> hiddenDetails = new ArrayList<>();
if (customParameters.containsKey(VmDetailConstants.NAME_ON_HYPERVISOR)) {
hiddenDetails.add(VmDetailConstants.NAME_ON_HYPERVISOR);
}
_vmDao.saveDetails(vm, hiddenDetails);
if (!isImport) {
s_logger.debug("Allocating in the DB for vm");
DataCenterDeployment plan = new DataCenterDeployment(zone.getId());