diff --git a/api/src/main/java/com/cloud/vm/VmDetailConstants.java b/api/src/main/java/com/cloud/vm/VmDetailConstants.java index 64de93900c9..5784ff110bf 100644 --- a/api/src/main/java/com/cloud/vm/VmDetailConstants.java +++ b/api/src/main/java/com/cloud/vm/VmDetailConstants.java @@ -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"; diff --git a/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDao.java b/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDao.java index 0b1f9368e10..55d8fa02db1 100644 --- a/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDao.java +++ b/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDao.java @@ -75,6 +75,8 @@ public interface UserVmDao extends GenericDao { void saveDetails(UserVmVO vm); + void saveDetails(UserVmVO vm, List hiddenDetails); + List listPodIdsHavingVmsforAccount(long zoneId, long accountId); public Long countAllocatedVMsForAccount(long accountId, boolean runningVMsonly); diff --git a/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDaoImpl.java b/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDaoImpl.java index 25479d6658a..a903c3310bb 100644 --- a/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDaoImpl.java +++ b/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDaoImpl.java @@ -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 implements Use @Override public void saveDetails(UserVmVO vm) { + saveDetails(vm, new ArrayList()); + } + + @Override + public void saveDetails(UserVmVO vm, List hiddenDetails) { Map detailsStr = vm.getDetails(); if (detailsStr == null) { return; @@ -382,7 +387,7 @@ public class UserVmDaoImpl extends GenericDaoBase implements Use List details = new ArrayList(); for (Map.Entry 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)); } diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java index 44add8e662c..fb2af6f57a5 100644 --- a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -2986,7 +2986,13 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa private Pair 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(vmInternalCSName, vmNameOnVcenter); diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index 1eafefa4c4c..a3f818ad626 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -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 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());