VPC: apply dhcp entries only after all guest nics are plugged

Conflicts:

        
server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/30011093
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/30011093
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/30011093

Branch: refs/heads/vpc
Commit: 300110931c09f2fbaaa78b5d5daa4dfca13cb9a3
Parents: 1b1e52d
Author: Alena Prokharchyk <[email protected]>
Authored: Fri Jun 22 10:06:04 2012 -0700
Committer: Alena Prokharchyk <[email protected]>
Committed: Mon Jun 25 20:51:09 2012 -0700

----------------------------------------------------------------------
 api/src/com/cloud/agent/api/PlugNicCommand.java    |    3 +-
 .../router/VirtualNetworkApplianceManagerImpl.java |  308 ++++++++-------
 .../VpcVirtualNetworkApplianceManagerImpl.java     |   67 +++-
 3 files changed, 212 insertions(+), 166 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/30011093/api/src/com/cloud/agent/api/PlugNicCommand.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/agent/api/PlugNicCommand.java 
b/api/src/com/cloud/agent/api/PlugNicCommand.java
index 4222e4c..7d34004 100644
--- a/api/src/com/cloud/agent/api/PlugNicCommand.java
+++ b/api/src/com/cloud/agent/api/PlugNicCommand.java
@@ -21,7 +21,7 @@ import com.cloud.agent.api.to.VirtualMachineTO;
 public class PlugNicCommand extends Command {
     
     VirtualMachineTO vm;
-    NicTO nic;
+    NicTO nic;    
     
     public VirtualMachineTO getVirtualMachine() {
         return vm;
@@ -43,4 +43,5 @@ public class PlugNicCommand extends Command {
         this.vm = vm;
         this.nic = nic;
     }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/30011093/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 d7780fd..34cc29a 100755
--- 
a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ 
b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -1863,11 +1863,48 @@ public class VirtualNetworkApplianceManagerImpl 
implements VirtualNetworkApplian
     @Override
     public boolean finalizeCommandsOnStart(Commands cmds, 
VirtualMachineProfile<DomainRouterVO> profile) {
         DomainRouterVO router = profile.getVirtualMachine();
-        DataCenterVO dcVo = 
_dcDao.findById(router.getDataCenterIdToDeployIn());
+        NicProfile controlNic = getControlNic(profile);
 
-        NicProfile controlNic = null;
+        if (controlNic == null) {
+            s_logger.error("Control network doesn't exist for the router " + 
router);
+            return false;
+        }
+
+        finalizeSshAndVersionAndNetworkUsageOnStart(cmds, profile, router, 
controlNic);
 
-        if(profile.getHypervisorType() == HypervisorType.VMware && 
dcVo.getNetworkType() == NetworkType.Basic) {
+        // restart network if restartNetwork = false is not specified in 
profile parameters
+        boolean reprogramGuestNtwks = true;
+        if (profile.getParameter(Param.ReProgramGuestNetworks) != null 
+                && (Boolean) 
profile.getParameter(Param.ReProgramGuestNetworks) == false) {
+            reprogramGuestNtwks = false;
+        }
+
+        VirtualRouterProvider vrProvider = 
_vrProviderDao.findById(router.getElementId());
+        if (vrProvider == null) {
+            throw new CloudRuntimeException("Cannot find related virtual 
router provider of router: " + router.getHostName());
+        }
+        Provider provider = 
Network.Provider.getProvider(vrProvider.getType().toString());
+        if (provider == null) {
+            throw new CloudRuntimeException("Cannot find related provider of 
virtual router provider: " + vrProvider.getType().toString());
+        }
+        
+        List<Long> routerGuestNtwkIds = 
_routerDao.getRouterNetworks(router.getId());
+        for (Long guestNetworkId : routerGuestNtwkIds) {
+            if (reprogramGuestNtwks) {
+                finalizeNetworkRulesForNetwork(cmds, router, provider, 
guestNetworkId);
+            }
+
+            finalizeUserDataAndDhcpOnStart(cmds, router, provider, 
guestNetworkId);
+        }
+
+        return true;
+    }
+
+    protected NicProfile getControlNic(VirtualMachineProfile<DomainRouterVO> 
profile) {
+        DomainRouterVO router = profile.getVirtualMachine();
+        DataCenterVO dcVo = 
_dcDao.findById(router.getDataCenterIdToDeployIn());
+        NicProfile controlNic = null;
+        if (profile.getHypervisorType() == HypervisorType.VMware && 
dcVo.getNetworkType() == NetworkType.Basic) {
             // TODO this is a ugly to test hypervisor type here
             // for basic network mode, we will use the guest NIC for control 
NIC
             for (NicProfile nic : profile.getNics()) {
@@ -1882,12 +1919,10 @@ public class VirtualNetworkApplianceManagerImpl 
implements VirtualNetworkApplian
                 }
             }
         }
+        return controlNic;
+    }
 
-        if (controlNic == null) {
-            s_logger.error("Control network doesn't exist for the router " + 
router);
-            return false;
-        }
-
+    protected void finalizeSshAndVersionAndNetworkUsageOnStart(Commands cmds, 
VirtualMachineProfile<DomainRouterVO> profile, DomainRouterVO router, 
NicProfile controlNic) {
         cmds.addCommand("checkSsh", new 
CheckSshCommand(profile.getInstanceName(), controlNic.getIp4Address(), 3922));
 
         // Update router template/scripts version
@@ -1899,158 +1934,139 @@ public class VirtualNetworkApplianceManagerImpl 
implements VirtualNetworkApplian
         // Network usage command to create iptables rules
         boolean forVpc = profile.getVirtualMachine().getVpcId() != null;
         cmds.addCommand("networkUsage", new 
NetworkUsageCommand(controlNic.getIp4Address(), router.getHostName(), "create", 
forVpc));
+    }
 
-        // restart network if restartNetwork = false is not specified in 
profile parameters
-        boolean reprogramGuestNtwks = true;
-        if (profile.getParameter(Param.ReProgramGuestNetworks) != null && 
(Boolean) profile.getParameter(Param.ReProgramGuestNetworks) == false) {
-            reprogramGuestNtwks = false;
+    protected void finalizeUserDataAndDhcpOnStart(Commands cmds, 
DomainRouterVO router, Provider provider, Long guestNetworkId) {
+        if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, 
Service.Dhcp, provider)) {
+            // Resend dhcp
+            s_logger.debug("Reapplying dhcp entries as a part of domR " + 
router + " start...");
+            createDhcpEntryCommandsForVMs(router, cmds, guestNetworkId);
         }
-
-        VirtualRouterProvider vrProvider = 
_vrProviderDao.findById(router.getElementId());
-        if (vrProvider == null) {
-            throw new CloudRuntimeException("Cannot find related virtual 
router provider of router: " + router.getHostName());
+   
+        if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, 
Service.UserData, provider)) {
+            // Resend user data
+            s_logger.debug("Reapplying vm data (userData and metaData) entries 
as a part of domR " + router + " start...");
+            createVmDataCommandForVMs(router, cmds, guestNetworkId);
         }
-        Provider provider = 
Network.Provider.getProvider(vrProvider.getType().toString());
-        if (provider == null) {
-            throw new CloudRuntimeException("Cannot find related provider of 
virtual router provider: " + vrProvider.getType().toString());
+    }
+
+    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");
+        long ownerId = router.getAccountId();
+      
+        final List<IPAddressVO> userIps = 
_networkMgr.listPublicIpsAssignedToGuestNtwk(ownerId, guestNetworkId, null);
+        List<PublicIp> allPublicIps = new ArrayList<PublicIp>();
+        if (userIps != null && !userIps.isEmpty()) {
+            for (IPAddressVO userIp : userIps) {
+                PublicIp publicIp = new PublicIp(userIp, 
_vlanDao.findById(userIp.getVlanId()), 
+                            
NetUtils.createSequenceBasedMacAddress(userIp.getMacAddress()));
+                allPublicIps.add(publicIp);
+            }
         }
         
-        List<Long> routerGuestNtwkIds = 
_routerDao.getRouterNetworks(router.getId());
-        for (Long guestNetworkId : routerGuestNtwkIds) {
-            if (reprogramGuestNtwks) {
-                s_logger.debug("Resending ipAssoc, port forwarding, load 
balancing rules as a part of Virtual router start");
-                long ownerId = router.getAccountId();
-
-                final List<IPAddressVO> userIps = 
_networkMgr.listPublicIpsAssignedToGuestNtwk(ownerId, guestNetworkId, null);
-                List<PublicIp> allPublicIps = new ArrayList<PublicIp>();
-                if (userIps != null && !userIps.isEmpty()) {
-                    for (IPAddressVO userIp : userIps) {
-                            PublicIp publicIp = new PublicIp(userIp, 
_vlanDao.findById(userIp.getVlanId()), 
-                                    
NetUtils.createSequenceBasedMacAddress(userIp.getMacAddress()));
-                            allPublicIps.add(publicIp);
-                    }
+        //Get public Ips that should be handled by router
+        Network network = _networkDao.findById(guestNetworkId);
+        Map<PublicIp, Set<Service>> ipToServices = 
_networkMgr.getIpToServices(allPublicIps, false, false);
+        Map<Provider, ArrayList<PublicIp>> providerToIpList = 
_networkMgr.getProviderToIpList(network, ipToServices);
+        // Only cover virtual router for now, if ELB use it this need to be 
modified
+      
+        ArrayList<PublicIp> publicIps = providerToIpList.get(provider);
+      
+        s_logger.debug("Found " + publicIps.size() + " ip(s) to apply as a 
part of domR " + router + " start.");
+      
+        if (!publicIps.isEmpty()) {
+            List<RemoteAccessVpn> vpns = new ArrayList<RemoteAccessVpn>();
+            List<PortForwardingRule> pfRules = new 
ArrayList<PortForwardingRule>();
+            List<FirewallRule> staticNatFirewallRules = new 
ArrayList<FirewallRule>();
+            List<StaticNat> staticNats = new ArrayList<StaticNat>();
+            List<FirewallRule> firewallRules = new ArrayList<FirewallRule>();
+      
+            // Re-apply public ip addresses - should come before PF/LB/VPN
+                if 
(_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, 
Service.Firewall, provider)) {
+                createAssociateIPCommands(router, publicIps, cmds, 0);
+            }
+      
+            //Get information about all the rules (StaticNats and 
StaticNatRules; PFVPN to reapply on domR start)
+            for (PublicIp ip : publicIps) {
+                if 
(_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, 
Service.PortForwarding, provider)) {
+                    pfRules.addAll(_pfRulesDao.listForApplication(ip.getId()));
                 }
-                    
-                //Get public Ips that should be handled by router
-                Network network = _networkDao.findById(guestNetworkId);
-                Map<PublicIp, Set<Service>> ipToServices = 
_networkMgr.getIpToServices(allPublicIps, false, false);
-                Map<Provider, ArrayList<PublicIp>> providerToIpList = 
_networkMgr.getProviderToIpList(network, ipToServices);
-                // Only cover virtual router for now, if ELB use it this need 
to be modified
-                ArrayList<PublicIp> publicIps = 
providerToIpList.get(Provider.VirtualRouter);
-    
-                s_logger.debug("Found " + publicIps.size() + " ip(s) to apply 
as a part of domR " + router + " start.");
-
-                if (!publicIps.isEmpty()) {
-
-                    List<RemoteAccessVpn> vpns = new 
ArrayList<RemoteAccessVpn>();
-                    List<PortForwardingRule> pfRules = new 
ArrayList<PortForwardingRule>();
-                    List<FirewallRule> staticNatFirewallRules = new 
ArrayList<FirewallRule>();
-                    List<StaticNat> staticNats = new ArrayList<StaticNat>();
-                    List<FirewallRule> firewallRules = new 
ArrayList<FirewallRule>();
-
-                    // Re-apply public ip addresses - should come before 
PF/LB/VPN
-                    if 
(_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, 
Service.Firewall, provider)) {
-                        createAssociateIPCommands(router, publicIps, cmds, 0);
-                    }
-
-                //Get information about all the rules (StaticNats and 
StaticNatRules; PFVPN to reapply on domR start)
-                for (PublicIp ip : publicIps) {
-                    if 
(_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, 
Service.PortForwarding, provider)) {
-                        
pfRules.addAll(_pfRulesDao.listForApplication(ip.getId()));
-                    }
-                    if 
(_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, 
Service.StaticNat, provider)) {
-                        
staticNatFirewallRules.addAll(_rulesDao.listByIpAndPurpose(ip.getId(), 
Purpose.StaticNat));
-                    }
-                    if 
(_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, 
Service.Firewall, provider)) {
-                        
firewallRules.addAll(_rulesDao.listByIpAndPurpose(ip.getId(), 
Purpose.Firewall));
-                    }
-
-                    if 
(_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.Vpn, 
provider)) {
-                        RemoteAccessVpn vpn = _vpnDao.findById(ip.getId());
-                        if (vpn != null) {
-                            vpns.add(vpn);
-                        }
-
-                    if 
(_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, 
Service.StaticNat, provider)) {
-                        if (ip.isOneToOneNat()) {
-                                String dstIp = 
_networkMgr.getIpInNetwork(ip.getAssociatedWithVmId(), guestNetworkId);
-                                StaticNatImpl staticNat = new 
StaticNatImpl(ip.getAccountId(), ip.getDomainId(), guestNetworkId, ip.getId(), 
dstIp, false);
-                                staticNats.add(staticNat);
-                            }
-                        }
-                    }
-
-                    //Re-apply static nats
-                    s_logger.debug("Found " + staticNats.size() + " static 
nat(s) to apply as a part of domR " + router + " start.");
-                    if (!staticNats.isEmpty()) {
-                        createApplyStaticNatCommands(staticNats, router, cmds, 
guestNetworkId);
-                    }
-
-                    //Re-apply firewall rules
-                    s_logger.debug("Found " + staticNats.size() + " firewall 
rule(s) to apply as a part of domR " + router + " start.");
-                    if (!firewallRules.isEmpty()) {
-                        createFirewallRulesCommands(firewallRules, router, 
cmds, guestNetworkId);
-                    }
-
-                    // Re-apply port forwarding rules
-                    s_logger.debug("Found " + pfRules.size() + " port 
forwarding rule(s) to apply as a part of domR " + router + " start.");
-                    if (!pfRules.isEmpty()) {
-                        createApplyPortForwardingRulesCommands(pfRules, 
router, cmds, guestNetworkId);
-                    }
-
-                    // Re-apply static nat rules
-                    s_logger.debug("Found " + staticNatFirewallRules.size() + 
" static nat rule(s) to apply as a part of domR " + router + " start.");
-                    if (!staticNatFirewallRules.isEmpty()) {
-                        List<StaticNatRule> staticNatRules = new 
ArrayList<StaticNatRule>();
-                        for (FirewallRule rule : staticNatFirewallRules) {
-                            
staticNatRules.add(_rulesMgr.buildStaticNatRule(rule, false));
-                        }
-                        createApplyStaticNatRulesCommands(staticNatRules, 
router, cmds, guestNetworkId);
-                    }
-
-                    // Re-apply vpn rules
-                    s_logger.debug("Found " + vpns.size() + " vpn(s) to apply 
as a part of domR " + router + " start.");
-                    if (!vpns.isEmpty()) {
-                        for (RemoteAccessVpn vpn : vpns) {
-                            createApplyVpnCommands(vpn, router, cmds);
-                        }
-                    }
-
-                    List<LoadBalancerVO> lbs = 
_loadBalancerDao.listByNetworkId(guestNetworkId);
-                    List<LoadBalancingRule> lbRules = new 
ArrayList<LoadBalancingRule>();
-                    if 
(_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.Lb, 
provider)) {
-                        // Re-apply load balancing rules
-                        for (LoadBalancerVO lb : lbs) {
-                            List<LbDestination> dstList = 
_lbMgr.getExistingDestinations(lb.getId());
-                            List<LbStickinessPolicy> policyList = 
_lbMgr.getStickinessPolicies(lb.getId());
-                            LoadBalancingRule loadBalancing = new 
LoadBalancingRule(lb, dstList, policyList);
-                            lbRules.add(loadBalancing);
-                        }
+                if 
(_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, 
Service.StaticNat, provider)) {
+                    
staticNatFirewallRules.addAll(_rulesDao.listByIpAndPurpose(ip.getId(), 
Purpose.StaticNat));
+                }
+                if 
(_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, 
Service.Firewall, provider)) {
+                    
firewallRules.addAll(_rulesDao.listByIpAndPurpose(ip.getId(), 
Purpose.Firewall));
+                }
+      
+                if 
(_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.Vpn, 
provider)) {
+                    RemoteAccessVpn vpn = _vpnDao.findById(ip.getId());
+                    if (vpn != null) {
+                        vpns.add(vpn);
                     }
-
-                    s_logger.debug("Found " + lbRules.size() + " load 
balancing rule(s) to apply as a part of domR " + router + " start.");
-                    if (!lbRules.isEmpty()) {
-                        createApplyLoadBalancingRulesCommands(lbRules, router, 
cmds, guestNetworkId);
+                }
+      
+                if 
(_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, 
Service.StaticNat, provider)) {
+                    if (ip.isOneToOneNat()) {
+                            String dstIp = 
_networkMgr.getIpInNetwork(ip.getAssociatedWithVmId(), guestNetworkId);
+                            StaticNatImpl staticNat = new 
StaticNatImpl(ip.getAccountId(), ip.getDomainId(), guestNetworkId, ip.getId(), 
dstIp, false);
+                        staticNats.add(staticNat);
                     }
                 }
-                
+            }
+   
+            //Re-apply static nats
+            s_logger.debug("Found " + staticNats.size() + " static nat(s) to 
apply as a part of domR " + router + " start.");
+            if (!staticNats.isEmpty()) {
+                    createApplyStaticNatCommands(staticNats, router, cmds, 
guestNetworkId);
+            }
+       
+            //Re-apply firewall rules
+            s_logger.debug("Found " + staticNats.size() + " firewall rule(s) 
to apply as a part of domR " + router + " start.");
+            if (!firewallRules.isEmpty()) {
+                    createFirewallRulesCommands(firewallRules, router, cmds, 
guestNetworkId);
+            }
+       
+            // Re-apply port forwarding rules
+            s_logger.debug("Found " + pfRules.size() + " port forwarding 
rule(s) to apply as a part of domR " + router + " start.");
+            if (!pfRules.isEmpty()) {
+                    createApplyPortForwardingRulesCommands(pfRules, router, 
cmds, guestNetworkId);
+            }
+   
+            // Re-apply static nat rules
+            s_logger.debug("Found " + staticNatFirewallRules.size() + " static 
nat rule(s) to apply as a part of domR " + router + " start.");
+            if (!staticNatFirewallRules.isEmpty()) {
+                List<StaticNatRule> staticNatRules = new 
ArrayList<StaticNatRule>();
+                for (FirewallRule rule : staticNatFirewallRules) {
+                    staticNatRules.add(_rulesMgr.buildStaticNatRule(rule, 
false));
+                }
+                createApplyStaticNatRulesCommands(staticNatRules, router, 
cmds, guestNetworkId);
+            }
+   
+            // Re-apply vpn rules
+            s_logger.debug("Found " + vpns.size() + " vpn(s) to apply as a 
part of domR " + router + " start.");
+            if (!vpns.isEmpty()) {
+                for (RemoteAccessVpn vpn : vpns) {
+                    createApplyVpnCommands(vpn, router, cmds);
                 }
             }
-
-            if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, 
Service.Dhcp, provider)) {
-                // Resend dhcp
-                s_logger.debug("Reapplying dhcp entries as a part of domR " + 
router + " start...");
-                createDhcpEntryCommandsForVMs(router, cmds, guestNetworkId);
+   
+            List<LoadBalancerVO> lbs = 
_loadBalancerDao.listByNetworkId(guestNetworkId);
+            List<LoadBalancingRule> lbRules = new 
ArrayList<LoadBalancingRule>();
+            if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, 
Service.Lb, provider)) {
+                // Re-apply load balancing rules
+                for (LoadBalancerVO lb : lbs) {
+                    List<LbDestination> dstList = 
_lbMgr.getExistingDestinations(lb.getId());
+                    List<LbStickinessPolicy> policyList = 
_lbMgr.getStickinessPolicies(lb.getId());
+                    LoadBalancingRule loadBalancing = new 
LoadBalancingRule(lb, dstList, policyList);
+                    lbRules.add(loadBalancing);
+                }
             }
-
-            if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, 
Service.UserData, provider)) {
-                // Resend user data
-                s_logger.debug("Reapplying vm data (userData and metaData) 
entries as a part of domR " + router + " start...");
-                createVmDataCommandForVMs(router, cmds, guestNetworkId);
+   
+            s_logger.debug("Found " + lbRules.size() + " load balancing 
rule(s) to apply as a part of domR " + router + " start.");
+            if (!lbRules.isEmpty()) {
+                    createApplyLoadBalancingRulesCommands(lbRules, router, 
cmds, guestNetworkId);
             }
         }
-
-        return true;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/30011093/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 4bb5c18..425f182 100644
--- 
a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
+++ 
b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
@@ -706,13 +706,22 @@ public class VpcVirtualNetworkApplianceManagerImpl 
extends VirtualNetworkApplian
         DomainRouterVO router = profile.getVirtualMachine();
 
         boolean isVpc = (router.getVpcId() != null);
-        boolean result = super.finalizeCommandsOnStart(cmds, profile);
-        
         if (!isVpc) {
-            return result;
+            return super.finalizeCommandsOnStart(cmds, profile);
+        }
+        
+        
+        //1) FORM SSH CHECK COMMAND
+        NicProfile controlNic = getControlNic(profile);
+        if (controlNic == null) {
+            s_logger.error("Control network doesn't exist for the router " + 
router);
+            return false;
         }
+
+        finalizeSshAndVersionAndNetworkUsageOnStart(cmds, profile, router, 
controlNic);
         
-        //Get guest nic info
+        
+        //2) FORM PLUG NIC COMMANDS
         Map<Nic, Network> guestNics = new HashMap<Nic, Network>();
         Map<Nic, Network> publicNics = new HashMap<Nic, Network>();
         
@@ -767,27 +776,47 @@ public class VpcVirtualNetworkApplianceManagerImpl 
extends VirtualNetworkApplian
             return false;
         }
         
+        //3) REAPPLY FIREWALL RULES
         boolean reprogramGuestNtwks = true;
-        if (profile.getParameter(Param.ReProgramGuestNetworks) != null && 
(Boolean) profile.getParameter(Param.ReProgramGuestNetworks) == false) {
+        if (profile.getParameter(Param.ReProgramGuestNetworks) != null 
+                && (Boolean) 
profile.getParameter(Param.ReProgramGuestNetworks) == false) {
             reprogramGuestNtwks = false;
         }
-        
-        //get network ACLs for the router
+
+        VirtualRouterProvider vrProvider = 
_vrProviderDao.findById(router.getElementId());
+        if (vrProvider == null) {
+            throw new CloudRuntimeException("Cannot find related virtual 
router provider of router: " + router.getHostName());
+        }
+        Provider provider = 
Network.Provider.getProvider(vrProvider.getType().toString());
+        if (provider == null) {
+            throw new CloudRuntimeException("Cannot find related provider of 
virtual router provider: " + vrProvider.getType().toString());
+        }
+
         List<Long> routerGuestNtwkIds = 
_routerDao.getRouterNetworks(router.getId());
-        if (reprogramGuestNtwks) { 
-            for (Long guestNetworkId : routerGuestNtwkIds) {
-                s_logger.debug("Resending network ACLs as a part of VPC 
Virtual router start");
-                
-                if 
(_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, 
Service.Firewall, Provider.VPCVirtualRouter)) {
-                    List<? extends NetworkACL> networkACLs = 
_networkACLService.listNetworkACLs(guestNetworkId);
-                    s_logger.debug("Found " + networkACLs.size() + " network 
ACLs to apply as a part of VPC VR " + router + " start.");
-                    if (!networkACLs.isEmpty()) {
-                        
createNetworkACLsCommands((List<NetworkACL>)networkACLs, router, cmds, 
guestNetworkId);
-                    }
-                }    
+        for (Long guestNetworkId : routerGuestNtwkIds) {
+            if (reprogramGuestNtwks) {
+                finalizeNetworkRulesForNetwork(cmds, router, provider, 
guestNetworkId);
             }
+
+            finalizeUserDataAndDhcpOnStart(cmds, router, provider, 
guestNetworkId);
         }
   
-        return result;
+        return true;
+    }
+    
+    
+    @Override
+    protected void finalizeNetworkRulesForNetwork(Commands cmds, 
DomainRouterVO router, Provider provider, Long guestNetworkId) {
+        
+        super.finalizeNetworkRulesForNetwork(cmds, router, provider, 
guestNetworkId);
+        
+        if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, 
Service.Firewall, Provider.VPCVirtualRouter)) {
+            List<? extends NetworkACL> networkACLs = 
_networkACLService.listNetworkACLs(guestNetworkId);
+            s_logger.debug("Found " + networkACLs.size() + " network ACLs to 
apply as a part of VPC VR " + router 
+                    + " start for guest network id=" + guestNetworkId);
+            if (!networkACLs.isEmpty()) {
+                createNetworkACLsCommands((List<NetworkACL>)networkACLs, 
router, cmds, guestNetworkId);
+            }
+        }
     }
 }

Reply via email to