You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by al...@apache.org on 2013/04/04 22:30:33 UTC

git commit: updated refs/heads/master to 42ffac3

Updated Branches:
  refs/heads/master df48b6531 -> 42ffac3ae


CLOUDSTACK-1895: save placeholder nic with not null vmType='DomainRouter' when placeholder is used for the VR ip address


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

Branch: refs/heads/master
Commit: 42ffac3ae87ff2ac021b5591c9285e1da6122124
Parents: df48b65
Author: Alena Prokharchyk <al...@citrix.com>
Authored: Thu Apr 4 11:28:14 2013 -0700
Committer: Alena Prokharchyk <al...@citrix.com>
Committed: Thu Apr 4 13:29:17 2013 -0700

----------------------------------------------------------------------
 api/src/com/cloud/network/NetworkModel.java        |    4 +-
 .../network/ExternalFirewallDeviceManagerImpl.java |    4 +-
 .../ExternalLoadBalancerDeviceManagerImpl.java     |   32 ++++++++-------
 server/src/com/cloud/network/NetworkManager.java   |    3 +-
 .../src/com/cloud/network/NetworkManagerImpl.java  |    6 ++-
 server/src/com/cloud/network/NetworkModelImpl.java |    9 ++--
 .../com/cloud/network/guru/DirectNetworkGuru.java  |    6 +-
 .../network/guru/DirectPodBasedNetworkGuru.java    |    9 ++--
 .../router/VirtualNetworkApplianceManagerImpl.java |   10 +----
 .../src/com/cloud/upgrade/dao/Upgrade410to420.java |    2 +-
 server/src/com/cloud/vm/NicVO.java                 |    6 ++-
 server/src/com/cloud/vm/dao/NicDao.java            |    1 +
 server/src/com/cloud/vm/dao/NicDaoImpl.java        |    9 ++++
 .../com/cloud/network/MockNetworkManagerImpl.java  |    3 +-
 .../com/cloud/network/MockNetworkModelImpl.java    |    8 ++--
 .../test/com/cloud/vpc/MockNetworkManagerImpl.java |    3 +-
 .../test/com/cloud/vpc/MockNetworkModelImpl.java   |    8 ++--
 17 files changed, 67 insertions(+), 56 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/42ffac3a/api/src/com/cloud/network/NetworkModel.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/NetworkModel.java b/api/src/com/cloud/network/NetworkModel.java
