adding setupPrivateGateway to new style;
removing methods from Vpc appliance;
changing the way VpcElement calls the command;
there is still work tob e done with the destroyPrivateGateway rule.
Conflicts:
server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java
server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java
server/src/org/apache/cloudstack/network/topology/NetworkTopology.java
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/07be4945
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/07be4945
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/07be4945
Branch: refs/heads/vpc-refactor
Commit: 07be4945df7edd4d4a7487fa626bc6c691ee18e9
Parents: 5489130
Author: wrodrigues <[email protected]>
Authored: Wed Aug 20 18:13:33 2014 +0200
Committer: Wilder Rodrigues <[email protected]>
Committed: Fri Oct 3 06:21:27 2014 +0200
----------------------------------------------------------------------
.../element/VpcVirtualRouterElement.java | 5 +-
.../VpcVirtualNetworkApplianceManager.java | 9 --
.../VpcVirtualNetworkApplianceManagerImpl.java | 36 -----
.../network/rules/PrivateGatewayRules.java | 156 ++++++++++++++++++-
.../com/cloud/network/rules/RuleApplier.java | 9 ++
.../rules/VirtualNetworkApplianceFactory.java | 47 +++++-
.../topology/AdvancedNetworkTopology.java | 12 ++
.../topology/AdvancedNetworkVisitor.java | 47 +++++-
.../network/topology/BasicNetworkTopology.java | 15 +-
.../network/topology/NetworkTopology.java | 17 +-
.../MockVpcVirtualNetworkApplianceManager.java | 9 --
11 files changed, 286 insertions(+), 76 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/07be4945/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 5504df3..0f11c73 100644
--- a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java
+++ b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java
@@ -384,8 +384,11 @@ public class VpcVirtualRouterElement extends
VirtualRouterElement implements Vpc
}
VirtualRouter router = routers.get(0);
+
+ DataCenterVO dcVO = _dcDao.findById(gateway.getZoneId());
+ NetworkTopology networkTopology =
networkTopologyContext.retrieveNetworkTopology(dcVO);
- if (_vpcRouterMgr.setupPrivateGateway(gateway, router)) {
+ if (networkTopology.setupPrivateGateway(gateway, router)) {
try {
List<NetworkACLItemVO> rules =
_networkACLItemDao.listByACL(gateway.getNetworkACLId());
if (!applyACLItemsToPrivateGw(gateway, rules)) {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/07be4945/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java
----------------------------------------------------------------------
diff --git
a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java
b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java
index 7aecba5..5785263 100644
--- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java
+++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java
@@ -32,15 +32,6 @@ public interface VpcVirtualNetworkApplianceManager extends
VirtualNetworkApplian
/**
* @param gateway
- * @param router TODO
- * @return
- * @throws ResourceUnavailableException
- * @throws ConcurrentOperationException
- */
- boolean setupPrivateGateway(PrivateGateway gateway, VirtualRouter router)
throws ConcurrentOperationException, ResourceUnavailableException;
-
- /**
- * @param gateway
* @param router
* @return
* @throws ResourceUnavailableException
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/07be4945/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------
diff --git
a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
index 1edea75..99ed723 100644
---
a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
+++
b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
@@ -649,42 +649,6 @@ public class VpcVirtualNetworkApplianceManagerImpl extends
VirtualNetworkApplian
return _nwHelper.sendCommandsToRouter(router, cmds);
}
- @Override
- public boolean setupPrivateGateway(final PrivateGateway gateway, final
VirtualRouter router) throws ConcurrentOperationException,
ResourceUnavailableException {
- boolean result = true;
- try {
- Network network = _networkModel.getNetwork(gateway.getNetworkId());
- NicProfile requested =
vpcHelper.createPrivateNicProfileForGateway(gateway);
-
- if (!_nwHelper.checkRouterVersion(router)) {
- s_logger.warn("Router requires upgrade. Unable to send command
to router: " + router.getId());
- return false;
- }
- NicProfile guestNic = _itMgr.addVmToNetwork(router, network,
requested);
-
- //setup source nat
- if (guestNic != null) {
- result = setupVpcPrivateNetwork(router, true, guestNic);
- } else {
- s_logger.warn("Failed to setup gateway " + gateway + " on
router " + router + " with the source nat");
- result = false;
- }
- } catch (Exception ex) {
- s_logger.warn("Failed to create private gateway " + gateway + " on
router " + router + " due to ", ex);
- result = false;
- } finally {
- if (!result) {
- s_logger.debug("Removing gateway " + gateway + " from router "
+ router + " as a part of cleanup");
- if (destroyPrivateGateway(gateway, router)) {
- s_logger.debug("Removed the gateway " + gateway + " from
router " + router + " as a part of cleanup");
- } else {
- s_logger.warn("Failed to remove the gateway " + gateway +
" from router " + router + " as a part of cleanup");
- }
- }
- }
- return result;
- }
-
/**
* @param router
* @param add
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/07be4945/server/src/com/cloud/network/rules/PrivateGatewayRules.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/rules/PrivateGatewayRules.java
b/server/src/com/cloud/network/rules/PrivateGatewayRules.java
index 364aded..f7a88ea 100644
--- a/server/src/com/cloud/network/rules/PrivateGatewayRules.java
+++ b/server/src/com/cloud/network/rules/PrivateGatewayRules.java
@@ -17,32 +17,172 @@
package com.cloud.network.rules;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.apache.cloudstack.network.topology.NetworkTopologyVisitor;
+import org.apache.log4j.Logger;
+import com.cloud.agent.api.routing.IpAssocVpcCommand;
+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.exception.ConcurrentOperationException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.network.Network;
import com.cloud.network.router.VirtualRouter;
-import com.cloud.network.vpc.NetworkACLItem;
+import com.cloud.network.vpc.PrivateGateway;
+import com.cloud.network.vpc.PrivateIpAddress;
+import com.cloud.network.vpc.PrivateIpVO;
+import com.cloud.user.Account;
+import com.cloud.vm.NicProfile;
public class PrivateGatewayRules extends RuleApplier {
- private final List<? extends NetworkACLItem> rules;
+ private static final Logger s_logger =
Logger.getLogger(PrivateGatewayRules.class);
+
+ private final PrivateGateway _privateGateway;
+
+ private boolean _isAddOperation;
+ private NicProfile _nicProfile;
- public PrivateGatewayRules(final Network network, final List<? extends
NetworkACLItem> rules) {
- super(network);
- this.rules = rules;
+ public PrivateGatewayRules(final PrivateGateway privateGateway) {
+ super(null);
+ this._privateGateway = privateGateway;
}
@Override
public boolean accept(final NetworkTopologyVisitor visitor, final
VirtualRouter router) throws ResourceUnavailableException {
this._router = router;
- return visitor.visit(this);
+ boolean result = false;
+ try {
+ _network =
_networkModel.getNetwork(_privateGateway.getNetworkId());
+ NicProfile requested =
_vpcNetworkHelper.createPrivateNicProfileForGateway(_privateGateway);
+
+ if (!_networkHelper.checkRouterVersion(router)) {
+ s_logger.warn("Router requires upgrade. Unable to send command
to router: " + router.getId());
+ return false;
+ }
+ _nicProfile = _itMgr.addVmToNetwork(router, _network, requested);
+
+ //setup source nat
+ if (_nicProfile != null) {
+ _isAddOperation = true;
+ //result = setupVpcPrivateNetwork(router, true, guestNic);
+ result = visitor.visit(this);
+ }
+ } catch (Exception ex) {
+ s_logger.warn("Failed to create private gateway " +
_privateGateway + " on router " + router + " due to ", ex);
+ } finally {
+ if (!result) {
+ s_logger.debug("Failed to setup gateway " + _privateGateway + "
on router " + router + " with the source nat. Will now remove the gateway.");
+ _isAddOperation = false;
+ boolean isRemoved = destroyPrivateGateway(visitor);
+
+ if (isRemoved) {
+ s_logger.debug("Removed the gateway " + _privateGateway +
" from router " + router + " as a part of cleanup");
+ } else {
+ s_logger.warn("Failed to remove the gateway " +
_privateGateway + " from router " + router + " as a part of cleanup");
+ }
+ }
+ }
+ return result;
+ }
+
+ public boolean isAddOperation() {
+ return _isAddOperation;
+ }
+
+ public NicProfile getNicProfile() {
+ return _nicProfile;
+ }
+
+ public PrivateIpVO retrivePrivateIP() {
+ PrivateIpVO ipVO =
_privateIpDao.findByIpAndSourceNetworkId(_nicProfile.getNetworkId(),
_nicProfile.getIp4Address());
+ return ipVO;
+ }
+
+ public Network retrievePrivateNetwork() {
+ // This network might be the same we have already as an instance in the
RuleApplier super class.
+ // Just doing this here, but will double check is remove if it's not
needed.
+ Network network = _networkDao.findById(_nicProfile.getNetworkId());
+ return network;
}
- public List<? extends NetworkACLItem> getRules() {
- return rules;
+ protected boolean destroyPrivateGateway(final NetworkTopologyVisitor
visitor) throws ConcurrentOperationException, ResourceUnavailableException {
+
+ if (!_networkModel.isVmPartOfNetwork(_router.getId(),
_privateGateway.getNetworkId())) {
+ s_logger.debug("Router doesn't have nic for gateway " +
_privateGateway + " so no need to removed it");
+ return true;
+ }
+
+ Network privateNetwork =
_networkModel.getNetwork(_privateGateway.getNetworkId());
+
+ s_logger.debug("Releasing private ip for gateway " + _privateGateway +
" from " + _router);
+
+ _nicProfile = _networkModel.getNicProfile(_router,
privateNetwork.getId(), null);
+ boolean result = visitor.visit(this);
+ if (!result) {
+ s_logger.warn("Failed to release private ip for gateway " +
_privateGateway + " on router " + _router);
+ return false;
+ }
+
+ //revoke network acl on the private gateway.
+ if (!_networkACLMgr.revokeACLItemsForPrivateGw(_privateGateway)) {
+ s_logger.debug("Failed to delete network acl items on " +
_privateGateway + " from router " + _router);
+ return false;
+ }
+
+ s_logger.debug("Removing router " + _router + " from private network "
+ privateNetwork + " as a part of delete private gateway");
+ result = result && _itMgr.removeVmFromNetwork(_router, privateNetwork,
null);
+ s_logger.debug("Private gateawy " + _privateGateway + " is removed
from router " + _router);
+ return result;
+ }
+
+ public void createVpcAssociatePrivateIPCommands(final VirtualRouter
router, final List<PrivateIpAddress> ips, final Commands cmds, final boolean
add) {
+
+ // Ensure that in multiple vlans case we first send all ip addresses
of vlan1, then all ip addresses of vlan2, etc..
+ Map<String, ArrayList<PrivateIpAddress>> vlanIpMap = new
HashMap<String, ArrayList<PrivateIpAddress>>();
+ for (final PrivateIpAddress ipAddress : ips) {
+ String vlanTag = ipAddress.getBroadcastUri();
+ ArrayList<PrivateIpAddress> ipList = vlanIpMap.get(vlanTag);
+ if (ipList == null) {
+ ipList = new ArrayList<PrivateIpAddress>();
+ }
+
+ ipList.add(ipAddress);
+ vlanIpMap.put(vlanTag, ipList);
+ }
+
+ for (Map.Entry<String, ArrayList<PrivateIpAddress>> vlanAndIp :
vlanIpMap.entrySet()) {
+ List<PrivateIpAddress> ipAddrList = vlanAndIp.getValue();
+ IpAddressTO[] ipsToSend = new IpAddressTO[ipAddrList.size()];
+ int i = 0;
+
+ for (final PrivateIpAddress ipAddr : ipAddrList) {
+ Network network =
_networkModel.getNetwork(ipAddr.getNetworkId());
+ IpAddressTO ip =
+ new IpAddressTO(Account.ACCOUNT_ID_SYSTEM,
ipAddr.getIpAddress(), add, false, ipAddr.getSourceNat(),
ipAddr.getBroadcastUri(), ipAddr.getGateway(),
+ ipAddr.getNetmask(), ipAddr.getMacAddress(),
null, false);
+
+ ip.setTrafficType(network.getTrafficType());
+
ip.setNetworkName(_networkModel.getNetworkTag(router.getHypervisorType(),
network));
+ ipsToSend[i++] = ip;
+
+ }
+
+ IpAssocVpcCommand cmd = new IpAssocVpcCommand(ipsToSend);
+ cmd.setAccessDetail(NetworkElementCommand.ROUTER_IP,
_routerControlHelper.getRouterControlIp(router.getId()));
+ cmd.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP,
_routerControlHelper.getRouterIpInNetwork(ipAddrList.get(0).getNetworkId(),
router.getId()));
+ cmd.setAccessDetail(NetworkElementCommand.ROUTER_NAME,
router.getInstanceName());
+ DataCenterVO dcVo = _dcDao.findById(router.getDataCenterId());
+ cmd.setAccessDetail(NetworkElementCommand.ZONE_NETWORK_TYPE,
dcVo.getNetworkType().toString());
+
+ cmds.addCommand("IPAssocVpcCommand", cmd);
+ }
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/07be4945/server/src/com/cloud/network/rules/RuleApplier.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/rules/RuleApplier.java
b/server/src/com/cloud/network/rules/RuleApplier.java
index 84ad5230..6abeb01 100644
--- a/server/src/com/cloud/network/rules/RuleApplier.java
+++ b/server/src/com/cloud/network/rules/RuleApplier.java
@@ -40,7 +40,10 @@ import com.cloud.network.lb.LoadBalancingRulesManager;
import com.cloud.network.router.NetworkHelper;
import com.cloud.network.router.RouterControlHelper;
import com.cloud.network.router.VirtualRouter;
+import com.cloud.network.router.VpcNetworkHelper;
+import com.cloud.network.vpc.NetworkACLManager;
import com.cloud.network.vpc.VpcManager;
+import com.cloud.network.vpc.dao.PrivateIpDao;
import com.cloud.network.vpc.dao.VpcDao;
import com.cloud.offerings.dao.NetworkOfferingDao;
import com.cloud.service.dao.ServiceOfferingDao;
@@ -95,12 +98,16 @@ public abstract class RuleApplier {
protected IPAddressDao _ipAddressDao;
+ protected PrivateIpDao _privateIpDao;
+
protected VpcManager _vpcMgr;
protected VirtualMachineManager _itMgr;
protected IpAddressManager _ipAddrMgr;
+ protected NetworkACLManager _networkACLMgr;
+
protected Network _network;
protected VirtualRouter _router;
@@ -109,6 +116,8 @@ public abstract class RuleApplier {
protected NetworkHelper _networkHelper;
+ protected VpcNetworkHelper _vpcNetworkHelper;
+
public RuleApplier(final Network network) {
_network = network;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/07be4945/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java
----------------------------------------------------------------------
diff --git
a/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java
b/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java
index 2ea092d..207560b 100644
--- a/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java
+++ b/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java
@@ -30,6 +30,7 @@ import com.cloud.network.IpAddressManager;
import com.cloud.network.Network;
import com.cloud.network.NetworkModel;
import com.cloud.network.PublicIpAddress;
+import com.cloud.network.RemoteAccessVpn;
import com.cloud.network.VpnUser;
import com.cloud.network.dao.FirewallRulesDao;
import com.cloud.network.dao.IPAddressDao;
@@ -41,8 +42,11 @@ import com.cloud.network.router.NetworkHelper;
import com.cloud.network.router.RouterControlHelper;
import com.cloud.network.router.VirtualNetworkApplianceManager;
import com.cloud.network.vpc.NetworkACLItem;
+import com.cloud.network.vpc.NetworkACLManager;
+import com.cloud.network.vpc.PrivateGateway;
import com.cloud.network.vpc.StaticRouteProfile;
import com.cloud.network.vpc.VpcManager;
+import com.cloud.network.vpc.dao.PrivateIpDao;
import com.cloud.network.vpc.dao.VpcDao;
import com.cloud.offerings.dao.NetworkOfferingDao;
import com.cloud.service.dao.ServiceOfferingDao;
@@ -122,6 +126,9 @@ public class VirtualNetworkApplianceFactory {
protected IPAddressDao _ipAddressDao;
@Inject
+ protected PrivateIpDao _privateIpDao;
+
+ @Inject
protected RouterControlHelper _routerControlHelper;
@Inject
@@ -131,8 +138,14 @@ public class VirtualNetworkApplianceFactory {
protected IpAddressManager _ipAddrMgr;
@Inject
+ protected NetworkACLManager _networkACLMgr;
+
+ @Inject
protected NetworkHelper _networkHelper;
+ @Inject
+ protected VpcNetworkHelper _vpcNetworkHelper;
+
public LoadBalancingRules createLoadBalancingRules(final Network network,
final List<LoadBalancingRule> rules) {
LoadBalancingRules lbRules = new LoadBalancingRules(network, rules);
@@ -305,11 +318,31 @@ public class VirtualNetworkApplianceFactory {
return pvlanRules;
}
- public StaticRoutesRules
createStaticRoutesRules(List<StaticRouteProfile> staticRoutes) {
- StaticRoutesRules routesRules = new
StaticRoutesRules(staticRoutes);
-
- initBeans(routesRules);
-
- return routesRules;
- }
+ public StaticRoutesRules createStaticRoutesRules(final
List<StaticRouteProfile> staticRoutes) {
+ StaticRoutesRules routesRules = new StaticRoutesRules(staticRoutes);
+
+ initBeans(routesRules);
+
+ return routesRules;
+ }
+
+ public AdvancedVpnRules createAdvancedVpnRules(final RemoteAccessVpn
remoteAccessVpn, final List<? extends VpnUser> users) {
+ AdvancedVpnRules vpnRules = new AdvancedVpnRules(remoteAccessVpn,
users);
+
+ initBeans(vpnRules);
+
+ return vpnRules;
+ }
+
+ public PrivateGatewayRules createPrivateGatewayRules(final PrivateGateway
gateway) {
+ PrivateGatewayRules gwRules = new PrivateGatewayRules(gateway);
+
+ initBeans(gwRules);
+
+ gwRules._privateIpDao = _privateIpDao;
+ gwRules._networkACLMgr = _networkACLMgr;
+ gwRules._vpcNetworkHelper = _vpcNetworkHelper;
+
+ return gwRules;
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/07be4945/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 8cc47d2..13d1cb7 100644
---
a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java
+++
b/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java
@@ -30,6 +30,7 @@ import com.cloud.dc.DataCenter.NetworkType;
import com.cloud.dc.Pod;
import com.cloud.deploy.DeployDestination;
import com.cloud.exception.AgentUnavailableException;
+import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.host.Status;
import com.cloud.network.Network;
@@ -39,12 +40,14 @@ import com.cloud.network.rules.DhcpEntryRules;
import com.cloud.network.rules.DhcpSubNetRules;
import com.cloud.network.rules.NetworkAclsRules;
import com.cloud.network.rules.NicPlugInOutRules;
+import com.cloud.network.rules.PrivateGatewayRules;
import com.cloud.network.rules.RuleApplier;
import com.cloud.network.rules.RuleApplierWrapper;
import com.cloud.network.rules.StaticRoutesRules;
import com.cloud.network.rules.UserdataPwdRules;
import com.cloud.network.rules.VpcIpAssociationRules;
import com.cloud.network.vpc.NetworkACLItem;
+import com.cloud.network.vpc.PrivateGateway;
import com.cloud.network.vpc.StaticRouteProfile;
import com.cloud.vm.DomainRouterVO;
import com.cloud.vm.NicProfile;
@@ -117,6 +120,15 @@ public class AdvancedNetworkTopology extends
BasicNetworkTopology {
return subNetRules.accept(_advancedVisitor, router);
}
+
+ @Override
+ public boolean setupPrivateGateway(PrivateGateway gateway, VirtualRouter
router) throws ConcurrentOperationException, ResourceUnavailableException {
+ s_logger.debug("SETUP PRIVATE GATEWAY RULES");
+
+ PrivateGatewayRules routesRules =
_virtualNetworkApplianceFactory.createPrivateGatewayRules(gateway);
+
+ return routesRules.accept(_advancedVisitor, router);
+ }
@Override
public boolean applyUserData(final Network network, final NicProfile nic,
final VirtualMachineProfile profile, final DeployDestination dest, final
List<DomainRouterVO> routers)
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/07be4945/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java
----------------------------------------------------------------------
diff --git
a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java
b/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java
index 464dd1f..1f94370 100644
---
a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java
+++
b/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java
@@ -28,6 +28,7 @@ import com.cloud.agent.api.Command;
import com.cloud.agent.api.PvlanSetupCommand;
import com.cloud.agent.api.routing.IpAliasTO;
import com.cloud.agent.manager.Commands;
+import com.cloud.dc.DataCenter;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.network.Network;
import com.cloud.network.PublicIpAddress;
@@ -41,9 +42,14 @@ import com.cloud.network.rules.StaticRoutesRules;
import com.cloud.network.rules.UserdataPwdRules;
import com.cloud.network.rules.VpcIpAssociationRules;
import com.cloud.network.vpc.NetworkACLItem;
+import com.cloud.network.vpc.PrivateIpAddress;
+import com.cloud.network.vpc.PrivateIpVO;
import com.cloud.network.vpc.StaticRouteProfile;
+import com.cloud.utils.net.NetUtils;
+import com.cloud.vm.NicProfile;
import com.cloud.vm.NicVO;
import com.cloud.vm.UserVmVO;
+import com.cloud.vm.VirtualMachine.State;
import com.cloud.vm.VirtualMachineProfile;
import com.cloud.vm.dao.NicIpAliasVO;
@@ -123,7 +129,46 @@ public class AdvancedNetworkVisitor extends
BasicNetworkVisitor {
@Override
public boolean visit(final PrivateGatewayRules privateGW) throws
ResourceUnavailableException {
- return false;
+ final VirtualRouter router = privateGW.getRouter();
+ final NicProfile nicProfile = privateGW.getNicProfile();
+
+ final boolean isAddOperation = privateGW.isAddOperation();
+
+ if (router.getState() == State.Running) {
+
+ PrivateIpVO ipVO = privateGW.retrivePrivateIP();
+ Network network = privateGW.retrievePrivateNetwork();
+
+ String netmask = NetUtils.getCidrNetmask(network.getCidr());
+ PrivateIpAddress ip = new PrivateIpAddress(ipVO,
network.getBroadcastUri().toString(), network.getGateway(), netmask,
nicProfile.getMacAddress());
+
+ List<PrivateIpAddress> privateIps = new
ArrayList<PrivateIpAddress>(1);
+ privateIps.add(ip);
+
+ Commands cmds = new Commands(Command.OnError.Stop);
+ privateGW.createVpcAssociatePrivateIPCommands(router, privateIps,
cmds, isAddOperation);
+
+ try{
+ if (_networkGeneralHelper.sendCommandsToRouter(router, cmds)) {
+ s_logger.debug("Successfully applied ip association for ip
" + ip + " in vpc network " + network);
+ return true;
+ } else {
+ s_logger.warn("Failed to associate ip address " + ip + "
in vpc network " + network);
+ return false;
+ }
+ }catch (Exception ex) {
+ s_logger.warn("Failed to send " + (isAddOperation ?"add
":"delete ") + " private network " + network + " commands to rotuer ");
+ return false;
+ }
+ } else if (router.getState() == State.Stopped || router.getState() ==
State.Stopping) {
+ s_logger.debug("Router " + router.getInstanceName() + " is in " +
router.getState() + ", so not sending setup private network command to the
backend");
+ } else {
+ s_logger.warn("Unable to setup private gateway, virtual router " +
router + " is not in the right state " + router.getState());
+
+ throw new ResourceUnavailableException("Unable to setup Private
gateway on the backend," + " virtual router " + router + " is not in the right
state",
+ DataCenter.class, router.getDataCenterId());
+ }
+ return true;
}
@Override
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/07be4945/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 dd0cd15..6d05b56 100644
---
a/server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java
+++
b/server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java
@@ -33,12 +33,14 @@ import com.cloud.dc.Pod;
import com.cloud.dc.dao.DataCenterDao;
import com.cloud.deploy.DeployDestination;
import com.cloud.exception.AgentUnavailableException;
+import com.cloud.exception.ConcurrentOperationException;
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.Networks.TrafficType;
import com.cloud.network.PublicIpAddress;
+import com.cloud.network.RemoteAccessVpn;
import com.cloud.network.VpnUser;
import com.cloud.network.lb.LoadBalancingRule;
import com.cloud.network.router.NetworkHelper;
@@ -59,6 +61,7 @@ import com.cloud.network.rules.UserdataToRouterRules;
import com.cloud.network.rules.VirtualNetworkApplianceFactory;
import com.cloud.network.rules.VpnRules;
import com.cloud.network.vpc.NetworkACLItem;
+import com.cloud.network.vpc.PrivateGateway;
import com.cloud.network.vpc.StaticRouteProfile;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.vm.DomainRouterVO;
@@ -104,8 +107,13 @@ public class BasicNetworkTopology implements
NetworkTopology {
}
@Override
- public NicProfile retrieveControlNic(final VirtualMachineProfile profile) {
- return null;
+ public boolean setupPrivateGateway(final PrivateGateway gateway, final
VirtualRouter router) throws ConcurrentOperationException,
ResourceUnavailableException {
+ throw new CloudRuntimeException("setupPrivateGateway not implemented
in Basic Network Topology.");
+ }
+
+ @Override
+ public String[] applyVpnUsers(final RemoteAccessVpn vpn, final List<?
extends VpnUser> users, final VirtualRouter router) throws
ResourceUnavailableException {
+ throw new CloudRuntimeException("applyVpnUsers not implemented in
Basic Network Topology.");
}
@Override
@@ -410,7 +418,8 @@ public class BasicNetworkTopology implements
NetworkTopology {
if (!connectedRouters.isEmpty()) {
if (!isZoneBasic && !disconnectedRouters.isEmpty() &&
disconnectedRouters.get(0).getIsRedundantRouter()) {
- // These disconnected redundant virtual routers are out of
sync now, stop them for synchronization
+ // These disconnected redundant virtual routers are out of sync
+ // now, stop them for synchronization
_nwHelper.handleSingleWorkingRedundantRouter(connectedRouters,
disconnectedRouters, msg);
}
} else if (!disconnectedRouters.isEmpty()) {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/07be4945/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 3975878..4e9175e 100644
--- a/server/src/org/apache/cloudstack/network/topology/NetworkTopology.java
+++ b/server/src/org/apache/cloudstack/network/topology/NetworkTopology.java
@@ -21,6 +21,7 @@ import java.util.List;
import com.cloud.dc.DataCenter;
import com.cloud.deploy.DeployDestination;
+import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.network.Network;
import com.cloud.network.PublicIpAddress;
@@ -32,6 +33,7 @@ import com.cloud.network.rules.RuleApplier;
import com.cloud.network.rules.RuleApplierWrapper;
import com.cloud.network.rules.StaticNat;
import com.cloud.network.vpc.NetworkACLItem;
+import com.cloud.network.vpc.PrivateGateway;
import com.cloud.network.vpc.StaticRouteProfile;
import com.cloud.vm.DomainRouterVO;
import com.cloud.vm.NicProfile;
@@ -39,6 +41,7 @@ import com.cloud.vm.VirtualMachineProfile;
public interface NetworkTopology {
+<<<<<<< HEAD
StringBuilder createGuestBootLoadArgs(final NicProfile guestNic, final
String defaultDns1, final String defaultDns2, DomainRouterVO router);
String retrieveGuestDhcpRange(final NicProfile guestNic, final Network
guestNetwork, final DataCenter dc);
@@ -47,6 +50,9 @@ public interface NetworkTopology {
// ====== USER FOR VPC ONLY ====== //
+=======
+ // ====== USED FOR VPC ONLY ====== //
+>>>>>>> 0b8b22f... adding setupPrivateGateway to new style;
boolean setupDhcpForPvlan(final boolean add, final DomainRouterVO router,
final Long hostId, final NicProfile nic) throws ResourceUnavailableException;
@@ -57,8 +63,15 @@ public interface NetworkTopology {
throws ResourceUnavailableException;
boolean applyStaticRoutes(final List<StaticRouteProfile> staticRoutes,
final List<DomainRouterVO> routers) throws ResourceUnavailableException;
-
- // ====== USER FOR GUEST NETWORK AND VCP ====== //
+<<<<<<< HEAD
+=======
+
+ boolean setupPrivateGateway(final PrivateGateway gateway, final
VirtualRouter router) throws ConcurrentOperationException,
ResourceUnavailableException;
+
+ String[] applyVpnUsers(final RemoteAccessVpn vpn, final List<? extends
VpnUser> users, final VirtualRouter router) throws ResourceUnavailableException;
+>>>>>>> 0b8b22f... adding setupPrivateGateway to new style;
+
+ // ====== USED FOR GUEST NETWORK AND VCP ====== //
boolean applyDhcpEntry(final Network network, final NicProfile nic, final
VirtualMachineProfile profile, final DeployDestination dest, final
List<DomainRouterVO> routers)
throws ResourceUnavailableException;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/07be4945/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java
----------------------------------------------------------------------
diff --git
a/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java
b/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java
index 7153ed7..fa780c0 100644
--- a/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java
+++ b/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java
@@ -209,15 +209,6 @@ public class MockVpcVirtualNetworkApplianceManager extends
ManagerBase implement
}
/* (non-Javadoc)
- * @see
com.cloud.network.router.VpcVirtualNetworkApplianceManager#setupPrivateGateway(com.cloud.network.vpc.PrivateGateway,
com.cloud.network.router.VirtualRouter)
- */
- @Override
- public boolean setupPrivateGateway(final PrivateGateway gateway, final
VirtualRouter router) throws ConcurrentOperationException,
ResourceUnavailableException {
- // TODO Auto-generated method stub
- return false;
- }
-
- /* (non-Javadoc)
* @see
com.cloud.network.router.VpcVirtualNetworkApplianceManager#destroyPrivateGateway(com.cloud.network.vpc.PrivateGateway,
com.cloud.network.router.VirtualRouter)
*/
@Override