diff --git a/core/src/com/cloud/agent/api/StartConsoleProxyCommand.java b/core/src/com/cloud/agent/api/StartConsoleProxyCommand.java index c1a0c31bb6e..08661de1d5b 100644 --- a/core/src/com/cloud/agent/api/StartConsoleProxyCommand.java +++ b/core/src/com/cloud/agent/api/StartConsoleProxyCommand.java @@ -33,14 +33,16 @@ public class StartConsoleProxyCommand extends AbstractStartCommand { private String urlPort; private String mgmt_host; private int mgmt_port; - private boolean sslEnabled; + private boolean sslEnabled; + private String guestOSDescription; protected StartConsoleProxyCommand() { } public StartConsoleProxyCommand(int networkRateMbps, int networkRateMulticastMbps, int proxyCmdPort, ConsoleProxyVO proxy, String vmName, String storageHost, - List vols, String vncPort, String urlPort, String mgmtHost, int mgmtPort, boolean sslEnabled) { + List vols, String vncPort, String urlPort, String mgmtHost, int mgmtPort, + boolean sslEnabled, String guestOSDescription) { super(vmName, storageHost, vols); this.networkRateMbps = networkRateMbps; this.networkRateMulticastMbps = networkRateMulticastMbps; @@ -50,7 +52,8 @@ public class StartConsoleProxyCommand extends AbstractStartCommand { this.urlPort = urlPort; this.mgmt_host = mgmtHost; this.mgmt_port = mgmtPort; - this.sslEnabled = sslEnabled; + this.sslEnabled = sslEnabled; + this.guestOSDescription = guestOSDescription; } @Override @@ -66,6 +69,10 @@ public class StartConsoleProxyCommand extends AbstractStartCommand { return networkRateMbps; } + public String getGuestOSDescription() { + return guestOSDescription; + } + public int getNetworkRateMulticastMbps() { return networkRateMulticastMbps; } diff --git a/core/src/com/cloud/agent/api/StartRouterCommand.java b/core/src/com/cloud/agent/api/StartRouterCommand.java index 913745273ca..5654c570de9 100755 --- a/core/src/com/cloud/agent/api/StartRouterCommand.java +++ b/core/src/com/cloud/agent/api/StartRouterCommand.java @@ -30,6 +30,7 @@ public class StartRouterCommand extends AbstractStartCommand { DomainRouterVO router; int networkRateMbps; int networkRateMulticastMbps; + private String guestOSDescription; protected StartRouterCommand() { super(); @@ -41,11 +42,13 @@ public class StartRouterCommand extends AbstractStartCommand { } public StartRouterCommand(DomainRouterVO router, int networkRateMbps, int networkRateMulticastMbps, - String routerName, String[] storageIps, List vols, boolean mirroredVols) { + String routerName, String[] storageIps, List vols, boolean mirroredVols, + String guestOSDescription ) { super(routerName, storageIps, vols, mirroredVols); this.router = router; this.networkRateMbps = networkRateMbps; this.networkRateMulticastMbps = networkRateMulticastMbps; + this.guestOSDescription = guestOSDescription; } public DomainRouter getRouter() { @@ -56,6 +59,10 @@ public class StartRouterCommand extends AbstractStartCommand { return networkRateMbps; } + public String getGuestOSDescription() { + return guestOSDescription; + } + public int getNetworkRateMulticastMbps() { return networkRateMulticastMbps; } diff --git a/core/src/com/cloud/agent/api/StartSecStorageVmCommand.java b/core/src/com/cloud/agent/api/StartSecStorageVmCommand.java index 19c0f30882e..74bd7f3b5bb 100644 --- a/core/src/com/cloud/agent/api/StartSecStorageVmCommand.java +++ b/core/src/com/cloud/agent/api/StartSecStorageVmCommand.java @@ -33,14 +33,15 @@ public class StartSecStorageVmCommand extends AbstractStartCommand { private int proxyCmdPort; private String mgmt_host; private int mgmt_port; - private boolean sslCopy; + private boolean sslCopy; + private String guestOSDescription; protected StartSecStorageVmCommand() { } public StartSecStorageVmCommand(int networkRateMbps, int networkRateMulticastMbps, int proxyCmdPort, SecondaryStorageVmVO secStorageVm, String vmName, String storageHost, - List vols, String mgmtHost, int mgmtPort, boolean sslCopy) { + List vols, String mgmtHost, int mgmtPort, boolean sslCopy, String guestOSDescription) { super(vmName, storageHost, vols); this.networkRateMbps = networkRateMbps; this.networkRateMulticastMbps = networkRateMulticastMbps; @@ -49,7 +50,8 @@ public class StartSecStorageVmCommand extends AbstractStartCommand { this.mgmt_host = mgmtHost; this.mgmt_port = mgmtPort; - this.sslCopy = sslCopy; + this.sslCopy = sslCopy; + this.guestOSDescription = guestOSDescription; } @Override @@ -65,6 +67,10 @@ public class StartSecStorageVmCommand extends AbstractStartCommand { return networkRateMbps; } + public String getGuestOSDescription() { + return guestOSDescription; + } + public int getNetworkRateMulticastMbps() { return networkRateMulticastMbps; } diff --git a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index aaa7962af8b..0185485acfe 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -1118,7 +1118,7 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR bootArgs += " pod=" + _pod; bootArgs += " localgw=" + _localGateway; String result = startSystemVM(vmName, storage.getVlanId(), network, cmd.getVolumes(), bootArgs, storage.getGuestMacAddress(), storage.getGuestIpAddress(), storage - .getPrivateMacAddress(), storage.getPublicMacAddress(), cmd.getProxyCmdPort(), storage.getRamSize(), storage.getGuestOSId(), cmd.getNetworkRateMbps()); + .getPrivateMacAddress(), storage.getPublicMacAddress(), cmd.getProxyCmdPort(), storage.getRamSize(), cmd.getGuestOSDescription(), cmd.getNetworkRateMbps()); if (result == null) { return new StartSecStorageVmAnswer(cmd); } @@ -3103,7 +3103,7 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR String bootArgs = cmd.getBootArgs(); String result = startSystemVM(vmName, router.getVlanId(), network, cmd.getVolumes(), bootArgs, router.getGuestMacAddress(), router.getPrivateIpAddress(), router - .getPrivateMacAddress(), router.getPublicMacAddress(), 3922, router.getRamSize(), router.getGuestOSId(), cmd.getNetworkRateMbps()); + .getPrivateMacAddress(), router.getPublicMacAddress(), 3922, router.getRamSize(), cmd.getGuestOSDescription(), cmd.getNetworkRateMbps()); if (result == null) { networkUsage(router.getPrivateIpAddress(), "create", null); return new StartRouterAnswer(cmd); @@ -3118,7 +3118,7 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR } protected String startSystemVM(String vmName, String vlanId, Network nw0, List vols, String bootArgs, String guestMacAddr, String privateIp, String privateMacAddr, - String publicMacAddr, int cmdPort, long ramSize, long guestOsId, int networkRateMbps) { + String publicMacAddr, int cmdPort, long ramSize, String getGuestOSDescription, int networkRateMbps) { setupLinkLocalNetwork(); VM vm = null; @@ -3136,9 +3136,9 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR Ternary mount = mounts.get(0); - Set templates = VM.getByNameLabel(conn, CitrixHelper.getGuestOsType(guestOsId)); + Set templates = VM.getByNameLabel(conn, getGuestOsType(getGuestOSDescription)); if (templates.size() == 0) { - String msg = " can not find systemvm template " + CitrixHelper.getGuestOsType(guestOsId) ; + String msg = " can not find systemvm template " + getGuestOsType(getGuestOSDescription) ; s_logger.warn(msg); return msg; @@ -3293,7 +3293,7 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR bootArgs += " localgw=" + _localGateway; String result = startSystemVM(vmName, proxy.getVlanId(), network, cmd.getVolumes(), bootArgs, proxy.getGuestMacAddress(), proxy.getGuestIpAddress(), proxy - .getPrivateMacAddress(), proxy.getPublicMacAddress(), cmd.getProxyCmdPort(), proxy.getRamSize(), proxy.getGuestOSId(), cmd.getNetworkRateMbps()); + .getPrivateMacAddress(), proxy.getPublicMacAddress(), cmd.getProxyCmdPort(), proxy.getRamSize(), cmd.getGuestOSDescription(), cmd.getNetworkRateMbps()); if (result == null) { return new StartConsoleProxyAnswer(cmd); } diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java index 02f927bc0ca..85c617fdb03 100644 --- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java +++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java @@ -107,12 +107,14 @@ import com.cloud.offerings.NetworkOfferingVO; import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.service.ServiceOfferingVO; import com.cloud.service.dao.ServiceOfferingDao; +import com.cloud.storage.GuestOSVO; import com.cloud.storage.StorageManager; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.VMTemplateHostVO; import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; import com.cloud.storage.VMTemplateVO; import com.cloud.storage.VolumeVO; +import com.cloud.storage.dao.GuestOSDao; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VMTemplateHostDao; import com.cloud.storage.dao.VolumeDao; @@ -218,24 +220,16 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach @Inject private AccountDao _accountDao; - @Inject - private VMTemplateHostDao _vmTemplateHostDao; - - @Inject - private AgentManager _agentMgr; - @Inject - private StorageManager _storageMgr; - @Inject - private HighAvailabilityManager _haMgr; + @Inject private VMTemplateHostDao _vmTemplateHostDao; + @Inject private AgentManager _agentMgr; + @Inject private StorageManager _storageMgr; + @Inject private HighAvailabilityManager _haMgr; @Inject NetworkManager _networkMgr; - @Inject AccountManager _accountMgr; - @Inject - private EventDao _eventDao; - @Inject - ServiceOfferingDao _offeringDao; - @Inject - NetworkOfferingDao _networkOfferingDao; + @Inject private EventDao _eventDao; + @Inject GuestOSDao _guestOSDao = null; + @Inject ServiceOfferingDao _offeringDao; + @Inject NetworkOfferingDao _networkOfferingDao; private IpAddrAllocator _IpAllocator; private ConsoleProxyListener _listener; @@ -651,13 +645,24 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach throw new CloudRuntimeException(msg); } + // Determine the VM's OS description + String guestOSDescription; + GuestOSVO guestOS = _guestOSDao.findById(proxy.getGuestOSId()); + if (guestOS == null) { + String msg = "Could not find guest OS description for OSId " + + proxy.getGuestOSId() + " for vm: " + proxy.getName(); + s_logger.debug(msg); + throw new CloudRuntimeException(msg); + } else { + guestOSDescription = guestOS.getName(); + } // _storageMgr.share(proxy, vols, null, true); // carry the console proxy port info over so that we don't // need to configure agent on this StartConsoleProxyCommand cmdStart = new StartConsoleProxyCommand(_networkRate, _multicastRate, _proxyCmdPort, proxy, proxy.getName(), "", vols, Integer.toString(_consoleProxyPort), - Integer.toString(_consoleProxyUrlPort), _mgmt_host, _mgmt_port, _sslEnabled); + Integer.toString(_consoleProxyUrlPort), _mgmt_host, _mgmt_port, _sslEnabled, guestOSDescription); if (s_logger.isDebugEnabled()) s_logger.debug("Sending start command for console proxy " + proxy.getName() + " to " + routingHost.getName()); try { diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index bd79579bdf1..4d3958e3ad5 100644 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -120,11 +120,13 @@ import com.cloud.resource.Resource; import com.cloud.resource.Resource.ReservationStrategy; import com.cloud.service.ServiceOfferingVO; import com.cloud.service.dao.ServiceOfferingDao; +import com.cloud.storage.GuestOSVO; import com.cloud.storage.StorageManager; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.VMTemplateVO; import com.cloud.storage.VolumeVO; import com.cloud.storage.dao.DiskTemplateDao; +import com.cloud.storage.dao.GuestOSDao; import com.cloud.storage.dao.StoragePoolDao; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VMTemplateHostDao; @@ -212,6 +214,7 @@ public class NetworkManagerImpl implements NetworkManager, VirtualMachineManager @Inject NetworkOfferingDao _networkOfferingDao = null; @Inject NetworkConfigurationDao _networkProfileDao = null; @Inject NicDao _nicDao; + @Inject GuestOSDao _guestOSDao = null; @Inject(adapter=NetworkGuru.class) Adapters _networkGurus; @@ -984,8 +987,21 @@ public class NetworkManagerImpl implements NetworkManager, VirtualMachineManager try { String[] storageIps = new String[2]; + + // Determine the VM's OS description + String guestOSDescription; + GuestOSVO guestOS = _guestOSDao.findById(router.getGuestOSId()); + if (guestOS == null) { + String msg = "Could not find guest OS description for OSId " + + router.getGuestOSId() + " for vm: " + router.getName(); + s_logger.debug(msg); + throw new CloudRuntimeException(msg); + } else { + guestOSDescription = guestOS.getName(); + } + final StartRouterCommand cmdStartRouter = new StartRouterCommand(router, _networkRate, - _multicastRate, name, storageIps, vols, mirroredVols); + _multicastRate, name, storageIps, vols, mirroredVols, guestOSDescription); answer = _agentMgr.send(routingHost.getId(), cmdStartRouter); if (answer != null && answer.getResult()) { if (answer instanceof StartRouterAnswer){ diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java index 11fa385eb02..ae4d6672d5d 100644 --- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java +++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java @@ -89,12 +89,14 @@ import com.cloud.network.dao.IPAddressDao; import com.cloud.offering.NetworkOffering; import com.cloud.service.ServiceOfferingVO; import com.cloud.service.dao.ServiceOfferingDao; +import com.cloud.storage.GuestOSVO; import com.cloud.storage.StorageManager; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.VMTemplateHostVO; import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; import com.cloud.storage.VMTemplateVO; import com.cloud.storage.VolumeVO; +import com.cloud.storage.dao.GuestOSDao; import com.cloud.storage.dao.StoragePoolDao; import com.cloud.storage.dao.StoragePoolHostDao; import com.cloud.storage.dao.VMTemplateDao; @@ -205,6 +207,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V @Inject private EventDao _eventDao; @Inject private ServiceOfferingDao _offeringDao; @Inject private AccountManager _accountMgr; + @Inject GuestOSDao _guestOSDao = null; private IpAddrAllocator _IpAllocator; @@ -373,11 +376,23 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V } VolumeVO vol = vols.get(0); + // Determine the VM's OS description + String guestOSDescription; + GuestOSVO guestOS = _guestOSDao.findById(secStorageVm.getGuestOSId()); + if (guestOS == null) { + String msg = "Could not find guest OS description for OSId " + + secStorageVm.getGuestOSId() + " for vm: " + secStorageVm.getName(); + s_logger.debug(msg); + throw new CloudRuntimeException(msg); + } else { + guestOSDescription = guestOS.getName(); + } + // carry the secondary storage vm port info over so that we don't // need to configure agent on this StartSecStorageVmCommand cmdStart = new StartSecStorageVmCommand(_networkRate, _multicastRate, _secStorageVmCmdPort, secStorageVm, - secStorageVm.getName(), "", vols, _mgmt_host, _mgmt_port, _useSSlCopy); + secStorageVm.getName(), "", vols, _mgmt_host, _mgmt_port, _useSSlCopy, guestOSDescription); if (s_logger.isDebugEnabled()) s_logger.debug("Sending start command for secondary storage vm " diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 2d4711916a1..0112d6e454f 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -678,14 +678,12 @@ public class UserVmManagerImpl implements UserVmManager { String guestOSDescription; GuestOSVO guestOS = _guestOSDao.findById(vm.getGuestOSId()); if (guestOS == null) { - String description = "Could not find guest OS description for vm: " + vm.getName(); - s_logger.debug(description); - event.setDescription(description); - event.setLevel(EventVO.LEVEL_ERROR); - _eventDao.persist(event); - return null; + String msg = "Could not find guest OS description for OSId " + + vm.getGuestOSId() + " for vm: " + vm.getName(); + s_logger.debug(msg); + throw new CloudRuntimeException(msg); } else { - guestOSDescription = guestOS.getName(); + guestOSDescription = guestOS.getName(); } HashSet avoid = new HashSet();