You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by re...@apache.org on 2015/12/07 21:42:25 UTC
[02/10] git commit: updated refs/heads/master to e08294a
CLOUDSTACK-9106 - Reduces the amount of iterations through the routers of a VPC
- It was causing problems because Nics were expected to be plugged before they actually exist. Only in rVPC cases.
- Applies ACL items to routers only after the Pvt GW is setup.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/a168a69c
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/a168a69c
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/a168a69c
Branch: refs/heads/master
Commit: a168a69c3cdf023a296ad9a8793e3ab4d7e47cee
Parents: 9ce1334
Author: Wilder Rodrigues <wr...@schubergphilis.com>
Authored: Fri Dec 4 18:41:03 2015 +0100
Committer: Wilder Rodrigues <wr...@schubergphilis.com>
Committed: Mon Dec 7 10:30:17 2015 +0100
----------------------------------------------------------------------
.../com/cloud/network/element/OvsElement.java | 134 ++++++++++---------
.../network/element/VirtualRouterElement.java | 106 +++++++++------
.../element/VpcVirtualRouterElement.java | 63 +++++----
.../topology/AdvancedNetworkTopology.java | 22 ++-
.../network/topology/BasicNetworkTopology.java | 110 ++++++++-------
.../network/topology/NetworkTopology.java | 22 +--
6 files changed, 245 insertions(+), 212 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a168a69c/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java b/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java
index 5ce4d93..ddf8833 100644
--- a/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java
+++ b/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java
@@ -210,7 +210,7 @@ StaticNatServiceProvider, IpDeployer {
return false;
}
- HostVO host = _hostDao.findById(vm.getVirtualMachine().getHostId());
+ final HostVO host = _hostDao.findById(vm.getVirtualMachine().getHostId());
_ovsTunnelMgr.checkAndRemoveHostFromTunnelNetwork(network, host);
return true;
}
@@ -262,10 +262,10 @@ StaticNatServiceProvider, IpDeployer {
}
private static Map<Service, Map<Capability, String>> setCapabilities() {
- Map<Service, Map<Capability, String>> capabilities = new HashMap<Service, Map<Capability, String>>();
+ final Map<Service, Map<Capability, String>> capabilities = new HashMap<Service, Map<Capability, String>>();
// L2 Support : SDN provisioning
- Map<Capability, String> connectivityCapabilities = new HashMap<Capability, String>();
+ final Map<Capability, String> connectivityCapabilities = new HashMap<Capability, String>();
connectivityCapabilities.put(Capability.DistributedRouter, null);
connectivityCapabilities.put(Capability.StretchedL2Subnet, null);
connectivityCapabilities.put(Capability.RegionLevelVpc, null);
@@ -280,7 +280,7 @@ StaticNatServiceProvider, IpDeployer {
// L3 support : Load Balancer
// Set capabilities for LB service
- Map<Capability, String> lbCapabilities = new HashMap<Capability, String>();
+ final Map<Capability, String> lbCapabilities = new HashMap<Capability, String>();
lbCapabilities.put(Capability.SupportedLBAlgorithms, "roundrobin,leastconn,source");
lbCapabilities.put(Capability.SupportedLBIsolation, "dedicated");
lbCapabilities.put(Capability.SupportedProtocols, "tcp, udp");
@@ -294,7 +294,7 @@ StaticNatServiceProvider, IpDeployer {
public static String getHAProxyStickinessCapability() {
LbStickinessMethod method;
- List<LbStickinessMethod> methodList = new ArrayList<LbStickinessMethod>(1);
+ final List<LbStickinessMethod> methodList = new ArrayList<LbStickinessMethod>(1);
method = new LbStickinessMethod(StickinessMethodType.LBCookieBased, "This is loadbalancer cookie based stickiness method.");
method.addParam("cookie-name", false, "Cookie name passed in http header by the LB to the client.", false);
@@ -385,14 +385,14 @@ StaticNatServiceProvider, IpDeployer {
" example: expire=30m 20s 50h 4d. Default value:3h", false);
methodList.add(method);
- Gson gson = new Gson();
- String capability = gson.toJson(methodList);
+ final Gson gson = new Gson();
+ final String capability = gson.toJson(methodList);
return capability;
}
@Override
public List<Class<?>> getCommands() {
- List<Class<?>> cmdList = new ArrayList<Class<?>>();
+ final List<Class<?>> cmdList = new ArrayList<Class<?>>();
return cmdList;
}
@@ -432,15 +432,16 @@ StaticNatServiceProvider, IpDeployer {
final List<? extends PublicIpAddress> ipAddress, final Set<Service> services)
throws ResourceUnavailableException {
boolean canHandle = true;
- for (Service service : services) {
+ for (final Service service : services) {
// check if Ovs can handle services except SourceNat & Firewall
if (!canHandle(network, service) && service != Service.SourceNat && service != Service.Firewall) {
canHandle = false;
break;
}
}
+ boolean result = false;
if (canHandle) {
- List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(
+ final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(
network.getId(), Role.VIRTUAL_ROUTER);
if (routers == null || routers.isEmpty()) {
s_logger.debug("Virtual router element doesn't need to associate ip addresses on the backend; virtual "
@@ -449,13 +450,14 @@ StaticNatServiceProvider, IpDeployer {
return true;
}
- DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
- NetworkTopology networkTopology = _networkTopologyContext.retrieveNetworkTopology(dcVO);
+ final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
+ final NetworkTopology networkTopology = _networkTopologyContext.retrieveNetworkTopology(dcVO);
- return networkTopology.associatePublicIP(network, ipAddress, routers);
- } else {
- return false;
+ for (final DomainRouterVO domainRouterVO : routers) {
+ result = networkTopology.associatePublicIP(network, ipAddress, domainRouterVO);
+ }
}
+ return result;
}
@Override
@@ -464,7 +466,7 @@ StaticNatServiceProvider, IpDeployer {
if (!canHandle(network, Service.StaticNat)) {
return false;
}
- List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(
+ final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(
network.getId(), Role.VIRTUAL_ROUTER);
if (routers == null || routers.isEmpty()) {
s_logger.debug("Ovs element doesn't need to apply static nat on the backend; virtual "
@@ -472,19 +474,23 @@ StaticNatServiceProvider, IpDeployer {
return true;
}
- DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
- NetworkTopology networkTopology = _networkTopologyContext.retrieveNetworkTopology(dcVO);
-
- return networkTopology.applyStaticNats(network, rules, routers);
+ final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
+ final NetworkTopology networkTopology = _networkTopologyContext.retrieveNetworkTopology(dcVO);
+ boolean result = false;
+ for (final DomainRouterVO domainRouterVO : routers) {
+ result = networkTopology.applyStaticNats(network, rules, domainRouterVO);
+ }
+ return result;
}
@Override
public boolean applyPFRules(final Network network, final List<PortForwardingRule> rules)
throws ResourceUnavailableException {
+ boolean result = false;
if (!canHandle(network, Service.PortForwarding)) {
- return false;
+ return result;
}
- List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(
+ final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(
network.getId(), Role.VIRTUAL_ROUTER);
if (routers == null || routers.isEmpty()) {
s_logger.debug("Ovs element doesn't need to apply firewall rules on the backend; virtual "
@@ -492,50 +498,54 @@ StaticNatServiceProvider, IpDeployer {
return true;
}
- DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
- NetworkTopology networkTopology = _networkTopologyContext.retrieveNetworkTopology(dcVO);
-
- return networkTopology.applyFirewallRules(network, rules, routers);
+ final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
+ final NetworkTopology networkTopology = _networkTopologyContext.retrieveNetworkTopology(dcVO);
+ for (final DomainRouterVO domainRouterVO : routers) {
+ result = networkTopology.applyFirewallRules(network, rules, domainRouterVO);
+ }
+ return result;
}
@Override
public boolean applyLBRules(final Network network, final List<LoadBalancingRule> rules)
throws ResourceUnavailableException {
+ boolean result = false;
if (canHandle(network, Service.Lb)) {
if (!canHandleLbRules(rules)) {
- return false;
+ return result;
}
- List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(
+ final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(
network.getId(), Role.VIRTUAL_ROUTER);
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 "
+ network.getId());
- return true;
+ result = true;
+ return result;
}
- DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
- NetworkTopology networkTopology = _networkTopologyContext.retrieveNetworkTopology(dcVO);
+ final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
+ final NetworkTopology networkTopology = _networkTopologyContext.retrieveNetworkTopology(dcVO);
- if (!networkTopology.applyLoadBalancingRules(network, rules, routers)) {
- throw new CloudRuntimeException(
- "Failed to apply load balancing rules in network "
- + network.getId());
- } else {
- return true;
+ for (final DomainRouterVO domainRouterVO : routers) {
+ result = networkTopology.applyLoadBalancingRules(network, rules, domainRouterVO);
+ if (!result) {
+ throw new CloudRuntimeException(
+ "Failed to apply load balancing rules in network "
+ + network.getId());
+ }
}
- } else {
- return false;
}
+ return result;
}
@Override
public boolean validateLBRule(final Network network, final LoadBalancingRule rule) {
- List<LoadBalancingRule> rules = new ArrayList<LoadBalancingRule>();
+ final List<LoadBalancingRule> rules = new ArrayList<LoadBalancingRule>();
rules.add(rule);
if (canHandle(network, Service.Lb) && canHandleLbRules(rules)) {
- List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(
+ final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(
network.getId(), Role.VIRTUAL_ROUTER);
if (routers == null || routers.isEmpty()) {
return true;
@@ -553,11 +563,11 @@ StaticNatServiceProvider, IpDeployer {
}
private boolean canHandleLbRules(final List<LoadBalancingRule> rules) {
- Map<Capability, String> lbCaps = getCapabilities().get(Service.Lb);
+ final Map<Capability, String> lbCaps = getCapabilities().get(Service.Lb);
if (!lbCaps.isEmpty()) {
- String schemeCaps = lbCaps.get(Capability.LbSchemes);
+ final String schemeCaps = lbCaps.get(Capability.LbSchemes);
if (schemeCaps != null) {
- for (LoadBalancingRule rule : rules) {
+ for (final LoadBalancingRule rule : rules) {
if (!schemeCaps.contains(rule.getScheme().toString())) {
s_logger.debug("Scheme " + rules.get(0).getScheme()
+ " is not supported by the provider "
@@ -571,10 +581,10 @@ StaticNatServiceProvider, IpDeployer {
}
public static boolean validateHAProxyLBRule(final LoadBalancingRule rule) {
- String timeEndChar = "dhms";
+ final String timeEndChar = "dhms";
- for (LbStickinessPolicy stickinessPolicy : rule.getStickinessPolicies()) {
- List<Pair<String, String>> paramsList = stickinessPolicy
+ for (final LbStickinessPolicy stickinessPolicy : rule.getStickinessPolicies()) {
+ final List<Pair<String, String>> paramsList = stickinessPolicy
.getParams();
if (StickinessMethodType.LBCookieBased.getName().equalsIgnoreCase(
@@ -586,9 +596,9 @@ StaticNatServiceProvider, IpDeployer {
String expire = "30m"; // optional
/* overwrite default values with the stick parameters */
- for (Pair<String, String> paramKV : paramsList) {
- String key = paramKV.first();
- String value = paramKV.second();
+ for (final Pair<String, String> paramKV : paramsList) {
+ final String key = paramKV.first();
+ final String value = paramKV.second();
if ("tablesize".equalsIgnoreCase(key)) {
tablesize = value;
}
@@ -596,14 +606,14 @@ StaticNatServiceProvider, IpDeployer {
expire = value;
}
}
- if ((expire != null)
+ if (expire != null
&& !containsOnlyNumbers(expire, timeEndChar)) {
throw new InvalidParameterValueException(
"Failed LB in validation rule id: " + rule.getId()
+ " Cause: expire is not in timeformat: "
+ expire);
}
- if ((tablesize != null)
+ if (tablesize != null
&& !containsOnlyNumbers(tablesize, "kmg")) {
throw new InvalidParameterValueException(
"Failed LB in validation rule id: "
@@ -617,9 +627,9 @@ StaticNatServiceProvider, IpDeployer {
String length = null; // optional
String holdTime = null; // optional
- for (Pair<String, String> paramKV : paramsList) {
- String key = paramKV.first();
- String value = paramKV.second();
+ for (final Pair<String, String> paramKV : paramsList) {
+ final String key = paramKV.first();
+ final String value = paramKV.second();
if ("length".equalsIgnoreCase(key)) {
length = value;
}
@@ -628,15 +638,15 @@ StaticNatServiceProvider, IpDeployer {
}
}
- if ((length != null) && (!containsOnlyNumbers(length, null))) {
+ if (length != null && !containsOnlyNumbers(length, null)) {
throw new InvalidParameterValueException(
"Failed LB in validation rule id: " + rule.getId()
+ " Cause: length is not a number: "
+ length);
}
- if ((holdTime != null)
- && (!containsOnlyNumbers(holdTime, timeEndChar) && !containsOnlyNumbers(
- holdTime, null))) {
+ if (holdTime != null
+ && !containsOnlyNumbers(holdTime, timeEndChar) && !containsOnlyNumbers(
+ holdTime, null)) {
throw new InvalidParameterValueException(
"Failed LB in validation rule id: " + rule.getId()
+ " Cause: holdtime is not in timeformat: "
@@ -665,8 +675,8 @@ StaticNatServiceProvider, IpDeployer {
return false; // atleast one numeric and one char. example:
}
// 3h
- char strEnd = str.toCharArray()[str.length() - 1];
- for (char c : endChar.toCharArray()) {
+ final char strEnd = str.toCharArray()[str.length() - 1];
+ for (final char c : endChar.toCharArray()) {
if (strEnd == c) {
number = str.substring(0, str.length() - 1);
matchedEndChar = true;
@@ -679,7 +689,7 @@ StaticNatServiceProvider, IpDeployer {
}
try {
Integer.parseInt(number);
- } catch (NumberFormatException e) {
+ } catch (final NumberFormatException e) {
return false;
}
return true;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a168a69c/server/src/com/cloud/network/element/VirtualRouterElement.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java
index 2a1dd40..9f50256 100644
--- a/server/src/com/cloud/network/element/VirtualRouterElement.java
+++ b/server/src/com/cloud/network/element/VirtualRouterElement.java
@@ -262,6 +262,7 @@ NetworkMigrationResponder, AggregatedCommandExecutor {
@Override
public boolean applyFWRules(final Network network, final List<? extends FirewallRule> rules) throws ResourceUnavailableException {
+ boolean result = true;
if (canHandle(network, Service.Firewall)) {
final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
if (routers == null || routers.isEmpty()) {
@@ -281,14 +282,14 @@ NetworkMigrationResponder, AggregatedCommandExecutor {
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final 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;
+ for (final DomainRouterVO domainRouterVO : routers) {
+ result = networkTopology.applyFirewallRules(network, rules, domainRouterVO);
+ if (!result) {
+ throw new CloudRuntimeException("Failed to apply firewall rules in network " + network.getId());
+ }
}
- } else {
- return true;
}
+ return result;
}
/*
@@ -405,6 +406,7 @@ NetworkMigrationResponder, AggregatedCommandExecutor {
@Override
public boolean applyLBRules(final Network network, final List<LoadBalancingRule> rules) throws ResourceUnavailableException {
+ boolean result = false;
if (canHandle(network, Service.Lb)) {
if (!canHandleLbRules(rules)) {
return false;
@@ -419,14 +421,14 @@ NetworkMigrationResponder, AggregatedCommandExecutor {
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
- if (!networkTopology.applyLoadBalancingRules(network, rules, routers)) {
- throw new CloudRuntimeException("Failed to apply load balancing rules in network " + network.getId());
- } else {
- return true;
+ for (final DomainRouterVO domainRouterVO : routers) {
+ result = networkTopology.applyLoadBalancingRules(network, rules, domainRouterVO);
+ if (!result) {
+ throw new CloudRuntimeException("Failed to apply load balancing rules in network " + network.getId());
+ }
}
- } else {
- return false;
}
+ return result;
}
@Override
@@ -495,6 +497,7 @@ NetworkMigrationResponder, AggregatedCommandExecutor {
@Override
public boolean applyIps(final Network network, final List<? extends PublicIpAddress> ipAddress, final Set<Service> services) throws ResourceUnavailableException {
+ boolean result = false;
boolean canHandle = true;
for (final Service service : services) {
if (!canHandle(network, service)) {
@@ -512,10 +515,11 @@ NetworkMigrationResponder, AggregatedCommandExecutor {
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
- return networkTopology.associatePublicIP(network, ipAddress, routers);
- } else {
- return false;
+ for (final DomainRouterVO domainRouterVO : routers) {
+ result = networkTopology.associatePublicIP(network, ipAddress, domainRouterVO);
+ }
}
+ return result;
}
@Override
@@ -659,20 +663,22 @@ NetworkMigrationResponder, AggregatedCommandExecutor {
@Override
public boolean applyStaticNats(final Network network, final List<? extends StaticNat> rules) throws ResourceUnavailableException {
+ boolean result = true;
if (canHandle(network, Service.StaticNat)) {
final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
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 " + network.getId());
- return true;
+ return result;
}
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
- return networkTopology.applyStaticNats(network, rules, routers);
- } else {
- return true;
+ for (final DomainRouterVO domainRouterVO : routers) {
+ result = networkTopology.applyStaticNats(network, rules, domainRouterVO);
+ }
}
+ return result;
}
@Override
@@ -735,7 +741,7 @@ NetworkMigrationResponder, AggregatedCommandExecutor {
// save the password in DB
for (final VirtualRouter router : routers) {
if (router.getState() == State.Running) {
- return networkTopology.savePasswordToRouter(network, nic, uservm, routers);
+ return networkTopology.savePasswordToRouter(network, nic, uservm, router);
}
}
final String password = (String) uservm.getParameter(VirtualMachineProfile.Param.VmPassword);
@@ -754,13 +760,15 @@ NetworkMigrationResponder, AggregatedCommandExecutor {
@Override
public boolean saveSSHKey(final Network network, final NicProfile nic, final VirtualMachineProfile vm, final String sshPublicKey) throws ResourceUnavailableException {
+ boolean result = false;
if (!canHandle(network, null)) {
- return false;
+ return result;
}
final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
if (routers == null || routers.isEmpty()) {
s_logger.debug("Can't find virtual router element in network " + network.getId());
- return true;
+ result = true;
+ return result;
}
final VirtualMachineProfile uservm = vm;
@@ -768,18 +776,23 @@ NetworkMigrationResponder, AggregatedCommandExecutor {
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
- return networkTopology.saveSSHPublicKeyToRouter(network, nic, uservm, routers, sshPublicKey);
+ for (final DomainRouterVO domainRouterVO : routers) {
+ result = networkTopology.saveSSHPublicKeyToRouter(network, nic, uservm, domainRouterVO, sshPublicKey);
+ }
+ return result;
}
@Override
public boolean saveUserData(final Network network, final NicProfile nic, final VirtualMachineProfile vm) throws ResourceUnavailableException {
+ boolean result = false;
if (!canHandle(network, null)) {
- return false;
+ return result;
}
final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
if (routers == null || routers.isEmpty()) {
s_logger.debug("Can't find virtual router element in network " + network.getId());
- return true;
+ result = true;
+ return result;
}
final VirtualMachineProfile uservm = vm;
@@ -787,7 +800,10 @@ NetworkMigrationResponder, AggregatedCommandExecutor {
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
- return networkTopology.saveUserDataToRouter(network, nic, uservm, routers);
+ for (final DomainRouterVO domainRouterVO : routers) {
+ result = networkTopology.saveUserDataToRouter(network, nic, uservm, domainRouterVO);
+ }
+ return result;
}
@Override
@@ -844,24 +860,26 @@ NetworkMigrationResponder, AggregatedCommandExecutor {
@Override
public boolean applyPFRules(final Network network, final List<PortForwardingRule> rules) throws ResourceUnavailableException {
+ boolean result = false;
if (canHandle(network, Service.PortForwarding)) {
final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
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 " + network.getId());
- return true;
+ result = true;
+ return result;
}
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final 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;
+ for (final DomainRouterVO domainRouterVO : routers) {
+ result = networkTopology.applyFirewallRules(network, rules, domainRouterVO);
+ if (!result) {
+ throw new CloudRuntimeException("Failed to apply firewall rules in network " + network.getId());
+ }
}
- } else {
- return true;
}
+ return result;
}
@Override
@@ -960,13 +978,13 @@ NetworkMigrationResponder, AggregatedCommandExecutor {
@Override
public boolean addDhcpEntry(final Network network, final NicProfile nic, final VirtualMachineProfile vm, final DeployDestination dest, final ReservationContext context)
throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException {
+ boolean result = false;
if (canHandle(network, Service.Dhcp)) {
if (vm.getType() != VirtualMachine.Type.User) {
- return false;
+ return result;
}
final VirtualMachineProfile uservm = vm;
-
final List<DomainRouterVO> routers = getRouters(network, dest);
if (routers == null || routers.size() == 0) {
@@ -976,22 +994,26 @@ NetworkMigrationResponder, AggregatedCommandExecutor {
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
- return networkTopology.applyDhcpEntry(network, nic, uservm, dest, routers);
+ for (final DomainRouterVO domainRouterVO : routers) {
+ result = networkTopology.applyDhcpEntry(network, nic, uservm, dest, domainRouterVO);
+ }
}
- return false;
+ return result;
}
@Override
public boolean addPasswordAndUserdata(final Network network, final NicProfile nic, final VirtualMachineProfile vm, final DeployDestination dest,
final ReservationContext context) throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException {
+ boolean result = false;
if (canHandle(network, Service.UserData)) {
if (vm.getType() != VirtualMachine.Type.User) {
- return false;
+ return result;
}
if (network.getIp6Gateway() != null) {
s_logger.info("Skip password and userdata service setup for IPv6 VM");
- return true;
+ result = true;
+ return result;
}
final VirtualMachineProfile uservm = vm;
@@ -1005,9 +1027,11 @@ NetworkMigrationResponder, AggregatedCommandExecutor {
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
- return networkTopology.applyUserData(network, nic, uservm, dest, routers);
+ for (final DomainRouterVO domainRouterVO : routers) {
+ result = networkTopology.applyUserData(network, nic, uservm, dest, domainRouterVO);
+ }
}
- return false;
+ return result;
}
protected List<DomainRouterVO> getRouters(final Network network, final DeployDestination dest) {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a168a69c/server/src/com/cloud/network/element/VpcVirtualRouterElement.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java
index 078eab3..6f7a06f 100644
--- a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java
+++ b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java
@@ -412,15 +412,18 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc
@Override
public boolean createPrivateGateway(final PrivateGateway gateway) throws ConcurrentOperationException, ResourceUnavailableException {
+ boolean result = false;
+
if (gateway.getType() != VpcGateway.Type.Private) {
s_logger.warn("Type of vpc gateway is not " + VpcGateway.Type.Private);
- return false;
+ return result;
}
final List<DomainRouterVO> routers = _vpcRouterMgr.getVpcRouters(gateway.getVpcId());
if (routers == null || routers.isEmpty()) {
s_logger.debug(getName() + " element doesn't need to create Private gateway on the backend; VPC virtual " + "router doesn't exist in the vpc id=" + gateway.getVpcId());
- return true;
+ result = true;
+ return result;
}
s_logger.info("Adding VPC routers to Guest Network: " + routers.size() + " to be added!");
@@ -428,25 +431,25 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc
final DataCenterVO dcVO = _dcDao.findById(gateway.getZoneId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
+ final Network network = _networkDao.findById(gateway.getNetworkId());
+ final boolean isPrivateGateway = true;
+
for (final DomainRouterVO domainRouterVO : routers) {
if (networkTopology.setupPrivateGateway(gateway, domainRouterVO)) {
try {
final List<NetworkACLItemVO> rules = _networkACLItemDao.listByACL(gateway.getNetworkACLId());
- if (!applyACLItemsToPrivateGw(gateway, rules)) {
- s_logger.debug("Failed to apply network acl id " + gateway.getNetworkACLId() + " on gateway ");
- return false;
+ result = networkTopology.applyNetworkACLs(network, rules, domainRouterVO, isPrivateGateway);
+ if (!result) {
+ throw new CloudRuntimeException("Failed to apply network acl in network " + network.getId());
}
} catch (final Exception ex) {
s_logger.debug("Failed to apply network acl id " + gateway.getNetworkACLId() + " on gateway ");
- return false;
+ return result;
}
- } else {
- s_logger.debug("Failed to setup private gateway " + gateway);
- return false;
}
}
- return true;
+ return result;
}
@Override
@@ -483,48 +486,47 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc
break;
}
}
+ boolean result = false;
if (canHandle) {
final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
if (routers == null || routers.isEmpty()) {
s_logger.debug(getName() + " element doesn't need to associate ip addresses on the backend; VPC virtual " + "router doesn't exist in the network "
+ network.getId());
- return true;
+ return result;
}
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
- return networkTopology.associatePublicIP(network, ipAddress, routers);
- } else {
- return false;
+ for (final DomainRouterVO domainRouterVO : routers) {
+ result = networkTopology.associatePublicIP(network, ipAddress, domainRouterVO);
+ }
}
+ return result;
}
@Override
public boolean applyNetworkACLs(final Network network, final List<? extends NetworkACLItem> rules) throws ResourceUnavailableException {
+ boolean result = true;
if (canHandle(network, Service.NetworkACL)) {
final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
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 " + network.getId());
- return true;
+ return result;
}
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
- try {
- if (!networkTopology.applyNetworkACLs(network, rules, routers, false)) {
- return false;
- } else {
- return true;
+ for (final DomainRouterVO domainRouterVO : routers) {
+ try {
+ result = networkTopology.applyNetworkACLs(network, rules, domainRouterVO, false);
+ } catch (final Exception ex) {
+ s_logger.debug("Failed to apply network acl in network " + network.getId());
}
- } catch (final Exception ex) {
- s_logger.debug("Failed to apply network acl in network " + network.getId());
- return false;
}
- } else {
- return true;
}
+ return result;
}
@Override
@@ -565,11 +567,14 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
- if (!networkTopology.applyNetworkACLs(network, rules, routers, isPrivateGateway)) {
- throw new CloudRuntimeException("Failed to apply network acl in network " + network.getId());
- } else {
- return true;
+ boolean result = true;
+ for (final DomainRouterVO domainRouterVO : routers) {
+ result = networkTopology.applyNetworkACLs(network, rules, domainRouterVO, isPrivateGateway);
+ if (!result) {
+ throw new CloudRuntimeException("Failed to apply network acl in network " + network.getId());
+ }
}
+ return result;
}
@Override
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a168a69c/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java
----------------------------------------------------------------------
diff --git a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java b/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java
index fffac04..e587c75 100644
--- a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java
+++ b/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java
@@ -141,7 +141,7 @@ public class AdvancedNetworkTopology extends BasicNetworkTopology {
}
@Override
- public boolean applyUserData(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest, final List<DomainRouterVO> routers)
+ public boolean applyUserData(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest, final DomainRouterVO router)
throws ResourceUnavailableException {
s_logger.debug("APPLYING VPC USERDATA RULES");
@@ -153,12 +153,12 @@ public class AdvancedNetworkTopology extends BasicNetworkTopology {
final UserdataPwdRules pwdRules = new UserdataPwdRules(network, nic, profile, dest);
- return applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(pwdRules));
+ return applyRules(network, router, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(pwdRules));
}
@Override
public boolean applyDhcpEntry(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest,
- final List<DomainRouterVO> routers) throws ResourceUnavailableException {
+ final DomainRouterVO router) throws ResourceUnavailableException {
s_logger.debug("APPLYING VPC DHCP ENTRY RULES");
@@ -169,11 +169,11 @@ public class AdvancedNetworkTopology extends BasicNetworkTopology {
final DhcpEntryRules dhcpRules = new DhcpEntryRules(network, nic, profile, dest);
- return applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(dhcpRules));
+ return applyRules(network, router, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(dhcpRules));
}
@Override
- public boolean associatePublicIP(final Network network, final List<? extends PublicIpAddress> ipAddresses, final List<? extends VirtualRouter> routers)
+ public boolean associatePublicIP(final Network network, final List<? extends PublicIpAddress> ipAddresses, final VirtualRouter router)
throws ResourceUnavailableException {
if (ipAddresses == null || ipAddresses.isEmpty()) {
@@ -182,7 +182,7 @@ public class AdvancedNetworkTopology extends BasicNetworkTopology {
}
if (network.getVpcId() == null) {
- return super.associatePublicIP(network, ipAddresses, routers);
+ return super.associatePublicIP(network, ipAddresses, router);
}
s_logger.debug("APPLYING VPC IP RULES");
@@ -193,12 +193,10 @@ public class AdvancedNetworkTopology extends BasicNetworkTopology {
final Long podId = null;
final NicPlugInOutRules nicPlugInOutRules = new NicPlugInOutRules(network, ipAddresses);
- for (final VirtualRouter router : routers) {
- nicPlugInOutRules.accept(_advancedVisitor, router);
- }
+ nicPlugInOutRules.accept(_advancedVisitor, router);
final VpcIpAssociationRules ipAssociationRules = new VpcIpAssociationRules(network, ipAddresses);
- final boolean result = applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(ipAssociationRules));
+ final boolean result = applyRules(network, router, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(ipAssociationRules));
if (result) {
_advancedVisitor.visit(nicPlugInOutRules);
@@ -208,7 +206,7 @@ public class AdvancedNetworkTopology extends BasicNetworkTopology {
}
@Override
- public boolean applyNetworkACLs(final Network network, final List<? extends NetworkACLItem> rules, final List<? extends VirtualRouter> routers, final boolean isPrivateGateway)
+ public boolean applyNetworkACLs(final Network network, final List<? extends NetworkACLItem> rules, final VirtualRouter router, final boolean isPrivateGateway)
throws ResourceUnavailableException {
if (rules == null || rules.isEmpty()) {
@@ -225,6 +223,6 @@ public class AdvancedNetworkTopology extends BasicNetworkTopology {
final NetworkAclsRules aclsRules = new NetworkAclsRules(network, rules, isPrivateGateway);
- return applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(aclsRules));
+ return applyRules(network, router, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(aclsRules));
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a168a69c/server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java
----------------------------------------------------------------------
diff --git a/server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java b/server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java
index 83b47a0..2b88737 100644
--- a/server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java
+++ b/server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java
@@ -110,7 +110,7 @@ public class BasicNetworkTopology implements NetworkTopology {
}
@Override
- public boolean applyNetworkACLs(final Network network, final List<? extends NetworkACLItem> rules, final List<? extends VirtualRouter> routers, final boolean isPrivateGateway)
+ public boolean applyNetworkACLs(final Network network, final List<? extends NetworkACLItem> rules, final VirtualRouter router, final boolean isPrivateGateway)
throws ResourceUnavailableException {
throw new CloudRuntimeException("applyNetworkACLs not implemented in Basic Network Topology.");
}
@@ -140,7 +140,7 @@ public class BasicNetworkTopology implements NetworkTopology {
@Override
public boolean applyDhcpEntry(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest,
- final List<DomainRouterVO> routers) throws ResourceUnavailableException {
+ final DomainRouterVO router) throws ResourceUnavailableException {
s_logger.debug("APPLYING DHCP ENTRY RULES");
@@ -160,11 +160,11 @@ public class BasicNetworkTopology implements NetworkTopology {
final DhcpEntryRules dhcpRules = new DhcpEntryRules(network, nic, profile, dest);
- return applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(dhcpRules));
+ return applyRules(network, router, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(dhcpRules));
}
@Override
- public boolean applyUserData(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest, final List<DomainRouterVO> routers)
+ public boolean applyUserData(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest, final DomainRouterVO router)
throws ResourceUnavailableException {
s_logger.debug("APPLYING USERDATA RULES");
@@ -182,11 +182,11 @@ public class BasicNetworkTopology implements NetworkTopology {
final UserdataPwdRules pwdRules = new UserdataPwdRules(network, nic, profile, dest);
- return applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(pwdRules));
+ return applyRules(network, router, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(pwdRules));
}
@Override
- public boolean applyLoadBalancingRules(final Network network, final List<LoadBalancingRule> rules, final List<? extends VirtualRouter> routers)
+ public boolean applyLoadBalancingRules(final Network network, final List<LoadBalancingRule> rules, final VirtualRouter router)
throws ResourceUnavailableException {
if (rules == null || rules.isEmpty()) {
@@ -203,11 +203,11 @@ public class BasicNetworkTopology implements NetworkTopology {
final LoadBalancingRules loadBalancingRules = new LoadBalancingRules(network, rules);
- return applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(loadBalancingRules));
+ return applyRules(network, router, 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)
+ public boolean applyFirewallRules(final Network network, final List<? extends FirewallRule> rules, final VirtualRouter router)
throws ResourceUnavailableException {
if (rules == null || rules.isEmpty()) {
s_logger.debug("No firewall rules to be applied for network " + network.getId());
@@ -223,11 +223,11 @@ public class BasicNetworkTopology implements NetworkTopology {
final FirewallRules firewallRules = new FirewallRules(network, rules);
- return applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(firewallRules));
+ return applyRules(network, router, 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 {
+ public boolean applyStaticNats(final Network network, final List<? extends StaticNat> rules, final VirtualRouter router) throws ResourceUnavailableException {
if (rules == null || rules.isEmpty()) {
s_logger.debug("No static nat rules to be applied for network " + network.getId());
return true;
@@ -242,11 +242,11 @@ public class BasicNetworkTopology implements NetworkTopology {
final StaticNatRules natRules = new StaticNatRules(network, rules);
- return applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(natRules));
+ return applyRules(network, router, 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)
+ public boolean associatePublicIP(final Network network, final List<? extends PublicIpAddress> ipAddress, final VirtualRouter router)
throws ResourceUnavailableException {
if (ipAddress == null || ipAddress.isEmpty()) {
s_logger.debug("No ip association rules to be applied for network " + network.getId());
@@ -262,7 +262,7 @@ public class BasicNetworkTopology implements NetworkTopology {
final IpAssociationRules ipAddresses = new IpAssociationRules(network, ipAddress);
- return applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(ipAddresses));
+ return applyRules(network, router, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(ipAddresses));
}
@Override
@@ -304,7 +304,7 @@ public class BasicNetworkTopology implements NetworkTopology {
}
@Override
- public boolean savePasswordToRouter(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final List<? extends VirtualRouter> routers)
+ public boolean savePasswordToRouter(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final VirtualRouter router)
throws ResourceUnavailableException {
s_logger.debug("SAVE PASSWORD TO ROUTE RULES");
@@ -316,11 +316,11 @@ public class BasicNetworkTopology implements NetworkTopology {
final PasswordToRouterRules routerRules = new PasswordToRouterRules(network, nic, profile);
- return applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(routerRules));
+ return applyRules(network, router, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(routerRules));
}
@Override
- public boolean saveSSHPublicKeyToRouter(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final List<? extends VirtualRouter> routers,
+ public boolean saveSSHPublicKeyToRouter(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final VirtualRouter router,
final String sshPublicKey) throws ResourceUnavailableException {
s_logger.debug("SAVE SSH PUB KEY TO ROUTE RULES");
@@ -331,11 +331,11 @@ public class BasicNetworkTopology implements NetworkTopology {
final SshKeyToRouterRules keyToRouterRules = new SshKeyToRouterRules(network, nic, profile, sshPublicKey);
- return applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(keyToRouterRules));
+ return applyRules(network, router, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(keyToRouterRules));
}
@Override
- public boolean saveUserDataToRouter(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final List<? extends VirtualRouter> routers)
+ public boolean saveUserDataToRouter(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final VirtualRouter router)
throws ResourceUnavailableException {
s_logger.debug("SAVE USERDATA TO ROUTE RULES");
@@ -346,14 +346,14 @@ public class BasicNetworkTopology implements NetworkTopology {
final UserdataToRouterRules userdataToRouterRules = new UserdataToRouterRules(network, nic, profile);
- return applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(userdataToRouterRules));
+ return applyRules(network, router, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(userdataToRouterRules));
}
@Override
- public boolean applyRules(final Network network, final List<? extends VirtualRouter> routers, final String typeString, final boolean isPodLevelException, final Long podId,
+ public boolean applyRules(final Network network, final VirtualRouter router, final String typeString, final boolean isPodLevelException, final Long podId,
final boolean failWhenDisconnect, final RuleApplierWrapper<RuleApplier> ruleApplierWrapper) throws ResourceUnavailableException {
- if (routers == null || routers.isEmpty()) {
+ if (router == null) {
s_logger.warn("Unable to apply " + typeString + ", virtual router doesn't exist in the network " + network.getId());
throw new ResourceUnavailableException("Unable to apply " + typeString, DataCenter.class, network.getDataCenterId());
}
@@ -370,45 +370,43 @@ public class BasicNetworkTopology implements NetworkTopology {
final List<VirtualRouter> disconnectedRouters = new ArrayList<VirtualRouter>();
boolean result = true;
final String msg = "Unable to apply " + typeString + " on disconnected router ";
- for (final VirtualRouter router : routers) {
- if (router.getState() == State.Running) {
- s_logger.debug("Applying " + typeString + " in network " + network);
-
- if (router.isStopPending()) {
- if (_hostDao.findById(router.getHostId()).getState() == Status.Up) {
- throw new ResourceUnavailableException("Unable to process due to the stop pending router " + router.getInstanceName()
- + " haven't been stopped after it's host coming back!", DataCenter.class, router.getDataCenterId());
- }
- s_logger.debug("Router " + router.getInstanceName() + " is stop pending, so not sending apply " + typeString + " commands to the backend");
- continue;
- }
+ if (router.getState() == State.Running) {
+ s_logger.debug("Applying " + typeString + " in network " + network);
- try {
- result = ruleApplier.accept(getVisitor(), router);
- connectedRouters.add(router);
- } catch (final AgentUnavailableException e) {
- s_logger.warn(msg + router.getInstanceName(), e);
- disconnectedRouters.add(router);
+ if (router.isStopPending()) {
+ if (_hostDao.findById(router.getHostId()).getState() == Status.Up) {
+ throw new ResourceUnavailableException("Unable to process due to the stop pending router " + router.getInstanceName()
+ + " haven't been stopped after it's host coming back!", DataCenter.class, router.getDataCenterId());
}
+ s_logger.debug("Router " + router.getInstanceName() + " is stop pending, so not sending apply " + typeString + " commands to the backend");
+ return false;
+ }
- // If rules fail to apply on one domR and not due to
- // disconnection, no need to proceed with the rest
- if (!result) {
- if (isZoneBasic && isPodLevelException) {
- throw new ResourceUnavailableException("Unable to apply " + typeString + " on router ", Pod.class, podId);
- }
- throw new ResourceUnavailableException("Unable to apply " + typeString + " on router ", DataCenter.class, router.getDataCenterId());
- }
+ try {
+ result = ruleApplier.accept(getVisitor(), router);
+ connectedRouters.add(router);
+ } catch (final AgentUnavailableException e) {
+ s_logger.warn(msg + router.getInstanceName(), e);
+ disconnectedRouters.add(router);
+ }
- } else if (router.getState() == State.Stopped || router.getState() == State.Stopping) {
- s_logger.debug("Router " + router.getInstanceName() + " is in " + router.getState() + ", so not sending apply " + typeString + " commands to the backend");
- } else {
- s_logger.warn("Unable to apply " + typeString + ", virtual router is not in the right state " + router.getState());
+ // If rules fail to apply on one domR and not due to
+ // disconnection, no need to proceed with the rest
+ if (!result) {
if (isZoneBasic && isPodLevelException) {
- throw new ResourceUnavailableException("Unable to apply " + typeString + ", virtual router is not in the right state", Pod.class, podId);
+ throw new ResourceUnavailableException("Unable to apply " + typeString + " on router ", Pod.class, podId);
}
- throw new ResourceUnavailableException("Unable to apply " + typeString + ", virtual router is not in the right state", DataCenter.class, router.getDataCenterId());
+ throw new ResourceUnavailableException("Unable to apply " + typeString + " on router ", DataCenter.class, router.getDataCenterId());
+ }
+
+ } else if (router.getState() == State.Stopped || router.getState() == State.Stopping) {
+ s_logger.debug("Router " + router.getInstanceName() + " is in " + router.getState() + ", so not sending apply " + typeString + " commands to the backend");
+ } else {
+ s_logger.warn("Unable to apply " + typeString + ", virtual router is not in the right state " + router.getState());
+ if (isZoneBasic && isPodLevelException) {
+ throw new ResourceUnavailableException("Unable to apply " + typeString + ", virtual router is not in the right state", Pod.class, podId);
}
+ throw new ResourceUnavailableException("Unable to apply " + typeString + ", virtual router is not in the right state", DataCenter.class, router.getDataCenterId());
}
if (!connectedRouters.isEmpty()) {
@@ -425,10 +423,8 @@ public class BasicNetworkTopology implements NetworkTopology {
}
}
} else if (!disconnectedRouters.isEmpty()) {
- for (final VirtualRouter router : disconnectedRouters) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug(msg + router.getInstanceName() + "(" + router.getId() + ")");
- }
+ if (s_logger.isDebugEnabled()) {
+ s_logger.debug(msg + router.getInstanceName() + "(" + router.getId() + ")");
}
if (isZoneBasic && isPodLevelException) {
throw new ResourceUnavailableException(msg, Pod.class, podId);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a168a69c/server/src/org/apache/cloudstack/network/topology/NetworkTopology.java
----------------------------------------------------------------------
diff --git a/server/src/org/apache/cloudstack/network/topology/NetworkTopology.java b/server/src/org/apache/cloudstack/network/topology/NetworkTopology.java
index 6e42ad3..5190d5e 100644
--- a/server/src/org/apache/cloudstack/network/topology/NetworkTopology.java
+++ b/server/src/org/apache/cloudstack/network/topology/NetworkTopology.java
@@ -50,7 +50,7 @@ public interface NetworkTopology {
boolean configDhcpForSubnet(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest, final List<DomainRouterVO> routers)
throws ResourceUnavailableException;
- boolean applyNetworkACLs(final Network network, final List<? extends NetworkACLItem> rules, final List<? extends VirtualRouter> routers, final boolean isPrivateGateway)
+ boolean applyNetworkACLs(final Network network, final List<? extends NetworkACLItem> rules, final VirtualRouter router, final boolean isPrivateGateway)
throws ResourceUnavailableException;
boolean applyStaticRoutes(final List<StaticRouteProfile> staticRoutes, final List<DomainRouterVO> routers) throws ResourceUnavailableException;
@@ -61,30 +61,30 @@ public interface NetworkTopology {
// ====== USED FOR GUEST NETWORK AND VCP ====== //
- boolean applyDhcpEntry(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest, final List<DomainRouterVO> routers)
+ boolean applyDhcpEntry(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest, final DomainRouterVO router)
throws ResourceUnavailableException;
- boolean applyUserData(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest, final List<DomainRouterVO> routers)
+ boolean applyUserData(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest, final DomainRouterVO router)
throws ResourceUnavailableException;
- boolean applyLoadBalancingRules(Network network, List<LoadBalancingRule> rules, List<? extends VirtualRouter> routers) throws ResourceUnavailableException;
+ boolean applyLoadBalancingRules(Network network, List<LoadBalancingRule> rules, VirtualRouter router) throws ResourceUnavailableException;
- boolean applyFirewallRules(final Network network, final List<? extends FirewallRule> rules, final List<? extends VirtualRouter> routers) throws ResourceUnavailableException;
+ boolean applyFirewallRules(final Network network, final List<? extends FirewallRule> rules, final VirtualRouter router) throws ResourceUnavailableException;
- boolean applyStaticNats(final Network network, final List<? extends StaticNat> rules, final List<? extends VirtualRouter> routers) throws ResourceUnavailableException;
+ boolean applyStaticNats(final Network network, final List<? extends StaticNat> rules, final VirtualRouter router) throws ResourceUnavailableException;
- boolean associatePublicIP(final Network network, final List<? extends PublicIpAddress> ipAddress, final List<? extends VirtualRouter> routers) throws ResourceUnavailableException;
+ boolean associatePublicIP(final Network network, final List<? extends PublicIpAddress> ipAddress, final VirtualRouter router) throws ResourceUnavailableException;
String[] applyVpnUsers(final Network network, final List<? extends VpnUser> users, final List<DomainRouterVO> routers) throws ResourceUnavailableException;
- boolean savePasswordToRouter(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final List<? extends VirtualRouter> routers) throws ResourceUnavailableException;
+ boolean savePasswordToRouter(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final VirtualRouter router) throws ResourceUnavailableException;
- boolean saveSSHPublicKeyToRouter(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final List<? extends VirtualRouter> routers,
+ boolean saveSSHPublicKeyToRouter(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final VirtualRouter router,
final String sshPublicKey) throws ResourceUnavailableException;
- boolean saveUserDataToRouter(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final List<? extends VirtualRouter> routers)
+ boolean saveUserDataToRouter(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final VirtualRouter router)
throws ResourceUnavailableException;
- boolean applyRules(final Network network, final List<? extends VirtualRouter> routers, final String typeString, final boolean isPodLevelException, final Long podId,
+ boolean applyRules(final Network network, final VirtualRouter router, final String typeString, final boolean isPodLevelException, final Long podId,
final boolean failWhenDisconnect, RuleApplierWrapper<RuleApplier> ruleApplier) throws ResourceUnavailableException;
}
\ No newline at end of file