Skip to content

Commit 36e636a

Browse files
committed
server: trim autoscale Windows VM hostname
Fixes #9505 Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
1 parent 86827f8 commit 36e636a

2 files changed

Lines changed: 23 additions & 11 deletions

File tree

server/src/main/java/com/cloud/network/as/AutoScaleManager.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@
1616
// under the License.
1717
package com.cloud.network.as;
1818

19-
import com.cloud.user.Account;
2019
import org.apache.cloudstack.framework.config.ConfigKey;
2120

21+
import com.cloud.user.Account;
22+
2223
public interface AutoScaleManager extends AutoScaleService {
2324

2425
ConfigKey<Integer> AutoScaleStatsInterval = new ConfigKey<>(ConfigKey.CATEGORY_ADVANCED, Integer.class,
@@ -57,7 +58,5 @@ public interface AutoScaleManager extends AutoScaleService {
5758

5859
void removeVmFromVmGroup(Long vmId);
5960

60-
String getNextVmHostName(AutoScaleVmGroupVO asGroup);
61-
6261
void checkAutoScaleVmGroupName(String groupName);
6362
}

server/src/main/java/com/cloud/network/as/AutoScaleManagerImpl.java

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838

3939
import javax.inject.Inject;
4040

41-
import com.cloud.network.NetworkModel;
4241
import org.apache.cloudstack.acl.ControlledEntity;
4342
import org.apache.cloudstack.affinity.AffinityGroupVO;
4443
import org.apache.cloudstack.affinity.dao.AffinityGroupDao;
@@ -113,6 +112,7 @@
113112
import com.cloud.network.Network;
114113
import com.cloud.network.Network.Capability;
115114
import com.cloud.network.Network.IpAddresses;
115+
import com.cloud.network.NetworkModel;
116116
import com.cloud.network.as.AutoScaleCounter.AutoScaleCounterParam;
117117
import com.cloud.network.as.dao.AutoScalePolicyConditionMapDao;
118118
import com.cloud.network.as.dao.AutoScalePolicyDao;
@@ -146,7 +146,9 @@
146146
import com.cloud.server.ResourceTag;
147147
import com.cloud.service.ServiceOfferingVO;
148148
import com.cloud.service.dao.ServiceOfferingDao;
149+
import com.cloud.storage.GuestOSVO;
149150
import com.cloud.storage.dao.DiskOfferingDao;
151+
import com.cloud.storage.dao.GuestOSDao;
150152
import com.cloud.template.TemplateManager;
151153
import com.cloud.template.VirtualMachineTemplate;
152154
import com.cloud.user.Account;
@@ -280,6 +282,8 @@ public class AutoScaleManagerImpl extends ManagerBase implements AutoScaleManage
280282
private NetworkOfferingDao networkOfferingDao;
281283
@Inject
282284
private VirtualMachineManager virtualMachineManager;
285+
@Inject
286+
GuestOSDao guestOSDao;
283287

284288
private static final String PARAM_ROOT_DISK_SIZE = "rootdisksize";
285289
private static final String PARAM_DISK_OFFERING_ID = "diskofferingid";
@@ -1805,26 +1809,28 @@ protected UserVm createNewVM(AutoScaleVmGroupVO asGroup) {
18051809
List<Long> affinityGroupIdList = getVmAffinityGroupId(deployParams);
18061810
updateVmDetails(deployParams, customParameters);
18071811

1808-
String vmHostName = getNextVmHostName(asGroup);
1812+
Pair<String, String> vmHostAndDisplayName = getNextVmHostAndDisplayName(asGroup, template);
1813+
String vmHostName = vmHostAndDisplayName.first();
1814+
String vmDisplayName = vmHostAndDisplayName.second();
18091815
asGroup.setNextVmSeq(asGroup.getNextVmSeq() + 1);
18101816
autoScaleVmGroupDao.persist(asGroup);
18111817

18121818
if (zone.getNetworkType() == NetworkType.Basic) {
18131819
vm = userVmService.createBasicSecurityGroupVirtualMachine(zone, serviceOffering, template, null, owner, vmHostName,
1814-
vmHostName, diskOfferingId, dataDiskSize, null,
1820+
vmDisplayName, diskOfferingId, dataDiskSize, null,
18151821
hypervisorType, HTTPMethod.GET, userData, userDataId, userDataDetails, sshKeyPairs,
18161822
null, null, true, null, affinityGroupIdList, customParameters, null, null, null,
18171823
null, true, overrideDiskOfferingId, null, null);
18181824
} else {
18191825
if (networkModel.checkSecurityGroupSupportForNetwork(owner, zone, networkIds,
18201826
Collections.emptyList())) {
18211827
vm = userVmService.createAdvancedSecurityGroupVirtualMachine(zone, serviceOffering, template, networkIds, null,
1822-
owner, vmHostName,vmHostName, diskOfferingId, dataDiskSize, null,
1828+
owner, vmHostName, vmDisplayName, diskOfferingId, dataDiskSize, null,
18231829
hypervisorType, HTTPMethod.GET, userData, userDataId, userDataDetails, sshKeyPairs,
18241830
null, null, true, null, affinityGroupIdList, customParameters, null, null, null,
18251831
null, true, overrideDiskOfferingId, null, null, null);
18261832
} else {
1827-
vm = userVmService.createAdvancedVirtualMachine(zone, serviceOffering, template, networkIds, owner, vmHostName, vmHostName,
1833+
vm = userVmService.createAdvancedVirtualMachine(zone, serviceOffering, template, networkIds, owner, vmHostName, vmDisplayName,
18281834
diskOfferingId, dataDiskSize, null,
18291835
hypervisorType, HTTPMethod.GET, userData, userDataId, userDataDetails, sshKeyPairs,
18301836
null, addrs, true, null, affinityGroupIdList, customParameters, null, null, null,
@@ -1949,13 +1955,20 @@ public void updateVmDetails(Map<String, String> deployParams, Map<String, String
19491955
}
19501956
}
19511957

1952-
@Override
1953-
public String getNextVmHostName(AutoScaleVmGroupVO asGroup) {
1958+
protected Pair<String, String> getNextVmHostAndDisplayName(AutoScaleVmGroupVO asGroup, VirtualMachineTemplate template) {
1959+
template.getGuestOSId();
1960+
GuestOSVO guestOSVO = guestOSDao.findById(template.getGuestOSId());
1961+
boolean isWindows = guestOSVO != null && guestOSVO.getDisplayName().toLowerCase().contains("windows");
19541962
String vmHostNameSuffix = "-" + asGroup.getNextVmSeq() + "-" +
19551963
RandomStringUtils.random(VM_HOSTNAME_RANDOM_SUFFIX_LENGTH, 0, 0, true, false, (char[])null, new SecureRandom()).toLowerCase();
19561964
// Truncate vm group name because max length of vm name is 63
19571965
int subStringLength = Math.min(asGroup.getName().length(), 63 - VM_HOSTNAME_PREFIX.length() - vmHostNameSuffix.length());
1958-
return VM_HOSTNAME_PREFIX + asGroup.getName().substring(0, subStringLength) + vmHostNameSuffix;
1966+
String displayName = VM_HOSTNAME_PREFIX + asGroup.getName().substring(0, subStringLength) + vmHostNameSuffix;
1967+
String hostName = displayName;
1968+
if (isWindows) {
1969+
hostName = displayName.substring(Math.max(0, displayName.length() - 15));
1970+
}
1971+
return new Pair<>(hostName, displayName);
19591972
}
19601973

19611974
@Override

0 commit comments

Comments
 (0)