mirror of https://github.com/apache/cloudstack.git
fixing the classes relationship; adding beans properly in the spring context; using the right basic/advance stuff; testing ip and port forwarding rules
Conflicts: server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java server/src/org/apache/cloudstack/network/topology/BasicNetworkVisitor.java
This commit is contained in:
parent
3d16a407c9
commit
514beef30e
|
|
@ -197,6 +197,9 @@
|
|||
<bean id="basicNetworkTopology" class="org.apache.cloudstack.network.topology.BasicNetworkTopology" />
|
||||
<bean id="advancedNetworkTopology" class="org.apache.cloudstack.network.topology.AdvancedNetworkTopology" />
|
||||
|
||||
<bean id="basicNetworkVisitor" class="org.apache.cloudstack.network.topology.BasicNetworkVisitor" />
|
||||
<bean id="advancedNetworkVisitor" class="org.apache.cloudstack.network.topology.AdvancedNetworkVisitor" />
|
||||
|
||||
<bean id="routerControlHelper"
|
||||
class="com.cloud.network.router.RouterControlHelper" />
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,8 @@ public class VirtualNetworkApplianceFactory {
|
|||
|
||||
initBeans(ipAssociationRules);
|
||||
|
||||
ipAssociationRules.networkDao = networkDao;
|
||||
|
||||
return ipAssociationRules;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,16 +17,13 @@
|
|||
|
||||
package org.apache.cloudstack.network.topology;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
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;
|
||||
|
|
@ -48,7 +45,8 @@ import com.cloud.network.rules.UserdataToRouterRules;
|
|||
import com.cloud.network.rules.VpcIpAssociationRules;
|
||||
import com.cloud.network.rules.VpnRules;
|
||||
|
||||
public class AdvancedNetworkVisitor extends NetworkTopologyVisitor {
|
||||
@Component
|
||||
public class AdvancedNetworkVisitor extends BasicNetworkVisitor {
|
||||
|
||||
private static final Logger s_logger = Logger.getLogger(AdvancedNetworkVisitor.class);
|
||||
|
||||
|
|
@ -174,17 +172,6 @@ public class AdvancedNetworkVisitor extends NetworkTopologyVisitor {
|
|||
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;
|
||||
|
|
|
|||
|
|
@ -24,6 +24,8 @@ import java.util.Map;
|
|||
import javax.inject.Inject;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
|
||||
import com.cloud.dc.DataCenter;
|
||||
import com.cloud.dc.DataCenter.NetworkType;
|
||||
|
|
@ -34,6 +36,7 @@ import com.cloud.exception.AgentUnavailableException;
|
|||
import com.cloud.exception.ConcurrentOperationException;
|
||||
import com.cloud.exception.InsufficientCapacityException;
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.host.Status;
|
||||
import com.cloud.host.dao.HostDao;
|
||||
import com.cloud.network.Network;
|
||||
import com.cloud.network.PublicIpAddress;
|
||||
|
|
@ -64,6 +67,14 @@ public class BasicNetworkTopology implements NetworkTopology {
|
|||
@Inject
|
||||
protected VirtualNetworkApplianceFactory virtualNetworkApplianceFactory;
|
||||
|
||||
@Autowired
|
||||
@Qualifier("basicNetworkVisitor")
|
||||
protected BasicNetworkVisitor basicVisitor;
|
||||
|
||||
@Autowired
|
||||
@Qualifier("advancedNetworkVisitor")
|
||||
protected AdvancedNetworkVisitor advancedVisitor;
|
||||
|
||||
@Inject
|
||||
protected DataCenterDao _dcDao;
|
||||
|
||||
|
|
@ -198,9 +209,6 @@ public class BasicNetworkTopology implements NetworkTopology {
|
|||
|
||||
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) {
|
||||
|
|
@ -212,14 +220,10 @@ public class BasicNetworkTopology implements NetworkTopology {
|
|||
|
||||
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);
|
||||
final boolean agentResult = vpnRules.accept(basicVisitor, router);
|
||||
agentResults = agentResults && agentResult;
|
||||
}
|
||||
|
||||
|
|
@ -244,14 +248,8 @@ public class BasicNetworkTopology implements NetworkTopology {
|
|||
throw new ResourceUnavailableException("Unable to apply " + typeString, DataCenter.class, network.getDataCenterId());
|
||||
}
|
||||
|
||||
// should become a BasicNetworkVisitor in the end
|
||||
AdvancedNetworkVisitor visitor = new AdvancedNetworkVisitor();
|
||||
|
||||
RuleApplier ruleApplier = ruleApplierWrapper.getRuleType();
|
||||
|
||||
// [FIXME] REMOVE THIS SHIT AND INJECT USING A FACTORY FOR THE VISITORS
|
||||
visitor.setApplianceManager(ruleApplier.getApplianceManager());
|
||||
|
||||
final DataCenter dc = _dcDao.findById(network.getDataCenterId());
|
||||
final boolean isZoneBasic = dc.getNetworkType() == NetworkType.Basic;
|
||||
|
||||
|
|
@ -276,7 +274,7 @@ public class BasicNetworkTopology implements NetworkTopology {
|
|||
}
|
||||
|
||||
try {
|
||||
ruleApplier.accept(visitor, router);
|
||||
ruleApplier.accept(basicVisitor, router);
|
||||
|
||||
connectedRouters.add(router);
|
||||
} catch (final AgentUnavailableException e) {
|
||||
|
|
|
|||
|
|
@ -17,47 +17,127 @@
|
|||
|
||||
package org.apache.cloudstack.network.topology;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
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;
|
||||
import com.cloud.network.rules.FirewallRule;
|
||||
import com.cloud.network.rules.FirewallRule.Purpose;
|
||||
import com.cloud.network.rules.FirewallRules;
|
||||
import com.cloud.network.rules.IpAssociationRules;
|
||||
import com.cloud.network.rules.LoadBalancingRules;
|
||||
import com.cloud.network.rules.NetworkAclsRules;
|
||||
import com.cloud.network.rules.PasswordToRouterRules;
|
||||
import com.cloud.network.rules.PortForwardingRule;
|
||||
import com.cloud.network.rules.PrivateGatewayRules;
|
||||
import com.cloud.network.rules.SshKeyToRouterRules;
|
||||
import com.cloud.network.rules.StaticNat;
|
||||
import com.cloud.network.rules.StaticNatRule;
|
||||
import com.cloud.network.rules.StaticNatRules;
|
||||
import com.cloud.network.rules.UserdataPwdRules;
|
||||
import com.cloud.network.rules.UserdataToRouterRules;
|
||||
import com.cloud.network.rules.VpcIpAssociationRules;
|
||||
import com.cloud.network.rules.VpnRules;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
|
||||
@Component
|
||||
public class BasicNetworkVisitor extends NetworkTopologyVisitor {
|
||||
|
||||
private static final Logger s_logger = Logger.getLogger(BasicNetworkVisitor.class);
|
||||
|
||||
public BasicNetworkVisitor(final NetworkTopology networkTopology) {
|
||||
super(networkTopology);
|
||||
}
|
||||
|
||||
@Inject
|
||||
protected NEWVirtualNetworkApplianceManager applianceManager;
|
||||
|
||||
@Override
|
||||
public boolean visit(final StaticNatRules nat) throws ResourceUnavailableException {
|
||||
Network network = nat.getNetwork();
|
||||
VirtualRouter router = nat.getRouter();
|
||||
List<? extends StaticNat> rules = nat.getRules();
|
||||
|
||||
final Commands cmds = new Commands(Command.OnError.Continue);
|
||||
nat.createApplyStaticNatCommands(rules, router, cmds, network.getId());
|
||||
|
||||
return applianceManager.sendCommandsToRouter(router, cmds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(final LoadBalancingRules loadbalancing) throws ResourceUnavailableException {
|
||||
Network network = loadbalancing.getNetwork();
|
||||
VirtualRouter router = loadbalancing.getRouter();
|
||||
List<LoadBalancingRule> rules = loadbalancing.getRules();
|
||||
|
||||
final Commands cmds = new Commands(Command.OnError.Continue);
|
||||
loadbalancing.createApplyLoadBalancingRulesCommands(rules, router, cmds, network.getId());
|
||||
|
||||
return applianceManager.sendCommandsToRouter(router, cmds);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public boolean visit(final FirewallRules firewall) throws ResourceUnavailableException {
|
||||
Network network = firewall.getNetwork();
|
||||
VirtualRouter router = firewall.getRouter();
|
||||
List<? extends FirewallRule> rules = firewall.getRules();
|
||||
List<LoadBalancingRule> loadbalancingRules = firewall.getLoadbalancingRules();
|
||||
|
||||
Purpose purpose = firewall.getPurpose();
|
||||
|
||||
final Commands cmds = new Commands(Command.OnError.Continue);
|
||||
if (purpose == Purpose.LoadBalancing) {
|
||||
|
||||
firewall.createApplyLoadBalancingRulesCommands(loadbalancingRules, router, cmds, network.getId());
|
||||
|
||||
return applianceManager.sendCommandsToRouter(router, cmds);
|
||||
|
||||
} else if (purpose == Purpose.PortForwarding) {
|
||||
|
||||
firewall.createApplyPortForwardingRulesCommands((List<? extends PortForwardingRule>) rules, router, cmds, network.getId());
|
||||
|
||||
return applianceManager.sendCommandsToRouter(router, cmds);
|
||||
|
||||
} else if (purpose == Purpose.StaticNat) {
|
||||
|
||||
firewall.createApplyStaticNatRulesCommands((List<StaticNatRule>) rules, router, cmds, network.getId());
|
||||
|
||||
return applianceManager.sendCommandsToRouter(router, cmds);
|
||||
|
||||
} else if (purpose == Purpose.Firewall) {
|
||||
|
||||
firewall.createApplyFirewallRulesCommands(rules, router, cmds, network.getId());
|
||||
|
||||
return applianceManager.sendCommandsToRouter(router, cmds);
|
||||
|
||||
}
|
||||
s_logger.warn("Unable to apply rules of purpose: " + rules.get(0).getPurpose());
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(final LoadBalancingRules nat) throws ResourceUnavailableException {
|
||||
return false;
|
||||
}
|
||||
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();
|
||||
|
||||
@Override
|
||||
public boolean visit(final FirewallRules nat) throws ResourceUnavailableException {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(final IpAssociationRules nat) throws ResourceUnavailableException {
|
||||
return false;
|
||||
ipRules.createAssociateIPCommands(router, ips, commands, network.getId());
|
||||
return applianceManager.sendCommandsToRouter(router, commands);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -82,12 +162,12 @@ public class BasicNetworkVisitor extends NetworkTopologyVisitor {
|
|||
|
||||
@Override
|
||||
public boolean visit(final NetworkAclsRules nat) throws ResourceUnavailableException {
|
||||
return false;
|
||||
throw new CloudRuntimeException("NetworkAclsRules not implemented in Basic Network Topology.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(final VpcIpAssociationRules nat) throws ResourceUnavailableException {
|
||||
return false;
|
||||
throw new CloudRuntimeException("VpcIpAssociationRules not implemented in Basic Network Topology.");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -95,17 +175,33 @@ public class BasicNetworkVisitor extends NetworkTopologyVisitor {
|
|||
Network network = userdata.getNetwork();
|
||||
VirtualRouter router = userdata.getRouter();
|
||||
|
||||
//return sendCommandsToRouter(router, cmds);
|
||||
// return sendCommandsToRouter(router, cmds);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(PrivateGatewayRules userdata) throws ResourceUnavailableException {
|
||||
public boolean visit(final PrivateGatewayRules userdata) throws ResourceUnavailableException {
|
||||
throw new CloudRuntimeException("PrivateGatewayRules not implemented in Basic Network Topology.");
|
||||
}
|
||||
|
||||
@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;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(VpnRules userdata) throws ResourceUnavailableException {
|
||||
public boolean visit(final VpnRules userdata) throws ResourceUnavailableException {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue