diff --git a/api/src/com/cloud/network/router/VirtualRouter.java b/api/src/com/cloud/network/router/VirtualRouter.java index 842fca594c5..1f5aa94967c 100755 --- a/api/src/com/cloud/network/router/VirtualRouter.java +++ b/api/src/com/cloud/network/router/VirtualRouter.java @@ -37,4 +37,5 @@ public interface VirtualRouter extends VirtualMachine { FAULT } RedundantState getRedundantState(); + String getGuestIpAddress(); } diff --git a/core/src/com/cloud/vm/DomainRouterVO.java b/core/src/com/cloud/vm/DomainRouterVO.java index e3963a5154e..2abd134ce02 100755 --- a/core/src/com/cloud/vm/DomainRouterVO.java +++ b/core/src/com/cloud/vm/DomainRouterVO.java @@ -139,6 +139,7 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter { return publicMacAddress; } + @Override public String getGuestIpAddress() { return guestIpAddress; } diff --git a/server/src/com/cloud/network/element/DhcpElement.java b/server/src/com/cloud/network/element/DhcpElement.java index 27e5c345645..b30b5a70d29 100644 --- a/server/src/com/cloud/network/element/DhcpElement.java +++ b/server/src/com/cloud/network/element/DhcpElement.java @@ -44,6 +44,7 @@ import com.cloud.network.PublicIpAddress; import com.cloud.network.dao.NetworkDao; import com.cloud.network.router.VirtualNetworkApplianceManager; import com.cloud.network.router.VirtualRouter; +import com.cloud.network.router.VirtualRouter.Role; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.StaticNat; import com.cloud.network.vpn.PasswordResetElement; @@ -129,7 +130,7 @@ public class DhcpElement extends AdapterBase implements NetworkElement, Password DataCenter dc = dest.getDataCenter(); boolean isPodBased = (dc.getNetworkType() == NetworkType.Basic || network.isSecurityGroupEnabled()) && network.getTrafficType() == TrafficType.Guest; if (isPodBased && _routerMgr.getDnsBasicZoneUpdate().equalsIgnoreCase("all")) { - List allRunningRoutersOutsideThePod = _routerDao.findByNetworkOutsideThePod(network.getId(), podId, State.Running); + List allRunningRoutersOutsideThePod = _routerDao.findByNetworkOutsideThePod(network.getId(), podId, State.Running, Role.DHCP_USERDATA); routers.addAll(allRunningRoutersOutsideThePod); } @@ -147,7 +148,7 @@ public class DhcpElement extends AdapterBase implements NetworkElement, Password @Override public boolean shutdown(Network network, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException { - List routers = _routerDao.findByNetwork(network.getId()); + List routers = _routerDao.listByNetworkAndRole(network.getId(), Role.DHCP_USERDATA); if (routers == null || routers.isEmpty()) { return true; } @@ -160,7 +161,7 @@ public class DhcpElement extends AdapterBase implements NetworkElement, Password @Override public boolean destroy(Network config) throws ConcurrentOperationException, ResourceUnavailableException{ - List routers = _routerDao.findByNetwork(config.getId()); + List routers = _routerDao.listByNetworkAndRole(config.getId(), Role.DHCP_USERDATA); if (routers == null || routers.isEmpty()) { return true; } @@ -216,7 +217,7 @@ public class DhcpElement extends AdapterBase implements NetworkElement, Password return false; } - List routers = _routerDao.findByNetwork(network.getId()); + List routers = _routerDao.listByNetworkAndRole(network.getId(), Role.DHCP_USERDATA); if (routers == null || routers.isEmpty()) { s_logger.trace("Can't find dhcp element in network " + network.getId()); return true; @@ -241,11 +242,17 @@ public class DhcpElement extends AdapterBase implements NetworkElement, Password @Override public boolean savePassword(Network network, NicProfile nic, VirtualMachineProfile vm) throws ResourceUnavailableException{ + + List routers = _routerDao.listByNetworkAndRole(network.getId(), Role.DHCP_USERDATA); + if (routers == null || routers.isEmpty()) { + s_logger.trace("Can't find dhcp element in network " + network.getId()); + return true; + } @SuppressWarnings("unchecked") VirtualMachineProfile uservm = (VirtualMachineProfile)vm; - return _routerMgr.savePasswordToRouter(network, nic, uservm); + return _routerMgr.savePasswordToRouter(network, nic, uservm, routers); } @Override diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index 7815d6eff74..a7e15b029dd 100644 --- a/server/src/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VirtualRouterElement.java @@ -47,6 +47,7 @@ import com.cloud.network.dao.NetworkDao; import com.cloud.network.lb.LoadBalancingRulesManager; import com.cloud.network.router.VirtualNetworkApplianceManager; import com.cloud.network.router.VirtualRouter; +import com.cloud.network.router.VirtualRouter.Role; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.RulesManager; import com.cloud.network.rules.StaticNat; @@ -147,7 +148,7 @@ public class VirtualRouterElement extends DhcpElement implements NetworkElement, NetworkOffering networkOffering = _networkOfferingDao.findById(network.getNetworkOfferingId()); // We need to re-implement the network since the redundancy capability may changed - List routers = _routerDao.findByNetwork(network.getId()); + List routers = _routerDao.listByNetworkAndRole(network.getId(), Role.DHCP_FIREWALL_LB_PASSWD_USERDATA); if (routers == null || routers.isEmpty()) { s_logger.trace("Can't find virtual router element in network " + network.getId()); return true; @@ -182,15 +183,14 @@ public class VirtualRouterElement extends DhcpElement implements NetworkElement, DataCenter dc = _configMgr.getZone(config.getDataCenterId()); if (canHandle(config.getGuestType(),dc)) { - long networkId = config.getId(); - List routers = _routerDao.findByNetwork(networkId); + List routers = _routerDao.listByNetworkAndRole(config.getId(), Role.DHCP_FIREWALL_LB_PASSWD_USERDATA); if (routers == null || routers.isEmpty()) { s_logger.debug("Virtual router elemnt doesn't need to apply firewall rules on the backend; virtual router doesn't exist in the network " + config.getId()); return true; } - if(!_routerMgr.applyFirewallRules(config, rules)){ - throw new CloudRuntimeException("Failed to apply firewall rules in network "+config.getId()); + if(!_routerMgr.applyFirewallRules(config, rules, routers)){ + throw new CloudRuntimeException("Failed to apply firewall rules in network " + config.getId()); } else { return true; } @@ -204,8 +204,15 @@ public class VirtualRouterElement extends DhcpElement implements NetworkElement, public String[] applyVpnUsers(RemoteAccessVpn vpn, List users) throws ResourceUnavailableException{ Network network = _networksDao.findById(vpn.getNetworkId()); DataCenter dc = _configMgr.getZone(network.getDataCenterId()); + + List routers = _routerDao.listByNetworkAndRole(network.getId(), Role.DHCP_FIREWALL_LB_PASSWD_USERDATA); + if (routers == null || routers.isEmpty()) { + s_logger.debug("Virtual router elemnt doesn't need to apply vpn users on the backend; virtual router doesn't exist in the network " + network.getId()); + return null; + } + if (canHandle(network.getGuestType(),dc)) { - return _routerMgr.applyVpnUsers(network, users); + return _routerMgr.applyVpnUsers(network, users, routers); } else { s_logger.debug("Element " + this.getName() + " doesn't handle applyVpnUsers command"); return null; @@ -215,8 +222,15 @@ public class VirtualRouterElement extends DhcpElement implements NetworkElement, @Override public boolean startVpn(Network network, RemoteAccessVpn vpn) throws ResourceUnavailableException { DataCenter dc = _configMgr.getZone(network.getDataCenterId()); + + List routers = _routerDao.listByNetworkAndRole(network.getId(), Role.DHCP_FIREWALL_LB_PASSWD_USERDATA); + if (routers == null || routers.isEmpty()) { + s_logger.debug("Virtual router elemnt doesn't need stop vpn on the backend; virtual router doesn't exist in the network " + network.getId()); + return true; + } + if (canHandle(network.getGuestType(),dc)) { - return _routerMgr.startRemoteAccessVpn(network, vpn); + return _routerMgr.startRemoteAccessVpn(network, vpn, routers); } else { s_logger.debug("Element " + this.getName() + " doesn't handle createVpn command"); return false; @@ -226,27 +240,33 @@ public class VirtualRouterElement extends DhcpElement implements NetworkElement, @Override public boolean stopVpn(Network network, RemoteAccessVpn vpn) throws ResourceUnavailableException { DataCenter dc = _configMgr.getZone(network.getDataCenterId()); + + List routers = _routerDao.listByNetworkAndRole(network.getId(), Role.DHCP_FIREWALL_LB_PASSWD_USERDATA); + if (routers == null || routers.isEmpty()) { + s_logger.debug("Virtual router elemnt doesn't need stop vpn on the backend; virtual router doesn't exist in the network " + network.getId()); + return true; + } + if (canHandle(network.getGuestType(),dc)) { - return _routerMgr.deleteRemoteAccessVpn(network, vpn); + return _routerMgr.deleteRemoteAccessVpn(network, vpn, routers); } else { s_logger.debug("Element " + this.getName() + " doesn't handle removeVpn command"); return false; } } - @Override public boolean applyIps(Network network, List ipAddress) throws ResourceUnavailableException { DataCenter dc = _configMgr.getZone(network.getDataCenterId()); if (canHandle(network.getGuestType(),dc)) { - List routers = _routerDao.findByNetwork(network.getId()); + List routers = _routerDao.listByNetworkAndRole(network.getId(), Role.DHCP_FIREWALL_LB_PASSWD_USERDATA); if (routers == null || routers.isEmpty()) { s_logger.debug("Virtual router elemnt doesn't need to associate ip addresses on the backend; virtual router doesn't exist in the network " + network.getId()); return true; } - return _routerMgr.associateIP(network, ipAddress); + return _routerMgr.associateIP(network, ipAddress, routers); } else { return false; } @@ -306,16 +326,56 @@ public class VirtualRouterElement extends DhcpElement implements NetworkElement, public boolean applyStaticNats(Network config, List rules) throws ResourceUnavailableException { DataCenter dc = _configMgr.getZone(config.getDataCenterId()); if (canHandle(config.getGuestType(),dc)) { - long networkId = config.getId(); - List routers = _routerDao.findByNetwork(networkId); + List routers = _routerDao.listByNetworkAndRole(config.getId(), Role.DHCP_FIREWALL_LB_PASSWD_USERDATA); if (routers == null || routers.isEmpty()) { s_logger.debug("Virtual router elemnt doesn't need to apply static nat on the backend; virtual router doesn't exist in the network " + config.getId()); return true; } - return _routerMgr.applyStaticNats(config, rules); + return _routerMgr.applyStaticNats(config, rules, routers); } else { return true; } } + + @Override + public boolean shutdown(Network network, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException { + List routers = _routerDao.listByNetworkAndRole(network.getId(), Role.DHCP_FIREWALL_LB_PASSWD_USERDATA); + if (routers == null || routers.isEmpty()) { + return true; + } + boolean result = true; + for (DomainRouterVO router : routers) { + result = result && _routerMgr.stop(router, false, context.getCaller(), context.getAccount()) != null; + } + return result; + } + + @Override + public boolean destroy(Network config) throws ConcurrentOperationException, ResourceUnavailableException{ + List routers = _routerDao.listByNetworkAndRole(config.getId(), Role.DHCP_FIREWALL_LB_PASSWD_USERDATA); + if (routers == null || routers.isEmpty()) { + return true; + } + boolean result = true; + for (DomainRouterVO router : routers) { + result = result && _routerMgr.destroyRouter(router.getId()); + } + return result; + } + + @Override + public boolean savePassword(Network network, NicProfile nic, VirtualMachineProfile vm) throws ResourceUnavailableException{ + + List routers = _routerDao.listByNetworkAndRole(network.getId(), Role.DHCP_FIREWALL_LB_PASSWD_USERDATA); + if (routers == null || routers.isEmpty()) { + s_logger.trace("Can't find dhcp element in network " + network.getId()); + return true; + } + + @SuppressWarnings("unchecked") + VirtualMachineProfile uservm = (VirtualMachineProfile)vm; + + return _routerMgr.savePasswordToRouter(network, nic, uservm, routers); + } } diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java index f3e7fc3b9d9..700cf46bc27 100644 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java @@ -59,9 +59,10 @@ public interface VirtualNetworkApplianceManager extends Manager, VirtualNetworkA /** * save a vm password on the router. + * @param routers TODO * */ - boolean savePasswordToRouter(Network network, NicProfile nic, VirtualMachineProfile profile) throws ResourceUnavailableException; + boolean savePasswordToRouter(Network network, NicProfile nic, VirtualMachineProfile profile, List routers) throws ResourceUnavailableException; boolean destroyRouter(long routerId) throws ResourceUnavailableException, ConcurrentOperationException; @@ -72,25 +73,25 @@ public interface VirtualNetworkApplianceManager extends Manager, VirtualNetworkA List deployVirtualRouter(Network guestNetwork, DeployDestination dest, Account owner, Map params, boolean isRedundant) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException; List deployDhcp(Network guestNetwork, DeployDestination dest, Account owner, Map params) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException; - - boolean startRemoteAccessVpn(Network network, RemoteAccessVpn vpn) throws ResourceUnavailableException; List addVirtualMachineIntoNetwork(Network config, NicProfile nic, VirtualMachineProfile vm, DeployDestination dest, ReservationContext context, List routers) throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException; - - boolean deleteRemoteAccessVpn(Network network, RemoteAccessVpn vpn) throws ResourceUnavailableException; + + boolean startRemoteAccessVpn(Network network, RemoteAccessVpn vpn, List routers) throws ResourceUnavailableException; + + boolean deleteRemoteAccessVpn(Network network, RemoteAccessVpn vpn, List routers) throws ResourceUnavailableException; - boolean associateIP (Network network, List ipAddress) throws ResourceUnavailableException; + boolean associateIP (Network network, List ipAddress, List routers) throws ResourceUnavailableException; - boolean applyFirewallRules(Network network, List rules) throws ResourceUnavailableException; + boolean applyFirewallRules(Network network, List rules, List routers) throws ResourceUnavailableException; List getRoutersForNetwork(long networkId); - String[] applyVpnUsers(Network network, List users) throws ResourceUnavailableException; + String[] applyVpnUsers(Network network, List users, List routers) throws ResourceUnavailableException; VirtualRouter stop(VirtualRouter router, boolean forced, User callingUser, Account callingAccount) throws ConcurrentOperationException, ResourceUnavailableException; String getDnsBasicZoneUpdate(); - boolean applyStaticNats(Network network, List rules) throws ResourceUnavailableException; + boolean applyStaticNats(Network network, List rules, List routers) throws ResourceUnavailableException; } diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 2d1af12c5f5..04e593d01d5 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -411,8 +411,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } @Override - public boolean savePasswordToRouter(Network network, NicProfile nic, VirtualMachineProfile profile) throws ResourceUnavailableException { - List routers = _routerDao.findByNetwork(network.getId()); + public boolean savePasswordToRouter(Network network, NicProfile nic, VirtualMachineProfile profile, List routers) throws ResourceUnavailableException { if (routers == null || routers.isEmpty()) { s_logger.warn("Unable save password, router doesn't exist in network " + network.getId()); throw new CloudRuntimeException("Unable to save password to router"); @@ -424,7 +423,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian DataCenter dc = _dcDao.findById(userVm.getDataCenterIdToDeployIn()); boolean result = true; - for (DomainRouterVO router : routers) { + for (VirtualRouter router : routers) { boolean sendPassword = true; if (dc.getNetworkType() == NetworkType.Basic && userVm.getPodIdToDeployIn().longValue() != router.getPodIdToDeployIn().longValue()) { sendPassword = false; @@ -877,7 +876,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian long dcId = dest.getDataCenter().getId(); DataCenterDeployment plan = new DataCenterDeployment(dcId); - List routers = _routerDao.findByNetwork(guestNetwork.getId()); + List routers = _routerDao.listByNetworkAndRole(guestNetwork.getId(), Role.DHCP_FIREWALL_LB_PASSWD_USERDATA); try { int routerCount = 1; @@ -1096,10 +1095,10 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian // In Basic zone and Guest network we have to start domR per pod, not per network if (isPodBased) { - routers = _routerDao.findByNetworkAndPod(guestNetwork.getId(), podId); + routers = _routerDao.listByNetworkAndPodAndRole(guestNetwork.getId(), podId, Role.DHCP_USERDATA); plan = new DataCenterDeployment(dcId, podId, null, null, null); } else { - routers = _routerDao.findByNetwork(guestNetwork.getId()); + routers = _routerDao.listByNetworkAndRole(guestNetwork.getId(), Role.DHCP_USERDATA); plan = new DataCenterDeployment(dcId); } @@ -1533,15 +1532,13 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian @Override - public boolean startRemoteAccessVpn(Network network, RemoteAccessVpn vpn) throws ResourceUnavailableException { - - List routers = _routerDao.findByNetwork(network.getId()); + public boolean startRemoteAccessVpn(Network network, RemoteAccessVpn vpn, List routers) throws ResourceUnavailableException { if (routers == null || routers.isEmpty()) { s_logger.warn("Failed to start remote access VPN: no router found for account and zone"); throw new ResourceUnavailableException("Failed to start remote access VPN: no router found for account and zone", DataCenter.class, network.getDataCenterId()); } - for (DomainRouterVO router : routers) { + for (VirtualRouter router : routers) { if (router.getState() != State.Running) { s_logger.warn("Failed to start remote access VPN: router not in right state " + router.getState()); throw new ResourceUnavailableException("Failed to start remote access VPN: router not in right state " + router.getState(), DataCenter.class, network.getDataCenterId()); @@ -1577,16 +1574,14 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian @Override - public boolean deleteRemoteAccessVpn(Network network, RemoteAccessVpn vpn) throws ResourceUnavailableException { - - List routers = _routerDao.findByNetwork(network.getId()); + public boolean deleteRemoteAccessVpn(Network network, RemoteAccessVpn vpn, List routers) throws ResourceUnavailableException { if (routers == null || routers.isEmpty()) { s_logger.warn("Failed to delete remote access VPN: no router found for account and zone"); throw new ResourceUnavailableException("Failed to delete remote access VPN", DataCenter.class, network.getDataCenterId()); } boolean result = true; - for (DomainRouterVO router : routers) { + for (VirtualRouter router : routers) { if (router.getState() != State.Running) { s_logger.warn("Failed to delete remote access VPN: domR is not in right state " + router.getState()); throw new ResourceUnavailableException("Failed to delete remote access VPN: domR is not in right state " + router.getState(), DataCenter.class, network.getDataCenterId()); @@ -1770,8 +1765,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } @Override - public String[] applyVpnUsers(Network network, List users) throws ResourceUnavailableException { - List routers = _routerDao.findByNetwork(network.getId()); + public String[] applyVpnUsers(Network network, List users, List routers) throws ResourceUnavailableException { if (routers == null || routers.isEmpty()) { s_logger.warn("Failed to add/remove VPN users: no router found for account and zone"); throw new ResourceUnavailableException("Unable to assign ip addresses, domR doesn't exist for network " + network.getId(), DataCenter.class, network.getDataCenterId()); @@ -1888,7 +1882,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian return startVirtualRouter(router, user, account, params); } - private void createAssociateIPCommands(final DomainRouterVO router, final List ips, Commands cmds, long vmId) { + private void createAssociateIPCommands(final VirtualRouter router, final List ips, Commands cmds, long vmId) { // Ensure that in multiple vlans case we first send all ip addresses of vlan1, then all ip addresses of vlan2, etc.. Map> vlanIpMap = new HashMap>(); @@ -1950,7 +1944,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } } - private void createApplyPortForwardingRulesCommands(List rules, DomainRouterVO router, Commands cmds) { + private void createApplyPortForwardingRulesCommands(List rules, VirtualRouter router, Commands cmds) { List rulesTO = null; if (rules != null) { rulesTO = new ArrayList(); @@ -1971,7 +1965,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian cmds.addCommand(cmd); } - private void createApplyStaticNatRulesCommands(List rules, DomainRouterVO router, Commands cmds) { + private void createApplyStaticNatRulesCommands(List rules, VirtualRouter router, Commands cmds) { List rulesTO = null; if (rules != null) { rulesTO = new ArrayList(); @@ -1991,7 +1985,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian cmds.addCommand(cmd); } - private void createApplyLoadBalancingRulesCommands(List rules, DomainRouterVO router, Commands cmds) { + private void createApplyLoadBalancingRulesCommands(List rules, VirtualRouter router, Commands cmds) { LoadBalancerTO[] lbs = new LoadBalancerTO[rules.size()]; int i = 0; @@ -2023,7 +2017,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } - private void createApplyVpnCommands(RemoteAccessVpn vpn, DomainRouterVO router, Commands cmds) { + private void createApplyVpnCommands(RemoteAccessVpn vpn, VirtualRouter router, Commands cmds) { List vpnUsers = _vpnUsersDao.listByAccount(vpn.getAccountId()); List addUsers = new ArrayList(); List removeUsers = new ArrayList(); @@ -2102,7 +2096,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } } - private boolean sendCommandsToRouter(final DomainRouterVO router, Commands cmds) throws AgentUnavailableException { + private boolean sendCommandsToRouter(final VirtualRouter router, Commands cmds) throws AgentUnavailableException { Answer[] answers = null; try { answers = _agentMgr.send(router.getHostId(), cmds); @@ -2128,15 +2122,14 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } @Override - public boolean associateIP(Network network, List ipAddress) throws ResourceUnavailableException { - List routers = _routerDao.findByNetwork(network.getId()); + public boolean associateIP(Network network, List ipAddress, List routers) throws ResourceUnavailableException { if (routers == null || routers.isEmpty()) { s_logger.warn("Unable to associate ip addresses, virtual router doesn't exist in the network " + network.getId()); throw new ResourceUnavailableException("Unable to assign ip addresses", DataCenter.class, network.getDataCenterId()); } boolean result = true; - for (DomainRouterVO router : routers) { + for (VirtualRouter router : routers) { if (router.getState() == State.Running) { Commands cmds = new Commands(OnError.Continue); // Have to resend all already associated ip addresses @@ -2157,15 +2150,14 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } @Override - public boolean applyFirewallRules(Network network, List rules) throws ResourceUnavailableException { - List routers = _routerDao.findByNetwork(network.getId()); + public boolean applyFirewallRules(Network network, List rules, List routers) throws ResourceUnavailableException { if (routers == null || routers.isEmpty()) { s_logger.warn("Unable to apply firewall rules, virtual router doesn't exist in the network " + network.getId()); throw new ResourceUnavailableException("Unable to apply firewall rules", DataCenter.class, network.getDataCenterId()); } boolean result = true; - for (DomainRouterVO router : routers) { + for (VirtualRouter router : routers) { if (router.getState() == State.Running) { if (rules != null && !rules.isEmpty()) { if (rules.get(0).getPurpose() == Purpose.LoadBalancing) { @@ -2204,21 +2196,21 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian return result; } - protected boolean applyLBRules(DomainRouterVO router, List rules) throws ResourceUnavailableException { + protected boolean applyLBRules(VirtualRouter router, List rules) throws ResourceUnavailableException { Commands cmds = new Commands(OnError.Continue); createApplyLoadBalancingRulesCommands(rules, router, cmds); // Send commands to router return sendCommandsToRouter(router, cmds); } - protected boolean applyPortForwardingRules(DomainRouterVO router, List rules) throws ResourceUnavailableException { + protected boolean applyPortForwardingRules(VirtualRouter router, List rules) throws ResourceUnavailableException { Commands cmds = new Commands(OnError.Continue); createApplyPortForwardingRulesCommands(rules, router, cmds); // Send commands to router return sendCommandsToRouter(router, cmds); } - protected boolean applyStaticNatRules(DomainRouterVO router, List rules) throws ResourceUnavailableException { + protected boolean applyStaticNatRules(VirtualRouter router, List rules) throws ResourceUnavailableException { Commands cmds = new Commands(OnError.Continue); createApplyStaticNatRulesCommands(rules, router, cmds); // Send commands to router @@ -2235,7 +2227,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian return vrs; } - private void createFirewallRulesCommands(List rules, DomainRouterVO router, Commands cmds) { + private void createFirewallRulesCommands(List rules, VirtualRouter router, Commands cmds) { List rulesTO = null; if (rules != null) { rulesTO = new ArrayList(); @@ -2256,7 +2248,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } - protected boolean applyFirewallRules(DomainRouterVO router, List rules) throws ResourceUnavailableException { + protected boolean applyFirewallRules(VirtualRouter router, List rules) throws ResourceUnavailableException { Commands cmds = new Commands(OnError.Continue); createFirewallRulesCommands(rules, router, cmds); // Send commands to router @@ -2270,15 +2262,14 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian @Override - public boolean applyStaticNats(Network network, List rules) throws ResourceUnavailableException { - List routers = _routerDao.findByNetwork(network.getId()); + public boolean applyStaticNats(Network network, List rules, List routers) throws ResourceUnavailableException { if (routers == null || routers.isEmpty()) { s_logger.warn("Unable to create static nat, virtual router doesn't exist in the network " + network.getId()); throw new ResourceUnavailableException("Unable to create static nat", DataCenter.class, network.getDataCenterId()); } boolean result = true; - for (DomainRouterVO router : routers) { + for (VirtualRouter router : routers) { if (router.getState() == State.Running) { s_logger.debug("Applying " + rules.size() + " static nat in network " + network); result = applyStaticNat(router, rules); @@ -2300,14 +2291,14 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } - protected boolean applyStaticNat(DomainRouterVO router, List rules) throws ResourceUnavailableException { + protected boolean applyStaticNat(VirtualRouter router, List rules) throws ResourceUnavailableException { Commands cmds = new Commands(OnError.Continue); createApplyStaticNatCommands(rules, router, cmds); // Send commands to router return sendCommandsToRouter(router, cmds); } - private void createApplyStaticNatCommands(List rules, DomainRouterVO router, Commands cmds) { + private void createApplyStaticNatCommands(List rules, VirtualRouter router, Commands cmds) { List rulesTO = null; if (rules != null) { rulesTO = new ArrayList(); diff --git a/server/src/com/cloud/vm/dao/DomainRouterDao.java b/server/src/com/cloud/vm/dao/DomainRouterDao.java index 7837283c49f..76bd8d18627 100755 --- a/server/src/com/cloud/vm/dao/DomainRouterDao.java +++ b/server/src/com/cloud/vm/dao/DomainRouterDao.java @@ -91,8 +91,6 @@ public interface DomainRouterDao extends GenericDao { List findByNetwork(long networkId); - List findByNetworkAndPod(long networkId, long podId); - List listActive(long networkId); /** @@ -101,8 +99,7 @@ public interface DomainRouterDao extends GenericDao { */ List listByStateAndNetworkType(State state, GuestIpType ipType); - List findByNetworkOutsideThePod(long networkId, long podId, State state); - List listByNetworkAndState(long networkId, State state); + List findByNetworkOutsideThePod(long networkId, long podId, State state, Role role); List listByNetworkAndPodAndRole(long networkId, long podId, Role role); diff --git a/server/src/com/cloud/vm/dao/DomainRouterDaoImpl.java b/server/src/com/cloud/vm/dao/DomainRouterDaoImpl.java index 2b9f9f860b3..f9a69246ae1 100755 --- a/server/src/com/cloud/vm/dao/DomainRouterDaoImpl.java +++ b/server/src/com/cloud/vm/dao/DomainRouterDaoImpl.java @@ -87,6 +87,7 @@ public class DomainRouterDaoImpl extends GenericDaoBase im OutsidePodSearch.and("network", OutsidePodSearch.entity().getNetworkId(), Op.EQ); OutsidePodSearch.and("podId", OutsidePodSearch.entity().getPodIdToDeployIn(), Op.NEQ); OutsidePodSearch.and("state", OutsidePodSearch.entity().getState(), Op.EQ); + OutsidePodSearch.and("role", OutsidePodSearch.entity().getRole(), Op.EQ); OutsidePodSearch.done(); } @@ -188,14 +189,6 @@ public class DomainRouterDaoImpl extends GenericDaoBase im return listBy(sc); } - @Override - public List findByNetworkAndPod(long networkId, long podId) { - SearchCriteria sc = AllFieldsSearch.create(); - sc.setParameters("network", networkId); - sc.setParameters("podId", podId); - return listBy(sc); - } - @Override public List listActive(long networkId) { SearchCriteria sc = IdNetworkIdStatesSearch.create(); @@ -213,21 +206,12 @@ public class DomainRouterDaoImpl extends GenericDaoBase im } @Override - public List findByNetworkOutsideThePod(long networkId, long podId, State state) { + public List findByNetworkOutsideThePod(long networkId, long podId, State state, Role role) { SearchCriteria sc = OutsidePodSearch.create(); sc.setParameters("network", networkId); sc.setParameters("podId", podId); sc.setParameters("state", state); - return listBy(sc); - } - - @Override - public List listByNetworkAndState(long networkId, State state) { - SearchCriteria sc = AllFieldsSearch.create(); - sc.setParameters("network", networkId); - if (state != null) { - sc.setParameters("state", state); - } + sc.setParameters("role", role); return listBy(sc); }