From 86e51eb53691e2f3b2df4c9dce1f9cefba439ec8 Mon Sep 17 00:00:00 2001 From: Alex Huang Date: Fri, 4 Feb 2011 06:29:22 -0800 Subject: [PATCH] Made changes to the exceptions thrown by NetworkManagerImpl --- .../cloud/network/router/VirtualRouter.java | 20 -------- core/src/com/cloud/vm/DomainRouterVO.java | 22 --------- .../src/com/cloud/api/ApiResponseHelper.java | 2 +- .../cloud/ha/HighAvailabilityManagerImpl.java | 3 +- .../src/com/cloud/network/NetworkManager.java | 1 + .../com/cloud/network/NetworkManagerImpl.java | 6 +-- .../VirtualNetworkApplianceManagerImpl.java | 9 ++-- .../src/com/cloud/vm/UserVmManagerImpl.java | 49 +++++++------------ .../cloud/vm/VirtualMachineManagerImpl.java | 2 +- 9 files changed, 29 insertions(+), 85 deletions(-) diff --git a/api/src/com/cloud/network/router/VirtualRouter.java b/api/src/com/cloud/network/router/VirtualRouter.java index 152611f3bdb..ded9b83b33b 100755 --- a/api/src/com/cloud/network/router/VirtualRouter.java +++ b/api/src/com/cloud/network/router/VirtualRouter.java @@ -28,31 +28,11 @@ public interface VirtualRouter extends VirtualMachine { DHCP_FIREWALL_LB_PASSWD_USERDATA, DHCP_USERDATA } - /** - * @return the mac address for the router. - */ - public String getGuestMacAddress(); - - public String getGuestIpAddress(); - - public String getPublicMacAddress(); - - public String getPublicNetmask(); - /** * @return the ram size for this machine. */ public int getRamSize(); - public String getGuestNetmask(); - - /** - * @return the public ip address used for source nat. - */ - String getPublicIpAddress(); - - String getDomain(); - Role getRole(); void setRamSize(int ramSize); diff --git a/core/src/com/cloud/vm/DomainRouterVO.java b/core/src/com/cloud/vm/DomainRouterVO.java index 241410e11b4..81828ec6b92 100755 --- a/core/src/com/cloud/vm/DomainRouterVO.java +++ b/core/src/com/cloud/vm/DomainRouterVO.java @@ -49,9 +49,6 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter { @Column(name="public_netmask") private String publicNetmask; - @Column(name="guest_mac_address") - private String guestMacAddress; - @Column(name="guest_ip_address") private String guestIpAddress; @@ -96,19 +93,10 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter { this.publicNetmask = publicNetmask; } - public void setGuestMacAddress(String routerMacAddress) { - this.guestMacAddress = routerMacAddress; - } - public long getNetworkId() { return networkId; } - @Override - public String getGuestNetmask() { - return guestNetmask; - } - public void setGuestIpAddress(String routerIpAddress) { this.guestIpAddress = routerIpAddress; } @@ -122,17 +110,14 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter { return dataCenterId; } - @Override public String getPublicNetmask() { return publicNetmask; } - @Override public String getPublicMacAddress() { return publicMacAddress; } - @Override public String getGuestIpAddress() { return guestIpAddress; } @@ -141,7 +126,6 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter { super(); } - @Override public String getDomain() { return domain; } @@ -156,16 +140,10 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter { this.ramSize = ramSize; } - @Override public String getPublicIpAddress() { return publicIpAddress; } - @Override - public String getGuestMacAddress() { - return guestMacAddress; - } - @Override public Role getRole() { return role; diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 2485ead89ea..6b6392593e8 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -1141,7 +1141,6 @@ public class ApiResponseHelper implements ResponseGenerator { routerResponse.setTemplateId(router.getTemplateId()); routerResponse.setCreated(router.getCreated()); routerResponse.setState(router.getState()); - routerResponse.setNetworkDomain(router.getDomain()); if (router.getHostId() != null) { routerResponse.setHostId(router.getHostId()); @@ -1175,6 +1174,7 @@ public class ApiResponseHelper implements ResponseGenerator { routerResponse.setGuestMacAddress(singleNicProfile.getMacAddress()); routerResponse.setGuestNetmask(singleNicProfile.getNetmask()); routerResponse.setGuestNetworkId(singleNicProfile.getNetworkId()); + routerResponse.setNetworkDomain(network.getNetworkDomain()); } } } diff --git a/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java b/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java index 380df949d7f..6ffb17aa5f8 100644 --- a/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java +++ b/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java @@ -109,7 +109,6 @@ import com.cloud.vm.dao.VMInstanceDao; * || stop.retry.wait | time to wait before retrying the stop | seconds | 120 || * } **/ -@SuppressWarnings("unchecked") @Local(value={HighAvailabilityManager.class}) public class HighAvailabilityManagerImpl implements HighAvailabilityManager { protected static final Logger s_logger = Logger.getLogger(HighAvailabilityManagerImpl.class); @@ -198,7 +197,7 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager { // collect list of vm names for the alert email VMInstanceVO vm = vms.get(0); if (vm.isHaEnabled()) { - sb.append(" " + vm.getName()); + sb.append(" " + vm); } for (int i = 1; i < vms.size(); i++) { vm = vms.get(i); diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java index 85b12324563..a113b6fdbd7 100644 --- a/server/src/com/cloud/network/NetworkManager.java +++ b/server/src/com/cloud/network/NetworkManager.java @@ -144,6 +144,7 @@ public interface NetworkManager extends NetworkService { Network createNetwork(long networkOfferingId, String name, String displayText, Boolean isShared, Boolean isDefault, Long zoneId, String gateway, String cidr, String vlanId, String networkDomain, Account owner) throws ConcurrentOperationException, InsufficientCapacityException; /** + * @throws InsufficientCapacityException * Associates an ip address list to an account. The list of ip addresses are all addresses associated with the given vlan id. * @param userId * @param accountId diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index b9d15a7e996..53426ee5223 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -444,6 +444,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return account; } + @Override public boolean applyIpAssociations(Network network, boolean continueOnError) throws ResourceUnavailableException { List userIps = _ipAddressDao.listByAssociatedNetwork(network.getId()); List publicIps = new ArrayList(); @@ -1385,7 +1386,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag Long domainId = cmd.getDomainId(); Account owner = _accountMgr.finalizeOwner(ctxAccount, accountName, domainId); - // if end ip is not specified, default it to startIp if (endIP == null && startIP != null) { endIP = startIP; @@ -1412,7 +1412,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag // If networkDomain is not specified, take it from the global configuration if (networkDomain == null) { - networkDomain = _networkDomain; + networkDomain = "cs"+Long.toHexString(owner.getId())+_networkDomain; } // Check if zone exists @@ -1474,7 +1474,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag Transaction txn = Transaction.currentTxn(); txn.start(); - // Create network DataCenterDeployment plan = new DataCenterDeployment(zoneId, null, null, null); NetworkVO userNetwork = new NetworkVO(); @@ -2197,6 +2196,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return elements; } + @Override public boolean zoneIsConfiguredForExternalNetworking(long zoneId) { DataCenterVO zone = _dcDao.findById(zoneId); diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 2b6396edf18..65cb27cdc9c 100644 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -670,7 +670,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } } - private VmDataCommand generateVmDataCommand(VirtualRouter router, String vmPrivateIpAddress, + private VmDataCommand generateVmDataCommand(DomainRouterVO router, String vmPrivateIpAddress, String userData, String serviceOffering, String zoneName, String guestIpAddress, String vmName, String vmInstanceName, long vmId, String publicKey) { VmDataCommand cmd = new VmDataCommand(vmPrivateIpAddress); @@ -755,7 +755,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } @Override - public VirtualRouter deployVirtualRouter(Network guestNetwork, DeployDestination dest, Account owner, Map params) throws InsufficientCapacityException, + public DomainRouterVO deployVirtualRouter(Network guestNetwork, DeployDestination dest, Account owner, Map params) throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException { long dcId = dest.getDataCenter().getId(); @@ -824,7 +824,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } @Override - public VirtualRouter deployDhcp(Network guestNetwork, DeployDestination dest, Account owner, Map params) throws InsufficientCapacityException, + public DomainRouterVO deployDhcp(Network guestNetwork, DeployDestination dest, Account owner, Map params) throws InsufficientCapacityException, StorageUnavailableException, ConcurrentOperationException, ResourceUnavailableException { long dcId = dest.getDataCenter().getId(); @@ -994,7 +994,6 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian router.setPublicMacAddress(nic.getMacAddress()); } else if (nic.getTrafficType() == TrafficType.Guest) { router.setGuestIpAddress(nic.getIp4Address()); - router.setGuestMacAddress(nic.getMacAddress()); } else if (nic.getTrafficType() == TrafficType.Control) { router.setPrivateIpAddress(nic.getIp4Address()); router.setPrivateMacAddress(nic.getMacAddress()); @@ -1197,7 +1196,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian public VirtualRouter addVirtualMachineIntoNetwork(Network network, NicProfile nic, VirtualMachineProfile profile, DeployDestination dest, ReservationContext context, Boolean startDhcp) throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { - VirtualRouter router = startDhcp ? deployDhcp(network, dest, profile.getOwner(), profile.getParameters()) : deployVirtualRouter(network, dest, profile.getOwner(), profile.getParameters()); + DomainRouterVO router = startDhcp ? deployDhcp(network, dest, profile.getOwner(), profile.getParameters()) : deployVirtualRouter(network, dest, profile.getOwner(), profile.getParameters()); _userVmDao.loadDetails((UserVmVO) profile.getVirtualMachine()); diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 3be8761d340..9863abc0f11 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -262,7 +262,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager String _name; String _instance; String _zone; - String _defaultNetworkDomain; private ConfigurationDao _configDao; @@ -1052,14 +1051,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager Map configs = _configDao.getConfiguration("AgentManager", params); - _defaultNetworkDomain = configs.get("domain"); - if (_defaultNetworkDomain == null) { - _defaultNetworkDomain = ".myvm.com"; - } - if (!_defaultNetworkDomain.startsWith(".")) { - _defaultNetworkDomain = "." + _defaultNetworkDomain; - } - _instance = configs.get("instance.name"); if (_instance == null) { _instance = "DEFAULT"; @@ -1856,6 +1847,9 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager } private boolean validPassword(String password) { + if (password == null || password.length() == 0) { + return false; + } for (int i = 0; i < password.length(); i++) { if (password.charAt(i) == ' ') { return false; @@ -1970,20 +1964,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager } } - // Check that the password was passed in and is valid - String password = PasswordGenerator.generateRandomPassword(6); - if (!template.getEnablePassword()) { - password = "saved_password"; - } - if (password == null || password.equals("") || (!validPassword(password))) { - throw new InvalidParameterValueException("A valid password for this virtual machine was not provided."); - } - - String networkDomain = null; - if (networkDomain == null) { - networkDomain = "v" + Long.toHexString(owner.getId()) + _defaultNetworkDomain; - } - String userData = cmd.getUserData(); byte [] decodedUserData = null; if (userData != null) { @@ -2140,7 +2120,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager password = generateRandomPassword(); } - if (password == null || password.equals("") || (!validPassword(password))) { + if (!validPassword(password)) { throw new InvalidParameterValueException("A valid password for this virtual machine was not provided."); } @@ -2150,7 +2130,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager if (sshPublicKey != null && !sshPublicKey.equals("") && password != null && !password.equals("saved_password") ) { String encryptedPasswd = RSAHelper.encryptWithSSHPublicKey(sshPublicKey, password); if (encryptedPasswd == null) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Error encrypting password"); + throw new CloudRuntimeException("Error encrypting password"); } vm.setDetail("Encrypted.Password", encryptedPasswd); @@ -2183,14 +2163,22 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager @Override public boolean finalizeVirtualMachineProfile(VirtualMachineProfile profile, DeployDestination dest, ReservationContext context) { - UserVmVO vo = profile.getVirtualMachine(); + UserVmVO vm = profile.getVirtualMachine(); + Account owner = _accountDao.findById(vm.getAccountId()); + + if (owner == null || owner.getState() == Account.State.disabled) { + throw new PermissionDeniedException("The owner of " + vm + " either does not exist or is disabled: " + vm.getAccountId()); + } + + + VirtualMachineTemplate template = profile.getTemplate(); - if (vo.getIsoId() != null) { - template = _templateDao.findById(vo.getIsoId()); + if (vm.getIsoId() != null) { + template = _templateDao.findById(vm.getIsoId()); } - if (template != null && template.getFormat() == ImageFormat.ISO && vo.getIsoId() != null) { + if (template != null && template.getFormat() == ImageFormat.ISO && vm.getIsoId() != null) { String isoPath = null; - Pair isoPathPair = _storageMgr.getAbsoluteIsoPath(template.getId(), vo.getDataCenterId()); + Pair isoPathPair = _storageMgr.getAbsoluteIsoPath(template.getId(), vm.getDataCenterId()); if (isoPathPair == null) { s_logger.warn("Couldn't get absolute iso path"); return false; @@ -2233,7 +2221,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager } } _vmDao.update(userVm.getId(), userVm); - return true; } diff --git a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java index 33835fcd2f7..d36c2467a6b 100644 --- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -396,7 +396,7 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, StateLi //Clean up volumes based on the vm's instance id _storageMgr.cleanupVolumes(vm.getId()); - VirtualMachineGuru guru = (VirtualMachineGuru)_vmGurus.get(vm.getType()); + VirtualMachineGuru guru = getVmGuru(vm); guru.finalizeExpunge(vm); if (s_logger.isDebugEnabled()) {