Skip to content

Commit f663b92

Browse files
authored
config-drive: use hostname of VM instance of internal VM id (#2645)
This fixes config drive to use VM's user provided host-name instead of the internal VM instance ID for hostname related config in both cloudstack and openstack metadata bundled in the ISO. Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
1 parent ece79e6 commit f663b92

8 files changed

Lines changed: 16 additions & 15 deletions

File tree

api/src/com/cloud/network/NetworkModel.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public interface NetworkModel {
7373
AVAILABILITY_ZONE_FILE, "availability_zone",
7474
LOCAL_HOSTNAME_FILE, "hostname",
7575
VM_ID_FILE, "uuid",
76-
INSTANCE_ID_FILE, "name"
76+
PUBLIC_HOSTNAME_FILE, "name"
7777
);
7878

7979
static final ConfigKey<Integer> MACIdentifier = new ConfigKey<Integer>("Advanced",Integer.class, "mac.identifier", "0",
@@ -313,7 +313,7 @@ public interface NetworkModel {
313313
boolean getNetworkEgressDefaultPolicy(Long networkId);
314314

315315
List<String[]> generateVmData(String userData, String serviceOffering, long datacenterId,
316-
String vmName, long vmId, String vmUuid, String guestIpAddress, String publicKey, String password, Boolean isWindows);
316+
String vmName, String vmHostName, long vmId, String vmUuid, String guestIpAddress, String publicKey, String password, Boolean isWindows);
317317

318318
String getValidNetworkCidr(Network guestNetwork);
319319

engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2525,7 +2525,7 @@ private void orchestrateMigrateWithStorage(final String vmUuid, final long srcHo
25252525
final String serviceOffering = _serviceOfferingDao.findByIdIncludingRemoved(vm.getId(), vm.getServiceOfferingId()).getDisplayText();
25262526
boolean isWindows = _guestOSCategoryDao.findById(_guestOSDao.findById(vm.getGuestOSId()).getCategoryId()).getName().equalsIgnoreCase("Windows");
25272527

2528-
vmData = _networkModel.generateVmData(userVm.getUserData(), serviceOffering, vm.getDataCenterId(), vm.getInstanceName(), vm.getId(),
2528+
vmData = _networkModel.generateVmData(userVm.getUserData(), serviceOffering, vm.getDataCenterId(), vm.getInstanceName(), vm.getHostName(), vm.getId(),
25292529
vm.getUuid(), defaultNic.getMacAddress(), userVm.getDetail("SSH.PublicKey"), (String) profile.getParameter(VirtualMachineProfile.Param.VmPassword), isWindows);
25302530
String vmName = vm.getInstanceName();
25312531
String configDriveIsoRootFolder = "/tmp";

server/src/com/cloud/network/NetworkModelImpl.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2346,7 +2346,7 @@ public boolean getNetworkEgressDefaultPolicy(Long networkId) {
23462346

23472347
@Override
23482348
public List<String[]> generateVmData(String userData, String serviceOffering, long datacenterId,
2349-
String vmName, long vmId, String vmUuid,
2349+
String vmName, String vmHostName, long vmId, String vmUuid,
23502350
String guestIpAddress, String publicKey, String password, Boolean isWindows) {
23512351

23522352
DataCenterVO dcVo = _dcDao.findById(datacenterId);
@@ -2361,11 +2361,11 @@ public List<String[]> generateVmData(String userData, String serviceOffering, lo
23612361
}
23622362
vmData.add(new String[]{METATDATA_DIR, SERVICE_OFFERING_FILE, StringUtils.unicodeEscape(serviceOffering)});
23632363
vmData.add(new String[]{METATDATA_DIR, AVAILABILITY_ZONE_FILE, StringUtils.unicodeEscape(zoneName)});
2364-
vmData.add(new String[]{METATDATA_DIR, LOCAL_HOSTNAME_FILE, StringUtils.unicodeEscape(vmName)});
2364+
vmData.add(new String[]{METATDATA_DIR, LOCAL_HOSTNAME_FILE, StringUtils.unicodeEscape(vmHostName)});
23652365
vmData.add(new String[]{METATDATA_DIR, LOCAL_IPV4_FILE, guestIpAddress});
23662366

23672367
String publicIpAddress = guestIpAddress;
2368-
String publicHostName = StringUtils.unicodeEscape(vmName);
2368+
String publicHostName = StringUtils.unicodeEscape(vmHostName);
23692369

23702370
if (dcVo.getNetworkType() != DataCenter.NetworkType.Basic) {
23712371
if (publicIp != null) {

server/src/com/cloud/network/element/ConfigDriveNetworkElement.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@ private boolean updateConfigDrive(VirtualMachineProfile profile, String publicKe
381381
final String serviceOffering = _serviceOfferingDao.findByIdIncludingRemoved(vm.getId(), vm.getServiceOfferingId()).getDisplayText();
382382
boolean isWindows = _guestOSCategoryDao.findById(_guestOSDao.findById(vm.getGuestOSId()).getCategoryId()).getName().equalsIgnoreCase("Windows");
383383

384-
List<String[]> vmData = _networkModel.generateVmData(vm.getUserData(), serviceOffering, vm.getDataCenterId(), vm.getInstanceName(), vm.getId(),
384+
List<String[]> vmData = _networkModel.generateVmData(vm.getUserData(), serviceOffering, vm.getDataCenterId(), vm.getInstanceName(), vm.getHostName(), vm.getId(),
385385
vm.getUuid(), nic.getIPv4Address(), publicKey, (String) profile.getParameter(VirtualMachineProfile.Param.VmPassword), isWindows);
386386
profile.setVmData(vmData);
387387
profile.setConfigDriveLabel(VirtualMachineManager.VmConfigDriveLabel.value());

server/src/com/cloud/vm/UserVmManagerImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4087,7 +4087,7 @@ public boolean finalizeVirtualMachineProfile(VirtualMachineProfile profile, Depl
40874087
final String serviceOffering = _serviceOfferingDao.findByIdIncludingRemoved(vm.getId(), vm.getServiceOfferingId()).getDisplayText();
40884088
boolean isWindows = _guestOSCategoryDao.findById(_guestOSDao.findById(vm.getGuestOSId()).getCategoryId()).getName().equalsIgnoreCase("Windows");
40894089

4090-
List<String[]> vmData = _networkModel.generateVmData(vm.getUserData(), serviceOffering, vm.getDataCenterId(), vm.getInstanceName(), vm.getId(),
4090+
List<String[]> vmData = _networkModel.generateVmData(vm.getUserData(), serviceOffering, vm.getDataCenterId(), vm.getInstanceName(), vm.getHostName(), vm.getId(),
40914091
vm.getUuid(), defaultNic.getIPv4Address(), vm.getDetail("SSH.PublicKey"), (String) profile.getParameter(VirtualMachineProfile.Param.VmPassword), isWindows);
40924092
String vmName = vm.getInstanceName();
40934093
String configDriveIsoRootFolder = "/tmp";

server/test/com/cloud/network/MockNetworkModelImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -898,7 +898,7 @@ public boolean getNetworkEgressDefaultPolicy(Long networkId) {
898898
}
899899

900900
@Override
901-
public List<String[]> generateVmData(String userData, String serviceOffering, long datacenterId, String vmName, long vmId, String vmUuid, String guestIpAddress, String publicKey, String password, Boolean isWindows) {
901+
public List<String[]> generateVmData(String userData, String serviceOffering, long datacenterId, String vmName, String vmHostName, long vmId, String vmUuid, String guestIpAddress, String publicKey, String password, Boolean isWindows) {
902902
return null;
903903
}
904904

server/test/com/cloud/network/element/ConfigDriveNetworkElementTest.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -98,13 +98,13 @@ public class ConfigDriveNetworkElementTest {
9898
public static final long NETWORK_ID = 1L;
9999
private final long DATACENTERID = NETWORK_ID;
100100
private final String ZONENAME = "zone1";
101-
private final String VMINSTANCENAME = "vm_name";
101+
private final String VMINSTANCENAME = "i-x-y";
102+
private final String VMHOSTNAME = "vm-hostname";
102103
private final String VMOFFERING = "custom_instance";
103104
private final long VMID = 30L;
104105
private final String VMUSERDATA = "H4sIABCvw1oAAystTi1KSSxJ5AIAUPllwQkAAAA=";
105106
private final long SOID = 31L;
106107
private final long HOSTID = NETWORK_ID;
107-
private final String HOSTNAME = "host1";
108108

109109
@Mock private ConfigurationDao _configDao;
110110
@Mock private DataCenterDao _dcDao;
@@ -166,6 +166,7 @@ public void setUp() throws NoSuchFieldException, IllegalAccessException {
166166
when(virtualMachine.getDataCenterId()).thenReturn(DATACENTERID);
167167
when(virtualMachine.getInstanceName()).thenReturn(VMINSTANCENAME);
168168
when(virtualMachine.getUserData()).thenReturn(VMUSERDATA);
169+
when(virtualMachine.getHostName()).thenReturn(VMHOSTNAME);
169170
when(deployDestination.getHost()).thenReturn(hostVO);
170171
when(hostVO.getId()).thenReturn(HOSTID);
171172
when(nic.isDefaultNic()).thenReturn(true);
@@ -246,7 +247,7 @@ public void testAddPasswordAndUserdata() throws InsufficientCapacityException, R
246247
new String[]{"userdata", "user_data", VMUSERDATA},
247248
new String[]{"metadata", "service-offering", VMOFFERING},
248249
new String[]{"metadata", "availability-zone", ZONENAME},
249-
new String[]{"metadata", "local-hostname", VMINSTANCENAME},
250+
new String[]{"metadata", "local-hostname", VMHOSTNAME},
250251
new String[]{"metadata", "local-ipv4", "192.168.111.111"},
251252
new String[]{"metadata", "public-hostname", null},
252253
new String[]{"metadata", "public-ipv4", "192.168.111.111"},
@@ -269,7 +270,7 @@ public void testAddPasswordAndUserdataStaticNat() throws InsufficientCapacityExc
269270
new String[]{"userdata", "user_data", VMUSERDATA},
270271
new String[]{"metadata", "service-offering", VMOFFERING},
271272
new String[]{"metadata", "availability-zone", ZONENAME},
272-
new String[]{"metadata", "local-hostname", VMINSTANCENAME},
273+
new String[]{"metadata", "local-hostname", VMHOSTNAME},
273274
new String[]{"metadata", "local-ipv4", "192.168.111.111"},
274275
new String[]{"metadata", "public-hostname", "7.7.7.7"},
275276
new String[]{"metadata", "public-ipv4", "7.7.7.7"},
@@ -292,7 +293,7 @@ public void testAddPasswordAndUserdataUuid() throws InsufficientCapacityExceptio
292293
new String[]{"userdata", "user_data", VMUSERDATA},
293294
new String[]{"metadata", "service-offering", VMOFFERING},
294295
new String[]{"metadata", "availability-zone", ZONENAME},
295-
new String[]{"metadata", "local-hostname", VMINSTANCENAME},
296+
new String[]{"metadata", "local-hostname", VMHOSTNAME},
296297
new String[]{"metadata", "local-ipv4", "192.168.111.111"},
297298
new String[]{"metadata", "public-hostname", null},
298299
new String[]{"metadata", "public-ipv4", "192.168.111.111"},

server/test/com/cloud/vpc/MockNetworkModelImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -913,7 +913,7 @@ public boolean getNetworkEgressDefaultPolicy(Long networkId) {
913913
}
914914

915915
@Override
916-
public List<String[]> generateVmData(String userData, String serviceOffering, long datacenterId, String vmName, long vmId, String vmUuid, String guestIpAddress, String publicKey, String password, Boolean isWindows) {
916+
public List<String[]> generateVmData(String userData, String serviceOffering, long datacenterId, String vmName, String vmHostName, long vmId, String vmUuid, String guestIpAddress, String publicKey, String password, Boolean isWindows) {
917917
return null;
918918
}
919919

0 commit comments

Comments
 (0)