Updated Branches:
  refs/heads/vpc 4dd71cb63 -> a1acfd3bf

Merge branch 'master' into vpc

Conflicts:
        api/src/com/cloud/api/ApiConstants.java
        api/src/com/cloud/network/Network.java
        client/tomcatconf/components.xml.in
        
plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
        server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java
        server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
        server/src/com/cloud/network/NetworkManagerImpl.java
        server/src/com/cloud/network/guru/GuestNetworkGuru.java
        
server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
        server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
        setup/db/create-schema.sql


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

Branch: refs/heads/vpc
Commit: a1acfd3bfa66adccb8a98a1f4457ef626cba8f8b
Parents: 4dd71cb 3d7f6a3
Author: Alena Prokharchyk <[email protected]>
Authored: Fri Jul 13 13:45:28 2012 -0700
Committer: Alena Prokharchyk <[email protected]>
Committed: Fri Jul 13 13:52:58 2012 -0700

----------------------------------------------------------------------
 api/src/com/cloud/agent/api/to/NicTO.java          |   11 +
 .../com/cloud/agent/api/to/VirtualMachineTO.java   |   11 +
 api/src/com/cloud/api/ApiConstants.java            |    3 +
 api/src/com/cloud/host/Host.java                   |    3 +-
 api/src/com/cloud/network/Network.java             |    2 +
 api/src/com/cloud/network/Networks.java            |    1 +
 api/src/com/cloud/network/PhysicalNetwork.java     |    3 +-
 build/build-cloud-plugins.xml                      |   10 +-
 build/package.xml                                  |    1 +
 client/tomcatconf/components.xml.in                |    5 +
 .../tomcatconf/nicira-nvp_commands.properties.in   |   12 +
 cloud.spec                                         |    1 +
 .../xen/resource/CitrixResourceBase.java           |   10 +
 .../network/lb/ElasticLoadBalancerManagerImpl.java |    8 +
 plugins/network-elements/nicira-nvp/.classpath     |   12 +
 plugins/network-elements/nicira-nvp/.project       |   17 +
 .../nicira-nvp/README.NiciraIntegration            |   68 ++
 plugins/network-elements/nicira-nvp/build.xml      |  129 ++++
 .../cloud/agent/api/CreateLogicalSwitchAnswer.java |   20 +
 .../agent/api/CreateLogicalSwitchCommand.java      |   38 ++
 .../agent/api/CreateLogicalSwitchPortAnswer.java   |   20 +
 .../agent/api/CreateLogicalSwitchPortCommand.java  |   42 ++
 .../cloud/agent/api/DeleteLogicalSwitchAnswer.java |   14 +
 .../agent/api/DeleteLogicalSwitchCommand.java      |   19 +
 .../agent/api/DeleteLogicalSwitchPortAnswer.java   |   14 +
 .../agent/api/DeleteLogicalSwitchPortCommand.java  |   25 +
 .../cloud/agent/api/StartupNiciraNvpCommand.java   |   11 +
 .../cloud/api/commands/AddNiciraNvpDeviceCmd.java  |  110 ++++
 .../api/commands/DeleteNiciraNvpDeviceCmd.java     |   76 +++
 .../commands/ListNiciraNvpDeviceNetworksCmd.java   |   85 +++
 .../api/commands/ListNiciraNvpDevicesCmd.java      |   90 +++
 .../api/response/NiciraNvpDeviceResponse.java      |   37 ++
 .../src/com/cloud/network/NiciraNvpDeviceVO.java   |   79 +++
 .../com/cloud/network/NiciraNvpNicMappingVO.java   |   65 ++
 .../src/com/cloud/network/dao/NiciraNvpDao.java    |   16 +
 .../com/cloud/network/dao/NiciraNvpDaoImpl.java    |   32 +
 .../cloud/network/dao/NiciraNvpNicMappingDao.java  |   13 +
 .../network/dao/NiciraNvpNicMappingDaoImpl.java    |   30 +
 .../cloud/network/element/NiciraNvpElement.java    |  502 +++++++++++++++
 .../network/element/NiciraNvpElementService.java   |   28 +
 .../network/guru/NiciraNvpGuestNetworkGuru.java    |  257 ++++++++
 .../src/com/cloud/network/nicira/Attachment.java   |   22 +
 .../com/cloud/network/nicira/LogicalSwitch.java    |   99 +++
 .../cloud/network/nicira/LogicalSwitchPort.java    |  118 ++++
 .../src/com/cloud/network/nicira/NiciraNvpApi.java |  413 ++++++++++++
 .../network/nicira/NiciraNvpApiException.java      |   20 +
 .../com/cloud/network/nicira/NiciraNvpList.java    |   25 +
 .../src/com/cloud/network/nicira/NiciraNvpTag.java |   47 ++
 .../cloud/network/nicira/TransportZoneBinding.java |   47 ++
 .../com/cloud/network/nicira/VifAttachment.java    |   43 ++
 .../cloud/network/resource/NiciraNvpResource.java  |  240 +++++++
 .../cloud/network/guru/OvsGuestNetworkGuru.java    |   28 +
 .../manager/allocator/impl/FirstFitAllocator.java  |    8 +
 .../AgentBasedConsoleProxyManager.java             |    8 +
 .../consoleproxy/ConsoleProxyManagerImpl.java      |    9 +
 server/src/com/cloud/host/dao/HostDaoImpl.java     |    4 +-
 .../com/cloud/hypervisor/HypervisorGuruBase.java   |   15 +
 .../network/ExternalNetworkDeviceManager.java      |    2 +
 .../src/com/cloud/network/NetworkManagerImpl.java  |    6 +-
 .../network/guru/ExternalGuestNetworkGuru.java     |   30 +-
 .../com/cloud/network/guru/GuestNetworkGuru.java   |   53 ++-
 .../router/VirtualNetworkApplianceManagerImpl.java |   14 +
 server/src/com/cloud/server/StatsCollector.java    |    1 +
 server/src/com/cloud/storage/StorageManager.java   |    2 +-
 .../src/com/cloud/storage/StorageManagerImpl.java  |   30 +-
 .../secondary/SecondaryStorageManagerImpl.java     |    9 +
 server/src/com/cloud/vm/UserVmManagerImpl.java     |    8 +
 server/src/com/cloud/vm/VirtualMachineGuru.java    |    2 +
 .../com/cloud/vm/VirtualMachineManagerImpl.java    |    9 +-
 .../test/com/cloud/vm/MockUserVmManagerImpl.java   |    6 +
 setup/db/create-schema.sql                         |   22 +
 tools/devcloud/devcloudsetup.sh                    |   10 +-
 ui/css/cloudstack3.css                             |  100 +++-
 ui/scripts/ui-custom/zoneWizard.js                 |   13 +-
 ui/scripts/ui/widgets/detailView.js                |   14 +-
 ui/scripts/ui/widgets/listView.js                  |   10 +-
 wscript_configure                                  |    2 +-
 77 files changed, 3373 insertions(+), 46 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a1acfd3b/api/src/com/cloud/api/ApiConstants.java
