mirror of
https://github.com/apache/cloudstack.git
synced 2025-12-15 18:12:35 +01:00
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>
This commit is contained in:
parent
ece79e6913
commit
f663b926c7
@ -73,7 +73,7 @@ public interface NetworkModel {
|
||||
AVAILABILITY_ZONE_FILE, "availability_zone",
|
||||
LOCAL_HOSTNAME_FILE, "hostname",
|
||||
VM_ID_FILE, "uuid",
|
||||
INSTANCE_ID_FILE, "name"
|
||||
PUBLIC_HOSTNAME_FILE, "name"
|
||||
);
|
||||
|
||||
static final ConfigKey<Integer> MACIdentifier = new ConfigKey<Integer>("Advanced",Integer.class, "mac.identifier", "0",
|
||||
@ -313,7 +313,7 @@ public interface NetworkModel {
|
||||
boolean getNetworkEgressDefaultPolicy(Long networkId);
|
||||
|
||||
List<String[]> generateVmData(String userData, String serviceOffering, long datacenterId,
|
||||
String vmName, long vmId, String vmUuid, String guestIpAddress, String publicKey, String password, Boolean isWindows);
|
||||
String vmName, String vmHostName, long vmId, String vmUuid, String guestIpAddress, String publicKey, String password, Boolean isWindows);
|
||||
|
||||
String getValidNetworkCidr(Network guestNetwork);
|
||||
|
||||
|
||||
@ -2525,7 +2525,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
|
||||
final String serviceOffering = _serviceOfferingDao.findByIdIncludingRemoved(vm.getId(), vm.getServiceOfferingId()).getDisplayText();
|
||||
boolean isWindows = _guestOSCategoryDao.findById(_guestOSDao.findById(vm.getGuestOSId()).getCategoryId()).getName().equalsIgnoreCase("Windows");
|
||||
|
||||
vmData = _networkModel.generateVmData(userVm.getUserData(), serviceOffering, vm.getDataCenterId(), vm.getInstanceName(), vm.getId(),
|
||||
vmData = _networkModel.generateVmData(userVm.getUserData(), serviceOffering, vm.getDataCenterId(), vm.getInstanceName(), vm.getHostName(), vm.getId(),
|
||||
vm.getUuid(), defaultNic.getMacAddress(), userVm.getDetail("SSH.PublicKey"), (String) profile.getParameter(VirtualMachineProfile.Param.VmPassword), isWindows);
|
||||
String vmName = vm.getInstanceName();
|
||||
String configDriveIsoRootFolder = "/tmp";
|
||||
|
||||
@ -2346,7 +2346,7 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel, Confi
|
||||
|
||||
@Override
|
||||
public List<String[]> generateVmData(String userData, String serviceOffering, long datacenterId,
|
||||
String vmName, long vmId, String vmUuid,
|
||||
String vmName, String vmHostName, long vmId, String vmUuid,
|
||||
String guestIpAddress, String publicKey, String password, Boolean isWindows) {
|
||||
|
||||
DataCenterVO dcVo = _dcDao.findById(datacenterId);
|
||||
@ -2361,11 +2361,11 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel, Confi
|
||||
}
|
||||
vmData.add(new String[]{METATDATA_DIR, SERVICE_OFFERING_FILE, StringUtils.unicodeEscape(serviceOffering)});
|
||||
vmData.add(new String[]{METATDATA_DIR, AVAILABILITY_ZONE_FILE, StringUtils.unicodeEscape(zoneName)});
|
||||
vmData.add(new String[]{METATDATA_DIR, LOCAL_HOSTNAME_FILE, StringUtils.unicodeEscape(vmName)});
|
||||
vmData.add(new String[]{METATDATA_DIR, LOCAL_HOSTNAME_FILE, StringUtils.unicodeEscape(vmHostName)});
|
||||
vmData.add(new String[]{METATDATA_DIR, LOCAL_IPV4_FILE, guestIpAddress});
|
||||
|
||||
String publicIpAddress = guestIpAddress;
|
||||
String publicHostName = StringUtils.unicodeEscape(vmName);
|
||||
String publicHostName = StringUtils.unicodeEscape(vmHostName);
|
||||
|
||||
if (dcVo.getNetworkType() != DataCenter.NetworkType.Basic) {
|
||||
if (publicIp != null) {
|
||||
|
||||
@ -381,7 +381,7 @@ public class ConfigDriveNetworkElement extends AdapterBase implements NetworkEle
|
||||
final String serviceOffering = _serviceOfferingDao.findByIdIncludingRemoved(vm.getId(), vm.getServiceOfferingId()).getDisplayText();
|
||||
boolean isWindows = _guestOSCategoryDao.findById(_guestOSDao.findById(vm.getGuestOSId()).getCategoryId()).getName().equalsIgnoreCase("Windows");
|
||||
|
||||
List<String[]> vmData = _networkModel.generateVmData(vm.getUserData(), serviceOffering, vm.getDataCenterId(), vm.getInstanceName(), vm.getId(),
|
||||
List<String[]> vmData = _networkModel.generateVmData(vm.getUserData(), serviceOffering, vm.getDataCenterId(), vm.getInstanceName(), vm.getHostName(), vm.getId(),
|
||||
vm.getUuid(), nic.getIPv4Address(), publicKey, (String) profile.getParameter(VirtualMachineProfile.Param.VmPassword), isWindows);
|
||||
profile.setVmData(vmData);
|
||||
profile.setConfigDriveLabel(VirtualMachineManager.VmConfigDriveLabel.value());
|
||||
|
||||
@ -4087,7 +4087,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
||||
final String serviceOffering = _serviceOfferingDao.findByIdIncludingRemoved(vm.getId(), vm.getServiceOfferingId()).getDisplayText();
|
||||
boolean isWindows = _guestOSCategoryDao.findById(_guestOSDao.findById(vm.getGuestOSId()).getCategoryId()).getName().equalsIgnoreCase("Windows");
|
||||
|
||||
List<String[]> vmData = _networkModel.generateVmData(vm.getUserData(), serviceOffering, vm.getDataCenterId(), vm.getInstanceName(), vm.getId(),
|
||||
List<String[]> vmData = _networkModel.generateVmData(vm.getUserData(), serviceOffering, vm.getDataCenterId(), vm.getInstanceName(), vm.getHostName(), vm.getId(),
|
||||
vm.getUuid(), defaultNic.getIPv4Address(), vm.getDetail("SSH.PublicKey"), (String) profile.getParameter(VirtualMachineProfile.Param.VmPassword), isWindows);
|
||||
String vmName = vm.getInstanceName();
|
||||
String configDriveIsoRootFolder = "/tmp";
|
||||
|
||||
@ -898,7 +898,7 @@ public class MockNetworkModelImpl extends ManagerBase implements NetworkModel {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String[]> generateVmData(String userData, String serviceOffering, long datacenterId, String vmName, long vmId, String vmUuid, String guestIpAddress, String publicKey, String password, Boolean isWindows) {
|
||||
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) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@ -98,13 +98,13 @@ public class ConfigDriveNetworkElementTest {
|
||||
public static final long NETWORK_ID = 1L;
|
||||
private final long DATACENTERID = NETWORK_ID;
|
||||
private final String ZONENAME = "zone1";
|
||||
private final String VMINSTANCENAME = "vm_name";
|
||||
private final String VMINSTANCENAME = "i-x-y";
|
||||
private final String VMHOSTNAME = "vm-hostname";
|
||||
private final String VMOFFERING = "custom_instance";
|
||||
private final long VMID = 30L;
|
||||
private final String VMUSERDATA = "H4sIABCvw1oAAystTi1KSSxJ5AIAUPllwQkAAAA=";
|
||||
private final long SOID = 31L;
|
||||
private final long HOSTID = NETWORK_ID;
|
||||
private final String HOSTNAME = "host1";
|
||||
|
||||
@Mock private ConfigurationDao _configDao;
|
||||
@Mock private DataCenterDao _dcDao;
|
||||
@ -166,6 +166,7 @@ public class ConfigDriveNetworkElementTest {
|
||||
when(virtualMachine.getDataCenterId()).thenReturn(DATACENTERID);
|
||||
when(virtualMachine.getInstanceName()).thenReturn(VMINSTANCENAME);
|
||||
when(virtualMachine.getUserData()).thenReturn(VMUSERDATA);
|
||||
when(virtualMachine.getHostName()).thenReturn(VMHOSTNAME);
|
||||
when(deployDestination.getHost()).thenReturn(hostVO);
|
||||
when(hostVO.getId()).thenReturn(HOSTID);
|
||||
when(nic.isDefaultNic()).thenReturn(true);
|
||||
@ -246,7 +247,7 @@ public class ConfigDriveNetworkElementTest {
|
||||
new String[]{"userdata", "user_data", VMUSERDATA},
|
||||
new String[]{"metadata", "service-offering", VMOFFERING},
|
||||
new String[]{"metadata", "availability-zone", ZONENAME},
|
||||
new String[]{"metadata", "local-hostname", VMINSTANCENAME},
|
||||
new String[]{"metadata", "local-hostname", VMHOSTNAME},
|
||||
new String[]{"metadata", "local-ipv4", "192.168.111.111"},
|
||||
new String[]{"metadata", "public-hostname", null},
|
||||
new String[]{"metadata", "public-ipv4", "192.168.111.111"},
|
||||
@ -269,7 +270,7 @@ public class ConfigDriveNetworkElementTest {
|
||||
new String[]{"userdata", "user_data", VMUSERDATA},
|
||||
new String[]{"metadata", "service-offering", VMOFFERING},
|
||||
new String[]{"metadata", "availability-zone", ZONENAME},
|
||||
new String[]{"metadata", "local-hostname", VMINSTANCENAME},
|
||||
new String[]{"metadata", "local-hostname", VMHOSTNAME},
|
||||
new String[]{"metadata", "local-ipv4", "192.168.111.111"},
|
||||
new String[]{"metadata", "public-hostname", "7.7.7.7"},
|
||||
new String[]{"metadata", "public-ipv4", "7.7.7.7"},
|
||||
@ -292,7 +293,7 @@ public class ConfigDriveNetworkElementTest {
|
||||
new String[]{"userdata", "user_data", VMUSERDATA},
|
||||
new String[]{"metadata", "service-offering", VMOFFERING},
|
||||
new String[]{"metadata", "availability-zone", ZONENAME},
|
||||
new String[]{"metadata", "local-hostname", VMINSTANCENAME},
|
||||
new String[]{"metadata", "local-hostname", VMHOSTNAME},
|
||||
new String[]{"metadata", "local-ipv4", "192.168.111.111"},
|
||||
new String[]{"metadata", "public-hostname", null},
|
||||
new String[]{"metadata", "public-ipv4", "192.168.111.111"},
|
||||
|
||||
@ -913,7 +913,7 @@ public class MockNetworkModelImpl extends ManagerBase implements NetworkModel {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String[]> generateVmData(String userData, String serviceOffering, long datacenterId, String vmName, long vmId, String vmUuid, String guestIpAddress, String publicKey, String password, Boolean isWindows) {
|
||||
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) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user