VPC: finilize start for the VR - send ip assoc commands only after plug nic is done for all public nics
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/96c273ad Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/96c273ad Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/96c273ad Branch: refs/heads/vpc Commit: 96c273ad55eee92d6c036b816e5e9f3827199dd3 Parents: d35eb73 Author: Alena Prokharchyk <[email protected]> Authored: Mon Jun 25 15:58:50 2012 -0700 Committer: Alena Prokharchyk <[email protected]> Committed: Mon Jun 25 21:00:00 2012 -0700 ---------------------------------------------------------------------- .../src/com/cloud/network/NetworkManagerImpl.java | 2 +- .../router/VirtualNetworkApplianceManagerImpl.java | 11 ++--- .../VpcVirtualNetworkApplianceManagerImpl.java | 34 ++++++++++---- .../com/cloud/network/rules/RulesManagerImpl.java | 1 + 4 files changed, 31 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/96c273ad/server/src/com/cloud/network/NetworkManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index f9a5238..d6a6d9a 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -1179,7 +1179,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag boolean isSourceNat = false; if (!sharedSourceNat) { if (getExistingSourceNat(owner.getId(), networkId, null) == null) { - if (network.getGuestType() == GuestType.Isolated) { + if (network.getGuestType() == GuestType.Isolated && network.getVpcId() == null) { isSourceNat = true; } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/96c273ad/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index fce0584..4daff6b 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -1954,7 +1954,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian protected void finalizeNetworkRulesForNetwork(Commands cmds, DomainRouterVO router, Provider provider, Long guestNetworkId) { s_logger.debug("Resending ipAssoc, port forwarding, load balancing rules as a part of Virtual router start"); - ArrayList<PublicIp> publicIps = getPublicIpsToApply(router, provider, guestNetworkId); + ArrayList<? extends PublicIpAddress> publicIps = getPublicIpsToApply(router, provider, guestNetworkId); if (publicIps != null && !publicIps.isEmpty()) { List<RemoteAccessVpn> vpns = new ArrayList<RemoteAccessVpn>(); @@ -1964,7 +1964,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian List<FirewallRule> firewallRules = new ArrayList<FirewallRule>(); //Get information about all the rules (StaticNats and StaticNatRules; PFVPN to reapply on domR start) - for (PublicIp ip : publicIps) { + for (PublicIpAddress ip : publicIps) { if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.PortForwarding, provider)) { pfRules.addAll(_pfRulesDao.listForApplication(ip.getId())); } @@ -2046,10 +2046,10 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } } - protected ArrayList<PublicIp> finalizeIpAssocForNetwork(Commands cmds, DomainRouterVO router, Provider provider, + protected void finalizeIpAssocForNetwork(Commands cmds, VirtualRouter router, Provider provider, Long guestNetworkId) { - ArrayList<PublicIp> publicIps = getPublicIpsToApply(router, provider, guestNetworkId); + ArrayList<? extends PublicIpAddress> publicIps = getPublicIpsToApply(router, provider, guestNetworkId); if (publicIps != null && !publicIps.isEmpty()) { s_logger.debug("Found " + publicIps.size() + " ip(s) to apply as a part of domR " + router + " start."); @@ -2058,10 +2058,9 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian createAssociateIPCommands(router, publicIps, cmds, 0); } } - return publicIps; } - protected ArrayList<PublicIp> getPublicIpsToApply(DomainRouterVO router, Provider provider, Long guestNetworkId) { + protected ArrayList<? extends PublicIpAddress> getPublicIpsToApply(VirtualRouter router, Provider provider, Long guestNetworkId) { long ownerId = router.getAccountId(); final List<IPAddressVO> userIps = _networkMgr.listPublicIpsAssignedToGuestNtwk(ownerId, guestNetworkId, null); List<PublicIp> allPublicIps = new ArrayList<PublicIp>(); http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/96c273ad/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 0f62037..405cf3c 100644 --- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java @@ -712,7 +712,6 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian return super.finalizeCommandsOnStart(cmds, profile); } - //1) FORM SSH CHECK COMMAND NicProfile controlNic = getControlNic(profile); if (controlNic == null) { @@ -737,26 +736,25 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian } } - List<PublicIp> publicIps = new ArrayList<PublicIp>(1); try { //add VPC router to public networks + List<PublicIp> publicIps = new ArrayList<PublicIp>(1); for (Nic publicNic : publicNics.keySet()) { Network publicNtwk = publicNics.get(publicNic); IPAddressVO userIp = _ipAddressDao.findByIpAndSourceNetworkId(publicNtwk.getId(), publicNic.getIp4Address()); - PublicIp publicIp = new PublicIp(userIp, _vlanDao.findById(userIp.getVlanId()), - NetUtils.createSequenceBasedMacAddress(userIp.getMacAddress())); - - - if (publicIp.isSourceNat()) { + + if (userIp.isSourceNat()) { + PublicIp publicIp = new PublicIp(userIp, _vlanDao.findById(userIp.getVlanId()), + NetUtils.createSequenceBasedMacAddress(userIp.getMacAddress())); publicIps.add(publicIp); } PlugNicCommand plugNicCmd = new PlugNicCommand(_itMgr.toVmTO(profile), getNicTO(router, publicNic.getNetworkId())); - cmds.addCommand(plugNicCmd); + cmds.addCommand(plugNicCmd); } - // create vpc assoc commands + // create ip assoc for source nat if (!publicIps.isEmpty()) { createVpcAssociateIPCommands(router, publicIps, cmds); } @@ -787,7 +785,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian return false; } - //3) REAPPLY FIREWALL RULES + //3) REPROGRAM GUEST NETWORK boolean reprogramGuestNtwks = true; if (profile.getParameter(Param.ReProgramGuestNetworks) != null && (Boolean) profile.getParameter(Param.ReProgramGuestNetworks) == false) { @@ -806,6 +804,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian List<Long> routerGuestNtwkIds = _routerDao.getRouterNetworks(router.getId()); for (Long guestNetworkId : routerGuestNtwkIds) { if (reprogramGuestNtwks) { + finalizeIpAssocForNetwork(cmds, router, provider, guestNetworkId); finalizeNetworkRulesForNetwork(cmds, router, provider, guestNetworkId); } @@ -922,4 +921,19 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian return result; } + + @Override + protected void finalizeIpAssocForNetwork(Commands cmds, VirtualRouter router, Provider provider, + Long guestNetworkId) { + + ArrayList<? extends PublicIpAddress> publicIps = getPublicIpsToApply(router, provider, guestNetworkId); + + if (publicIps != null && !publicIps.isEmpty()) { + s_logger.debug("Found " + publicIps.size() + " ip(s) to apply as a part of domR " + router + " start."); + // Re-apply public ip addresses - should come before PF/LB/VPN + if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.Firewall, provider)) { + createVpcAssociateIPCommands(router, publicIps, cmds); + } + } + } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/96c273ad/server/src/com/cloud/network/rules/RulesManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/rules/RulesManagerImpl.java b/server/src/com/cloud/network/rules/RulesManagerImpl.java index 74d6940..ddce130 100755 --- a/server/src/com/cloud/network/rules/RulesManagerImpl.java +++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java @@ -177,6 +177,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { s_logger.debug("The ip is not associated with the network id="+ networkId + " so assigning"); try { _networkMgr.associateIPToGuestNetwork(ipAddrId, networkId); + ipAddress = _ipAddressDao.findById(ipAddrId); } catch (Exception ex) { s_logger.warn("Failed to associate ip id=" + ipAddrId + " to network id=" + networkId + " as " + "a part of port forwarding rule creation");