index c1f1674..4d7d714 100644
--- a/api/src/com/cloud/network/NetworkModel.java
+++ b/api/src/com/cloud/network/NetworkModel.java
@@ -260,7 +260,7 @@ public interface NetworkModel {
 
 	String getStartIpv6Address(long id);
 
-    Nic getPlaceholderNic(Network network, Long podId);
-
     boolean isProviderEnabledInZone(long zoneId, String provider);
+
+    Nic getPlaceholderNicForRouter(Network network, Long podId);
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/42ffac3a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java
index ae00bf2..1fc32d0 100644
--- a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java
+++ b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java
@@ -483,7 +483,7 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl
 
         if (add && (!reservedIpAddressesForGuestNetwork.contains(network.getGateway()))) {
             // Insert a new NIC for this guest network to reserve the gateway address
-            _networkMgr.savePlaceholderNic(network,  network.getGateway());
+            _networkMgr.savePlaceholderNic(network,  network.getGateway(), null);
         }
         
         // Delete any mappings used for inline external load balancers in this network
@@ -501,7 +501,7 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl
         if (!add) {
             List<NicVO> nics = _nicDao.listByNetworkId(network.getId());
             for (NicVO nic : nics) {
-                if (nic.getReservationStrategy().equals(ReservationStrategy.PlaceHolder) && nic.getIp4Address().equals(network.getGateway())) {
+                if (nic.getVmType() == null && nic.getReservationStrategy().equals(ReservationStrategy.PlaceHolder) && nic.getIp4Address().equals(network.getGateway())) {
                     s_logger.debug("Removing placeholder nic " + nic + " for the network " + network);
                     _nicDao.remove(nic.getId());
                 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/42ffac3a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java
index 4853256..7666397 100644
--- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java
+++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java
@@ -111,7 +111,6 @@ import com.cloud.user.dao.AccountDao;
 import com.cloud.user.dao.UserStatisticsDao;
 import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.component.AdapterBase;
-import com.cloud.utils.component.ComponentContext;
 import com.cloud.utils.db.DB;
 import com.cloud.utils.db.GlobalLock;
 import com.cloud.utils.db.Transaction;
@@ -119,18 +118,10 @@ import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.utils.net.NetUtils;
 import com.cloud.utils.net.UrlUtil;
 import com.cloud.vm.Nic;
+import com.cloud.vm.Nic.ReservationStrategy;
 import com.cloud.vm.NicVO;
 import com.cloud.vm.dao.DomainRouterDao;
 import com.cloud.vm.dao.NicDao;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.response.ExternalLoadBalancerResponse;
-import org.apache.cloudstack.network.ExternalNetworkDeviceManager.NetworkDevice;
-import org.apache.log4j.Logger;
-
-import javax.inject.Inject;
-import javax.naming.ConfigurationException;
-import java.net.URI;
-import java.util.*;
 
 public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase implements ExternalLoadBalancerDeviceManager, ResourceStateAdapter {
 
@@ -783,7 +774,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
                 // If a NIC doesn't exist for the load balancing IP address, create one
                 loadBalancingIpNic = _nicDao.findByIp4AddressAndNetworkId(loadBalancingIpAddress, network.getId());
                 if (loadBalancingIpNic == null) {
-                    loadBalancingIpNic = _networkMgr.savePlaceholderNic(network, loadBalancingIpAddress);
+                    loadBalancingIpNic = _networkMgr.savePlaceholderNic(network, loadBalancingIpAddress, null);
                 }
 
                 // Save a mapping between the source IP address and the load balancing IP address NIC
@@ -992,7 +983,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
 
         if (add) {
 		    // on restart network, network could have already been implemented. If already implemented then return
-            Nic selfipNic = _networkModel.getPlaceholderNic(guestConfig, null);
+            Nic selfipNic = getPlaceholderNic(guestConfig);
             if (selfipNic != null) {
 		    return true;
             }
@@ -1006,7 +997,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
             }
         } else {
             // get the self-ip used by the load balancer
-            Nic selfipNic = _networkModel.getPlaceholderNic(guestConfig, null);
+            Nic selfipNic = getPlaceholderNic(guestConfig);
             if (selfipNic == null) {
                 s_logger.warn("Network shutdwon requested on external load balancer element, which did not implement the network." +
                         " Either network implement failed half way through or already network shutdown is completed. So just returning.");
@@ -1034,10 +1025,10 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
 
         if (add) {
             // Insert a new NIC for this guest network to reserve the self IP
-            _networkMgr.savePlaceholderNic(guestConfig, selfIp);
+            _networkMgr.savePlaceholderNic(guestConfig, selfIp, null);
         } else {
             // release the self-ip obtained from guest network
-            Nic selfipNic = _networkModel.getPlaceholderNic(guestConfig, null);
+            Nic selfipNic = getPlaceholderNic(guestConfig);
             _nicDao.remove(selfipNic.getId());
 
             // release the load balancer allocated for the network
@@ -1211,4 +1202,15 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
         return answer.getLoadBalancers();
     }
 
+    private NicVO getPlaceholderNic(Network network) {
+        List<NicVO> guestIps = _nicDao.listByNetworkId(network.getId());
+        for (NicVO guestIp : guestIps) {
+            // only external firewall and external load balancer will create NicVO with PlaceHolder reservation strategy
+            if (guestIp.getReservationStrategy().equals(ReservationStrategy.PlaceHolder) && guestIp.getVmType() == null
+                    && guestIp.getReserver() == null && !guestIp.getIp4Address().equals(network.getGateway())) {
+                return guestIp;
+            }
+        }
+        return null;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/42ffac3a/server/src/com/cloud/network/NetworkManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java
index 851f7f5..4af716c 100755
--- a/server/src/com/cloud/network/NetworkManager.java
+++ b/server/src/com/cloud/network/NetworkManager.java
@@ -55,6 +55,7 @@ import com.cloud.vm.NicVO;
 import com.cloud.vm.ReservationContext;
 import com.cloud.vm.VMInstanceVO;
 import com.cloud.vm.VirtualMachine;
+import com.cloud.vm.VirtualMachine.Type;
 import com.cloud.vm.VirtualMachineProfile;
 
 /**
@@ -345,6 +346,6 @@ public interface NetworkManager  {
     String allocatePublicIpForGuestNic(Long networkId, DataCenter dc, Pod pod, Account caller, String requestedIp) throws InsufficientAddressCapacityException;
     boolean removeVmSecondaryIpsOfNic(long nicId);
 
-    NicVO savePlaceholderNic(Network network, String ip4Address);
+    NicVO savePlaceholderNic(Network network, String ip4Address, Type vmType);
 
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/42ffac3a/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 a16288f..6296011 100755
--- a/server/src/com/cloud/network/NetworkManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkManagerImpl.java
@@ -3488,6 +3488,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
     public void allocateDirectIp(NicProfile nic, DataCenter dc, VirtualMachineProfile<? extends VirtualMachine> vm, Network network,
     							 String requestedIpv4, String requestedIpv6) throws InsufficientVirtualNetworkCapcityException,
             InsufficientAddressCapacityException {
+        //This method allocates direct ip for the Shared network in Advance zones
     	boolean ipv4 = false, ipv6 = false;
     	
     	Transaction txn = Transaction.currentTxn();
@@ -3500,7 +3501,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
     			
     			//Get ip address from the placeholder and don't allocate a new one
     			if (requestedIpv4 != null && vm.getType() == VirtualMachine.Type.DomainRouter) {
-    			    Nic placeholderNic = _networkModel.getPlaceholderNic(network, null);
+    			    Nic placeholderNic = _networkModel.getPlaceholderNicForRouter(network, null);
     			    if (placeholderNic != null) {
     			        IPAddressVO userIp = _ipAddressDao.findByIpAndSourceNetworkId(network.getId(), placeholderNic.getIp4Address());
                         ip = PublicIp.createFromAddrAndVlan(userIp, _vlanDao.findById(userIp.getVlanId()));
@@ -3756,11 +3757,12 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
         }
         
         @Override
-        public NicVO savePlaceholderNic(Network network, String ip4Address) {
+        public NicVO savePlaceholderNic(Network network, String ip4Address, Type vmType) {
             NicVO nic = new NicVO(null, null, network.getId(), null); 
             nic.setIp4Address(ip4Address);
             nic.setReservationStrategy(ReservationStrategy.PlaceHolder);
             nic.setState(Nic.State.Reserved);
+            nic.setVmType(vmType);
             return _nicDao.persist(nic);
         }
         

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/42ffac3a/server/src/com/cloud/network/NetworkModelImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkModelImpl.java b/server/src/com/cloud/network/NetworkModelImpl.java
index d967f33..4c13c91 100644
--- a/server/src/com/cloud/network/NetworkModelImpl.java
+++ b/server/src/com/cloud/network/NetworkModelImpl.java
@@ -92,7 +92,6 @@ import com.cloud.user.Account;
 import com.cloud.user.DomainManager;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.utils.component.AdapterBase;
-import com.cloud.utils.component.ComponentContext;
 import com.cloud.utils.component.ManagerBase;
 import com.cloud.utils.db.DB;
 import com.cloud.utils.db.JoinBuilder;
@@ -2012,12 +2011,12 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel {
     	}
 		return startIpv6;
 	}
-	
+    
     @Override
-    public NicVO getPlaceholderNic(Network network, Long podId) {
-        List<NicVO> nics = _nicDao.listPlaceholderNicsByNetworkId(network.getId());
+    public NicVO getPlaceholderNicForRouter(Network network, Long podId) {
+        List<NicVO> nics = _nicDao.listPlaceholderNicsByNetworkIdAndVmType(network.getId(), VirtualMachine.Type.DomainRouter);
         for (NicVO nic : nics) {
-            if (nic.getVmType() == null && nic.getReserver() == null && nic.getIp4Address() != null && !nic.getIp4Address().equals(network.getGateway())) {
+            if (nic.getReserver() == null && nic.getIp4Address() != null) {
                 if (podId == null) {
                     return nic;
                 } else {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/42ffac3a/server/src/com/cloud/network/guru/DirectNetworkGuru.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/guru/DirectNetworkGuru.java b/server/src/com/cloud/network/guru/DirectNetworkGuru.java
index 2c8acbb..84008c0 100755
--- a/server/src/com/cloud/network/guru/DirectNetworkGuru.java
+++ b/server/src/com/cloud/network/guru/DirectNetworkGuru.java
@@ -227,10 +227,10 @@ public class DirectNetworkGuru extends AdapterBase implements NetworkGuru {
         _networkMgr.allocateDirectIp(nic, dc, vm, network, requestedIp4Addr, requestedIp6Addr);
         //save the placeholder nic if the vm is the Virtual router
         if (vm.getType() == VirtualMachine.Type.DomainRouter) {
-            Nic placeholderNic = _networkModel.getPlaceholderNic(network, null);
+            Nic placeholderNic = _networkModel.getPlaceholderNicForRouter(network, null);
             if (placeholderNic == null) {
                 s_logger.debug("Saving placeholder nic with ip4 address " + nic.getIp4Address() + " and ipv6 address " + requestedIp6Addr + " for the network " + network);
-                _networkMgr.savePlaceholderNic(network, nic.getIp4Address());
+                _networkMgr.savePlaceholderNic(network, nic.getIp4Address(), VirtualMachine.Type.DomainRouter);
             }
         }
         txn.commit();
@@ -259,7 +259,7 @@ public class DirectNetworkGuru extends AdapterBase implements NetworkGuru {
                 txn.start();
                 
                 // if the ip address a part of placeholder, don't release it
-                Nic placeholderNic = _networkModel.getPlaceholderNic(network, null);
+                Nic placeholderNic = _networkModel.getPlaceholderNicForRouter(network, null);
                 if (placeholderNic != null && placeholderNic.getIp4Address().equalsIgnoreCase(ip.getAddress().addr())) {
                     s_logger.debug("Not releasing direct ip " + ip.getId() +" yet as its ip is saved in the placeholder");
                 } else {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/42ffac3a/server/src/com/cloud/network/guru/DirectPodBasedNetworkGuru.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/guru/DirectPodBasedNetworkGuru.java b/server/src/com/cloud/network/guru/DirectPodBasedNetworkGuru.java
index d74cd06..cf27986 100755
--- a/server/src/com/cloud/network/guru/DirectPodBasedNetworkGuru.java
+++ b/server/src/com/cloud/network/guru/DirectPodBasedNetworkGuru.java
@@ -1,3 +1,4 @@
+
 // Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -173,7 +174,7 @@ public class DirectPodBasedNetworkGuru extends DirectNetworkGuru {
             }
             //Get ip address from the placeholder and don't allocate a new one
             if (vm.getType() == VirtualMachine.Type.DomainRouter) {
-                Nic placeholderNic = _networkModel.getPlaceholderNic(network, null);
+                Nic placeholderNic = _networkModel.getPlaceholderNicForRouter(network, pod.getId());
                 if (placeholderNic != null) {
                     IPAddressVO userIp = _ipAddressDao.findByIpAndSourceNetworkId(network.getId(), placeholderNic.getIp4Address());
                     ip = PublicIp.createFromAddrAndVlan(userIp, _vlanDao.findById(userIp.getVlanId()));
@@ -199,10 +200,10 @@ public class DirectPodBasedNetworkGuru extends DirectNetworkGuru {
             
             //save the placeholder nic if the vm is the Virtual router
             if (vm.getType() == VirtualMachine.Type.DomainRouter) {
-                Nic placeholderNic = _networkModel.getPlaceholderNic(network, null);
+                Nic placeholderNic = _networkModel.getPlaceholderNicForRouter(network, pod.getId());
                 if (placeholderNic == null) {
-                    s_logger.debug("Saving placeholder nic with ip4 address " + nic.getIp4Address() + " for the network " + network + " with the gateway " + podRangeGateway);
-                    _networkMgr.savePlaceholderNic(network, nic.getIp4Address());
+                    s_logger.debug("Saving placeholder nic with ip4 address " + nic.getIp4Address() + " for the network " + network);
+                    _networkMgr.savePlaceholderNic(network, nic.getIp4Address(), VirtualMachine.Type.DomainRouter);
                 }
             }
             txn.commit();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/42ffac3a/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 afdbbca..ab91059 100755
--- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -1708,15 +1708,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
             String defaultNetworkStartIp = null, defaultNetworkStartIpv6 = null;
             if (!setupPublicNetwork) {
             	if (guestNetwork.getCidr() != null) {
-            	    //Check the placeholder nic, and if it's ip address is not empty, allocate it from there
-            	    String requestedGateway = null;
-            	    if (guestNetwork.getGateway() != null) {
-            	        requestedGateway = guestNetwork.getGateway();
-            	    } else if (plan != null && plan.getPodId() != null) {
-            	        Pod pod = _configMgr.getPod(plan.getPodId());
-            	        requestedGateway = pod.getGateway();
-            	    }
-            	    Nic placeholder = _networkModel.getPlaceholderNic(guestNetwork, null);
+            	    Nic placeholder = _networkModel.getPlaceholderNicForRouter(guestNetwork, plan.getPodId());
             	    if (placeholder != null) {
             	        s_logger.debug("Requesting ip address " + placeholder.getIp4Address() + " stored in placeholder nic for the network " + guestNetwork);
             	        defaultNetworkStartIp = placeholder.getIp4Address();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/42ffac3a/server/src/com/cloud/upgrade/dao/Upgrade410to420.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/upgrade/dao/Upgrade410to420.java b/server/src/com/cloud/upgrade/dao/Upgrade410to420.java
index 434430a..f39038f 100644
--- a/server/src/com/cloud/upgrade/dao/Upgrade410to420.java
+++ b/server/src/com/cloud/upgrade/dao/Upgrade410to420.java
@@ -248,7 +248,7 @@ public class Upgrade410to420 implements DbUpgrade {
                     String ip = rs.getString(3);
                     String uuid = UUID.randomUUID().toString();
                     //Insert placeholder nic for each Domain router nic in Shared network
-                    pstmt = conn.prepareStatement("INSERT INTO `cloud`.`nics` (uuid, ip4_address, gateway, network_id, state, strategy) VALUES (?, ?, ?, ?, 'Reserved', 'PlaceHolder')");
+                    pstmt = conn.prepareStatement("INSERT INTO `cloud`.`nics` (uuid, ip4_address, gateway, network_id, state, strategy, vm_type) VALUES (?, ?, ?, ?, 'Reserved', 'PlaceHolder', 'DomainRouter')");
                     pstmt.setString(1, uuid);
                     pstmt.setString(2, ip);
                     pstmt.setString(3, gateway);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/42ffac3a/server/src/com/cloud/vm/NicVO.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/NicVO.java b/server/src/com/cloud/vm/NicVO.java
index 987596c..833cec5 100644
--- a/server/src/com/cloud/vm/NicVO.java
+++ b/server/src/com/cloud/vm/NicVO.java
@@ -29,11 +29,9 @@ import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.Table;
 
-import org.apache.cloudstack.api.Identity;
 import com.cloud.network.Networks.AddressFormat;
 import com.cloud.network.Networks.Mode;
 import com.cloud.utils.db.GenericDao;
-import org.apache.cloudstack.api.InternalIdentity;
 
 @Entity
 @Table(name = "nics")
@@ -360,4 +358,8 @@ public class NicVO implements Nic {
     public void setSecondaryIp(boolean secondaryIp) {
         this.secondaryIp = secondaryIp;
     }
+
+    public void setVmType(VirtualMachine.Type vmType) {
+        this.vmType = vmType;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/42ffac3a/server/src/com/cloud/vm/dao/NicDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/dao/NicDao.java b/server/src/com/cloud/vm/dao/NicDao.java
index eb38a8d..67c1e07 100644
--- a/server/src/com/cloud/vm/dao/NicDao.java
+++ b/server/src/com/cloud/vm/dao/NicDao.java
@@ -65,4 +65,5 @@ public interface NicDao extends GenericDao<NicVO, Long> {
     
     List<NicVO> listPlaceholderNicsByNetworkId(long networkId);
     
+    List<NicVO> listPlaceholderNicsByNetworkIdAndVmType(long networkId, VirtualMachine.Type vmType);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/42ffac3a/server/src/com/cloud/vm/dao/NicDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/dao/NicDaoImpl.java b/server/src/com/cloud/vm/dao/NicDaoImpl.java
index b427d4e..c70d194 100644
--- a/server/src/com/cloud/vm/dao/NicDaoImpl.java
+++ b/server/src/com/cloud/vm/dao/NicDaoImpl.java
@@ -229,4 +229,13 @@ public class NicDaoImpl extends GenericDaoBase<NicVO, Long> implements NicDao {
         return listBy(sc);
     }
 
+    @Override
+    public List<NicVO> listPlaceholderNicsByNetworkIdAndVmType(long networkId, VirtualMachine.Type vmType) {
+        SearchCriteria<NicVO> sc = AllFieldsSearch.create();
+        sc.setParameters("network", networkId);
+        sc.setParameters("strategy", Nic.ReservationStrategy.PlaceHolder.toString());
+        sc.setParameters("vmType", vmType);
+        return listBy(sc);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/42ffac3a/server/test/com/cloud/network/MockNetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/network/MockNetworkManagerImpl.java b/server/test/com/cloud/network/MockNetworkManagerImpl.java
index 6da48ec..18eae08 100755
--- a/server/test/com/cloud/network/MockNetworkManagerImpl.java
+++ b/server/test/com/cloud/network/MockNetworkManagerImpl.java
@@ -71,6 +71,7 @@ import com.cloud.vm.NicVO;
 import com.cloud.vm.ReservationContext;
 import com.cloud.vm.VMInstanceVO;
 import com.cloud.vm.VirtualMachine;
+import com.cloud.vm.VirtualMachine.Type;
 import com.cloud.vm.VirtualMachineProfile;
 import com.cloud.vm.VirtualMachineProfileImpl;
 
@@ -884,7 +885,7 @@ public class MockNetworkManagerImpl extends ManagerBase implements NetworkManage
     }
 
     @Override
-    public NicVO savePlaceholderNic(Network network, String ip4Address) {
+    public NicVO savePlaceholderNic(Network network, String ip4Address, Type vmType) {
         // TODO Auto-generated method stub
         return null;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/42ffac3a/server/test/com/cloud/network/MockNetworkModelImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/network/MockNetworkModelImpl.java b/server/test/com/cloud/network/MockNetworkModelImpl.java
index c578965..511249f 100644
--- a/server/test/com/cloud/network/MockNetworkModelImpl.java
+++ b/server/test/com/cloud/network/MockNetworkModelImpl.java
@@ -840,14 +840,14 @@ public class MockNetworkModelImpl extends ManagerBase implements NetworkModel {
 	}
 
     @Override
-    public Nic getPlaceholderNic(Network network, Long podId) {
+    public boolean isProviderEnabledInZone(long zoneId, String provider) {
         // TODO Auto-generated method stub
-        return null;
+        return false;
     }
 
     @Override
-    public boolean isProviderEnabledInZone(long zoneId, String provider) {
+    public Nic getPlaceholderNicForRouter(Network network, Long podId) {
         // TODO Auto-generated method stub
-        return false;
+        return null;
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/42ffac3a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java
index ead0051..bd4fd67 100644
--- a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java
+++ b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java
@@ -87,6 +87,7 @@ import com.cloud.vm.NicVO;
 import com.cloud.vm.ReservationContext;
 import com.cloud.vm.VMInstanceVO;
 import com.cloud.vm.VirtualMachine;
+import com.cloud.vm.VirtualMachine.Type;
 import com.cloud.vm.VirtualMachineProfile;
 import com.cloud.vm.VirtualMachineProfileImpl;
 
@@ -1418,7 +1419,7 @@ public class MockNetworkManagerImpl extends ManagerBase implements NetworkManage
 
 
     @Override
-    public NicVO savePlaceholderNic(Network network, String ip4Address) {
+    public NicVO savePlaceholderNic(Network network, String ip4Address, Type vmType) {
         // TODO Auto-generated method stub
         return null;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/42ffac3a/server/test/com/cloud/vpc/MockNetworkModelImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vpc/MockNetworkModelImpl.java b/server/test/com/cloud/vpc/MockNetworkModelImpl.java
index e1534cb..9857964 100644
--- a/server/test/com/cloud/vpc/MockNetworkModelImpl.java
+++ b/server/test/com/cloud/vpc/MockNetworkModelImpl.java
@@ -852,15 +852,15 @@ public class MockNetworkModelImpl extends ManagerBase implements NetworkModel {
 	}
 
     @Override
-    public Nic getPlaceholderNic(Network network, Long podId) {
+    public boolean isProviderEnabledInZone(long zoneId, String provider) {
         // TODO Auto-generated method stub
-        return null;
+        return false;
     }
 
     @Override
-    public boolean isProviderEnabledInZone(long zoneId, String provider) {
+    public Nic getPlaceholderNicForRouter(Network network, Long podId) {
         // TODO Auto-generated method stub
-        return false;
+        return null;
     }
 
 }