From 5b60394a3a0d3a373094cdae9aaaa1640c71d223 Mon Sep 17 00:00:00 2001 From: Wilder Rodrigues Date: Tue, 15 Jul 2014 10:59:42 +0200 Subject: [PATCH] adding Ip Association and VPN Rules Conflicts: server/src/com/cloud/network/topology/AdvancedNetworkVisitor.java server/src/com/cloud/network/topology/BasicNetworkTopology.java server/src/com/cloud/network/topology/NetworkTopologyVisitor.java --- .../network/element/VirtualRouterElement.java | 16 +- .../network/rules/IpAssociationRules.java | 65 +++--- .../rules/VirtualNetworkApplianceFactory.java | 34 ++++ .../src/com/cloud/network/rules/VpnRules.java | 38 +++- .../topology/AdvancedNetworkVisitor.java | 27 ++- .../topology/BasicNetworkTopology.java | 190 ++++++++++++------ .../network/topology/NetworkTopology.java | 8 + .../topology/NetworkTopologyVisitor.java | 18 +- 8 files changed, 279 insertions(+), 117 deletions(-) diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index efc044bb3c8..ed3aff4163b 100755 --- a/server/src/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VirtualRouterElement.java @@ -423,7 +423,11 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl 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; } - return _routerMgr.applyVpnUsers(network, users, routers); + + DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId()); + NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO); + + return networkTopology.applyVpnUsers(network, users, routers); } else { s_logger.debug("Element " + getName() + " doesn't handle applyVpnUsers command"); return null; @@ -486,7 +490,10 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl return true; } - return _routerMgr.associatePublicIP(network, ipAddress, routers); + DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId()); + NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO); + + return networkTopology.associatePublicIP(network, ipAddress, routers); } else { return false; } @@ -818,7 +825,10 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl return true; } - if (!_routerMgr.applyFirewallRules(network, rules, routers)) { + DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId()); + NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO); + + if (!networkTopology.applyFirewallRules(network, rules, routers)) { throw new CloudRuntimeException("Failed to apply firewall rules in network " + network.getId()); } else { return true; diff --git a/server/src/com/cloud/network/rules/IpAssociationRules.java b/server/src/com/cloud/network/rules/IpAssociationRules.java index a002728704f..73d61213657 100644 --- a/server/src/com/cloud/network/rules/IpAssociationRules.java +++ b/server/src/com/cloud/network/rules/IpAssociationRules.java @@ -24,43 +24,25 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.inject.Inject; - import com.cloud.agent.api.Command; import com.cloud.agent.api.routing.IpAssocCommand; import com.cloud.agent.api.routing.NetworkElementCommand; import com.cloud.agent.api.to.IpAddressTO; import com.cloud.agent.manager.Commands; import com.cloud.dc.DataCenterVO; -import com.cloud.dc.dao.DataCenterDao; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.IpAddress; import com.cloud.network.Network; -import com.cloud.network.NetworkModel; import com.cloud.network.Networks.TrafficType; import com.cloud.network.PublicIpAddress; -import com.cloud.network.dao.NetworkDao; import com.cloud.network.dao.NetworkVO; import com.cloud.network.router.VirtualRouter; import com.cloud.network.topology.NetworkTopologyVisitor; import com.cloud.utils.net.NetUtils; import com.cloud.vm.NicVO; -import com.cloud.vm.dao.NicDao; public class IpAssociationRules extends RuleApplier { - @Inject - NicDao _nicDao; - - @Inject - NetworkDao _networkDao; - - @Inject - DataCenterDao _dcDao; - - @Inject - NetworkModel _networkModel; - private final List ipAddresses; private Commands commands; @@ -73,12 +55,24 @@ public class IpAssociationRules extends RuleApplier { @Override public boolean accept(final NetworkTopologyVisitor visitor, final VirtualRouter router) throws ResourceUnavailableException { this.router = router; - commands = new Commands(Command.OnError.Continue); - // + + return visitor.visit(this); + } + + public List getIpAddresses() { + return ipAddresses; + } + + public Commands getCommands() { + return commands; + } + + public void createAssociateIPCommands(final VirtualRouter router, final List ips, final Commands cmds, final long vmId) { + // Ensure that in multiple vlans case we first send all ip addresses of vlan1, then all ip addresses of vlan2, etc.. final Map> vlanIpMap = new HashMap>(); - for (final PublicIpAddress ipAddress : ipAddresses) { + for (final PublicIpAddress ipAddress : ips) { final String vlanTag = ipAddress.getVlanTag(); ArrayList ipList = vlanIpMap.get(vlanTag); if (ipList == null) { @@ -92,10 +86,10 @@ public class IpAssociationRules extends RuleApplier { vlanIpMap.put(vlanTag, ipList); } - final List nics = _nicDao.listByVmId(router.getId()); + final List nics = nicDao.listByVmId(router.getId()); String baseMac = null; for (final NicVO nic : nics) { - final NetworkVO nw = _networkDao.findById(nic.getNetworkId()); + final NetworkVO nw = networkDao.findById(nic.getNetworkId()); if (nw.getTrafficType() == TrafficType.Public) { baseMac = nic.getMacAddress(); break; @@ -115,8 +109,8 @@ public class IpAssociationRules extends RuleApplier { }); // Get network rate - required for IpAssoc - final Integer networkRate = _networkModel.getNetworkRate(ipAddrList.get(0).getNetworkId(), router.getId()); - final Network network = _networkModel.getNetwork(ipAddrList.get(0).getNetworkId()); + final Integer networkRate = networkModel.getNetworkRate(ipAddrList.get(0).getNetworkId(), router.getId()); + final Network network = networkModel.getNetwork(ipAddrList.get(0).getNetworkId()); final IpAddressTO[] ipsToSend = new IpAddressTO[ipAddrList.size()]; int i = 0; @@ -147,7 +141,7 @@ public class IpAssociationRules extends RuleApplier { networkRate, ipAddr.isOneToOneNat()); ip.setTrafficType(network.getTrafficType()); - ip.setNetworkName(_networkModel.getNetworkTag(router.getHypervisorType(), network)); + ip.setNetworkName(networkModel.getNetworkTag(router.getHypervisorType(), network)); ipsToSend[i++] = ip; /* send the firstIP = true for the first Add, this is to create primary on interface*/ if (!firstIP || add) { @@ -155,24 +149,13 @@ public class IpAssociationRules extends RuleApplier { } } final IpAssocCommand cmd = new IpAssocCommand(ipsToSend); - //cmd.setAccessDetail(NetworkElementCommand.ROUTER_IP, getRouterControlIp(router.getId())); - //cmd.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, getRouterIpInNetwork(ipAddrList.get(0).getAssociatedWithNetworkId(), router.getId())); + cmd.setAccessDetail(NetworkElementCommand.ROUTER_IP, routerControlHelper.getRouterControlIp(router.getId())); + cmd.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, routerControlHelper.getRouterIpInNetwork(ipAddrList.get(0).getAssociatedWithNetworkId(), router.getId())); cmd.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName()); - final DataCenterVO dcVo = _dcDao.findById(router.getDataCenterId()); + final DataCenterVO dcVo = dcDao.findById(router.getDataCenterId()); cmd.setAccessDetail(NetworkElementCommand.ZONE_NETWORK_TYPE, dcVo.getNetworkType().toString()); - commands.addCommand("IPAssocCommand", cmd); + cmds.addCommand("IPAssocCommand", cmd); } - // - - return visitor.visit(this); - } - - public List getIpAddresses() { - return ipAddresses; - } - - public Commands getCommands() { - return commands; } } \ No newline at end of file diff --git a/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java b/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java index 76da30093c2..fa9e857de83 100644 --- a/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java +++ b/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java @@ -1,3 +1,19 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. package com.cloud.network.rules; import java.util.List; @@ -9,6 +25,8 @@ import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import com.cloud.dc.dao.DataCenterDao; import com.cloud.network.Network; import com.cloud.network.NetworkModel; +import com.cloud.network.PublicIpAddress; +import com.cloud.network.VpnUser; import com.cloud.network.dao.FirewallRulesDao; import com.cloud.network.dao.LoadBalancerDao; import com.cloud.network.dao.NetworkDao; @@ -106,4 +124,20 @@ public class VirtualNetworkApplianceFactory { applier.routerControlHelper = routerControlHelper; applier.applianceManager = applianceManager; } + + public IpAssociationRules createIpAssociationRules(final Network network, final List ipAddresses) { + IpAssociationRules ipAssociationRules = new IpAssociationRules(network, ipAddresses); + + initBeans(ipAssociationRules); + + return ipAssociationRules; + } + + public VpnRules createVpnRules(final Network network, final List users) { + VpnRules vpnRules = new VpnRules(network, users); + + initBeans(vpnRules); + + return vpnRules; + } } \ No newline at end of file diff --git a/server/src/com/cloud/network/rules/VpnRules.java b/server/src/com/cloud/network/rules/VpnRules.java index 15eac3f5cc5..5fccb78ce4f 100644 --- a/server/src/com/cloud/network/rules/VpnRules.java +++ b/server/src/com/cloud/network/rules/VpnRules.java @@ -17,21 +17,26 @@ package com.cloud.network.rules; +import java.util.ArrayList; import java.util.List; +import com.cloud.agent.api.routing.NetworkElementCommand; +import com.cloud.agent.api.routing.VpnUsersCfgCommand; +import com.cloud.agent.manager.Commands; +import com.cloud.dc.DataCenterVO; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Network; +import com.cloud.network.VpnUser; import com.cloud.network.router.VirtualRouter; import com.cloud.network.topology.NetworkTopologyVisitor; -import com.cloud.network.vpc.NetworkACLItem; public class VpnRules extends RuleApplier { - private final List rules; + private final List users; - public VpnRules(final Network network, final List rules) { + public VpnRules(final Network network, final List users) { super(network); - this.rules = rules; + this.users = users; } @Override @@ -41,7 +46,28 @@ public class VpnRules extends RuleApplier { return visitor.visit(this); } - public List getRules() { - return rules; + public void createApplyVpnUsersCommand(final List users, final VirtualRouter router, final Commands cmds) { + final List addUsers = new ArrayList(); + final List removeUsers = new ArrayList(); + for (final VpnUser user : users) { + if (user.getState() == VpnUser.State.Add || user.getState() == VpnUser.State.Active) { + addUsers.add(user); + } else if (user.getState() == VpnUser.State.Revoke) { + removeUsers.add(user); + } + } + + final VpnUsersCfgCommand cmd = new VpnUsersCfgCommand(addUsers, removeUsers); + cmd.setAccessDetail(NetworkElementCommand.ACCOUNT_ID, String.valueOf(router.getAccountId())); + cmd.setAccessDetail(NetworkElementCommand.ROUTER_IP, routerControlHelper.getRouterControlIp(router.getId())); + cmd.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName()); + final DataCenterVO dcVo = dcDao.findById(router.getDataCenterId()); + cmd.setAccessDetail(NetworkElementCommand.ZONE_NETWORK_TYPE, dcVo.getNetworkType().toString()); + + cmds.addCommand("users", cmd); + } + + public List getUsers() { + return users; } } \ No newline at end of file diff --git a/server/src/com/cloud/network/topology/AdvancedNetworkVisitor.java b/server/src/com/cloud/network/topology/AdvancedNetworkVisitor.java index f5ff037e067..ca9e997b78e 100644 --- a/server/src/com/cloud/network/topology/AdvancedNetworkVisitor.java +++ b/server/src/com/cloud/network/topology/AdvancedNetworkVisitor.java @@ -25,6 +25,8 @@ import com.cloud.agent.api.Command; import com.cloud.agent.manager.Commands; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Network; +import com.cloud.network.PublicIpAddress; +import com.cloud.network.VpnUser; import com.cloud.network.lb.LoadBalancingRule; import com.cloud.network.router.VirtualRouter; import com.cloud.network.rules.DhcpRules; @@ -123,12 +125,13 @@ public class AdvancedNetworkVisitor extends NetworkTopologyVisitor { @Override public boolean visit(final IpAssociationRules ipRules) throws ResourceUnavailableException { + Network network = ipRules.getNetwork(); VirtualRouter router = ipRules.getRouter(); Commands commands = ipRules.getCommands(); + List ips = ipRules.getIpAddresses(); - // return sendCommandsToRouter(router, commands); - - return false; + ipRules.createAssociateIPCommands(router, ips, commands, network.getId()); + return applianceManager.sendCommandsToRouter(router, commands); } @Override @@ -167,7 +170,23 @@ public class AdvancedNetworkVisitor extends NetworkTopologyVisitor { } @Override - public boolean visit(final PrivateGatewayRules userdata) throws ResourceUnavailableException { + public boolean visit(final PrivateGatewayRules privateGW) throws ResourceUnavailableException { + return false; + } + + @Override + public boolean visit(final VpnRules vpn) throws ResourceUnavailableException { + VirtualRouter router = vpn.getRouter(); + List users = vpn.getUsers(); + + final Commands cmds = new Commands(Command.OnError.Continue); + vpn.createApplyVpnUsersCommand(users, router, cmds); + + return applianceManager.sendCommandsToRouter(router, cmds); + } + + @Override + public boolean visit(final DhcpPvlanRules vpn) throws ResourceUnavailableException { return false; } diff --git a/server/src/com/cloud/network/topology/BasicNetworkTopology.java b/server/src/com/cloud/network/topology/BasicNetworkTopology.java index f03383f79e6..6caa61ee2c5 100644 --- a/server/src/com/cloud/network/topology/BasicNetworkTopology.java +++ b/server/src/com/cloud/network/topology/BasicNetworkTopology.java @@ -36,16 +36,20 @@ import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.host.dao.HostDao; import com.cloud.network.Network; +import com.cloud.network.PublicIpAddress; +import com.cloud.network.VpnUser; import com.cloud.network.lb.LoadBalancingRule; import com.cloud.network.router.VirtualRouter; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRules; +import com.cloud.network.rules.IpAssociationRules; import com.cloud.network.rules.LoadBalancingRules; import com.cloud.network.rules.RuleApplier; import com.cloud.network.rules.RuleApplierWrapper; import com.cloud.network.rules.StaticNat; import com.cloud.network.rules.StaticNatRules; import com.cloud.network.rules.VirtualNetworkApplianceFactory; +import com.cloud.network.rules.VpnRules; import com.cloud.user.Account; import com.cloud.vm.DomainRouterVO; import com.cloud.vm.NicProfile; @@ -105,6 +109,132 @@ public class BasicNetworkTopology implements NetworkTopology { return false; } + @Override + public boolean applyLoadBalancingRules(final Network network, final List rules, final List routers) + throws ResourceUnavailableException { + + if (rules == null || rules.isEmpty()) { + s_logger.debug("No lb rules to be applied for network " + network.getId()); + return true; + } + + s_logger.debug("APPLYING LOAD BALANCING RULES"); + + final String typeString = "loadbalancing rules"; + final boolean isPodLevelException = false; + final boolean failWhenDisconnect = false; + final Long podId = null; + + LoadBalancingRules loadBalancingRules = virtualNetworkApplianceFactory.createLoadBalancingRules(network, rules); + + return applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper(loadBalancingRules)); + } + + @Override + public boolean applyFirewallRules(final Network network, final List rules, final List routers) + throws ResourceUnavailableException { + if (rules == null || rules.isEmpty()) { + s_logger.debug("No firewall rules to be applied for network " + network.getId()); + return true; + } + + s_logger.debug("APPLYING FIREWALL RULES"); + + final String typeString = "firewall rules"; + final boolean isPodLevelException = false; + final boolean failWhenDisconnect = false; + final Long podId = null; + + FirewallRules firewallRules = virtualNetworkApplianceFactory.createFirewallRules(network, rules); + + return applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper(firewallRules)); + } + + @Override + public boolean applyStaticNats(final Network network, final List rules, final List routers) throws ResourceUnavailableException { + if (rules == null || rules.isEmpty()) { + s_logger.debug("No static nat rules to be applied for network " + network.getId()); + return true; + } + + s_logger.debug("APPLYING STATIC NAT RULES"); + + final String typeString = "static nat rules"; + final boolean isPodLevelException = false; + final boolean failWhenDisconnect = false; + final Long podId = null; + + StaticNatRules natRules = virtualNetworkApplianceFactory.createStaticNatRules(network, rules); + + return applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper(natRules)); + } + + @Override + public boolean associatePublicIP(final Network network, final List ipAddress, final List routers) + throws ResourceUnavailableException { + if (ipAddress == null || ipAddress.isEmpty()) { + s_logger.debug("No ip association rules to be applied for network " + network.getId()); + return true; + } + + s_logger.debug("APPLYING IP RULES"); + + final String typeString = "ip association"; + final boolean isPodLevelException = false; + final boolean failWhenDisconnect = false; + final Long podId = null; + + IpAssociationRules ipAddresses = virtualNetworkApplianceFactory.createIpAssociationRules(network, ipAddress); + + return applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper(ipAddresses)); + } + + @Override + public String[] applyVpnUsers(final Network network, final List users, final 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()); + } + + s_logger.debug("APPLYING VPN RULES"); + + // should become a BasicNetworkVisitor in the end + AdvancedNetworkVisitor visitor = new AdvancedNetworkVisitor(); + + boolean agentResults = true; + + for (final DomainRouterVO router : routers) { + if (router.getState() != State.Running) { + s_logger.warn("Failed to add/remove VPN users: router not in running state"); + throw new ResourceUnavailableException("Unable to assign ip addresses, domR is not in right state " + router.getState(), DataCenter.class, + network.getDataCenterId()); + } + + VpnRules vpnRules = virtualNetworkApplianceFactory.createVpnRules(network, users); + + // [FIXME] REMOVE THIS SHIT AND INJECT USING A FACTORY FOR THE + // VISITORS + visitor.setApplianceManager(vpnRules.getApplianceManager()); + + // Currently we receive just one answer from the agent. In the + // future we have to parse individual answers and set + // results accordingly + final boolean agentResult = vpnRules.accept(visitor, router); + agentResults = agentResults && agentResult; + } + + final String[] result = new String[users.size()]; + for (int i = 0; i < result.length; i++) { + if (agentResults) { + result[i] = null; + } else { + result[i] = String.valueOf(agentResults); + } + } + + return result; + } + @Override public boolean applyRules(final Network network, final List routers, final String typeString, final boolean isPodLevelException, final Long podId, final boolean failWhenDisconnect, final RuleApplierWrapper ruleApplierWrapper) throws ResourceUnavailableException { @@ -199,64 +329,4 @@ public class BasicNetworkTopology implements NetworkTopology { } return result; } - - @Override - public boolean applyLoadBalancingRules(final Network network, final List rules, final List routers) - throws ResourceUnavailableException { - - if (rules == null || rules.isEmpty()) { - s_logger.debug("No lb rules to be applied for network " + network.getId()); - return true; - } - - s_logger.debug("APPLYING LOAD BALANCING RULES"); - - final String typeString = "loadbalancing rules"; - final boolean isPodLevelException = false; - final boolean failWhenDisconnect = false; - final Long podId = null; - - LoadBalancingRules loadBalancingRules = virtualNetworkApplianceFactory.createLoadBalancingRules(network, rules); - - return applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper(loadBalancingRules)); - } - - @Override - public boolean applyFirewallRules(final Network network, final List rules, final List routers) - throws ResourceUnavailableException { - if (rules == null || rules.isEmpty()) { - s_logger.debug("No firewall rules to be applied for network " + network.getId()); - return true; - } - - s_logger.debug("APPLYING FIREWALL RULES"); - - final String typeString = "firewall rules"; - final boolean isPodLevelException = false; - final boolean failWhenDisconnect = false; - final Long podId = null; - - FirewallRules firewallRules = virtualNetworkApplianceFactory.createFirewallRules(network, rules); - - return applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper(firewallRules)); - } - - @Override - public boolean applyStaticNats(final Network network, final List rules, final List routers) throws ResourceUnavailableException { - if (rules == null || rules.isEmpty()) { - s_logger.debug("No static nat rules to be applied for network " + network.getId()); - return true; - } - - s_logger.debug("APPLYING STATIC NAT RULES"); - - final String typeString = "static nat rules"; - final boolean isPodLevelException = false; - final boolean failWhenDisconnect = false; - final Long podId = null; - - StaticNatRules natRules = virtualNetworkApplianceFactory.createStaticNatRules(network, rules); - - return applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper(natRules)); - } } \ No newline at end of file diff --git a/server/src/com/cloud/network/topology/NetworkTopology.java b/server/src/com/cloud/network/topology/NetworkTopology.java index a7a117ae822..006ccc50859 100644 --- a/server/src/com/cloud/network/topology/NetworkTopology.java +++ b/server/src/com/cloud/network/topology/NetworkTopology.java @@ -26,6 +26,8 @@ import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Network; +import com.cloud.network.PublicIpAddress; +import com.cloud.network.VpnUser; import com.cloud.network.lb.LoadBalancingRule; import com.cloud.network.router.VirtualRouter; import com.cloud.network.rules.FirewallRule; @@ -61,9 +63,15 @@ public interface NetworkTopology { boolean applyRules(final Network network, final List routers, final String typeString, final boolean isPodLevelException, final Long podId, final boolean failWhenDisconnect, RuleApplierWrapper ruleApplier) throws ResourceUnavailableException; + // ====== USER FOR GUEST NETWORK ====== // + boolean applyLoadBalancingRules(Network network, List rules, List routers) throws ResourceUnavailableException; boolean applyFirewallRules(final Network network, final List rules, final List routers) throws ResourceUnavailableException; boolean applyStaticNats(final Network network, final List rules, final List routers) throws ResourceUnavailableException; + + boolean associatePublicIP(final Network network, final List ipAddress, final List routers) throws ResourceUnavailableException; + + String[] applyVpnUsers(final Network network, final List users, final List routers) throws ResourceUnavailableException; } \ No newline at end of file diff --git a/server/src/com/cloud/network/topology/NetworkTopologyVisitor.java b/server/src/com/cloud/network/topology/NetworkTopologyVisitor.java index 46f68e4f4fe..a4aaf2e2f5d 100644 --- a/server/src/com/cloud/network/topology/NetworkTopologyVisitor.java +++ b/server/src/com/cloud/network/topology/NetworkTopologyVisitor.java @@ -41,20 +41,32 @@ public abstract class NetworkTopologyVisitor { } public abstract boolean visit(StaticNatRules nat) throws ResourceUnavailableException; + public abstract boolean visit(LoadBalancingRules loadbalancing) throws ResourceUnavailableException; + public abstract boolean visit(FirewallRules firewall) throws ResourceUnavailableException; + public abstract boolean visit(IpAssociationRules ipAddresses) throws ResourceUnavailableException; + public abstract boolean visit(UserdataPwdRules userdata) throws ResourceUnavailableException; + public abstract boolean visit(DhcpRules dhcp) throws ResourceUnavailableException; + public abstract boolean visit(SshKeyToRouterRules ssh) throws ResourceUnavailableException; + public abstract boolean visit(PasswordToRouterRules pwd) throws ResourceUnavailableException; + public abstract boolean visit(NetworkAclsRules acl) throws ResourceUnavailableException; + public abstract boolean visit(VpcIpAssociationRules vpcIp) throws ResourceUnavailableException; + public abstract boolean visit(UserdataToRouterRules userdata) throws ResourceUnavailableException; + public abstract boolean visit(VpnRules userdata) throws ResourceUnavailableException; + public abstract boolean visit(PrivateGatewayRules userdata) throws ResourceUnavailableException; - public NetworkTopology getNetworkTopology() { - return networkTopology; - } + public abstract boolean visit(DhcpPvlanRules vpn) throws ResourceUnavailableException; + + public abstract boolean visit(DhcpSubNetRules vpn) throws ResourceUnavailableException; } \ No newline at end of file