VPC: finilize start for the VR - send ip assoc commands only after plug nic is done for all public nics

This commit is contained in:
Alena Prokharchyk 2012-06-25 15:58:50 -07:00
parent d35eb73c9b
commit 96c273ad55
4 changed files with 31 additions and 17 deletions

View File

@ -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;
}
}

View File

@ -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>();

View File

@ -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);
}
}
}
}

View File

@ -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");