From 7e99fca84490872f0ed4b40dcff18bf083888a2a Mon Sep 17 00:00:00 2001 From: Fang Wang Date: Fri, 31 Aug 2012 12:02:42 -0700 Subject: [PATCH] CS-15627 Metadata - "instance-id","vm-id" information of the existing VMs should not change after Burbank Upgrade Description: For pre 3.0 releases, we need to keep their roiginal vm-id and instance-id. Only for 3.0 and later, vm-id and instance-id are shown UUID. reviewed-by: vijay --- .../element/CloudZonesNetworkElement.java | 27 +++++++++- .../VirtualNetworkApplianceManagerImpl.java | 52 ++++++++++++++++++- 2 files changed, 76 insertions(+), 3 deletions(-) diff --git a/server/src/com/cloud/network/element/CloudZonesNetworkElement.java b/server/src/com/cloud/network/element/CloudZonesNetworkElement.java index 5470e3920ac..717e728396c 100644 --- a/server/src/com/cloud/network/element/CloudZonesNetworkElement.java +++ b/server/src/com/cloud/network/element/CloudZonesNetworkElement.java @@ -165,6 +165,23 @@ public class CloudZonesNetworkElement extends AdapterBase implements NetworkElem return cmd; } + private VmDataCommand generateVmDataCommand(String vmPrivateIpAddress, + String userData, String serviceOffering, String zoneName, String guestIpAddress, String vmName, String vmInstanceName, long vmId, String publicKey) { + VmDataCommand cmd = new VmDataCommand(vmPrivateIpAddress, vmName); + + cmd.addVmData("userdata", "user-data", userData); + cmd.addVmData("metadata", "service-offering", serviceOffering); + cmd.addVmData("metadata", "availability-zone", zoneName); + cmd.addVmData("metadata", "local-ipv4", guestIpAddress); + cmd.addVmData("metadata", "local-hostname", vmName); + cmd.addVmData("metadata", "public-ipv4", guestIpAddress); + cmd.addVmData("metadata", "public-hostname", guestIpAddress); + cmd.addVmData("metadata", "instance-id", vmInstanceName); + cmd.addVmData("metadata", "vm-id", String.valueOf(vmId)); + cmd.addVmData("metadata", "public-keys", publicKey); + + return cmd; + } @Override public boolean isReady(PhysicalNetworkServiceProvider provider) { // TODO Auto-generated method stub @@ -205,11 +222,17 @@ public class CloudZonesNetworkElement extends AdapterBase implements NetworkElem } String serviceOffering = _serviceOfferingDao.findByIdIncludingRemoved(uservm.getServiceOfferingId()).getDisplayText(); String zoneName = _dcDao.findById(network.getDataCenterId()).getName(); - - cmds.addCommand( + if (uservm.getUuid() == null) { + cmds.addCommand( + "vmdata", + generateVmDataCommand(nic.getIp4Address(), userData, serviceOffering, zoneName, nic.getIp4Address(), uservm.getVirtualMachine().getHostName(), + uservm.getInstanceName(), uservm.getId(), sshPublicKey)); + } else { + cmds.addCommand( "vmdata", generateVmDataCommand(nic.getIp4Address(), userData, serviceOffering, zoneName, nic.getIp4Address(), uservm.getVirtualMachine().getHostName(), uservm.getUuid(), sshPublicKey)); + } try { _agentManager.send(dest.getHost().getId(), cmds); } catch (OperationTimedoutException e) { diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 452fbd96794..8da60bd67bf 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -753,6 +753,49 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian return cmd; } + private VmDataCommand generateVmDataCommand(VirtualRouter router, String vmPrivateIpAddress, String userData, + String serviceOffering, String zoneName, String guestIpAddress, String vmName, + String vmInstanceName, long vmId, String publicKey, long guestNetworkId) { + VmDataCommand cmd = new VmDataCommand(vmPrivateIpAddress, vmName); + + cmd.setAccessDetail(NetworkElementCommand.ROUTER_IP, getRouterControlIp(router.getId())); + cmd.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, getRouterIpInNetwork(guestNetworkId, router.getId())); + cmd.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName()); + + DataCenterVO dcVo = _dcDao.findById(router.getDataCenterIdToDeployIn()); + cmd.setAccessDetail(NetworkElementCommand.ZONE_NETWORK_TYPE, dcVo.getNetworkType().toString()); + + cmd.addVmData("userdata", "user-data", userData); + cmd.addVmData("metadata", "service-offering", StringUtils.unicodeEscape(serviceOffering)); + cmd.addVmData("metadata", "availability-zone", StringUtils.unicodeEscape(zoneName)); + cmd.addVmData("metadata", "local-ipv4", guestIpAddress); + cmd.addVmData("metadata", "local-hostname", StringUtils.unicodeEscape(vmName)); + if (dcVo.getNetworkType() == NetworkType.Basic) { + cmd.addVmData("metadata", "public-ipv4", guestIpAddress); + cmd.addVmData("metadata", "public-hostname", StringUtils.unicodeEscape(vmName)); + } else + { + if (router.getPublicIpAddress() == null) { + cmd.addVmData("metadata", "public-ipv4", guestIpAddress); + } else { + cmd.addVmData("metadata", "public-ipv4", router.getPublicIpAddress()); + } + cmd.addVmData("metadata", "public-hostname", router.getPublicIpAddress()); + } + cmd.addVmData("metadata", "instance-id", vmInstanceName); + cmd.addVmData("metadata", "vm-id", String.valueOf(vmId)); + cmd.addVmData("metadata", "public-keys", publicKey); + + String cloudIdentifier = _configDao.getValue("cloud.identifier"); + if (cloudIdentifier == null) { + cloudIdentifier = ""; + } else { + cloudIdentifier = "CloudStack-{" + cloudIdentifier + "}"; + } + cmd.addVmData("metadata", "cloud-identifier", cloudIdentifier); + + return cmd; + } protected class NetworkUsageTask implements Runnable { public NetworkUsageTask() { @@ -2915,9 +2958,16 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian private void createVmDataCommand(VirtualRouter router, UserVm vm, NicVO nic, String publicKey, Commands cmds) { String serviceOffering = _serviceOfferingDao.findByIdIncludingRemoved(vm.getServiceOfferingId()).getDisplayText(); String zoneName = _dcDao.findById(router.getDataCenterIdToDeployIn()).getName(); - cmds.addCommand("vmdata", + if (vm.getUuid() == null) { + cmds.addCommand("vmdata", + generateVmDataCommand(router, nic.getIp4Address(), vm.getUserData(), serviceOffering, zoneName, nic.getIp4Address(), + vm.getHostName(), vm.getInstanceName(), + vm.getId(), publicKey, nic.getNetworkId())); + } else { + cmds.addCommand("vmdata", generateVmDataCommand(router, nic.getIp4Address(), vm.getUserData(), serviceOffering, zoneName, nic.getIp4Address(), vm.getHostName(), vm.getUuid(), publicKey, nic.getNetworkId())); + } }