----------------------------------------------------------------------
diff --cc api/src/com/cloud/api/ApiConstants.java
index a504c48,e410576..732fe81
--- a/api/src/com/cloud/api/ApiConstants.java
+++ b/api/src/com/cloud/api/ApiConstants.java
@@@ -365,15 -361,10 +365,18 @@@ public class ApiConstants 
      public static final String RESOURCE_IDS = "resourceids";
      public static final String RESOURCE_ID = "resourceid";
      public static final String CUSTOMER = "customer";
 +    public static final String S2S_VPN_GATEWAY_ID = "s2svpngatewayid";
 +    public static final String S2S_CUSTOMER_GATEWAY_ID = 
"s2scustomergatewayid";
 +    public static final String IPSEC_PSK = "ipsecpsk";
 +    public static final String GUEST_IP = "guestip";
 +    public static final String REMOVED = "removed";
 +    public static final String IKE_POLICY = "ikepolicy";
 +    public static final String ESP_POLICY = "esppolicy";
 +    public static final String LIFETIME = "lifetime";
 +    public static final String FOR_VPC = "forvpc";
+     public static final String NICIRA_NVP_DEVICE_ID = "nvpdeviceid";
+     public static final String NICIRA_NVP_TRANSPORT_ZONE_UUID = 
"transportzoneuuid";
+     public static final String NICIRA_NVP_DEVICE_NAME = "niciradevicename";
 -
      
      public enum HostDetails {
          all, capacity, events, stats, min;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a1acfd3b/api/src/com/cloud/network/Network.java
----------------------------------------------------------------------
diff --cc api/src/com/cloud/network/Network.java
index a46c266,459b05b..b3461b5
--- a/api/src/com/cloud/network/Network.java
+++ b/api/src/com/cloud/network/Network.java
@@@ -55,7 -52,7 +55,8 @@@ public interface Network extends Contro
          public static final Service StaticNat = new Service("StaticNat", 
Capability.ElasticIp);
          public static final Service PortForwarding = new 
Service("PortForwarding");
          public static final Service SecurityGroup = new 
Service("SecurityGroup");
 +        public static final Service NetworkACL = new Service("NetworkACL", 
Capability.SupportedProtocols);
+         public static final Service Connectivity = new 
Service("Connectivity");
  
          private String name;
          private Capability[] caps;
@@@ -117,8 -114,8 +118,9 @@@
          public static final Provider ExternalGateWay = new 
Provider("ExternalGateWay", true);
          public static final Provider ElasticLoadBalancerVm = new 
Provider("ElasticLoadBalancerVm", false);
          public static final Provider SecurityGroupProvider = new 
Provider("SecurityGroupProvider", false);
 +        public static final Provider VPCVirtualRouter = new 
Provider("VpcVirtualRouter", false);
          public static final Provider None = new Provider("None", false);
+         public static final Provider NiciraNvp = new Provider("NiciraNvp", 
true);
  
          private String name;
          private boolean isExternal;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a1acfd3b/client/tomcatconf/components.xml.in
----------------------------------------------------------------------
diff --cc client/tomcatconf/components.xml.in
index 69f896f,16d7b19..e9c4819
--- a/client/tomcatconf/components.xml.in
+++ b/client/tomcatconf/components.xml.in
@@@ -78,7 -78,7 +78,8 @@@
              <adapter name="DirectNetworkGuru" 
class="com.cloud.network.guru.DirectNetworkGuru"/>
              <adapter name="DirectPodBasedNetworkGuru" 
class="com.cloud.network.guru.DirectPodBasedNetworkGuru"/>
              <adapter name="OvsGuestNetworkGuru" 
class="com.cloud.network.guru.OvsGuestNetworkGuru"/>
 +            <adapter name="PrivateNetworkGuru" 
class="com.cloud.network.guru.PrivateNetworkGuru"/>
+             <adapter name="NiciraNvpGuestNetworkGuru" 
class="com.cloud.network.guru.NiciraNvpGuestNetworkGuru"/>
          </adapters>
          <adapters key="com.cloud.cluster.ClusterServiceAdapter">
              <adapter name="ClusterService" 
class="com.cloud.cluster.ClusterServiceServletAdapter"/>
@@@ -143,7 -143,7 +144,8 @@@
              <adapter name="BareMetal" 
class="com.cloud.network.element.BareMetalElement"/>
              <adapter name="SecurityGroupProvider" 
class="com.cloud.network.element.SecurityGroupElement"/>
              <adapter name="CiscoNexus1000vVSM" 
class="com.cloud.network.element.CiscoNexusVSMElement"/>
 +            <adapter name="VpcVirtualRouter" 
class="com.cloud.network.element.VpcVirtualRouterElement"/>
+             <adapter name="NiciraNvp" 
class="com.cloud.network.element.NiciraNvpElement"/>
          </adapters>
          <adapters key="com.cloud.cluster.agentlb.AgentLoadBalancerPlanner">
              <adapter name="ClusterBasedAgentLbPlanner" 
class="com.cloud.cluster.agentlb.ClusterBasedAgentLoadBalancerPlanner"/>

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a1acfd3b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
----------------------------------------------------------------------
diff --cc 
plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
index bbd456f,c81d461..83de224
--- 
a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
+++ 
b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
@@@ -797,7 -770,12 +802,12 @@@ public abstract class CitrixResourceBas
          vifr.VM = vm;
          vifr.device = Integer.toString(nic.getDeviceId());
          vifr.MAC = nic.getMac();
 -        
 +
+         // Nicira needs these IDs to find the NIC 
+         vifr.otherConfig = new HashMap<String, String>();
+         vifr.otherConfig.put("nicira-iface-id", nic.getUuid());
+         vifr.otherConfig.put("nicira-vm-id", vm.getUuid(conn));
+         
          vifr.network = getNetwork(conn, nic);
  
          if (nic.getNetworkRateMbps() != null && 
nic.getNetworkRateMbps().intValue() != -1) {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a1acfd3b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
----------------------------------------------------------------------
diff --cc 
plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
index 216c8f1,8d1963d..e4d52f5
--- 
a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
+++ 
b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
@@@ -1008,20 -987,13 +1008,28 @@@ public class ElasticLoadBalancerManager
  
          return VirtualMachineName.getSystemVmId(vmName);
      }
 +    
 +    @Override
 +    public boolean plugNic(Network network, NicTO nic, VirtualMachineTO vm,
 +            ReservationContext context, DeployDestination dest) throws 
ConcurrentOperationException, ResourceUnavailableException,
 +            InsufficientCapacityException {
 +        //not supported
 +        throw new UnsupportedOperationException("Plug nic is not supported 
for vm of type " + vm.getType());
 +    }
  
  
 -      @Override
 -      public boolean recreateNeeded(
 -                      VirtualMachineProfile<DomainRouterVO> profile, long 
hostId,
 -                      Commands cmds, ReservationContext context) {
 -              // TODO Auto-generated method stub
 -              return false;
 -      }
 +    @Override
 +    public boolean unplugNic(Network network, NicTO nic, VirtualMachineTO vm,
 +            ReservationContext context, DeployDestination dest) throws 
ConcurrentOperationException, ResourceUnavailableException {
 +        //not supported
 +        throw new UnsupportedOperationException("Unplug nic is not supported 
for vm of type " + vm.getType());
++     }
++
++
++    @Override
++    public boolean recreateNeeded(
++        VirtualMachineProfile<DomainRouterVO> profile, long hostId, Commands 
cmds, ReservationContext context) {
++      // TODO Auto-generated method stub
++      return false;
 +    }
  }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a1acfd3b/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java
index b23476e,6d20fb2..1a09503
--- a/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java
+++ b/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java
@@@ -352,19 -346,11 +352,27 @@@ public class AgentBasedConsoleProxyMana
      public void finalizeExpunge(ConsoleProxyVO proxy) {
      }
  
 -      @Override
 +    @Override
 +    public boolean plugNic(Network network, NicTO nic, VirtualMachineTO vm,
 +            ReservationContext context, DeployDestination dest) throws 
ConcurrentOperationException, ResourceUnavailableException,
 +            InsufficientCapacityException {
 +        //not supported
 +        throw new UnsupportedOperationException("Plug nic is not supported 
for vm of type " + vm.getType());
 +    }
 +
 +
 +    @Override
 +    public boolean unplugNic(Network network, NicTO nic, VirtualMachineTO vm,
 +            ReservationContext context, DeployDestination dest) throws 
ConcurrentOperationException, ResourceUnavailableException {
 +        //not supported
 +        throw new UnsupportedOperationException("Unplug nic is not supported 
for vm of type " + vm.getType());
 +    }
++    
++    @Override
+       public boolean recreateNeeded(
+                       VirtualMachineProfile<ConsoleProxyVO> profile, long 
hostId,
+                       Commands cmds, ReservationContext context) {
+               // TODO Auto-generated method stub
+               return false;
 -      }
 -}
++    }
 +}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a1acfd3b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
index 1d160db,ec4f685..326dbb4
--- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
+++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
@@@ -2008,19 -2007,11 +2008,28 @@@ public class ConsoleProxyManagerImpl im
          return _hashKey;
      }
  
 -      @Override
 -      public boolean recreateNeeded(
 +    @Override
 +    public boolean plugNic(Network network, NicTO nic, VirtualMachineTO vm,
 +            ReservationContext context, DeployDestination dest) throws 
ConcurrentOperationException, ResourceUnavailableException,
 +            InsufficientCapacityException {
 +        //not supported
 +        throw new UnsupportedOperationException("Plug nic is not supported 
for vm of type " + vm.getType());
 +    }
 +
 +
 +    @Override
 +    public boolean unplugNic(Network network, NicTO nic, VirtualMachineTO vm,
 +            ReservationContext context, DeployDestination dest) throws 
ConcurrentOperationException, ResourceUnavailableException {
 +        //not supported
 +        throw new UnsupportedOperationException("Unplug nic is not supported 
for vm of type " + vm.getType());
 +    }
++    
++    
++    @Override
++    public boolean recreateNeeded(
+                       VirtualMachineProfile<ConsoleProxyVO> profile, long 
hostId,
+                       Commands cmds, ReservationContext context) {
+               // TODO Auto-generated method stub
+               return false;
 -      }
++    }
  }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a1acfd3b/server/src/com/cloud/hypervisor/HypervisorGuruBase.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a1acfd3b/server/src/com/cloud/network/NetworkManagerImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a1acfd3b/server/src/com/cloud/network/guru/GuestNetworkGuru.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/guru/GuestNetworkGuru.java
index 714dd50,cd5f551..d1dc286
--- a/server/src/com/cloud/network/guru/GuestNetworkGuru.java
+++ b/server/src/com/cloud/network/guru/GuestNetworkGuru.java
@@@ -41,16 -42,19 +42,17 @@@ import com.cloud.exception.Insufficient
  import com.cloud.exception.InvalidParameterValueException;
  import com.cloud.network.IPAddressVO;
  import com.cloud.network.Network;
--import com.cloud.network.Network.GuestType;
  import com.cloud.network.Network.State;
  import com.cloud.network.NetworkManager;
  import com.cloud.network.NetworkProfile;
  import com.cloud.network.NetworkVO;
 -import com.cloud.network.PhysicalNetwork;
 -import com.cloud.network.PhysicalNetwork.IsolationMethod;
 -import com.cloud.network.PhysicalNetworkVO;
  import com.cloud.network.Networks.AddressFormat;
  import com.cloud.network.Networks.BroadcastDomainType;
 -import com.cloud.network.Networks.IsolationType;
  import com.cloud.network.Networks.Mode;
  import com.cloud.network.Networks.TrafficType;
++import com.cloud.network.PhysicalNetwork;
++import com.cloud.network.PhysicalNetwork.IsolationMethod;
 +import com.cloud.network.PhysicalNetworkVO;
  import com.cloud.network.dao.IPAddressDao;
  import com.cloud.network.dao.NetworkDao;
  import com.cloud.network.dao.PhysicalNetworkDao;
@@@ -93,7 -97,10 +95,10 @@@ public abstract class GuestNetworkGuru 
      Random _rand = new Random(System.currentTimeMillis());
  
      private static final TrafficType[] _trafficTypes = {TrafficType.Guest};
 -    
 +
+     // Currently set to anything except STT for the Nicira integration.
+     protected IsolationMethod[] _isolationMethods;
+     
      String _defaultGateway;
      String _defaultCidr;
  
@@@ -115,15 -123,44 +121,50 @@@
      public TrafficType[] getSupportedTrafficType() {
          return _trafficTypes;
      }
 -    
 +
-     protected boolean canHandle(NetworkOffering offering, DataCenter dc) {
+     public boolean isMyIsolationMethod(PhysicalNetwork physicalNetwork) {
+         if (physicalNetwork == null) {
+             // Can't tell if there is no physical network
+             return false;
+         }
+         
+         List<String> methods = physicalNetwork.getIsolationMethods();
+         if (methods.isEmpty()) {
+             // The empty isolation method is assumed to be VLAN
+             s_logger.debug("Empty physical isolation type for physical 
network " + physicalNetwork.getUuid());
+             methods = new ArrayList<String>(1);
+             methods.add("VLAN");
+         }
+         
+         for (IsolationMethod m : _isolationMethods) {
+             if (methods.contains(m.toString())) {
+                 return true;
+             }
+         }
+         
+         return false;
+     }
+     
+     public IsolationMethod[] getIsolationMethods() {
+         return _isolationMethods;
+     }
+ 
+     protected abstract boolean canHandle(NetworkOffering offering, final 
NetworkType networkType, PhysicalNetwork physicalNetwork);
+ /*    protected boolean canHandle(NetworkOffering offering, final NetworkType 
networkType, final List<String> isolationMethods) {
          // This guru handles only Guest Isolated network that supports Source 
nat service
++<<<<<<< HEAD
 +        if (dc.getNetworkType() == NetworkType.Advanced && 
isMyTrafficType(offering.getTrafficType()) 
 +                && offering.getGuestType() == Network.GuestType.Isolated && 
!offering.isSystemOnly()) {
++=======
+         if (networkType == NetworkType.Advanced 
+                 && isMyTrafficType(offering.getTrafficType()) 
+                 && offering.getGuestType() == Network.GuestType.Isolated
+                 && isMyIsolationMethod(isolationMethods)) {
++>>>>>>> master
              return true;
          } else {
 -            s_logger.trace("We only take care of Guest networks of type   " + 
GuestType.Isolated + " in zone of type " + NetworkType.Advanced);
 +            s_logger.trace("We only take care of non-system Guest networks of 
type   " + GuestType.Isolated + " in zone of type "
 +                    + NetworkType.Advanced);
              return false;
          }
      }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a1acfd3b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------
diff --cc 
server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
index 544ca73,766c769..41ce6cc
--- 
a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ 
b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@@ -3185,26 -2972,17 +3185,40 @@@ public class VirtualNetworkApplianceMan
              
          return routerControlIpAddress;
      }
 +    
 +    
 +    protected String getRouterIpInNetwork(long networkId, long instanceId) {
 +        return _nicDao.getIpAddress(networkId, instanceId);
 +    }
 +
  
 +    @Override
 +    public boolean plugNic(Network network, NicTO nic, VirtualMachineTO vm, 
ReservationContext context, DeployDestination dest)
 +            throws ConcurrentOperationException, ResourceUnavailableException,
 +            InsufficientCapacityException {
 +        //not supported
 +        throw new UnsupportedOperationException("Plug nic is not supported 
for vm of type " + vm.getType());
 +    }
 +
++    
 +    @Override
 +    public boolean unplugNic(Network network, NicTO nic, VirtualMachineTO vm, 
ReservationContext context, DeployDestination dest)
 +            throws ConcurrentOperationException, ResourceUnavailableException 
{
 +      //not supported
 +        throw new UnsupportedOperationException("Unplug nic is not supported 
for vm of type " + vm.getType());
 +    }
 +    
++    
+       @Override
+       public boolean recreateNeeded(
+                       VirtualMachineProfile<DomainRouterVO> profile, long 
hostId,
+                       Commands cmds, ReservationContext context) {
+               //asssume that if failed to ssh into router, meaning router is 
crashed
+               CheckSshAnswer answer = (CheckSshAnswer) 
cmds.getAnswer("checkSsh");
+               if (answer == null || !answer.getResult()) {
+                       return true;
+               }
+ 
+               return false;
+       }
  }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a1acfd3b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
----------------------------------------------------------------------
diff --cc 
server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
index 0dd1e42,1121bb1..df897d9
--- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
+++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
@@@ -1452,20 -1450,12 +1452,29 @@@ public class SecondaryStorageManagerImp
          }
          return null;
      }
 +      
 +    @Override
 +    public boolean plugNic(Network network, NicTO nic, VirtualMachineTO vm,
 +            ReservationContext context, DeployDestination dest) throws 
ConcurrentOperationException, ResourceUnavailableException,
 +            InsufficientCapacityException {
 +        //not supported
 +        throw new UnsupportedOperationException("Plug nic is not supported 
for vm of type " + vm.getType());
 +    }
  
 -      @Override
 -      public boolean recreateNeeded(
 +
 +    @Override
 +    public boolean unplugNic(Network network, NicTO nic, VirtualMachineTO vm,
 +            ReservationContext context, DeployDestination dest) throws 
ConcurrentOperationException, ResourceUnavailableException {
 +        //not supported
 +        throw new UnsupportedOperationException("Unplug nic is not supported 
for vm of type " + vm.getType());
 +    }
++
++    
++    @Override
++    public boolean recreateNeeded(
+                       VirtualMachineProfile<SecondaryStorageVmVO> profile, 
long hostId,
+                       Commands cmds, ReservationContext context) {
+               // TODO Auto-generated method stub
+               return false;
 -      }
++    }
  }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a1acfd3b/server/src/com/cloud/vm/UserVmManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/vm/UserVmManagerImpl.java
index 2c17fdc,649e215..917e3e6
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@@ -3552,6 -3534,12 +3552,14 @@@ public class UserVmManagerImpl implemen
          s_logger.info("AssignVM: vm " + vm.getInstanceName() + " now belongs 
to account " + cmd.getAccountName());
          return vm;
      }
++    
++    
+     @Override
+     public boolean recreateNeeded(VirtualMachineProfile<UserVmVO> profile,
+                        long hostId, Commands cmds, ReservationContext 
context) {
+                // TODO Auto-generated method stub
+                return false;
+     }
  
  
      @Override

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a1acfd3b/server/src/com/cloud/vm/VirtualMachineGuru.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a1acfd3b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/vm/VirtualMachineManagerImpl.java
index c85a80f,ac8fd2a..64efd87
--- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
@@@ -809,9 -808,13 +812,13 @@@ public class VirtualMachineManagerImpl 
                                  _haMgr.scheduleStop(vm, destHostId, 
WorkType.ForceStop);
                                  throw new ExecutionException("Unable to stop 
" + vm + " so we are unable to retry the start operation");
                              }
+                             if (vmGuru.recreateNeeded(vmProfile, destHostId, 
cmds, ctx)) {
+                               recreate = true;
+                             } else {
 -                              throw new ExecutionException("Unable to start " 
+ vm + " due to error in finalizeStart, not retrying");
 -                            }
 +                            throw new ExecutionException("Unable to start " + 
vm + " due to error in finalizeStart, not retrying");
                          }
                      }
++                    }
                      s_logger.info("Unable to start VM on " + dest.getHost() + 
" due to " + (startAnswer == null ? " no start answer" : 
startAnswer.getDetails()));
                      
                  } catch (OperationTimedoutException e) {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a1acfd3b/setup/db/create-schema.sql
----------------------------------------------------------------------
diff --cc setup/db/create-schema.sql
index 7cd030d,a15222a..f73410c
--- a/setup/db/create-schema.sql
+++ b/setup/db/create-schema.sql
@@@ -137,10 -137,10 +137,12 @@@ DROP TABLE IF EXISTS `cloud`.`op_dc_sto
  DROP TABLE IF EXISTS `cloud`.`cluster_vsm_map`;
  DROP TABLE IF EXISTS `cloud`.`virtual_supervisor_module`;
  DROP TABLE IF EXISTS `cloud`.`port_profile`;
 +DROP TABLE IF EXISTS `cloud`.`s2s_customer_gateway`;
 +DROP TABLE IF EXISTS `cloud`.`s2s_vpn_gateway`;
 +DROP TABLE IF EXISTS `cloud`.`s2s_vpn_connection`;
+ DROP TABLE IF EXISTS `cloud`,`external_nicira_nvp_devices`;
+ DROP TABLE IF EXISTS `cloud`,`nicira_nvp_nic_map`;
  
 -
  CREATE TABLE `cloud`.`version` (
    `id` bigint unsigned NOT NULL UNIQUE AUTO_INCREMENT COMMENT 'id',
    `version` char(40) NOT NULL UNIQUE COMMENT 'version',
@@@ -2323,5 -2155,24 +2325,25 @@@ CREATE TABLE `cloud`.`resource_tags` 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  
  
+ CREATE TABLE `cloud`.`external_nicira_nvp_devices` (
+   `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
+   `uuid` varchar(255) UNIQUE,
+   `physical_network_id` bigint unsigned NOT NULL COMMENT 'id of the physical 
network in to which nicira nvp device is added',
+   `provider_name` varchar(255) NOT NULL COMMENT 'Service Provider name 
corresponding to this nicira nvp device',
+   `device_name` varchar(255) NOT NULL COMMENT 'name of the nicira nvp device',
+   `host_id` bigint unsigned NOT NULL COMMENT 'host id coresponding to the 
external nicira nvp device',
+   PRIMARY KEY (`id`),
+   CONSTRAINT `fk_external_nicira_nvp_devices__host_id` FOREIGN KEY 
(`host_id`) REFERENCES `host`(`id`) ON DELETE CASCADE,
+   CONSTRAINT `fk_external_nicira_nvp_devices__physical_network_id` FOREIGN 
KEY (`physical_network_id`) REFERENCES `physical_network`(`id`) ON DELETE 
CASCADE
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+ 
+ CREATE TABLE `cloud`.`nicira_nvp_nic_map` (
+   `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
+   `logicalswitch` varchar(255) NOT NULL COMMENT 'nicira uuid of logical 
switch this port is provisioned on',
+   `logicalswitchport` varchar(255) UNIQUE COMMENT 'nicira uuid of this 
logical switch port',
+   `nic` varchar(255) UNIQUE COMMENT 'cloudstack uuid of the nic connected to 
this logical switch port',
+   PRIMARY KEY (`id`)
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+ 
  SET foreign_key_checks = 1;
 +

Reply via email to