mirror of https://github.com/apache/cloudstack.git
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
This commit is contained in:
parent
91dfad4a97
commit
5b60394a3a
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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<? extends PublicIpAddress> 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<? extends PublicIpAddress> getIpAddresses() {
|
||||
return ipAddresses;
|
||||
}
|
||||
|
||||
public Commands getCommands() {
|
||||
return commands;
|
||||
}
|
||||
|
||||
public void createAssociateIPCommands(final VirtualRouter router, final List<? extends PublicIpAddress> 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<String, ArrayList<PublicIpAddress>> vlanIpMap = new HashMap<String, ArrayList<PublicIpAddress>>();
|
||||
for (final PublicIpAddress ipAddress : ipAddresses) {
|
||||
for (final PublicIpAddress ipAddress : ips) {
|
||||
final String vlanTag = ipAddress.getVlanTag();
|
||||
ArrayList<PublicIpAddress> ipList = vlanIpMap.get(vlanTag);
|
||||
if (ipList == null) {
|
||||
|
|
@ -92,10 +86,10 @@ public class IpAssociationRules extends RuleApplier {
|
|||
vlanIpMap.put(vlanTag, ipList);
|
||||
}
|
||||
|
||||
final List<NicVO> nics = _nicDao.listByVmId(router.getId());
|
||||
final List<NicVO> 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<? extends PublicIpAddress> getIpAddresses() {
|
||||
return ipAddresses;
|
||||
}
|
||||
|
||||
public Commands getCommands() {
|
||||
return commands;
|
||||
}
|
||||
}
|
||||
|
|
@ -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<? extends PublicIpAddress> ipAddresses) {
|
||||
IpAssociationRules ipAssociationRules = new IpAssociationRules(network, ipAddresses);
|
||||
|
||||
initBeans(ipAssociationRules);
|
||||
|
||||
return ipAssociationRules;
|
||||
}
|
||||
|
||||
public VpnRules createVpnRules(final Network network, final List<? extends VpnUser> users) {
|
||||
VpnRules vpnRules = new VpnRules(network, users);
|
||||
|
||||
initBeans(vpnRules);
|
||||
|
||||
return vpnRules;
|
||||
}
|
||||
}
|
||||
|
|
@ -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<? extends NetworkACLItem> rules;
|
||||
private final List<? extends VpnUser> users;
|
||||
|
||||
public VpnRules(final Network network, final List<? extends NetworkACLItem> rules) {
|
||||
public VpnRules(final Network network, final List<? extends VpnUser> 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<? extends NetworkACLItem> getRules() {
|
||||
return rules;
|
||||
public void createApplyVpnUsersCommand(final List<? extends VpnUser> users, final VirtualRouter router, final Commands cmds) {
|
||||
final List<VpnUser> addUsers = new ArrayList<VpnUser>();
|
||||
final List<VpnUser> removeUsers = new ArrayList<VpnUser>();
|
||||
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<? extends VpnUser> getUsers() {
|
||||
return users;
|
||||
}
|
||||
}
|
||||
|
|
@ -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<? extends PublicIpAddress> 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<? extends VpnUser> 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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<LoadBalancingRule> rules, final List<? extends VirtualRouter> 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<RuleApplier>(loadBalancingRules));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applyFirewallRules(final Network network, final List<? extends FirewallRule> rules, final List<? extends VirtualRouter> 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<RuleApplier>(firewallRules));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applyStaticNats(final Network network, final List<? extends StaticNat> rules, final List<? extends VirtualRouter> 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<RuleApplier>(natRules));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean associatePublicIP(final Network network, final List<? extends PublicIpAddress> ipAddress, final List<? extends VirtualRouter> 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<RuleApplier>(ipAddresses));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] applyVpnUsers(final Network network, final List<? extends VpnUser> users, final List<DomainRouterVO> 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<? extends VirtualRouter> routers, final String typeString, final boolean isPodLevelException, final Long podId,
|
||||
final boolean failWhenDisconnect, final RuleApplierWrapper<RuleApplier> ruleApplierWrapper) throws ResourceUnavailableException {
|
||||
|
|
@ -199,64 +329,4 @@ public class BasicNetworkTopology implements NetworkTopology {
|
|||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applyLoadBalancingRules(final Network network, final List<LoadBalancingRule> rules, final List<? extends VirtualRouter> 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<RuleApplier>(loadBalancingRules));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applyFirewallRules(final Network network, final List<? extends FirewallRule> rules, final List<? extends VirtualRouter> 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<RuleApplier>(firewallRules));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applyStaticNats(final Network network, final List<? extends StaticNat> rules, final List<? extends VirtualRouter> 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<RuleApplier>(natRules));
|
||||
}
|
||||
}
|
||||
|
|
@ -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<? extends VirtualRouter> routers, final String typeString, final boolean isPodLevelException, final Long podId,
|
||||
final boolean failWhenDisconnect, RuleApplierWrapper<RuleApplier> ruleApplier) throws ResourceUnavailableException;
|
||||
|
||||
// ====== USER FOR GUEST NETWORK ====== //
|
||||
|
||||
boolean applyLoadBalancingRules(Network network, List<LoadBalancingRule> rules, List<? extends VirtualRouter> routers) throws ResourceUnavailableException;
|
||||
|
||||
boolean applyFirewallRules(final Network network, final List<? extends FirewallRule> rules, final List<? extends VirtualRouter> routers) throws ResourceUnavailableException;
|
||||
|
||||
boolean applyStaticNats(final Network network, final List<? extends StaticNat> rules, final List<? extends VirtualRouter> routers) throws ResourceUnavailableException;
|
||||
|
||||
boolean associatePublicIP(final Network network, final List<? extends PublicIpAddress> ipAddress, final List<? extends VirtualRouter> routers) throws ResourceUnavailableException;
|
||||
|
||||
String[] applyVpnUsers(final Network network, final List<? extends VpnUser> users, final List<DomainRouterVO> routers) throws ResourceUnavailableException;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
Loading…
Reference in New Issue