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

[01/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Updated Branches:
  refs/heads/kvm-vnc-listen 75b658d47 -> 389086057 (forced update)


Update unit test configuraitons to new custom Spring AOP


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

Branch: refs/heads/kvm-vnc-listen
Commit: 5782abf8f80fce929e3d6e20068bc165f2360426
Parents: 2654e64
Author: Kelven Yang <ke...@gmail.com>
Authored: Fri Mar 29 11:01:40 2013 -0700
Committer: Kelven Yang <ke...@gmail.com>
Committed: Fri Mar 29 11:12:36 2013 -0700

----------------------------------------------------------------------
 .../networkoffering/CreateNetworkOfferingTest.java |   15 +++++++-
 .../test/resources/CloneSettingDaoTestContext.xml  |   20 ++++++-----
 .../resources/SecurityGroupManagerTestContext.xml  |   19 +++++-----
 server/test/resources/SnapshotDaoTestContext.xml   |   20 ++++++-----
 .../test/resources/StoragePoolDaoTestContext.xml   |   20 ++++++-----
 server/test/resources/VpcApiUnitTestContext.xml    |   20 ++++++-----
 server/test/resources/VpcTestContext.xml           |   21 ++++++-----
 server/test/resources/createNetworkOffering.xml    |   22 ++++++-----
 server/test/resources/testContext.xml              |   27 +++++---------
 9 files changed, 100 insertions(+), 84 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5782abf8/server/test/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java
----------------------------------------------------------------------
diff --git a/server/test/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java b/server/test/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java
index 1353959..67fae33 100644
--- a/server/test/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java
+++ b/server/test/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java
@@ -46,7 +46,12 @@ import com.cloud.offerings.NetworkOfferingServiceMapVO;
 import com.cloud.offerings.NetworkOfferingVO;
 import com.cloud.offerings.dao.NetworkOfferingDao;
 import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
+import com.cloud.user.AccountManager;
+import com.cloud.user.AccountVO;
+import com.cloud.user.UserContext;
 import com.cloud.user.UserContextInitializer;
+import com.cloud.user.UserVO;
+import com.cloud.utils.component.ComponentContext;
 
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(locations="classpath:/createNetworkOffering.xml")
@@ -63,18 +68,24 @@ public class CreateNetworkOfferingTest extends TestCase{
     NetworkOfferingDao offDao;
     
     @Inject
-    UserContextInitializer usrCtxInit;
+    NetworkOfferingServiceMapDao mapDao;
     
     @Inject
-    NetworkOfferingServiceMapDao mapDao;
+    AccountManager accountMgr;
     
     @Before
     public void setUp() {
+    	ComponentContext.initComponentsLifeCycle();
+    	
         ConfigurationVO configVO = new ConfigurationVO("200", "200","200","200","200","200");
         Mockito.when(configDao.findByName(Mockito.anyString())).thenReturn(configVO);
         
         Mockito.when(offDao.persist(Mockito.any(NetworkOfferingVO.class))).thenReturn(new NetworkOfferingVO());
         Mockito.when(mapDao.persist(Mockito.any(NetworkOfferingServiceMapVO.class))).thenReturn(new NetworkOfferingServiceMapVO());
+        Mockito.when(accountMgr.getSystemUser()).thenReturn(new UserVO(1));
+        Mockito.when(accountMgr.getSystemAccount()).thenReturn(new AccountVO(2));
+
+        UserContext.registerContext(accountMgr.getSystemUser().getId(), accountMgr.getSystemAccount(), null, false);
     }
 
     //Test Shared network offerings

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5782abf8/server/test/resources/CloneSettingDaoTestContext.xml
----------------------------------------------------------------------
diff --git a/server/test/resources/CloneSettingDaoTestContext.xml b/server/test/resources/CloneSettingDaoTestContext.xml
index 1d13500..cb35004 100644
--- a/server/test/resources/CloneSettingDaoTestContext.xml
+++ b/server/test/resources/CloneSettingDaoTestContext.xml
@@ -23,17 +23,19 @@
   <context:annotation-config />
 
   <!-- @DB support -->
-  <aop:config proxy-target-class="true">
-    <aop:aspect id="dbContextBuilder" ref="transactionContextBuilder">
-      <aop:pointcut id="captureAnyMethod" expression="execution(* *(..))" />
-
-      <aop:around pointcut-ref="captureAnyMethod" method="AroundAnyMethod" />
-    </aop:aspect>
-
-  </aop:config>
+  <bean id="componentContext" class="com.cloud.utils.component.ComponentContext" />
 
   <bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" />
-  <bean id="componentContext" class="com.cloud.utils.component.ComponentContext"/>
+  <bean id="actionEventInterceptor" class="com.cloud.event.ActionEventInterceptor" />
+  <bean id="instantiatePostProcessor" class="com.cloud.utils.component.ComponentInstantiationPostProcessor">
+    <property name="Interceptors">
+        <list>
+            <ref bean="transactionContextBuilder" />
+            <ref bean="actionEventInterceptor" />
+        </list>
+    </property>
+  </bean>
+
   <bean id="CSTestConfiguration"
     class="com.cloud.vm.dao.UserVmCloneSettingDaoTestConfiguration" />
   <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" >

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5782abf8/server/test/resources/SecurityGroupManagerTestContext.xml
----------------------------------------------------------------------
diff --git a/server/test/resources/SecurityGroupManagerTestContext.xml b/server/test/resources/SecurityGroupManagerTestContext.xml
index b36599e..7ff2976 100644
--- a/server/test/resources/SecurityGroupManagerTestContext.xml
+++ b/server/test/resources/SecurityGroupManagerTestContext.xml
@@ -23,17 +23,16 @@
   <context:annotation-config />
 
   <!-- @DB support -->
-  <aop:config proxy-target-class="true">
-    <aop:aspect id="dbContextBuilder" ref="transactionContextBuilder">
-      <aop:pointcut id="captureAnyMethod" expression="execution(* *(..))" />
-
-      <aop:around pointcut-ref="captureAnyMethod" method="AroundAnyMethod" />
-    </aop:aspect>
-
-  </aop:config>
-
+  <bean id="componentContext" class="com.cloud.utils.component.ComponentContext" />
   <bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" />
-  <bean id="componentContext" class="com.cloud.utils.component.ComponentContext"/>
+  <bean id="instantiatePostProcessor" class="com.cloud.utils.component.ComponentInstantiationPostProcessor">
+    <property name="Interceptors">
+        <list>
+            <ref bean="transactionContextBuilder" />
+        </list>
+    </property>
+  </bean>
+
   <bean id="TestConfiguration"
     class="com.cloud.network.security.SecurityGroupManagerTestConfiguration" />
   <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor">

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5782abf8/server/test/resources/SnapshotDaoTestContext.xml
----------------------------------------------------------------------
diff --git a/server/test/resources/SnapshotDaoTestContext.xml b/server/test/resources/SnapshotDaoTestContext.xml
index e479e2e..3b87888 100644
--- a/server/test/resources/SnapshotDaoTestContext.xml
+++ b/server/test/resources/SnapshotDaoTestContext.xml
@@ -23,17 +23,19 @@
   <context:annotation-config />
 
   <!-- @DB support -->
-  <aop:config proxy-target-class="true">
-    <aop:aspect id="dbContextBuilder" ref="transactionContextBuilder">
-      <aop:pointcut id="captureAnyMethod" expression="execution(* *(..))" />
-
-      <aop:around pointcut-ref="captureAnyMethod" method="AroundAnyMethod" />
-    </aop:aspect>
-
-  </aop:config>
+  <bean id="componentContext" class="com.cloud.utils.component.ComponentContext" />
 
   <bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" />
-  <bean id="componentContext" class="com.cloud.utils.component.ComponentContext"/>
+  <bean id="actionEventInterceptor" class="com.cloud.event.ActionEventInterceptor" />
+  <bean id="instantiatePostProcessor" class="com.cloud.utils.component.ComponentInstantiationPostProcessor">
+    <property name="Interceptors">
+        <list>
+            <ref bean="transactionContextBuilder" />
+            <ref bean="actionEventInterceptor" />
+        </list>
+    </property>
+  </bean>
+
   <bean id="TestConfiguration" 
     class="com.cloud.snapshot.SnapshotDaoTestConfiguration" />
   <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" >

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5782abf8/server/test/resources/StoragePoolDaoTestContext.xml
----------------------------------------------------------------------
diff --git a/server/test/resources/StoragePoolDaoTestContext.xml b/server/test/resources/StoragePoolDaoTestContext.xml
index 4936a83..345827e 100644
--- a/server/test/resources/StoragePoolDaoTestContext.xml
+++ b/server/test/resources/StoragePoolDaoTestContext.xml
@@ -23,17 +23,19 @@
   <context:annotation-config />
 
   <!-- @DB support -->
-  <aop:config proxy-target-class="true">
-    <aop:aspect id="dbContextBuilder" ref="transactionContextBuilder">
-      <aop:pointcut id="captureAnyMethod" expression="execution(* *(..))" />
-
-      <aop:around pointcut-ref="captureAnyMethod" method="AroundAnyMethod" />
-    </aop:aspect>
-
-  </aop:config>
+  <bean id="componentContext" class="com.cloud.utils.component.ComponentContext" />
 
   <bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" />
-  <bean id="componentContext" class="com.cloud.utils.component.ComponentContext"/>
+  <bean id="actionEventInterceptor" class="com.cloud.event.ActionEventInterceptor" />
+  <bean id="instantiatePostProcessor" class="com.cloud.utils.component.ComponentInstantiationPostProcessor">
+    <property name="Interceptors">
+        <list>
+            <ref bean="transactionContextBuilder" />
+            <ref bean="actionEventInterceptor" />
+        </list>
+    </property>
+  </bean>
+
   <bean id="TestConfiguration" 
     class="com.cloud.storage.dao.StoragePoolDaoTestConfiguration" />
   <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" >

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5782abf8/server/test/resources/VpcApiUnitTestContext.xml
----------------------------------------------------------------------
diff --git a/server/test/resources/VpcApiUnitTestContext.xml b/server/test/resources/VpcApiUnitTestContext.xml
index d933022..1dc1122 100644
--- a/server/test/resources/VpcApiUnitTestContext.xml
+++ b/server/test/resources/VpcApiUnitTestContext.xml
@@ -24,17 +24,19 @@
   <context:component-scan base-package="org.apache.cloudstack, com.cloud" />
 
   <!-- @DB support -->
-  <aop:config proxy-target-class="true">
-    <aop:aspect id="dbContextBuilder" ref="transactionContextBuilder">
-      <aop:pointcut id="captureAnyMethod" expression="execution(* *(..))" />
-
-      <aop:around pointcut-ref="captureAnyMethod" method="AroundAnyMethod" />
-    </aop:aspect>
-
-  </aop:config>
+  <bean id="componentContext" class="com.cloud.utils.component.ComponentContext" />
 
   <bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" />
-  <bean id="componentContext" class="com.cloud.utils.component.ComponentContext"/>
+  <bean id="actionEventInterceptor" class="com.cloud.event.ActionEventInterceptor" />
+  <bean id="instantiatePostProcessor" class="com.cloud.utils.component.ComponentInstantiationPostProcessor">
+    <property name="Interceptors">
+        <list>
+            <ref bean="transactionContextBuilder" />
+            <ref bean="actionEventInterceptor" />
+        </list>
+    </property>
+  </bean>
+
   <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor">
     <property name="requiredParameterValue" value="false" />
   </bean>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5782abf8/server/test/resources/VpcTestContext.xml
----------------------------------------------------------------------
diff --git a/server/test/resources/VpcTestContext.xml b/server/test/resources/VpcTestContext.xml
index 7ed5f57..5303736 100644
--- a/server/test/resources/VpcTestContext.xml
+++ b/server/test/resources/VpcTestContext.xml
@@ -21,15 +21,20 @@
                       http://www.springframework.org/schema/context/spring-context-3.0.xsd">
 
   <context:annotation-config />
-    <!-- @DB support -->
-  <aop:config proxy-target-class="true">
-    <aop:aspect id="dbContextBuilder" ref="transactionContextBuilder">
-      <aop:pointcut id="captureAnyMethod" expression="execution(* *(..))" />
 
-      <aop:around pointcut-ref="captureAnyMethod" method="AroundAnyMethod" />
-    </aop:aspect>
+    <!-- @DB support -->
+  <bean id="componentContext" class="com.cloud.utils.component.ComponentContext" />
 
-  </aop:config>
+  <bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" />
+  <bean id="actionEventInterceptor" class="com.cloud.event.ActionEventInterceptor" />
+  <bean id="instantiatePostProcessor" class="com.cloud.utils.component.ComponentInstantiationPostProcessor">
+    <property name="Interceptors">
+        <list>
+            <ref bean="transactionContextBuilder" />
+            <ref bean="actionEventInterceptor" />
+        </list>
+    </property>
+  </bean>
 
   <!--
       Network Elements
@@ -66,8 +71,6 @@
     <property name="name" value="PrivateNetworkGuru"/>
   </bean>
   
-  <bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" />
-  <bean id="componentContext" class="com.cloud.utils.component.ComponentContext"/>
   <bean id="TestConfiguration"
     class="com.cloud.vpc.VpcTestConfiguration" />
   <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor">

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5782abf8/server/test/resources/createNetworkOffering.xml
----------------------------------------------------------------------
diff --git a/server/test/resources/createNetworkOffering.xml b/server/test/resources/createNetworkOffering.xml
index f3faaa8..90342c5 100644
--- a/server/test/resources/createNetworkOffering.xml
+++ b/server/test/resources/createNetworkOffering.xml
@@ -23,14 +23,19 @@
      <context:annotation-config />
 
     <!-- @DB support -->
-    <aop:config proxy-target-class="true">
-    <aop:aspect id="dbContextBuilder" ref="transactionContextBuilder">
-    <aop:pointcut id="captureAnyMethod" expression="execution(* *(..))" />
+      
+  <bean id="componentContext" class="com.cloud.utils.component.ComponentContext" />
 
-    <aop:around pointcut-ref="captureAnyMethod" method="AroundAnyMethod" />
-    </aop:aspect>
-    </aop:config>
-    
+  <bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" />
+  <bean id="actionEventInterceptor" class="com.cloud.event.ActionEventInterceptor" />
+  <bean id="instantiatePostProcessor" class="com.cloud.utils.component.ComponentInstantiationPostProcessor">
+    <property name="Interceptors">
+        <list>
+            <ref bean="transactionContextBuilder" />
+            <ref bean="actionEventInterceptor" />
+        </list>
+    </property>
+  </bean>
 
     <bean id="ConfigurationManager" class="com.cloud.configuration.ConfigurationManagerImpl">
         <property name="name" value="ConfigurationManager"/>
@@ -38,7 +43,4 @@
   
     <bean class="org.apache.cloudstack.networkoffering.ChildTestConfiguration" />
     
-    <bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" />
-    
-
 </beans>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5782abf8/server/test/resources/testContext.xml
----------------------------------------------------------------------
diff --git a/server/test/resources/testContext.xml b/server/test/resources/testContext.xml
index b260386..6a21198 100644
--- a/server/test/resources/testContext.xml
+++ b/server/test/resources/testContext.xml
@@ -37,26 +37,19 @@
   <!--
     @DB support
   -->
-  <aop:config proxy-target-class="true">
-    <aop:aspect id="dbContextBuilder" ref="transactionContextBuilder">
-        <aop:pointcut id="captureAnyMethod"
-            expression="execution(* *(..))" 
-        />
-        
-        <aop:around pointcut-ref="captureAnyMethod" method="AroundAnyMethod"/> 
-    </aop:aspect>
+  <bean id="componentContext" class="com.cloud.utils.component.ComponentContext" />
 
-    <aop:aspect id="actionEventInterceptorAspect" ref="actionEventInterceptor">
-        <aop:pointcut id="captureEventMethod"
-            expression="execution(* *(..)) and @annotation(com.cloud.event.ActionEvent)" 
-        />
-        <aop:around pointcut-ref="captureEventMethod" method="AroundAnyMethod"/> 
-    </aop:aspect>
-
-  </aop:config>
-  
   <bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" />
   <bean id="actionEventInterceptor" class="com.cloud.event.ActionEventInterceptor" />
+  <bean id="instantiatePostProcessor" class="com.cloud.utils.component.ComponentInstantiationPostProcessor">
+    <property name="Interceptors">
+        <list>
+            <ref bean="transactionContextBuilder" />
+            <ref bean="actionEventInterceptor" />
+        </list>
+    </property>
+  </bean>
+  
   <bean class="com.cloud.network.security.SecurityGroupManagerTestConfiguration" />
 
   <!--


[13/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
tomcat: Change some /etc/cloud paths to /etc/cloudstack

Signed-off-by: Wido den Hollander <wi...@42on.com>


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

Branch: refs/heads/kvm-vnc-listen
Commit: 35e5b8e3f818f23661450b175eb8c20ae2489938
Parents: 80da4d5
Author: Wido den Hollander <wi...@42on.com>
Authored: Sun Mar 31 14:02:00 2013 +0200
Committer: Wido den Hollander <wi...@42on.com>
Committed: Sun Mar 31 14:16:31 2013 +0200

----------------------------------------------------------------------
 client/tomcatconf/server-ssl.xml.in   |    4 ++--
 client/tomcatconf/tomcat6-ssl.conf.in |    2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/35e5b8e3/client/tomcatconf/server-ssl.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/server-ssl.xml.in b/client/tomcatconf/server-ssl.xml.in
index 5d68f1d..37bc53d 100755
--- a/client/tomcatconf/server-ssl.xml.in
+++ b/client/tomcatconf/server-ssl.xml.in
@@ -94,7 +94,7 @@
                maxThreads="150" scheme="https" secure="true" URIEncoding="UTF-8"
                clientAuth="false" sslProtocol="TLS" 
                keystoreType="JKS"
-               keystoreFile="/etc/cloud/management/cloudmanagementserver.keystore"
+               keystoreFile="/etc/cloudstack/management/cloudmanagementserver.keystore"
                keystorePass="vmops.com"/>
 			   
     <!-- Define an AJP 1.3 Connector on port 20400 -->
@@ -200,7 +200,7 @@
                maxThreads="150" scheme="https" secure="true"
                clientAuth="false" sslProtocol="TLS" 
                keystoreType="JKS"
-               keystoreFile="/etc/cloud/management/cloudmanagementserver.keystore"
+               keystoreFile="/etc/cloudstack/management/cloudmanagementserver.keystore"
                keystorePass="vmops.com"/>
 			   
     <!-- Define an AJP 1.3 Connector on port 20400 -->

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/35e5b8e3/client/tomcatconf/tomcat6-ssl.conf.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/tomcat6-ssl.conf.in b/client/tomcatconf/tomcat6-ssl.conf.in
index 84b6d62..0d26508 100644
--- a/client/tomcatconf/tomcat6-ssl.conf.in
+++ b/client/tomcatconf/tomcat6-ssl.conf.in
@@ -40,7 +40,7 @@ CATALINA_TMPDIR="@MSENVIRON@/temp"
 
 # Use JAVA_OPTS to set java.library.path for libtcnative.so
 #JAVA_OPTS="-Djava.library.path=/usr/lib64"
-JAVA_OPTS="-Djava.awt.headless=true -Djavax.net.ssl.trustStore=/etc/cloud/management/cloudmanagementserver.keystore -Djavax.net.ssl.trustStorePassword=vmops.com -Dcom.sun.management.jmxremote.port=45219 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Xmx2g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=@MSLOGDIR@ -XX:MaxPermSize=800m -XX:PermSize=512M"
+JAVA_OPTS="-Djava.awt.headless=true -Djavax.net.ssl.trustStore=/etc/cloudstack/management/cloudmanagementserver.keystore -Djavax.net.ssl.trustStorePassword=vmops.com -Dcom.sun.management.jmxremote.port=45219 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Xmx2g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=@MSLOGDIR@ -XX:MaxPermSize=800m -XX:PermSize=512M"
 
 # What user should run tomcat
 TOMCAT_USER="@MSUSER@"


[25/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
CLOUDSTACK-301 Nexus 1000v DVS integration is not functional

Moved validateVSMCluster method from CiscoNexusVSMDeviceManagerImpl to CiscoNexusVSMElement.

Signed-off-by: Sateesh Chodapuneedi <sa...@apache.org>


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

Branch: refs/heads/kvm-vnc-listen
Commit: 009749fb796bc935f610921f1bdc71e8d993198d
Parents: 3d8afb0
Author: Sateesh Chodapuneedi <sa...@apache.org>
Authored: Wed Mar 20 04:44:59 2013 +0530
Committer: Sateesh Chodapuneedi <sa...@apache.org>
Committed: Tue Apr 2 11:59:02 2013 +0530

----------------------------------------------------------------------
 .../hypervisor/vmware/VmwareServerDiscoverer.java  |   17 +++-
 .../network/CiscoNexusVSMDeviceManagerImpl.java    |   96 --------------
 .../network/element/CiscoNexusVSMElement.java      |  100 ++++++++++++++-
 .../element/CiscoNexusVSMElementService.java       |    7 +
 4 files changed, 122 insertions(+), 98 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/009749fb/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java
index 2b3eba6..2f82b53 100755
--- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java
@@ -45,6 +45,7 @@ import com.cloud.dc.dao.DataCenterDao;
 import com.cloud.exception.DiscoveredWithErrorException;
 import com.cloud.exception.DiscoveryException;
 import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.exception.ResourceInUseException;
 import com.cloud.host.HostVO;
 import com.cloud.host.dao.HostDao;
 import com.cloud.hypervisor.Hypervisor;
@@ -62,6 +63,8 @@ import com.cloud.network.Networks.TrafficType;
 import com.cloud.network.PhysicalNetwork;
 import com.cloud.network.VmwareTrafficLabel;
 import com.cloud.network.dao.CiscoNexusVSMDeviceDao;
+import com.cloud.network.element.CiscoNexusVSMElement;
+import com.cloud.network.element.CiscoNexusVSMElementService;
 import com.cloud.resource.Discoverer;
 import com.cloud.resource.DiscovererBase;
 import com.cloud.resource.ResourceManager;
@@ -104,6 +107,8 @@ public class VmwareServerDiscoverer extends DiscovererBase implements
 	@Inject
 	CiscoNexusVSMDeviceDao _nexusDao;
 	@Inject
+	CiscoNexusVSMElementService _nexusElement;
+	@Inject
     NetworkModel _netmgr;
     @Inject
     HypervisorCapabilitiesDao _hvCapabilitiesDao;
@@ -255,7 +260,17 @@ public class VmwareServerDiscoverer extends DiscovererBase implements
             guestTrafficLabel = _netmgr.getDefaultGuestTrafficLabel(dcId, HypervisorType.VMware);
 			if (guestTrafficLabel != null) {
                 s_logger.info("Detected guest network label : " + guestTrafficLabel);
-			}
+            }
+            String vsmIp = _urlParams.get("vsmipaddress");
+            String vsmUser = _urlParams.get("vsmusername");
+            String vsmPassword = _urlParams.get("vsmpassword");
+            String clusterName = cluster.getName();
+            try {
+                _nexusElement.validateVsmCluster(vsmIp, vsmUser, vsmPassword, clusterId, clusterName);
+            } catch(ResourceInUseException ex) {
+                DiscoveryException discEx = new DiscoveryException(ex.getLocalizedMessage() + ". The resource is " + ex.getResourceName());
+                throw discEx;
+            }
             vsmCredentials = _vmwareMgr.getNexusVSMCredentialsByClusterId(clusterId);
 		}
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/009749fb/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceManagerImpl.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceManagerImpl.java b/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceManagerImpl.java
index e17d99d..9ec64ff 100644
--- a/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceManagerImpl.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceManagerImpl.java
@@ -23,8 +23,6 @@ import javax.inject.Inject;
 import org.apache.log4j.Logger;
 
 import com.cloud.agent.api.StartupCommand;
-import com.cloud.configuration.Config;
-import com.cloud.configuration.dao.ConfigurationDao;
 import com.cloud.dc.ClusterDetailsDao;
 import com.cloud.dc.ClusterVO;
 import com.cloud.dc.ClusterVSMMapVO;
@@ -64,8 +62,6 @@ public abstract class CiscoNexusVSMDeviceManagerImpl extends AdapterBase {
     HostDetailsDao _hostDetailDao;
     @Inject
     PortProfileDao _ppDao;
-    @Inject
-    ConfigurationDao _configDao;
 
     private static final org.apache.log4j.Logger s_logger = Logger.getLogger(ExternalLoadBalancerDeviceManagerImpl.class);
 
@@ -315,96 +311,4 @@ public abstract class CiscoNexusVSMDeviceManagerImpl extends AdapterBase {
         // TODO Auto-generated method stub
         return null;
     }
-
-    @DB
-    public boolean vliadateVsmCluster(String vsmIp, String vsmUser, String vsmPassword, long clusterId, String clusterName) throws ResourceInUseException {
-        // Check if we're associating a Cisco Nexus VSM with a vmware cluster.
-        if (Boolean.parseBoolean(_configDao.getValue(Config.VmwareUseNexusVSwitch.toString()))) {
-
-            if(vsmIp != null && vsmUser != null && vsmPassword != null) {
-                NetconfHelper netconfClient;
-                try {
-                    netconfClient = new NetconfHelper(vsmIp, vsmUser, vsmPassword);
-                    netconfClient.disconnect();
-                } catch (CloudRuntimeException e) {
-                    String msg = "Invalid credentials supplied for user " + vsmUser + " for Cisco Nexus 1000v VSM at " + vsmIp;
-                    s_logger.error(msg);
-                    _clusterDao.remove(clusterId);
-                    throw new CloudRuntimeException(msg);
-                }
-
-                Transaction txn;
-
-                // If VSM already exists and is mapped to a cluster, fail this operation.
-                CiscoNexusVSMDeviceVO vsm = _ciscoNexusVSMDeviceDao.getVSMbyIpaddress(vsmIp);
-                if(vsm != null) {
-                    List<ClusterVSMMapVO> clusterList = _clusterVSMDao.listByVSMId(vsm.getId());
-                    if (clusterList != null && !clusterList.isEmpty()) {
-                        s_logger.error("Failed to add cluster: specified Nexus VSM is already associated with another cluster");
-                        _clusterDao.remove(clusterId);
-                        ResourceInUseException ex = new ResourceInUseException("Failed to add cluster: specified Nexus VSM is already associated with another cluster with specified Id");
-                        // get clusterUuid to report error
-                        ClusterVO cluster = _clusterDao.findById(clusterList.get(0).getClusterId());
-                        ex.addProxyObject(cluster.getUuid());
-                        throw ex;
-                    }
-                }
-                // persist credentials to database if the VSM entry is not already in the db.
-                if (_ciscoNexusVSMDeviceDao.getVSMbyIpaddress(vsmIp) == null) {
-                    vsm = new CiscoNexusVSMDeviceVO(vsmIp, vsmUser, vsmPassword);
-                    txn = Transaction.currentTxn();
-                    try {
-                        txn.start();
-                        vsm = _ciscoNexusVSMDeviceDao.persist(vsm);
-                        txn.commit();
-                    } catch (Exception e) {
-                        txn.rollback();
-                        s_logger.error("Failed to persist Cisco Nexus 1000v VSM details to database. Exception: " + e.getMessage());
-                        // Removing the cluster record which was added already because the persistence of Nexus VSM credentials has failed.
-                        _clusterDao.remove(clusterId);
-                        throw new CloudRuntimeException(e.getMessage());
-                    }
-                }
-                // Create a mapping between the cluster and the vsm.
-                vsm = _ciscoNexusVSMDeviceDao.getVSMbyIpaddress(vsmIp);
-                if (vsm != null) {
-                    ClusterVSMMapVO connectorObj = new ClusterVSMMapVO(clusterId, vsm.getId());
-                    txn = Transaction.currentTxn();
-                    try {
-                        txn.start();
-                        _clusterVSMDao.persist(connectorObj);
-                        txn.commit();
-                    } catch (Exception e) {
-                        txn.rollback();
-                        s_logger.error("Failed to associate Cisco Nexus 1000v VSM with cluster: " + clusterName + ". Exception: " + e.getMessage());
-                        _clusterDao.remove(clusterId);
-                        throw new CloudRuntimeException(e.getMessage());
-                    }
-                }
-            } else {
-                String msg;
-                msg = "The global parameter " + Config.VmwareUseNexusVSwitch.toString() +
-                        " is set to \"true\". Following mandatory parameters are not specified. ";
-                if(vsmIp == null) {
-                    msg += "vsmipaddress: Management IP address of Cisco Nexus 1000v dvSwitch. ";
-                }
-                if(vsmUser == null) {
-                    msg += "vsmusername: Name of a user account with admin privileges over Cisco Nexus 1000v dvSwitch. ";
-                }
-                if(vsmPassword == null) {
-                    if(vsmUser != null) {
-                        msg += "vsmpassword: Password of user account " + vsmUser + ". ";
-                    } else {
-                        msg += "vsmpassword: Password of user account with admin privileges over Cisco Nexus 1000v dvSwitch. ";
-                    }
-                }
-                s_logger.error(msg);
-                // Cleaning up the cluster record as addCluster operation failed because Nexus dvSwitch credentials are supplied.
-                _clusterDao.remove(clusterId);
-                throw new CloudRuntimeException(msg);
-            }
-            return true;
-        }
-		return false;
-    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/009749fb/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java b/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java
index daf7dd6..4629b6c 100644
--- a/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java
@@ -34,6 +34,11 @@ import com.cloud.api.commands.EnableCiscoNexusVSMCmd;
 import com.cloud.api.commands.DisableCiscoNexusVSMCmd;
 import com.cloud.api.commands.ListCiscoNexusVSMsCmd;
 import com.cloud.api.response.CiscoNexusVSMResponse;
+import com.cloud.configuration.Config;
+import com.cloud.dc.ClusterVO;
+import com.cloud.dc.ClusterVSMMapVO;
+import com.cloud.dc.dao.ClusterDao;
+import com.cloud.dc.dao.ClusterVSMMapDao;
 import com.cloud.deploy.DeployDestination;
 import com.cloud.event.ActionEvent;
 import com.cloud.event.EventTypes;
@@ -55,7 +60,10 @@ import com.cloud.vm.VirtualMachine;
 import com.cloud.vm.VirtualMachineProfile;
 import com.cloud.offering.NetworkOffering;
 import com.cloud.org.Cluster;
+import com.cloud.utils.cisco.n1kv.vsm.NetconfHelper;
 import com.cloud.utils.component.Manager;
+import com.cloud.utils.db.DB;
+import com.cloud.utils.db.Transaction;
 import com.cloud.exception.ResourceInUseException;
 import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.server.ManagementService;
@@ -66,7 +74,11 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme
     private static final Logger s_logger = Logger.getLogger(CiscoNexusVSMElement.class);
 
     @Inject
-    CiscoNexusVSMDeviceDao _vsmDao;    
+    CiscoNexusVSMDeviceDao _vsmDao;
+    @Inject
+    ClusterDao _clusterDao;
+    @Inject
+    ClusterVSMMapDao _clusterVSMDao;
 
     @Override
     public Map<Service, Map<Capability, String>> getCapabilities() {
@@ -247,4 +259,90 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme
         cmdList.add(DeleteCiscoNexusVSMCmd.class);
         return cmdList;
     }
+
+    @DB
+    public boolean validateVsmCluster(String vsmIp, String vsmUser, String vsmPassword, long clusterId, String clusterName) throws ResourceInUseException {
+        if(vsmIp != null && vsmUser != null && vsmPassword != null) {
+            NetconfHelper netconfClient;
+            try {
+                netconfClient = new NetconfHelper(vsmIp, vsmUser, vsmPassword);
+                netconfClient.disconnect();
+            } catch (CloudRuntimeException e) {
+                String msg = "Invalid credentials supplied for user " + vsmUser + " for Cisco Nexus 1000v VSM at " + vsmIp;
+                s_logger.error(msg);
+                _clusterDao.remove(clusterId);
+                throw new CloudRuntimeException(msg);
+            }
+
+            Transaction txn;
+
+            // If VSM already exists and is mapped to a cluster, fail this operation.
+            CiscoNexusVSMDeviceVO vsm = _vsmDao.getVSMbyIpaddress(vsmIp);
+            if(vsm != null) {
+                List<ClusterVSMMapVO> clusterList = _clusterVSMDao.listByVSMId(vsm.getId());
+                if (clusterList != null && !clusterList.isEmpty()) {
+                    s_logger.error("Failed to add cluster: specified Nexus VSM is already associated with another cluster");
+                    ResourceInUseException ex = new ResourceInUseException("Failed to add cluster: specified Nexus VSM is already associated with another cluster with specified Id");
+                    // get clusterUuid to report error
+                    ClusterVO cluster = _clusterDao.findById(clusterList.get(0).getClusterId());
+                    ex.addProxyObject(cluster.getUuid());
+                    _clusterDao.remove(clusterId);
+                    throw ex;
+                }
+            }
+            // persist credentials to database if the VSM entry is not already in the db.
+            if (_vsmDao.getVSMbyIpaddress(vsmIp) == null) {
+                vsm = new CiscoNexusVSMDeviceVO(vsmIp, vsmUser, vsmPassword);
+                txn = Transaction.currentTxn();
+                try {
+                    txn.start();
+                    vsm = _vsmDao.persist(vsm);
+                    txn.commit();
+                } catch (Exception e) {
+                    txn.rollback();
+                    s_logger.error("Failed to persist Cisco Nexus 1000v VSM details to database. Exception: " + e.getMessage());
+                    throw new CloudRuntimeException(e.getMessage());
+                }
+            }
+            // Create a mapping between the cluster and the vsm.
+            vsm = _vsmDao.getVSMbyIpaddress(vsmIp);
+            if (vsm != null) {
+                ClusterVSMMapVO connectorObj = new ClusterVSMMapVO(clusterId, vsm.getId());
+                txn = Transaction.currentTxn();
+                try {
+                    txn.start();
+                    _clusterVSMDao.persist(connectorObj);
+                    txn.commit();
+                } catch (Exception e) {
+                    txn.rollback();
+                    s_logger.error("Failed to associate Cisco Nexus 1000v VSM with cluster: " + clusterName + ". Exception: " + e.getMessage());
+                    _vsmDao.remove(vsm.getId()); // Removing VSM from virtual_supervisor_module table because association with cluster failed.
+                    // Cluster would be deleted from cluster table by callee.
+                    throw new CloudRuntimeException(e.getMessage());
+                }
+            }
+        } else {
+            String msg;
+            msg = "The global parameter " + Config.VmwareUseNexusVSwitch.toString() +
+                    " is set to \"true\". Following mandatory parameters are not specified. ";
+            if(vsmIp == null) {
+                msg += "vsmipaddress: Management IP address of Cisco Nexus 1000v dvSwitch. ";
+            }
+            if(vsmUser == null) {
+                msg += "vsmusername: Name of a user account with admin privileges over Cisco Nexus 1000v dvSwitch. ";
+            }
+            if(vsmPassword == null) {
+                if(vsmUser != null) {
+                    msg += "vsmpassword: Password of user account " + vsmUser + ". ";
+                } else {
+                    msg += "vsmpassword: Password of user account with admin privileges over Cisco Nexus 1000v dvSwitch. ";
+                }
+            }
+            s_logger.error(msg);
+            // Cleaning up the cluster record as addCluster operation failed because of invalid credentials of Nexus dvSwitch.
+            _clusterDao.remove(clusterId);
+            throw new CloudRuntimeException(msg);
+        }
+        return true;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/009749fb/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElementService.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElementService.java b/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElementService.java
index 1cc9faf..e90581a 100644
--- a/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElementService.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElementService.java
@@ -24,6 +24,7 @@ import com.cloud.api.commands.EnableCiscoNexusVSMCmd;
 import com.cloud.api.commands.DisableCiscoNexusVSMCmd;
 import com.cloud.api.commands.ListCiscoNexusVSMsCmd;
 import com.cloud.api.response.CiscoNexusVSMResponse;
+import com.cloud.exception.ResourceInUseException;
 import com.cloud.network.CiscoNexusVSMDeviceVO;
 import com.cloud.network.CiscoNexusVSMDevice;
 import com.cloud.utils.component.PluggableService;
@@ -68,4 +69,10 @@ public interface CiscoNexusVSMElementService extends PluggableService {
      * @return CiscoNexusVSMResponse
      */
     public CiscoNexusVSMResponse createCiscoNexusVSMDetailedResponse(CiscoNexusVSMDevice vsmDeviceVO);
+
+    /**
+     * Validate Cisco Nexus VSM before associating with cluster
+     *
+     */
+    public boolean validateVsmCluster(String vsmIp, String vsmUser, String vsmPassword, long clusterId, String clusterName) throws ResourceInUseException;
 }


[23/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
CLOUDSTACK-922: LXC Support in Cloudstack.

Signed-off-by: Edison Su <su...@gmail.com>


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

Branch: refs/heads/kvm-vnc-listen
Commit: aa79ccf985a172603a9ff15fbaa71dbfb3dad99d
Parents: 6eac422
Author: Phong Nguyen <pn...@gilt.com>
Authored: Mon Apr 1 15:40:21 2013 -0700
Committer: Edison Su <su...@gmail.com>
Committed: Mon Apr 1 15:41:42 2013 -0700

----------------------------------------------------------------------
 agent/conf/agent.properties                        |    9 +
 api/src/com/cloud/agent/api/Command.java           |    2 +
 api/src/com/cloud/agent/api/RebootCommand.java     |    1 +
 api/src/com/cloud/agent/api/StopCommand.java       |    7 +-
 api/src/com/cloud/hypervisor/Hypervisor.java       |    3 +
 api/src/com/cloud/storage/Storage.java             |    3 +-
 client/tomcatconf/applicationContext.xml.in        |    8 +
 client/tomcatconf/componentContext.xml.in          |    1 +
 .../hypervisor/kvm/resource/DirectVifDriver.java   |   65 +++
 .../kvm/resource/LibvirtComputingResource.java     |  156 ++++--
 .../hypervisor/kvm/resource/LibvirtConnection.java |   52 ++-
 .../kvm/resource/LibvirtDomainXMLParser.java       |   21 +-
 .../kvm/resource/LibvirtStorageVolumeDef.java      |    6 +-
 .../hypervisor/kvm/resource/LibvirtVMDef.java      |   71 +++-
 .../hypervisor/kvm/storage/KVMPhysicalDisk.java    |    2 +-
 .../kvm/storage/KVMStoragePoolManager.java         |    4 +
 .../kvm/storage/LibvirtStorageAdaptor.java         |   37 ++-
 .../hypervisor/kvm/resource/LibvirtVMDefTest.java  |   14 +
 scripts/storage/secondary/cloud-install-sys-tmplt  |    4 +
 .../consoleproxy/ConsoleProxyManagerImpl.java      |   12 +-
 server/src/com/cloud/hypervisor/LXCGuru.java       |   58 +++
 .../kvm/discoverer/KvmServerDiscoverer.java        |  371 +--------------
 .../kvm/discoverer/LibvirtServerDiscoverer.java    |  393 +++++++++++++++
 .../kvm/discoverer/LxcServerDiscoverer.java        |   33 ++
 .../com/cloud/network/SshKeysDistriMonitor.java    |    3 +-
 .../router/VirtualNetworkApplianceManagerImpl.java |    8 +-
 .../secondary/SecondaryStorageManagerImpl.java     |    6 +-
 .../cloud/template/HypervisorTemplateAdapter.java  |    3 +
 .../com/cloud/vm/VirtualMachineManagerImpl.java    |   27 +-
 setup/db/db/schema-410to420.sql                    |   12 +
 ui/scripts/system.js                               |   62 ++-
 ui/scripts/templates.js                            |    4 +
 ui/scripts/zoneWizard.js                           |   10 +
 33 files changed, 984 insertions(+), 484 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/agent/conf/agent.properties
----------------------------------------------------------------------
diff --git a/agent/conf/agent.properties b/agent/conf/agent.properties
index f7eac67..e49afbf 100644
--- a/agent/conf/agent.properties
+++ b/agent/conf/agent.properties
@@ -80,3 +80,12 @@ domr.scripts.dir=scripts/network/domr/kvm
 # native = com.cloud.hypervisor.kvm.resource.BridgeVifDriver
 # openvswitch = com.cloud.hypervisor.kvm.resource.OvsBridgeDriver
 #libvirt.vif.driver=com.cloud.hypervisor.kvm.resource.BridgeVifDriver
+
+# set the hypervisor type, values are: kvm, lxc
+# hypervisor.type=kvm
+
+# settings to enable direct networking in libvirt, should not be used
+# on hosts that run system vms, values for mode are: private, bridge, vepa
+# libvirt.vif.driver=com.cloud.hypervisor.kvm.resource.DirectVifDriver
+# network.direct.source.mode=private
+# network.direct.device=eth0

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/api/src/com/cloud/agent/api/Command.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/agent/api/Command.java b/api/src/com/cloud/agent/api/Command.java
index 9cd6749..aadbeaf 100755
--- a/api/src/com/cloud/agent/api/Command.java
+++ b/api/src/com/cloud/agent/api/Command.java
@@ -27,6 +27,8 @@ import com.cloud.agent.api.LogLevel.Log4jLevel;
  */
 public abstract class Command {
 
+    public static final String HYPERVISOR_TYPE = "hypervisorType";
+
     // allow command to carry over hypervisor or other environment related context info
     @LogLevel(Log4jLevel.Trace)
     protected Map<String, String> contextMap = new HashMap<String, String>();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/api/src/com/cloud/agent/api/RebootCommand.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/agent/api/RebootCommand.java b/api/src/com/cloud/agent/api/RebootCommand.java
index 299e61b..49712b6 100755
--- a/api/src/com/cloud/agent/api/RebootCommand.java
+++ b/api/src/com/cloud/agent/api/RebootCommand.java
@@ -16,6 +16,7 @@
 // under the License.
 package com.cloud.agent.api;
 
+import com.cloud.hypervisor.Hypervisor;
 import com.cloud.vm.VirtualMachine;
 
 public class RebootCommand extends Command {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/api/src/com/cloud/agent/api/StopCommand.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/agent/api/StopCommand.java b/api/src/com/cloud/agent/api/StopCommand.java
index 9ee7ce3..1c67f38 100755
--- a/api/src/com/cloud/agent/api/StopCommand.java
+++ b/api/src/com/cloud/agent/api/StopCommand.java
@@ -38,10 +38,9 @@ public class StopCommand extends RebootCommand {
         super(vm);
         this.vnet = vnet;
     }
-
-    public StopCommand(VirtualMachine vm, String vmName, String vnet) {
-        super(vmName);
-        this.vnet = vnet;
+    
+    public StopCommand(VirtualMachine vm) {
+        super(vm);
     }
 
     public StopCommand(String vmName) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/api/src/com/cloud/hypervisor/Hypervisor.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/hypervisor/Hypervisor.java b/api/src/com/cloud/hypervisor/Hypervisor.java
index 2e0012d..a4ee5b9 100644
--- a/api/src/com/cloud/hypervisor/Hypervisor.java
+++ b/api/src/com/cloud/hypervisor/Hypervisor.java
@@ -29,6 +29,7 @@ public class Hypervisor {
         BareMetal,
         Simulator,
         Ovm,
+        LXC,
 
         Any; /*If you don't care about the hypervisor type*/
 
@@ -54,6 +55,8 @@ public class Hypervisor {
                 return HypervisorType.Simulator;
             } else if (hypervisor.equalsIgnoreCase("Ovm")) {
                 return HypervisorType.Ovm;
+            } else if (hypervisor.equalsIgnoreCase("LXC")) {
+                return HypervisorType.LXC;
             } else if (hypervisor.equalsIgnoreCase("Any")) {
                 return HypervisorType.Any;
             } else {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/api/src/com/cloud/storage/Storage.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/storage/Storage.java b/api/src/com/cloud/storage/Storage.java
index fba12b6..c130fe2 100755
--- a/api/src/com/cloud/storage/Storage.java
+++ b/api/src/com/cloud/storage/Storage.java
@@ -26,7 +26,8 @@ public class Storage {
         VHD(true, true, true),
         ISO(false, false, false),
         OVA(true, true, true, "ova"),
-        BAREMETAL(false, false, false);
+        BAREMETAL(false, false, false),
+        TAR(false, false, false);
 
         private final boolean thinProvisioned;
         private final boolean supportSparse;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/client/tomcatconf/applicationContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/applicationContext.xml.in b/client/tomcatconf/applicationContext.xml.in
index ca6b402..636eac2 100644
--- a/client/tomcatconf/applicationContext.xml.in
+++ b/client/tomcatconf/applicationContext.xml.in
@@ -499,6 +499,10 @@
     <property name="name" value="KVM Agent"/>
   </bean>
 
+  <bean id="LxcServerDiscoverer" class="com.cloud.hypervisor.kvm.discoverer.LxcServerDiscoverer">
+    <property name="name" value="Lxc Discover"/>
+  </bean>
+
   <bean id="HypervServerDiscoverer" class="com.cloud.hypervisor.hyperv.HypervServerDiscoverer">
     <property name="name" value="SCVMMServer"/>
   </bean>
@@ -568,6 +572,10 @@
     <property name="name" value="KVMGuru"/>
   </bean>
 
+  <bean id="LXCGuru" class="com.cloud.hypervisor.LXCGuru">
+    <property name="name" value="LXCGuru"/>
+  </bean>
+
   <bean id="OvmGuru" class="com.cloud.ovm.hypervisor.OvmGuru">
     <property name="name" value="OvmGuru"/>
   </bean>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/client/tomcatconf/componentContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/componentContext.xml.in b/client/tomcatconf/componentContext.xml.in
index 9d95e15..fea1d0f 100644
--- a/client/tomcatconf/componentContext.xml.in
+++ b/client/tomcatconf/componentContext.xml.in
@@ -106,6 +106,7 @@
           <ref bean="XcpServerDiscoverer"/>
           <ref bean="SecondaryStorageDiscoverer"/>
           <ref bean="KvmServerDiscoverer"/>
+          <ref bean="LxcServerDiscoverer"/>
           
   <!--
           <ref bean="BareMetalDiscoverer"/>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/DirectVifDriver.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/DirectVifDriver.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/DirectVifDriver.java
new file mode 100644
index 0000000..1946d74
--- /dev/null
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/DirectVifDriver.java
@@ -0,0 +1,65 @@
+/*
+ * 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
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.cloud.hypervisor.kvm.resource;
+
+import com.cloud.agent.api.to.NicTO;
+import com.cloud.exception.InternalErrorException;
+import com.cloud.network.Networks;
+import org.apache.log4j.Logger;
+import org.libvirt.LibvirtException;
+
+import javax.naming.ConfigurationException;
+import java.util.Map;
+
+public class DirectVifDriver extends VifDriverBase {
+
+    private static final Logger s_logger = Logger.getLogger(DirectVifDriver.class);
+
+    /**
+     * Experimental driver to configure direct networking in libvirt. This should only
+     * be used on an LXC cluster that does not run any system VMs.
+     *
+     * @param nic
+     * @param guestOsType
+     * @return
+     * @throws InternalErrorException
+     * @throws LibvirtException
+     */
+    public LibvirtVMDef.InterfaceDef plug(NicTO nic, String guestOsType) throws InternalErrorException,
+            LibvirtException {
+        LibvirtVMDef.InterfaceDef intf = new LibvirtVMDef.InterfaceDef();
+
+        if (nic.getType() == Networks.TrafficType.Guest) {
+            intf.defDirectNet(_libvirtComputingResource.getNetworkDirectDevice(), null, nic.getMac(), getGuestNicModel(guestOsType),
+                    _libvirtComputingResource.getNetworkDirectSourceMode());
+
+        } else if (nic.getType() == Networks.TrafficType.Public) {
+            intf.defDirectNet(_libvirtComputingResource.getNetworkDirectDevice(), null, nic.getMac(), getGuestNicModel(guestOsType),
+                    _libvirtComputingResource.getNetworkDirectSourceMode());
+        }
+
+        return intf;
+    }
+
+    public void unplug(LibvirtVMDef.InterfaceDef iface) {
+        // not needed, libvirt will cleanup
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index 7b70b62..d30e8f8 100755
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -182,6 +182,7 @@ import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.DevicesDef;
 import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.DiskDef;
 import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.DiskDef.diskProtocol;
 import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.FeaturesDef;
+import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.FilesystemDef;
 import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.GraphicDef;
 import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.GuestDef;
 import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.GuestResourceDef;
@@ -323,9 +324,11 @@ ServerResource {
                     + "            <uuid>{1}</uuid>" + "        </domain>"
                     + "    </domainsnapshot>");
 
-    protected String _hypervisorType;
+    protected HypervisorType _hypervisorType;
     protected String _hypervisorURI;
     protected String _hypervisorPath;
+    protected String _networkDirectSourceMode;
+    protected String _networkDirectDevice;
     protected String _sysvmISOPath;
     protected String _privNwName;
     protected String _privBridgeName;
@@ -392,6 +395,7 @@ ServerResource {
 
     private Map<String, Object> getDeveloperProperties()
             throws ConfigurationException {
+
         final File file = PropertiesUtil.findConfigFile("developer.properties");
         if (file == null) {
             throw new ConfigurationException(
@@ -447,6 +451,14 @@ ServerResource {
         return "scripts/network/domr/kvm";
     }
 
+    protected String getNetworkDirectSourceMode() {
+        return _networkDirectSourceMode;
+    }
+
+    protected String getNetworkDirectDevice() {
+        return _networkDirectDevice;
+    }
+
     @Override
     public boolean configure(String name, Map<String, Object> params)
             throws ConfigurationException {
@@ -586,15 +598,19 @@ ServerResource {
 
         String instance = (String) params.get("instance");
 
-        _hypervisorType = (String) params.get("hypervisor.type");
-        if (_hypervisorType == null) {
-            _hypervisorType = "kvm";
+        _hypervisorType = HypervisorType.getType((String) params.get("hypervisor.type"));
+        if (_hypervisorType == HypervisorType.None) {
+            _hypervisorType = HypervisorType.KVM;
         }
 
         _hypervisorURI = (String) params.get("hypervisor.uri");
         if (_hypervisorURI == null) {
-            _hypervisorURI = "qemu:///system";
+            _hypervisorURI = LibvirtConnection.getHypervisorURI(_hypervisorType.toString());
         }
+
+        _networkDirectSourceMode = (String) params.get("network.direct.source.mode");
+        _networkDirectDevice = (String) params.get("network.direct.device");
+
         String startMac = (String) params.get("private.macaddr.start");
         if (startMac == null) {
             startMac = "00:16:3e:77:e2:a0";
@@ -680,12 +696,14 @@ ServerResource {
             throw new CloudRuntimeException(e.getMessage());
         }
 
-        /* Does node support HVM guest? If not, exit */
-        if (!IsHVMEnabled(conn)) {
-            throw new ConfigurationException(
-                    "NO HVM support on this machine, please make sure: "
-                            + "1. VT/SVM is supported by your CPU, or is enabled in BIOS. "
-                            + "2. kvm modules are loaded (kvm, kvm_amd|kvm_intel)");
+        if (HypervisorType.KVM == _hypervisorType) {
+            /* Does node support HVM guest? If not, exit */
+            if (!IsHVMEnabled(conn)) {
+                throw new ConfigurationException(
+                        "NO HVM support on this machine, please make sure: "
+                                + "1. VT/SVM is supported by your CPU, or is enabled in BIOS. "
+                                + "2. kvm modules are loaded (kvm, kvm_amd|kvm_intel)");
+            }
         }
 
         _hypervisorPath = getHypervisorPath(conn);
@@ -1514,7 +1532,7 @@ ServerResource {
         NicTO nic = cmd.getNic();
         String vmName = cmd.getVmName();
         try {
-            Connect conn = LibvirtConnection.getConnection();
+            Connect conn = LibvirtConnection.getConnectionByVmName(vmName);
             Domain vm = getDomain(conn, vmName);
             List<InterfaceDef> pluggedNics = getInterfaces(conn, vmName);
             Integer nicnum = 0;
@@ -1543,7 +1561,7 @@ ServerResource {
         NicTO nic = cmd.getNic();
         String vmName = cmd.getInstanceName();
         try {
-            conn = LibvirtConnection.getConnection();
+            conn = LibvirtConnection.getConnectionByVmName(vmName);
             Domain vm = getDomain(conn, vmName);
             List<InterfaceDef> pluggedNics = getInterfaces(conn, vmName);
             for (InterfaceDef pluggedNic : pluggedNics) {
@@ -1581,7 +1599,7 @@ ServerResource {
         }
 
         try {
-            conn = LibvirtConnection.getConnection();
+            conn = LibvirtConnection.getConnectionByVmName(routerName);
             Domain vm = getDomain(conn, routerName);
             List<InterfaceDef> pluggedNics = getInterfaces(conn, routerName);
             InterfaceDef routerNic = null;
@@ -1622,7 +1640,7 @@ ServerResource {
         String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP);
 
         try {
-            conn = LibvirtConnection.getConnection();
+            conn = LibvirtConnection.getConnectionByVmName(routerName);
             Domain vm = getDomain(conn, routerName);
             String [][] rules = cmd.generateFwRules();
             String[] aclRules = rules[0];
@@ -1661,7 +1679,7 @@ ServerResource {
         IpAddressTO pubIP = cmd.getIpAddress();
 
         try {
-            conn = LibvirtConnection.getConnection();
+            conn = LibvirtConnection.getConnectionByVmName(routerName);
             Domain vm = getDomain(conn, routerName);
             Integer devNum = 0;
             String pubVlan = pubIP.getVlanId();
@@ -1707,7 +1725,7 @@ ServerResource {
         String routerIP = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP);
 
         try {
-            conn = LibvirtConnection.getConnection();
+            conn = LibvirtConnection.getConnectionByVmName(routerName);
             IpAddressTO[] ips = cmd.getIpAddresses();
             Domain vm = getDomain(conn, routerName);
             Integer devNum = 0;
@@ -1755,7 +1773,7 @@ ServerResource {
         String[] results = new String[cmd.getIpAddresses().length];
         Connect conn;
         try {
-            conn = LibvirtConnection.getConnection();
+            conn = LibvirtConnection.getConnectionByVmName(routerName);
             List<InterfaceDef> nics = getInterfaces(conn, routerName);
             Map<String, Integer> vlanAllocatedToVM = new HashMap<String, Integer>();
             Integer nicPos = 0;
@@ -1812,7 +1830,7 @@ ServerResource {
         String snapshotPath = cmd.getSnapshotPath();
         String vmName = cmd.getVmName();
         try {
-            Connect conn = LibvirtConnection.getConnection();
+            Connect conn = LibvirtConnection.getConnectionByVmName(vmName);
             DomainInfo.DomainState state = null;
             Domain vm = null;
             if (vmName != null) {
@@ -1901,7 +1919,7 @@ ServerResource {
         String vmName = cmd.getVmName();
         KVMStoragePool secondaryStoragePool = null;
         try {
-            Connect conn = LibvirtConnection.getConnection();
+            Connect conn = LibvirtConnection.getConnectionByVmName(vmName);
 
             secondaryStoragePool = _storagePoolMgr.getStoragePoolByURI(
                     secondaryStoragePoolUrl);
@@ -2170,7 +2188,7 @@ ServerResource {
         KVMStoragePool secondaryStorage = null;
         KVMStoragePool primary = null;
         try {
-            Connect conn = LibvirtConnection.getConnection();
+            Connect conn = LibvirtConnection.getConnectionByVmName(cmd.getVmName());
             String templateFolder = cmd.getAccountId() + File.separator
                     + cmd.getTemplateId() + File.separator;
             String templateInstallFolder = "/template/tmpl/" + templateFolder;
@@ -2357,7 +2375,7 @@ ServerResource {
         String vif = null;
         String brname = null;
         try {
-            Connect conn = LibvirtConnection.getConnection();
+            Connect conn = LibvirtConnection.getConnectionByVmName(cmd.getVmName());
             List<InterfaceDef> nics = getInterfaces(conn, cmd.getVmName());
             vif = nics.get(0).getDevName();
             brname = nics.get(0).getBrName();
@@ -2391,7 +2409,7 @@ ServerResource {
 
     protected GetVncPortAnswer execute(GetVncPortCommand cmd) {
         try {
-            Connect conn = LibvirtConnection.getConnection();
+            Connect conn = LibvirtConnection.getConnectionByVmName(cmd.getName());
             Integer vncPort = getVncPort(conn, cmd.getName());
             return new GetVncPortAnswer(cmd, _privateIp, 5900 + vncPort);
         } catch (LibvirtException e) {
@@ -2462,7 +2480,7 @@ ServerResource {
 
     private Answer execute(AttachIsoCommand cmd) {
         try {
-            Connect conn = LibvirtConnection.getConnection();
+            Connect conn = LibvirtConnection.getConnectionByVmName(cmd.getVmName());
             attachOrDetachISO(conn, cmd.getVmName(), cmd.getIsoPath(),
                     cmd.isAttach());
         } catch (LibvirtException e) {
@@ -2478,7 +2496,7 @@ ServerResource {
 
     private AttachVolumeAnswer execute(AttachVolumeCommand cmd) {
         try {
-            Connect conn = LibvirtConnection.getConnection();
+            Connect conn = LibvirtConnection.getConnectionByVmName(cmd.getVmName());
             KVMStoragePool primary = _storagePoolMgr.getStoragePool(
                     cmd.getPooltype(),
                     cmd.getPoolUuid());
@@ -2530,7 +2548,7 @@ ServerResource {
 
     private Answer execute(CheckVirtualMachineCommand cmd) {
         try {
-            Connect conn = LibvirtConnection.getConnection();
+            Connect conn = LibvirtConnection.getConnectionByVmName(cmd.getVmName());
             final State state = getVmState(conn, cmd.getVmName());
             Integer vncPort = null;
             if (state == State.Running) {
@@ -2599,7 +2617,7 @@ ServerResource {
         Domain destDomain = null;
         Connect conn = null;
         try {
-            conn = LibvirtConnection.getConnection();
+            conn = LibvirtConnection.getConnectionByVmName(cmd.getVmName());
             ifaces = getInterfaces(conn, vmName);
             dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName
                     .getBytes()));
@@ -2659,7 +2677,7 @@ ServerResource {
 
         NicTO[] nics = vm.getNics();
         try {
-            Connect conn = LibvirtConnection.getConnection();
+            Connect conn = LibvirtConnection.getConnectionByVmName(vm.getName());
             for (NicTO nic : nics) {
                 getVifDriver(nic.getType()).plug(nic, null);
             }
@@ -2854,7 +2872,7 @@ ServerResource {
         }
 
         try {
-            Connect conn = LibvirtConnection.getConnection();
+            Connect conn = LibvirtConnection.getConnectionByVmName(cmd.getVmName());
             final String result = rebootVM(conn, cmd.getVmName());
             if (result == null) {
                 Integer vncPort = null;
@@ -2892,8 +2910,8 @@ ServerResource {
         List<String> vmNames = cmd.getVmNames();
         try {
             HashMap<String, VmStatsEntry> vmStatsNameMap = new HashMap<String, VmStatsEntry>();
-            Connect conn = LibvirtConnection.getConnection();
             for (String vmName : vmNames) {
+                Connect conn = LibvirtConnection.getConnectionByVmName(vmName);
                 VmStatsEntry statEntry = getVmStat(conn, vmName);
                 if (statEntry == null) {
                     continue;
@@ -2917,7 +2935,7 @@ ServerResource {
             _vms.put(vmName, State.Stopping);
         }
         try {
-            Connect conn = LibvirtConnection.getConnection();
+            Connect conn = LibvirtConnection.getConnectionByVmName(vmName);
 
             List<DiskDef> disks = getDisks(conn, vmName);
             List<InterfaceDef> ifaces = getInterfaces(conn, vmName);
@@ -3047,14 +3065,22 @@ ServerResource {
 
     protected LibvirtVMDef createVMFromSpec(VirtualMachineTO vmTO) {
         LibvirtVMDef vm = new LibvirtVMDef();
-        vm.setHvsType(_hypervisorType);
         vm.setDomainName(vmTO.getName());
         vm.setDomUUID(UUID.nameUUIDFromBytes(vmTO.getName().getBytes())
                 .toString());
         vm.setDomDescription(vmTO.getOs());
 
         GuestDef guest = new GuestDef();
-        guest.setGuestType(GuestDef.guestType.KVM);
+
+        if (HypervisorType.LXC == _hypervisorType &&
+            VirtualMachine.Type.User == vmTO.getType()) {
+            // LXC domain is only valid for user VMs. Use KVM for system VMs.
+            guest.setGuestType(GuestDef.guestType.LXC);
+            vm.setHvsType(HypervisorType.LXC.toString().toLowerCase());
+        } else {
+            guest.setGuestType(GuestDef.guestType.KVM);
+            vm.setHvsType(HypervisorType.KVM.toString().toLowerCase());
+        }
         guest.setGuestArch(vmTO.getArch());
         guest.setMachineType("pc");
         guest.setBootOrder(GuestDef.bootOrder.CDROM);
@@ -3115,6 +3141,7 @@ ServerResource {
 
         DevicesDef devices = new DevicesDef();
         devices.setEmulatorPath(_hypervisorPath);
+        devices.setGuestType(guest.getGuestType());
 
         SerialDef serial = new SerialDef("pty", null, (short) 0);
         devices.addDevice(serial);
@@ -3160,13 +3187,14 @@ ServerResource {
         State state = State.Stopped;
         Connect conn = null;
         try {
-            conn = LibvirtConnection.getConnection();
             synchronized (_vms) {
                 _vms.put(vmName, State.Starting);
             }
 
             vm = createVMFromSpec(vmSpec);
 
+            conn = LibvirtConnection.getConnectionByType(vm.getHvsType());
+
             createVbd(conn, vmSpec, vmName, vm);
 
             createVifs(vmSpec, vm);
@@ -3331,6 +3359,22 @@ ServerResource {
                 vm.getDevices().addDevice(iso);
             }
         }
+
+        // For LXC, find and add the root filesystem
+        if (HypervisorType.LXC.toString().toLowerCase().equals(vm.getHvsType())) {
+            for (VolumeTO volume : disks) {
+                if (volume.getType() == Volume.Type.ROOT) {
+                    KVMStoragePool pool = _storagePoolMgr.getStoragePool(
+                            volume.getPoolType(),
+                            volume.getPoolUuid());
+                    KVMPhysicalDisk physicalDisk = pool.getPhysicalDisk(volume.getPath());
+                    FilesystemDef rootFs = new FilesystemDef(physicalDisk.getPath(), "/");
+                    vm.getDevices().addDevice(rootFs);
+                    break;
+                }
+            }
+        }
+
     }
 
     private VolumeTO getVolume(VirtualMachineTO vmSpec, Volume.Type type) {
@@ -3565,7 +3609,7 @@ ServerResource {
 
         final StartupRoutingCommand cmd = new StartupRoutingCommand(
                 (Integer) info.get(0), (Long) info.get(1), (Long) info.get(2),
-                (Long) info.get(4), (String) info.get(3), HypervisorType.KVM,
+                (Long) info.get(4), (String) info.get(3), _hypervisorType,
                 RouterPrivateIpStrategy.HostLocal);
         cmd.setStateChanges(changes);
         fillNetworkInformation(cmd);
@@ -3721,7 +3765,7 @@ ServerResource {
         Domain dm = null;
         for (; i < 5; i++) {
             try {
-                Connect conn = LibvirtConnection.getConnection();
+                Connect conn = LibvirtConnection.getConnectionByVmName(vm);
                 dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vm
                         .getBytes()));
                 DomainInfo.DomainState vps = dm.getInfo().state;
@@ -3793,17 +3837,31 @@ ServerResource {
 
     private HashMap<String, State> getAllVms() {
         final HashMap<String, State> vmStates = new HashMap<String, State>();
-
-        String[] vms = null;
-        int[] ids = null;
         Connect conn = null;
+
         try {
-            conn = LibvirtConnection.getConnection();
+            conn = LibvirtConnection.getConnectionByType(HypervisorType.LXC.toString());
+            vmStates.putAll(getAllVms(conn));
+        } catch (LibvirtException e) {
+            s_logger.debug("Failed to get connection: " + e.getMessage());
+        }
+
+        try {
+            conn = LibvirtConnection.getConnectionByType(HypervisorType.KVM.toString());
+            vmStates.putAll(getAllVms(conn));
         } catch (LibvirtException e) {
             s_logger.debug("Failed to get connection: " + e.getMessage());
-            return vmStates;
         }
 
+        return vmStates;
+    }
+
+    private HashMap<String, State> getAllVms(Connect conn) {
+        final HashMap<String, State> vmStates = new HashMap<String, State>();
+
+        String[] vms = null;
+        int[] ids = null;
+
         try {
             ids = conn.listDomains();
         } catch (final LibvirtException e) {
@@ -4253,9 +4311,11 @@ ServerResource {
     }
 
     private void cleanupVMNetworks(Connect conn, List<InterfaceDef> nics) {
-        for (InterfaceDef nic : nics) {
-            if (nic.getHostNetType() == hostNicType.VNET) {
-                cleanupVnet(conn, getVnetIdFromBrName(nic.getBrName()));
+        if (nics != null) {
+            for (InterfaceDef nic : nics) {
+                if (nic.getHostNetType() == hostNicType.VNET) {
+                    cleanupVnet(conn, getVnetIdFromBrName(nic.getBrName()));
+                }
             }
         }
     }
@@ -4467,7 +4527,7 @@ ServerResource {
         }
 
         List<InterfaceDef> intfs = getInterfaces(conn, vmName);
-        if (intfs.size() < nic.getDeviceId()) {
+        if (intfs.size() == 0 || intfs.size() < nic.getDeviceId()) {
             return false;
         }
 
@@ -4565,7 +4625,7 @@ ServerResource {
         cmd.add("--vif", vif);
         cmd.add("--brname", brname);
         cmd.add("--nicsecips", secIps);
-        if (rules != null) {
+        if (newRules != null && !newRules.isEmpty()) {
             cmd.add("--rules", newRules);
         }
         String result = cmd.execute();
@@ -4673,7 +4733,7 @@ ServerResource {
         boolean success = false;
         Connect conn;
         try {
-            conn = LibvirtConnection.getConnection();
+            conn = LibvirtConnection.getConnectionByVmName(cmd.getVmName());
             success = default_network_rules_for_systemvm(conn, cmd.getVmName());
         } catch (LibvirtException e) {
             s_logger.trace("Ignoring libvirt error.", e);
@@ -4686,7 +4746,7 @@ ServerResource {
         boolean success = false;
         Connect conn;
         try {
-            conn = LibvirtConnection.getConnection();
+            conn = LibvirtConnection.getConnectionByVmName(cmd.getVmName());
             success = network_rules_vmSecondaryIp(conn, cmd.getVmName(), cmd.getVmSecIp(), cmd.getAction());
         } catch (LibvirtException e) {
             // TODO Auto-generated catch block

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtConnection.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtConnection.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtConnection.java
index 981d343..2ad1616 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtConnection.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtConnection.java
@@ -16,33 +16,75 @@
 // under the License.
 package com.cloud.hypervisor.kvm.resource;
 
+import com.cloud.hypervisor.Hypervisor;
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import org.apache.log4j.Logger;
 import org.libvirt.Connect;
 import org.libvirt.LibvirtException;
 
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
 public class LibvirtConnection {
     private static final Logger s_logger = Logger
             .getLogger(LibvirtConnection.class);
+    static private Map<String, Connect> _connections = new HashMap<String, Connect>();
+
     static private Connect _connection;
     static private String _hypervisorURI;
 
     static public Connect getConnection() throws LibvirtException {
-        if (_connection == null) {
-            _connection = new Connect(_hypervisorURI, false);
+        return getConnection(_hypervisorURI);
+    }
+
+    static public Connect getConnection(String hypervisorURI) throws LibvirtException {
+        Connect conn = _connections.get(hypervisorURI);
+
+        if (conn == null) {
+            conn = new Connect(hypervisorURI, false);
+            _connections.put(hypervisorURI, conn);
         } else {
             try {
-                _connection.getVersion();
+                conn.getVersion();
             } catch (LibvirtException e) {
                 s_logger.debug("Connection with libvirtd is broken, due to "
                         + e.getMessage());
-                _connection = new Connect(_hypervisorURI, false);
+                conn = new Connect(hypervisorURI, false);
+                _connections.put(hypervisorURI, conn);
             }
         }
 
-        return _connection;
+        return conn;
+    }
+
+    static public Connect getConnectionByVmName(String vmName) throws LibvirtException {
+        HypervisorType[] hypervisors = new HypervisorType[] {HypervisorType.KVM, Hypervisor.HypervisorType.LXC};
+
+        for (HypervisorType hypervisor : hypervisors) {
+          Connect conn = LibvirtConnection.getConnectionByType(hypervisor.toString());
+          if (conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName.getBytes())) != null) {
+             return conn;
+          }
+        }
+
+        // return the default connection
+        return getConnection();
+    }
+
+    static public Connect getConnectionByType(String hypervisorType) throws LibvirtException {
+        return getConnection(getHypervisorURI(hypervisorType));
     }
 
     static void initialize(String hypervisorURI) {
         _hypervisorURI = hypervisorURI;
     }
+
+    static String getHypervisorURI(String hypervisorType) {
+        if ("LXC".equalsIgnoreCase(hypervisorType)) {
+            return "lxc:///";
+        } else {
+            return "qemu:///system";
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java
index b622b6d..61a75ba 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java
@@ -116,17 +116,20 @@ public class LibvirtDomainXMLParser {
 
             Element graphic = (Element) devices
                     .getElementsByTagName("graphics").item(0);
-            String port = graphic.getAttribute("port");
-            if (port != null) {
-                try {
-                    vncPort = Integer.parseInt(port);
-                    if (vncPort != -1) {
-                        vncPort = vncPort - 5900;
-                    } else {
+
+            if (graphic != null) {
+                String port = graphic.getAttribute("port");
+                if (port != null) {
+                    try {
+                        vncPort = Integer.parseInt(port);
+                        if (vncPort != -1) {
+                            vncPort = vncPort - 5900;
+                        } else {
+                            vncPort = null;
+                        }
+                    } catch (NumberFormatException nfe) {
                         vncPort = null;
                     }
-                } catch (NumberFormatException nfe) {
-                    vncPort = null;
                 }
             }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtStorageVolumeDef.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtStorageVolumeDef.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtStorageVolumeDef.java
index d5cd91a..7f9ceeb 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtStorageVolumeDef.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtStorageVolumeDef.java
@@ -18,7 +18,7 @@ package com.cloud.hypervisor.kvm.resource;
 
 public class LibvirtStorageVolumeDef {
     public enum volFormat {
-        RAW("raw"), QCOW2("qcow2"), DIR("dir");
+        RAW("raw"), QCOW2("qcow2"), DIR("dir"), TAR("tar");
         private String _format;
 
         volFormat(String format) {
@@ -38,6 +38,10 @@ public class LibvirtStorageVolumeDef {
                 return RAW;
             } else if (format.equalsIgnoreCase("qcow2")) {
                 return QCOW2;
+            } else if (format.equalsIgnoreCase("dir")) {
+                return DIR;
+            } else if (format.equalsIgnoreCase("tar")) {
+                return TAR;
             }
             return null;
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
index 3d896a7..63133a8 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
@@ -31,7 +31,7 @@ public class LibvirtVMDef {
 
     public static class GuestDef {
         enum guestType {
-            KVM, XEN, EXE
+            KVM, XEN, EXE, LXC
         }
 
         enum bootOrder {
@@ -62,6 +62,10 @@ public class LibvirtVMDef {
             _type = type;
         }
 
+        public guestType getGuestType() {
+            return _type;
+        }
+
         public void setGuestArch(String arch) {
             _arch = arch;
         }
@@ -106,8 +110,16 @@ public class LibvirtVMDef {
                 }
                 guestDef.append("</os>\n");
                 return guestDef.toString();
-            } else
+            } else if (_type == guestType.LXC) {
+                StringBuilder guestDef = new StringBuilder();
+                guestDef.append("<os>\n");
+                guestDef.append("<type>exe</type>\n");
+                guestDef.append("<init>/sbin/init</init>\n");
+                guestDef.append("</os>\n");
+                return guestDef.toString();
+             } else {
                 return null;
+            }
         }
     }
 
@@ -279,6 +291,7 @@ public class LibvirtVMDef {
 
     public static class DevicesDef {
         private String _emulator;
+        private GuestDef.guestType _guestType;
         private final Map<String, List<?>> devices = new HashMap<String, List<?>>();
 
         public boolean addDevice(Object device) {
@@ -298,6 +311,10 @@ public class LibvirtVMDef {
             _emulator = emulator;
         }
 
+        public void setGuestType(GuestDef.guestType guestType) {
+            _guestType = guestType;
+        }
+
         @Override
         public String toString() {
             StringBuilder devicesBuilder = new StringBuilder();
@@ -309,6 +326,13 @@ public class LibvirtVMDef {
 
             for (List<?> devs : devices.values()) {
                 for (Object dev : devs) {
+                    if (_guestType == GuestDef.guestType.LXC) {
+                        if (dev instanceof GraphicDef ||
+                            dev instanceof InputDef ||
+                            dev instanceof DiskDef) {
+                            continue;
+                        }
+                    }
                     devicesBuilder.append(dev.toString());
                 }
             }
@@ -610,7 +634,7 @@ public class LibvirtVMDef {
 
     public static class InterfaceDef {
         enum guestNetType {
-            BRIDGE("bridge"), NETWORK("network"), USER("user"), ETHERNET(
+            BRIDGE("bridge"), DIRECT("direct"), NETWORK("network"), USER("user"), ETHERNET(
                     "ethernet"), INTERNAL("internal");
             String _type;
 
@@ -648,6 +672,7 @@ public class LibvirtVMDef {
                                          * internal
                                          */
         private hostNicType _hostNetType; /* Only used by agent java code */
+        private String _netSourceMode;
         private String _sourceName;
         private String _networkName;
         private String _macAddr;
@@ -667,6 +692,16 @@ public class LibvirtVMDef {
             _model = model;
         }
 
+        public void defDirectNet(String sourceName, String targetName,
+                                 String macAddr, nicModel model, String sourceMode) {
+            _netType = guestNetType.DIRECT;
+            _netSourceMode = sourceMode;
+            _sourceName = sourceName;
+            _networkName = targetName;
+            _macAddr = macAddr;
+            _model = model;
+        }
+
         public void defPrivateNet(String networkName, String targetName,
                 String macAddr, nicModel model) {
             _netType = guestNetType.NETWORK;
@@ -699,6 +734,10 @@ public class LibvirtVMDef {
             return _netType;
         }
 
+        public String getNetSourceMode() {
+            return _netSourceMode;
+        }
+
         public String getDevName() {
             return _networkName;
         }
@@ -739,6 +778,8 @@ public class LibvirtVMDef {
                 netBuilder.append("<source bridge='" + _sourceName + "'/>\n");
             } else if (_netType == guestNetType.NETWORK) {
                 netBuilder.append("<source network='" + _sourceName + "'/>\n");
+            } else if (_netType == guestNetType.DIRECT) {
+                netBuilder.append("<source dev='" + _sourceName + "' mode='" + _netSourceMode + "'/>\n");
             }
             if (_networkName != null) {
                 netBuilder.append("<target dev='" + _networkName + "'/>\n");
@@ -934,10 +975,34 @@ public class LibvirtVMDef {
         }
     }
 
+    public static class FilesystemDef {
+        private final String _sourcePath;
+        private final String _targetPath;
+
+        public FilesystemDef(String sourcePath, String targetPath) {
+            _sourcePath = sourcePath;
+            _targetPath = targetPath;
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder fsBuilder = new StringBuilder();
+            fsBuilder.append("<filesystem type='mount'>\n");
+            fsBuilder.append("  <source dir='" + _sourcePath + "'/>\n");
+            fsBuilder.append("  <target dir='" + _targetPath + "'/>\n");
+            fsBuilder.append("</filesystem>\n");
+            return fsBuilder.toString();
+        }
+    }
+
     public void setHvsType(String hvs) {
         _hvsType = hvs;
     }
 
+    public String getHvsType() {
+        return _hvsType;
+    }
+
     public void setDomainName(String domainName) {
         _domName = domainName;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMPhysicalDisk.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMPhysicalDisk.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMPhysicalDisk.java
index 08f51a4..f359713 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMPhysicalDisk.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMPhysicalDisk.java
@@ -22,7 +22,7 @@ public class KVMPhysicalDisk {
     private KVMStoragePool pool;
 
     public static enum PhysicalDiskFormat {
-        RAW("raw"), QCOW2("qcow2");
+        RAW("raw"), QCOW2("qcow2"), TAR("tar"), DIR("dir");
         String format;
 
         private PhysicalDiskFormat(String format) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java
index c2bfad9..f6db3f1 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java
@@ -139,6 +139,10 @@ public class KVMStoragePoolManager {
             return adaptor.createDiskFromTemplate(template, name,
                                        KVMPhysicalDisk.PhysicalDiskFormat.RAW, template.getSize(),
                                        destPool);
+        } else if (template.getFormat() == KVMPhysicalDisk.PhysicalDiskFormat.DIR) {
+            return adaptor.createDiskFromTemplate(template, name,
+                    KVMPhysicalDisk.PhysicalDiskFormat.DIR,
+                    template.getSize(), destPool);
         } else {
             return adaptor.createDiskFromTemplate(template, name,
                     KVMPhysicalDisk.PhysicalDiskFormat.QCOW2,

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
index 5e83ef6..cee2aae 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
@@ -390,7 +390,14 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
             disk.setSize(vol.getInfo().allocation);
             disk.setVirtualSize(vol.getInfo().capacity);
             if (voldef.getFormat() == null) {
-                disk.setFormat(pool.getDefaultFormat());
+                File diskDir = new File(disk.getPath());
+                if (diskDir.exists() && diskDir.isDirectory()) {
+                    disk.setFormat(PhysicalDiskFormat.DIR);
+                } else if (volumeUuid.endsWith("tar") || volumeUuid.endsWith(("TAR"))) {
+                    disk.setFormat(PhysicalDiskFormat.TAR);
+                } else {
+                    disk.setFormat(pool.getDefaultFormat());
+                }
             } else if (pool.getType() == StoragePoolType.RBD) {
                 disk.setFormat(KVMPhysicalDisk.PhysicalDiskFormat.RAW);
             } else if (voldef.getFormat() == LibvirtStorageVolumeDef.volFormat.QCOW2) {
@@ -590,6 +597,10 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
             libvirtformat = LibvirtStorageVolumeDef.volFormat.QCOW2;
         } else if (format == PhysicalDiskFormat.RAW) {
             libvirtformat = LibvirtStorageVolumeDef.volFormat.RAW;
+        } else if (format == PhysicalDiskFormat.DIR) {
+            libvirtformat = LibvirtStorageVolumeDef.volFormat.DIR;
+        } else if (format == PhysicalDiskFormat.TAR) {
+            libvirtformat = LibvirtStorageVolumeDef.volFormat.TAR;
         }
 
         LibvirtStorageVolumeDef volDef = new LibvirtStorageVolumeDef(name,
@@ -640,7 +651,13 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
         if (destPool.getType() != StoragePoolType.RBD) {
             disk = destPool.createPhysicalDisk(newUuid, format, template.getVirtualSize());
 
-            if (format == PhysicalDiskFormat.QCOW2) {
+            if (template.getFormat() == PhysicalDiskFormat.TAR) {
+                Script.runSimpleBashScript("tar -x -f " + template.getPath() + " -C " + disk.getPath());
+            } else if (template.getFormat() == PhysicalDiskFormat.DIR) {
+                Script.runSimpleBashScript("mkdir -p " + disk.getPath());
+                Script.runSimpleBashScript("chmod 755 " + disk.getPath());
+                Script.runSimpleBashScript("cp -p -r " + template.getPath() + "/* " + disk.getPath());
+            } else if (format == PhysicalDiskFormat.QCOW2) {
                 Script.runSimpleBashScript("qemu-img create -f "
                         + template.getFormat() + " -b  " + template.getPath() + " "
                         + disk.getPath());
@@ -724,7 +741,11 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
 
         KVMPhysicalDisk newDisk;
         if (destPool.getType() != StoragePoolType.RBD) {
-            newDisk = destPool.createPhysicalDisk(name, disk.getVirtualSize());
+            if (disk.getFormat() == PhysicalDiskFormat.TAR) {
+                newDisk = destPool.createPhysicalDisk(name, PhysicalDiskFormat.DIR, disk.getVirtualSize());
+            } else {
+                newDisk = destPool.createPhysicalDisk(name, disk.getVirtualSize());
+            }
         } else {
             newDisk = new KVMPhysicalDisk(destPool.getSourceDir() + "/" + name, name, destPool);
             newDisk.setFormat(PhysicalDiskFormat.RAW);
@@ -739,7 +760,15 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
         PhysicalDiskFormat destFormat = newDisk.getFormat();
 
         if ((srcPool.getType() != StoragePoolType.RBD) && (destPool.getType() != StoragePoolType.RBD)) {
-            if (sourceFormat.equals(destFormat) && 
+            if (sourceFormat == PhysicalDiskFormat.TAR) {
+                Script.runSimpleBashScript("tar -x -f " + sourcePath + " -C " + destPath);
+
+            } else if (sourceFormat == PhysicalDiskFormat.DIR) {
+                Script.runSimpleBashScript("mkdir -p " + destPath);
+                Script.runSimpleBashScript("chmod 755 " + destPath);
+                Script.runSimpleBashScript("cp -p -r " + sourcePath + "/* " + destPath);
+
+            } else if (sourceFormat.equals(destFormat) &&
                 Script.runSimpleBashScript("qemu-img info " + sourcePath + "|grep backing") == null) {
                 Script.runSimpleBashScript("cp -f " + sourcePath + " " + destPath);
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtVMDefTest.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtVMDefTest.java b/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtVMDefTest.java
index b723875..2c0ff8d 100644
--- a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtVMDefTest.java
+++ b/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtVMDefTest.java
@@ -35,4 +35,18 @@ public class LibvirtVMDefTest extends TestCase {
 
         assertEquals(expected, ifDef.toString());
     }
+
+    public void testInterfaceDirectNet() {
+        LibvirtVMDef.InterfaceDef ifDef = new LibvirtVMDef.InterfaceDef();
+        ifDef.defDirectNet("targetDeviceName", null, "00:11:22:aa:bb:dd", LibvirtVMDef.InterfaceDef.nicModel.VIRTIO, "private");
+
+        String expected = "<interface type='" + LibvirtVMDef.InterfaceDef.guestNetType.DIRECT + "'>\n" +
+                "<source dev='targetDeviceName' mode='private'/>\n" +
+                "<mac address='00:11:22:aa:bb:dd'/>\n" +
+                "<model type='virtio'/>\n" +
+                "</interface>\n";
+
+        assertEquals(expected, ifDef.toString());
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/scripts/storage/secondary/cloud-install-sys-tmplt
----------------------------------------------------------------------
diff --git a/scripts/storage/secondary/cloud-install-sys-tmplt b/scripts/storage/secondary/cloud-install-sys-tmplt
index bcdc4c4..7237ffa 100755
--- a/scripts/storage/secondary/cloud-install-sys-tmplt
+++ b/scripts/storage/secondary/cloud-install-sys-tmplt
@@ -157,6 +157,10 @@ then
    then
       ext="ova"
       templateId=(`mysql -h $dbHost --user=$dbUser --password=$dbPassword --skip-column-names -U cloud -e "select max(id) from cloud.vm_template where type = \"SYSTEM\" and hypervisor_type = \"VMware\" and removed is null"`)
+   elif [ "$hyper" == "lxc" ]
+   then
+      ext="qcow2"
+      templateId=(`mysql -h $dbHost --user=$dbUser --password=$dbPassword --skip-column-names -U cloud -e "select max(id) from cloud.vm_template where type = \"SYSTEM\" and hypervisor_type = \"LXC\" and removed is null"`)
    else
       usage
       failed 2

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
index 544a803..1edd869 100755
--- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
+++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
@@ -1194,11 +1194,13 @@ public class ConsoleProxyManagerImpl extends ManagerBase implements ConsoleProxy
                 }
             } else {
                 if (s_logger.isDebugEnabled()) {
-                    if (secondaryStorageHost != null) {
-                        s_logger.debug("Zone host is ready, but console proxy template: " + template.getId() +  " is not ready on secondary storage: " + secondaryStorageHost.getId());
-                    } else {
-                        s_logger.debug("Zone host is ready, but console proxy template: " + template.getId() +  " is not ready on secondary storage.");
-                    }
+                    if (template == null) {
+                        s_logger.debug("Zone host is ready, but console proxy template is null");
+                    } else if (secondaryStorageHost != null) {
+			s_logger.debug("Zone host is ready, but console proxy template: " + template.getId() +  " is not ready on secondary storage: " + secondaryStorageHost.getId());
+		    } else {
+			s_logger.debug("Zone host is ready, but console proxy template: " + template.getId() +  " is not ready on secondary storage.");
+		    }
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/server/src/com/cloud/hypervisor/LXCGuru.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/hypervisor/LXCGuru.java b/server/src/com/cloud/hypervisor/LXCGuru.java
new file mode 100644
index 0000000..7a530b5
--- /dev/null
+++ b/server/src/com/cloud/hypervisor/LXCGuru.java
@@ -0,0 +1,58 @@
+// 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
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.hypervisor;
+
+import javax.ejb.Local;
+import javax.inject.Inject;
+
+import com.cloud.agent.api.to.VirtualMachineTO;
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.storage.GuestOSVO;
+import com.cloud.storage.dao.GuestOSDao;
+import com.cloud.vm.VirtualMachine;
+import com.cloud.vm.VirtualMachineProfile;
+
+@Local(value=HypervisorGuru.class)
+public class LXCGuru extends HypervisorGuruBase implements HypervisorGuru {
+    @Inject GuestOSDao _guestOsDao;
+
+    @Override
+    public HypervisorType getHypervisorType() {
+        return HypervisorType.LXC;
+    }
+
+    protected LXCGuru() {
+        super();
+    }
+
+    @Override
+    public <T extends VirtualMachine> VirtualMachineTO implement(
+            VirtualMachineProfile<T> vm) {
+        VirtualMachineTO to = toVirtualMachineTO(vm);
+
+        // Determine the VM's OS description
+        GuestOSVO guestOS = _guestOsDao.findById(vm.getVirtualMachine().getGuestOSId());
+        to.setOs(guestOS.getDisplayName());
+
+        return to;
+    }
+
+    @Override
+    public boolean trackVmHostChange() {
+        return false;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java b/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java
index 75e00ad..da26370 100644
--- a/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java
+++ b/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java
@@ -16,380 +16,21 @@
 // under the License.
 package com.cloud.hypervisor.kvm.discoverer;
 
-import java.net.InetAddress;
-import java.net.URI;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import javax.ejb.Local;
-import javax.inject.Inject;
-import javax.naming.ConfigurationException;
-
-import org.apache.log4j.Logger;
-
-import com.cloud.agent.AgentManager;
-import com.cloud.agent.Listener;
-import com.cloud.agent.api.AgentControlAnswer;
-import com.cloud.agent.api.AgentControlCommand;
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.Command;
-import com.cloud.agent.api.ShutdownCommand;
-import com.cloud.agent.api.StartupCommand;
-import com.cloud.agent.api.StartupRoutingCommand;
-import com.cloud.configuration.Config;
-import com.cloud.configuration.dao.ConfigurationDao;
-import com.cloud.dc.ClusterVO;
-import com.cloud.dc.dao.ClusterDao;
-import com.cloud.exception.AgentUnavailableException;
-import com.cloud.exception.DiscoveredWithErrorException;
-import com.cloud.exception.DiscoveryException;
-import com.cloud.exception.OperationTimedoutException;
-import com.cloud.host.Host;
-import com.cloud.host.HostVO;
-import com.cloud.host.Status;
-import com.cloud.host.dao.HostDao;
 import com.cloud.hypervisor.Hypervisor;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.network.NetworkModel;
-import com.cloud.network.PhysicalNetworkSetupInfo;
 import com.cloud.resource.Discoverer;
-import com.cloud.resource.DiscovererBase;
-import com.cloud.resource.ResourceManager;
-import com.cloud.resource.ResourceStateAdapter;
-import com.cloud.resource.ServerResource;
-import com.cloud.resource.UnableDeleteHostException;
-import com.cloud.utils.ssh.SSHCmdHelper;
+import org.apache.log4j.Logger;
+
+import javax.ejb.Local;
 
 @Local(value=Discoverer.class)
-public class KvmServerDiscoverer extends DiscovererBase implements Discoverer,
-Listener, ResourceStateAdapter {
+public class KvmServerDiscoverer extends LibvirtServerDiscoverer {
     private static final Logger s_logger = Logger.getLogger(KvmServerDiscoverer.class);
-    private String _hostIp;
-    private final int _waitTime = 5; /*wait for 5 minutes*/
-    private String _kvmPrivateNic;
-    private String _kvmPublicNic;
-    private String _kvmGuestNic;
-    @Inject HostDao _hostDao = null;
-    @Inject ClusterDao _clusterDao;
-    @Inject ResourceManager _resourceMgr;
-    @Inject AgentManager _agentMgr;
-    @Inject ConfigurationDao _configDao;
-    @Inject NetworkModel _networkMgr;
-
-    @Override
-    public boolean processAnswers(long agentId, long seq, Answer[] answers) {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-    @Override
-    public boolean processCommands(long agentId, long seq, Command[] commands) {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-    @Override
-    public AgentControlAnswer processControlCommand(long agentId,
-            AgentControlCommand cmd) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public void processConnect(HostVO host, StartupCommand cmd, boolean forRebalance) {
-    }
-
-    @Override
-    public boolean processDisconnect(long agentId, Status state) {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-    @Override
-    public boolean isRecurring() {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-    @Override
-    public int getTimeout() {
-        // TODO Auto-generated method stub
-        return 0;
-    }
-
-    @Override
-    public boolean processTimeout(long agentId, long seq) {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-    @Override
-    public Map<? extends ServerResource, Map<String, String>> find(long dcId,
-            Long podId, Long clusterId, URI uri, String username,
-            String password, List<String> hostTags) throws DiscoveryException {
-
-        ClusterVO cluster = _clusterDao.findById(clusterId);
-        if(cluster == null || cluster.getHypervisorType() != HypervisorType.KVM) {
-            if(s_logger.isInfoEnabled())
-                s_logger.info("invalid cluster id or cluster is not for KVM hypervisors"); 
-            return null;
-        }
-
-        Map<KvmDummyResourceBase, Map<String, String>> resources = new HashMap<KvmDummyResourceBase, Map<String, String>>();
-        Map<String, String> details = new HashMap<String, String>();
-        if (!uri.getScheme().equals("http")) {
-            String msg = "urlString is not http so we're not taking care of the discovery for this: " + uri;
-            s_logger.debug(msg);
-            return null;
-        }
-        com.trilead.ssh2.Connection sshConnection = null;
-        String agentIp = null;
-        try {
-
-            String hostname = uri.getHost();
-            InetAddress ia = InetAddress.getByName(hostname);
-            agentIp = ia.getHostAddress();
-            String guid = UUID.nameUUIDFromBytes(agentIp.getBytes()).toString();
-            String guidWithTail = guid + "-LibvirtComputingResource";/*tail added by agent.java*/
-            if (_resourceMgr.findHostByGuid(guidWithTail) != null) {
-                s_logger.debug("Skipping " + agentIp + " because " + guidWithTail + " is already in the database.");
-                return null;
-            }       
-
-            sshConnection = new com.trilead.ssh2.Connection(agentIp, 22);
-
-            sshConnection.connect(null, 60000, 60000);
-            if (!sshConnection.authenticateWithPassword(username, password)) {
-                s_logger.debug("Failed to authenticate");
-                throw new DiscoveredWithErrorException("Authentication error");
-            }
-
-            if (!SSHCmdHelper.sshExecuteCmd(sshConnection, "lsmod|grep kvm", 3)) {
-                s_logger.debug("It's not a KVM enabled machine");
-                return null;
-            }
-
-            List <PhysicalNetworkSetupInfo> netInfos = _networkMgr.getPhysicalNetworkInfo(dcId, HypervisorType.KVM);
-            String kvmPrivateNic = null;
-            String kvmPublicNic = null;
-            String kvmGuestNic = null;
-
-            for (PhysicalNetworkSetupInfo info : netInfos) {
-                if (info.getPrivateNetworkName() != null) {
-                    kvmPrivateNic = info.getPrivateNetworkName();
-                }
-                if (info.getPublicNetworkName() != null) {
-                    kvmPublicNic = info.getPublicNetworkName();
-                }
-                if (info.getGuestNetworkName() != null) {
-                    kvmGuestNic = info.getGuestNetworkName();
-                }
-            }
-
-            if (kvmPrivateNic == null && kvmPublicNic == null && kvmGuestNic == null) {
-                kvmPrivateNic = _kvmPrivateNic;
-                kvmPublicNic = _kvmPublicNic;
-                kvmGuestNic = _kvmGuestNic;
-            } 
-
-            if (kvmPublicNic == null) {
-                kvmPublicNic = (kvmGuestNic != null) ? kvmGuestNic : kvmPrivateNic;
-            }
-
-            if (kvmPrivateNic == null) {
-                kvmPrivateNic = (kvmPublicNic != null) ? kvmPublicNic : kvmGuestNic;
-            }
-
-            if (kvmGuestNic == null) {
-                kvmGuestNic = (kvmPublicNic != null) ? kvmPublicNic : kvmPrivateNic;
-            }
-
-            String parameters = " -m " + _hostIp + " -z " + dcId + " -p " + podId + " -c " + clusterId + " -g " + guid + " -a";
-
-            parameters += " --pubNic=" + kvmPublicNic;
-            parameters += " --prvNic=" + kvmPrivateNic;
-            parameters += " --guestNic=" + kvmGuestNic;
 
-            SSHCmdHelper.sshExecuteCmd(sshConnection, "cloudstack-setup-agent " + parameters, 3);
-
-            KvmDummyResourceBase kvmResource = new KvmDummyResourceBase();
-            Map<String, Object> params = new HashMap<String, Object>();
-
-            params.put("zone", Long.toString(dcId));
-            params.put("pod", Long.toString(podId));
-            params.put("cluster",  Long.toString(clusterId));
-            params.put("guid", guid); 
-            params.put("agentIp", agentIp);
-            kvmResource.configure("kvm agent", params);
-            resources.put(kvmResource, details);
-
-            HostVO connectedHost = waitForHostConnect(dcId, podId, clusterId, guidWithTail);
-            if (connectedHost == null)
-                return null;
-
-            details.put("guid", guidWithTail);
-
-            // place a place holder guid derived from cluster ID
-            if (cluster.getGuid() == null) {
-                cluster.setGuid(UUID.nameUUIDFromBytes(String.valueOf(clusterId).getBytes()).toString());
-                _clusterDao.update(clusterId, cluster);
-            }
-
-            //save user name and password
-            _hostDao.loadDetails(connectedHost);
-            Map<String, String> hostDetails = connectedHost.getDetails();
-            hostDetails.put("password", password);
-            hostDetails.put("username", username);
-            _hostDao.saveDetails(connectedHost);
-            return resources;
-        } catch (DiscoveredWithErrorException e){ 
-            throw e;
-        }catch (Exception e) {
-            String msg = " can't setup agent, due to " + e.toString() + " - " + e.getMessage();
-            s_logger.warn(msg);
-        } finally {
-            if (sshConnection != null)
-                sshConnection.close();
-        }
-
-        return null;
-    }
-
-    private HostVO waitForHostConnect(long dcId, long podId, long clusterId, String guid) {
-        for (int i = 0; i < _waitTime *2; i++) {
-            List<HostVO> hosts = _resourceMgr.listAllUpAndEnabledHosts(Host.Type.Routing, clusterId, podId, dcId);
-            for (HostVO host : hosts) {
-                if (host.getGuid().equalsIgnoreCase(guid)) {
-                    return host;
-                }
-            }
-            try {
-                Thread.sleep(30000);
-            } catch (InterruptedException e) {
-                s_logger.debug("Failed to sleep: " + e.toString());
-            }
-        }
-        s_logger.debug("Timeout, to wait for the host connecting to mgt svr, assuming it is failed");
-        List<HostVO> hosts = _resourceMgr.findHostByGuid(dcId, guid);
-        if (hosts.size() == 1) {
-            return hosts.get(0);
-        } else {
-            return null;
-        }
-    }
-
-    @Override
-    public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
-//        _setupAgentPath = Script.findScript(getPatchPath(), "setup_agent.sh");
-        _kvmPrivateNic = _configDao.getValue(Config.KvmPrivateNetwork.key());
-        if (_kvmPrivateNic == null) {
-            _kvmPrivateNic = "cloudbr0";
-        }
-
-        _kvmPublicNic = _configDao.getValue(Config.KvmPublicNetwork.key());
-        if (_kvmPublicNic == null) {
-            _kvmPublicNic = _kvmPrivateNic;
-        }
-
-        _kvmGuestNic = _configDao.getValue(Config.KvmGuestNetwork.key());
-        if (_kvmGuestNic == null) {
-            _kvmGuestNic = _kvmPrivateNic;
-        }
-
-        _hostIp = _configDao.getValue("host");
-        if (_hostIp == null) {
-            throw new ConfigurationException("Can't get host IP");
-        }
-        _resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this);
-        return true;
-    }
-
-    protected String getPatchPath() {
-        return "scripts/vm/hypervisor/kvm/";
-    }
-
-    @Override
-    public void postDiscovery(List<HostVO> hosts, long msId)
-            throws DiscoveryException {
-        // TODO Auto-generated method stub
-    }
-
-    @Override
     public Hypervisor.HypervisorType getHypervisorType() {
         return Hypervisor.HypervisorType.KVM;
     }
 
-    @Override
-    public boolean matchHypervisor(String hypervisor) {
-        // for backwards compatibility, if not supplied, always let to try it
-        if(hypervisor == null)
-            return true;
-
-        return Hypervisor.HypervisorType.KVM.toString().equalsIgnoreCase(hypervisor);
-    }
-
-    @Override
-    public HostVO createHostVOForConnectedAgent(HostVO host, StartupCommand[] cmd) {
-        StartupCommand firstCmd = cmd[0];
-        if (!(firstCmd instanceof StartupRoutingCommand)) {
-            return null;
-        }
-
-        StartupRoutingCommand ssCmd = ((StartupRoutingCommand) firstCmd);
-        if (ssCmd.getHypervisorType() != HypervisorType.KVM) {
-            return null;
-        }
-
-        /* KVM requires host are the same in cluster */
-        ClusterVO clusterVO = _clusterDao.findById(host.getClusterId());
-        List<HostVO> hostsInCluster = _resourceMgr.listAllHostsInCluster(clusterVO.getId());
-        if (!hostsInCluster.isEmpty()) {
-            HostVO oneHost = hostsInCluster.get(0);
-            _hostDao.loadDetails(oneHost);
-            String hostOsInCluster = oneHost.getDetail("Host.OS");
-            String hostOs = ssCmd.getHostDetails().get("Host.OS");
-            if (!hostOsInCluster.equalsIgnoreCase(hostOs)) {
-                throw new IllegalArgumentException("Can't add host: " + firstCmd.getPrivateIpAddress() + " with hostOS: " + hostOs + " into a cluster,"
-                        + "in which there are " + hostOsInCluster + " hosts added");
-            }
-        }
-
-        _hostDao.loadDetails(host);
-
-        return _resourceMgr.fillRoutingHostVO(host, ssCmd, HypervisorType.KVM, host.getDetails(), null);
-    }
-
-    @Override
-    public HostVO createHostVOForDirectConnectAgent(HostVO host, StartupCommand[] startup, ServerResource resource, Map<String, String> details,
-            List<String> hostTags) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public DeleteHostAnswer deleteHost(HostVO host, boolean isForced, boolean isForceDeleteStorage) throws UnableDeleteHostException {
-        if (host.getType() != Host.Type.Routing || host.getHypervisorType() != HypervisorType.KVM) {
-            return null;
-        }
-
-        _resourceMgr.deleteRoutingHost(host, isForced, isForceDeleteStorage);
-        try {
-            ShutdownCommand cmd = new ShutdownCommand(ShutdownCommand.DeleteHost, null);
-            _agentMgr.send(host.getId(), cmd);
-        } catch (AgentUnavailableException e) {
-            s_logger.warn("Sending ShutdownCommand failed: ", e);
-        } catch (OperationTimedoutException e) {
-            s_logger.warn("Sending ShutdownCommand failed: ", e);
-        }
-
-        return new DeleteHostAnswer(true);
-    }
-
-    @Override
-    public boolean stop() {
-        _resourceMgr.unregisterResourceStateAdapter(this.getClass().getSimpleName());
-        return super.stop();
+    protected String getPatchPath() {
+        return "scripts/vm/hypervisor/kvm/";
     }
 }


[26/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
Disabling broken test, see CLOUDSTACK-1884. Please revert this commit once the test itself is fixed.


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

Branch: refs/heads/kvm-vnc-listen
Commit: df6b97c194caa8b34fa14bf5164eb2fe1f26b2b1
Parents: ea0daea
Author: Hugo Trippaers <tr...@gmail.com>
Authored: Tue Apr 2 10:02:57 2013 +0200
Committer: Hugo Trippaers <tr...@gmail.com>
Committed: Tue Apr 2 10:02:57 2013 +0200

----------------------------------------------------------------------
 server/pom.xml |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/df6b97c1/server/pom.xml
----------------------------------------------------------------------
diff --git a/server/pom.xml b/server/pom.xml
index 1bc0f69..a397195 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -157,6 +157,9 @@
             <exclude>com/cloud/api/ListPerfTest.java</exclude>
             <exclude>com/cloud/network/vpn/RemoteAccessVpnTest.java</exclude>
             <exclude>com/cloud/network/security/SecurityGroupManagerImpl2Test.java</exclude>
+            <exclude>com/cloud/network/security/SecurityGroupManagerImpl2Test.java</exclude>
+            <!-- see CLOUDSTACK-1884 -->
+            <exclude>org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java</exclude>
           </excludes>
         </configuration>
       </plugin>


[37/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
simulator+marvin: include a router test

Added a test that will ensure the advanced router comes up in the
account belonging to the deployed VM. It should come up with the
publicip, guestip and linklocalip.

Signed-off-by: Prasanna Santhanam <ts...@apache.org>


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

Branch: refs/heads/kvm-vnc-listen
Commit: d4dc2649173f17d230b1d4332b3e0d9466fb3f20
Parents: 9c755e1
Author: Prasanna Santhanam <ts...@apache.org>
Authored: Mon Mar 25 18:36:37 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Tue Apr 2 18:31:30 2013 +0530

----------------------------------------------------------------------
 test/integration/smoke/test_vm_life_cycle.py |  137 ++++++++++++---------
 tools/marvin/pom.xml                         |   22 ----
 2 files changed, 79 insertions(+), 80 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d4dc2649/test/integration/smoke/test_vm_life_cycle.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_vm_life_cycle.py b/test/integration/smoke/test_vm_life_cycle.py
index 143fea7..d9571f6 100644
--- a/test/integration/smoke/test_vm_life_cycle.py
+++ b/test/integration/smoke/test_vm_life_cycle.py
@@ -129,72 +129,79 @@ class Services:
 
 class TestDeployVM(cloudstackTestCase):
 
-    def setUp(self):
-
-        self.apiclient = self.testClient.getApiClient()
-        self.dbclient = self.testClient.getDbConnection()
-        self.services = Services().services
+    @classmethod
+    def setUpClass(cls):
+        cls.services = Services().services
+        cls.apiclient = super(TestDeployVM, cls).getClsTestClient().getApiClient()
         # Get Zone, Domain and templates
-        domain = get_domain(self.apiclient, self.services)
-        zone = get_zone(self.apiclient, self.services)
-        self.services['mode'] = zone.networktype
+        domain = get_domain(cls.apiclient, cls.services)
+        zone = get_zone(cls.apiclient, cls.services)
+        cls.services['mode'] = zone.networktype
 
-        #if local storage is enabled, alter the offerings to use localstorage
+        #If local storage is enabled, alter the offerings to use localstorage
         #this step is needed for devcloud
         if zone.localstorageenabled == True:
-            self.services["service_offerings"]["tiny"]["storagetype"] = 'local'
-            self.services["service_offerings"]["small"]["storagetype"] = 'local'
-            self.services["service_offerings"]["medium"]["storagetype"] = 'local'
+            cls.services["service_offerings"]["tiny"]["storagetype"] = 'local'
+            cls.services["service_offerings"]["small"]["storagetype"] = 'local'
+            cls.services["service_offerings"]["medium"]["storagetype"] = 'local'
 
         template = get_template(
-                            self.apiclient,
-                            zone.id,
-                            self.services["ostype"]
-                            )
+            cls.apiclient,
+            zone.id,
+            cls.services["ostype"]
+        )
         # Set Zones and disk offerings
-        self.services["small"]["zoneid"] = zone.id
-        self.services["small"]["template"] = template.id
+        cls.services["small"]["zoneid"] = zone.id
+        cls.services["small"]["template"] = template.id
 
-        self.services["medium"]["zoneid"] = zone.id
-        self.services["medium"]["template"] = template.id
-        self.services["iso"]["zoneid"] = zone.id
+        cls.services["medium"]["zoneid"] = zone.id
+        cls.services["medium"]["template"] = template.id
+        cls.services["iso"]["zoneid"] = zone.id
 
-        # Create Account, VMs, NAT Rules etc
-        self.account = Account.create(
-                            self.apiclient,
-                            self.services["account"],
-                            domainid=domain.id
-                            )
+        cls.account = Account.create(
+            cls.apiclient,
+            cls.services["account"],
+            domainid=domain.id
+        )
+
+        cls.service_offering = ServiceOffering.create(
+            cls.apiclient,
+            cls.services["service_offerings"]["tiny"]
+        )
+
+        cls.virtual_machine = VirtualMachine.create(
+            cls.apiclient,
+            cls.services["small"],
+            accountid=cls.account.account.name,
+            domainid=cls.account.account.domainid,
+            serviceofferingid=cls.service_offering.id,
+            mode=cls.services['mode']
+        )
+
+        cls.cleanup = [
+            cls.service_offering,
+            cls.account
+        ]
+
+    @classmethod
+    def tearDownClass(cls):
+        try:
+            cleanup_resources(cls.apiclient, cls.cleanup)
+        except Exception as e:
+            cls.debug("Warning! Exception in tearDown: %s" % e)
+
+    def setUp(self):
+        self.apiclient = self.testClient.getApiClient()
+        self.dbclient = self.testClient.getDbConnection()
 
-        self.service_offering = ServiceOffering.create(
-                                    self.apiclient,
-                                    self.services["service_offerings"]["tiny"]
-                                    )
-        # Cleanup
-        self.cleanup = [
-                        self.service_offering,
-                        self.account
-                        ]
 
     @attr(tags = ["simulator", "devcloud", "advanced", "advancedns", "smoke", "basic", "sg"])
     def test_deploy_vm(self):
         """Test Deploy Virtual Machine
         """
-
         # Validate the following:
         # 1. Virtual Machine is accessible via SSH
         # 2. listVirtualMachines returns accurate information
-        # 3. The Cloud Database contains the valid information
-
-        self.virtual_machine = VirtualMachine.create(
-                                    self.apiclient,
-                                    self.services["small"],
-                                    accountid=self.account.account.name,
-                                    domainid=self.account.account.domainid,
-                                    serviceofferingid=self.service_offering.id,
-                                    mode=self.services['mode']
-                                )
-
         list_vm_response = list_virtual_machines(
                                                  self.apiclient,
                                                  id=self.virtual_machine.id
@@ -204,46 +211,60 @@ class TestDeployVM(cloudstackTestCase):
                 "Verify listVirtualMachines response for virtual machine: %s" \
                 % self.virtual_machine.id
             )
-
         self.assertEqual(
                             isinstance(list_vm_response, list),
                             True,
                             "Check list response returns a valid list"
                         )
-
         self.assertNotEqual(
                             len(list_vm_response),
                             0,
                             "Check VM available in List Virtual Machines"
                         )
         vm_response = list_vm_response[0]
-
         self.assertEqual(
 
                             vm_response.id,
                             self.virtual_machine.id,
                             "Check virtual machine id in listVirtualMachines"
                         )
-
         self.assertEqual(
                     vm_response.name,
                     self.virtual_machine.name,
                     "Check virtual machine name in listVirtualMachines"
                     )
-
         self.assertEqual(
             vm_response.state,
             'Running',
              msg="VM is not in Running state"
         )
-
         return
 
+
+    @attr(tags = ["simulator", "advanced"])
+    def test_advZoneVirtualRouter(self):
+        """
+        Test advanced zone virtual router
+        1. Is Running
+        2. is in the account the VM was deployed in
+        3. Has a linklocalip, publicip and a guestip
+        @return:
+        """
+        routers = list_routers(self.apiclient, account=self.account.account.name)
+        self.assertTrue(len(routers) > 0, msg = "No virtual router found")
+        router = routers[0]
+
+        self.assertEqual(router.state, 'Running', msg="Router is not in running state")
+        self.assertEqual(router.account, self.account.account.name, msg="Router does not belong to the account")
+
+        #Has linklocal, public and guest ips
+        self.assertIsNotNone(router.linklocalip, msg="Router has no linklocal ip")
+        self.assertIsNotNone(router.publicip, msg="Router has no public ip")
+        self.assertIsNotNone(router.guestipaddress, msg="Router has no guest ip")
+
     def tearDown(self):
-        try:
-            cleanup_resources(self.apiclient, self.cleanup)
-        except Exception as e:
-            self.debug("Warning! Exception in tearDown: %s" % e)
+        pass
+
 
 
 class TestVMLifeCycle(cloudstackTestCase):

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d4dc2649/tools/marvin/pom.xml
----------------------------------------------------------------------
diff --git a/tools/marvin/pom.xml b/tools/marvin/pom.xml
index ff5176f..4f012ee 100644
--- a/tools/marvin/pom.xml
+++ b/tools/marvin/pom.xml
@@ -140,28 +140,6 @@
                   </arguments>
                 </configuration>
               </execution>
-              <!--execution>
-                <id>pre-integration-test</id>
-                <phase>pre-integration-test</phase>
-                <goals>
-                  <goal>exec</goal>
-                </goals>
-                <configuration>
-                  <workingDirectory>${basedir}/marvin</workingDirectory>
-                  <executable>python</executable>
-                  <arguments>
-                    <argument>deployAndRun.py</argument>
-                    <argument>-c</argument>
-                    <argument>${user.dir}/${marvin.config}</argument>
-                    <argument>-t</argument>
-                    <argument>/tmp/t.log</argument>
-                    <argument>-r</argument>
-                    <argument>/tmp/r.log</argument>
-                    <argument>-f</argument>
-                    <argument>${basedir}/marvin/testSetupSuccess.py</argument>
-                  </arguments>
-                </configuration>
-              </execution-->
             </executions>
           </plugin>
         </plugins>


[49/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
With commit 16216720c6e981af4860ba83426b5ce91de1dc81 autoscanning is
removed so Nicira needs to be properly added to the componentContext


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

Branch: refs/heads/kvm-vnc-listen
Commit: 8bb28fd7134626b3a967474abf3ae418aace72be
Parents: 04a511a
Author: Hugo Trippaers <ht...@schubergphilis.com>
Authored: Wed Apr 3 08:35:39 2013 +0200
Committer: Hugo Trippaers <ht...@schubergphilis.com>
Committed: Wed Apr 3 09:20:21 2013 +0200

----------------------------------------------------------------------
 client/tomcatconf/componentContext.xml.in       |   17 +++++++++++++++++
 client/tomcatconf/nonossComponentContext.xml.in |    7 +++++++
 2 files changed, 24 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8bb28fd7/client/tomcatconf/componentContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/componentContext.xml.in b/client/tomcatconf/componentContext.xml.in
index 18d21c0..51980c9 100644
--- a/client/tomcatconf/componentContext.xml.in
+++ b/client/tomcatconf/componentContext.xml.in
@@ -140,6 +140,7 @@
           <ref bean="DirectNetworkGuru"/>
           <ref bean="OvsGuestNetworkGuru"/>
           <ref bean="PrivateNetworkGuru"/>
+          <ref bean="NiciraNvpGuestNetworkGuru"/>
       </list>
     </property>
     <property name="NetworkElements">
@@ -148,6 +149,7 @@
           <ref bean="Ovs"/>
           <ref bean="SecurityGroupProvider"/>
           <ref bean="VpcVirtualRouter"/>
+          <ref bean="NiciraNvp"/>
 <!--
           <ref bean="BareMetalDhcp"/>
           <ref bean="BareMetalPxe"/>
@@ -180,6 +182,7 @@
           <ref bean="Ovs"/>
           <ref bean="SecurityGroupProvider"/>
           <ref bean="VpcVirtualRouter"/>
+          <ref bean="NiciraNvp" />
 <!--
           <ref bean="BareMetalDhcp"/>
           <ref bean="BareMetalPxe"/>
@@ -191,4 +194,18 @@
 
   <bean id="GlobalLoadBalancingRulesServiceImpl" class ="org.apache.cloudstack.region.gslb.GlobalLoadBalancingRulesServiceImpl" />
 
+  <!--
+    Nicira support components
+  -->
+  <bean id="niciraNvpDaoImpl" class="com.cloud.network.dao.NiciraNvpDaoImpl" />
+  <bean id="niciraNvpNicMappingDaoImpl" class="com.cloud.network.dao.NiciraNvpNicMappingDaoImpl" />
+  <bean id="niciraNvpRouterMappingDaoImpl" class="com.cloud.network.dao.NiciraNvpRouterMappingDaoImpl" />
+  <bean id="NiciraNvpGuestNetworkGuru" class="com.cloud.network.guru.NiciraNvpGuestNetworkGuru">
+    <property name="name" value="NiciraNvpGuestNetworkGuru"/>
+  </bean>
+  <bean id="NiciraNvp" class="com.cloud.network.element.NiciraNvpElement">
+    <property name="name" value="NiciraNvp"/>
+  </bean>
+  
+
 </beans>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8bb28fd7/client/tomcatconf/nonossComponentContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/nonossComponentContext.xml.in b/client/tomcatconf/nonossComponentContext.xml.in
index 11472ad..a9418d7 100644
--- a/client/tomcatconf/nonossComponentContext.xml.in
+++ b/client/tomcatconf/nonossComponentContext.xml.in
@@ -78,6 +78,10 @@
   <bean id="NiciraNvp" class="com.cloud.network.element.NiciraNvpElement">
     <property name="name" value="NiciraNvp"/>
   </bean>
+  
+  <!--
+      BigSwitch Components
+  -->
   <bean id="BigSwitchVns" class="com.cloud.network.element.BigSwitchVnsElement">
     <property name="name" value="BigSwitchVns"/>
   </bean>
@@ -230,6 +234,7 @@
           <ref bean="DirectNetworkGuru"/>
           <ref bean="OvsGuestNetworkGuru"/>
           <ref bean="PrivateNetworkGuru"/>
+          <ref bean="NiciraNvpGuestNetworkGuru" />
       </list>
     </property>
     <property name="NetworkElements">
@@ -238,6 +243,7 @@
           <ref bean="Netscaler"/>
           <ref bean="F5BigIP"/>
           <ref bean="CiscoNexus1000vVSM"/>
+          <ref bean="NiciraNvp" />
           <ref bean="bigSwitchVnsElement"/>
           <ref bean="VirtualRouter"/>
           <ref bean="Ovs"/>
@@ -275,6 +281,7 @@
           <ref bean="Netscaler"/>
           <ref bean="F5BigIP"/>
           <ref bean="CiscoNexus1000vVSM"/>
+          <ref bean="NiciraNvp" />
           <ref bean="bigSwitchVnsElement"/>
           <ref bean="VirtualRouter"/>
           <ref bean="Ovs"/>


[44/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
CLOUDSTACK-1890: listProjects is not listing state in the response.


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

Branch: refs/heads/kvm-vnc-listen
Commit: f52820f2fdbede9ad8f4675223a2306b9d89ac51
Parents: f2ad38a
Author: Min Chen <mi...@citrix.com>
Authored: Tue Apr 2 11:42:36 2013 -0700
Committer: Chip Childers <ch...@gmail.com>
Committed: Tue Apr 2 20:24:31 2013 +0100

----------------------------------------------------------------------
 .../src/com/cloud/api/query/vo/ProjectJoinVO.java  |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f52820f2/server/src/com/cloud/api/query/vo/ProjectJoinVO.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/vo/ProjectJoinVO.java b/server/src/com/cloud/api/query/vo/ProjectJoinVO.java
index 73ec931..4bfddef 100644
--- a/server/src/com/cloud/api/query/vo/ProjectJoinVO.java
+++ b/server/src/com/cloud/api/query/vo/ProjectJoinVO.java
@@ -25,9 +25,9 @@ import javax.persistence.Enumerated;
 import javax.persistence.Id;
 import javax.persistence.Table;
 
+import com.cloud.projects.Project.State;
 import com.cloud.server.ResourceTag.TaggedResourceType;
 import com.cloud.utils.db.GenericDao;
-import com.cloud.vm.VirtualMachine.State;
 
 import org.apache.cloudstack.api.Identity;
 import org.apache.cloudstack.api.InternalIdentity;


[22/50] [abbrv] CLOUDSTACK-922: LXC Support in Cloudstack.

Posted by wi...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/server/src/com/cloud/hypervisor/kvm/discoverer/LibvirtServerDiscoverer.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/hypervisor/kvm/discoverer/LibvirtServerDiscoverer.java b/server/src/com/cloud/hypervisor/kvm/discoverer/LibvirtServerDiscoverer.java
new file mode 100644
index 0000000..75b007c
--- /dev/null
+++ b/server/src/com/cloud/hypervisor/kvm/discoverer/LibvirtServerDiscoverer.java
@@ -0,0 +1,393 @@
+// 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
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.hypervisor.kvm.discoverer;
+
+import java.net.InetAddress;
+import java.net.URI;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import javax.ejb.Local;
+import javax.inject.Inject;
+import javax.naming.ConfigurationException;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.agent.AgentManager;
+import com.cloud.agent.Listener;
+import com.cloud.agent.api.AgentControlAnswer;
+import com.cloud.agent.api.AgentControlCommand;
+import com.cloud.agent.api.Answer;
+import com.cloud.agent.api.Command;
+import com.cloud.agent.api.ShutdownCommand;
+import com.cloud.agent.api.StartupCommand;
+import com.cloud.agent.api.StartupRoutingCommand;
+import com.cloud.configuration.Config;
+import com.cloud.configuration.dao.ConfigurationDao;
+import com.cloud.dc.ClusterVO;
+import com.cloud.dc.dao.ClusterDao;
+import com.cloud.exception.AgentUnavailableException;
+import com.cloud.exception.DiscoveredWithErrorException;
+import com.cloud.exception.DiscoveryException;
+import com.cloud.exception.OperationTimedoutException;
+import com.cloud.host.Host;
+import com.cloud.host.HostVO;
+import com.cloud.host.Status;
+import com.cloud.host.dao.HostDao;
+import com.cloud.hypervisor.Hypervisor;
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.network.NetworkModel;
+import com.cloud.network.PhysicalNetworkSetupInfo;
+import com.cloud.resource.Discoverer;
+import com.cloud.resource.DiscovererBase;
+import com.cloud.resource.ResourceManager;
+import com.cloud.resource.ResourceStateAdapter;
+import com.cloud.resource.ServerResource;
+import com.cloud.resource.UnableDeleteHostException;
+import com.cloud.utils.ssh.SSHCmdHelper;
+
+public abstract class LibvirtServerDiscoverer extends DiscovererBase implements Discoverer,
+Listener, ResourceStateAdapter {
+    private static final Logger s_logger = Logger.getLogger(LibvirtServerDiscoverer.class);
+    private String _hostIp;
+    private final int _waitTime = 5; /*wait for 5 minutes*/
+    private String _kvmPrivateNic;
+    private String _kvmPublicNic;
+    private String _kvmGuestNic;
+    @Inject HostDao _hostDao = null;
+    @Inject ClusterDao _clusterDao;
+    @Inject ResourceManager _resourceMgr;
+    @Inject AgentManager _agentMgr;
+    @Inject ConfigurationDao _configDao;
+    @Inject NetworkModel _networkMgr;
+
+    public abstract Hypervisor.HypervisorType getHypervisorType();
+
+    @Override
+    public boolean processAnswers(long agentId, long seq, Answer[] answers) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    @Override
+    public boolean processCommands(long agentId, long seq, Command[] commands) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    @Override
+    public AgentControlAnswer processControlCommand(long agentId,
+            AgentControlCommand cmd) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public void processConnect(HostVO host, StartupCommand cmd, boolean forRebalance) {
+    }
+
+    @Override
+    public boolean processDisconnect(long agentId, Status state) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    @Override
+    public boolean isRecurring() {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    @Override
+    public int getTimeout() {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    @Override
+    public boolean processTimeout(long agentId, long seq) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    @Override
+    public Map<? extends ServerResource, Map<String, String>> find(long dcId,
+            Long podId, Long clusterId, URI uri, String username,
+            String password, List<String> hostTags) throws DiscoveryException {
+
+        ClusterVO cluster = _clusterDao.findById(clusterId);
+        if(cluster == null || cluster.getHypervisorType() != getHypervisorType()) {
+            if(s_logger.isInfoEnabled())
+                s_logger.info("invalid cluster id or cluster is not for " + getHypervisorType() + " hypervisors"); 
+            return null;
+        }
+
+        Map<KvmDummyResourceBase, Map<String, String>> resources = new HashMap<KvmDummyResourceBase, Map<String, String>>();
+        Map<String, String> details = new HashMap<String, String>();
+        if (!uri.getScheme().equals("http")) {
+            String msg = "urlString is not http so we're not taking care of the discovery for this: " + uri;
+            s_logger.debug(msg);
+            return null;
+        }
+        com.trilead.ssh2.Connection sshConnection = null;
+        String agentIp = null;
+        try {
+
+            String hostname = uri.getHost();
+            InetAddress ia = InetAddress.getByName(hostname);
+            agentIp = ia.getHostAddress();
+            String guid = UUID.nameUUIDFromBytes(agentIp.getBytes()).toString();
+            String guidWithTail = guid + "-LibvirtComputingResource";/*tail added by agent.java*/
+            if (_resourceMgr.findHostByGuid(guidWithTail) != null) {
+                s_logger.debug("Skipping " + agentIp + " because " + guidWithTail + " is already in the database.");
+                return null;
+            }       
+
+            sshConnection = new com.trilead.ssh2.Connection(agentIp, 22);
+
+            sshConnection.connect(null, 60000, 60000);
+            if (!sshConnection.authenticateWithPassword(username, password)) {
+                s_logger.debug("Failed to authenticate");
+                throw new DiscoveredWithErrorException("Authentication error");
+            }
+
+            if (!SSHCmdHelper.sshExecuteCmd(sshConnection, "lsmod|grep kvm", 3)) {
+                s_logger.debug("It's not a KVM enabled machine");
+                return null;
+            }
+
+            List <PhysicalNetworkSetupInfo> netInfos = _networkMgr.getPhysicalNetworkInfo(dcId, getHypervisorType());
+            String kvmPrivateNic = null;
+            String kvmPublicNic = null;
+            String kvmGuestNic = null;
+
+            for (PhysicalNetworkSetupInfo info : netInfos) {
+                if (info.getPrivateNetworkName() != null) {
+                    kvmPrivateNic = info.getPrivateNetworkName();
+                }
+                if (info.getPublicNetworkName() != null) {
+                    kvmPublicNic = info.getPublicNetworkName();
+                }
+                if (info.getGuestNetworkName() != null) {
+                    kvmGuestNic = info.getGuestNetworkName();
+                }
+            }
+
+            if (kvmPrivateNic == null && kvmPublicNic == null && kvmGuestNic == null) {
+                kvmPrivateNic = _kvmPrivateNic;
+                kvmPublicNic = _kvmPublicNic;
+                kvmGuestNic = _kvmGuestNic;
+            } 
+
+            if (kvmPublicNic == null) {
+                kvmPublicNic = (kvmGuestNic != null) ? kvmGuestNic : kvmPrivateNic;
+            }
+
+            if (kvmPrivateNic == null) {
+                kvmPrivateNic = (kvmPublicNic != null) ? kvmPublicNic : kvmGuestNic;
+            }
+
+            if (kvmGuestNic == null) {
+                kvmGuestNic = (kvmPublicNic != null) ? kvmPublicNic : kvmPrivateNic;
+            }
+
+            String parameters = " -m " + _hostIp + " -z " + dcId + " -p " + podId + " -c " + clusterId + " -g " + guid + " -a";
+
+            parameters += " --pubNic=" + kvmPublicNic;
+            parameters += " --prvNic=" + kvmPrivateNic;
+            parameters += " --guestNic=" + kvmGuestNic;
+
+            SSHCmdHelper.sshExecuteCmd(sshConnection, "cloudstack-setup-agent " + parameters, 3);
+
+            KvmDummyResourceBase kvmResource = new KvmDummyResourceBase();
+            Map<String, Object> params = new HashMap<String, Object>();
+
+            params.put("zone", Long.toString(dcId));
+            params.put("pod", Long.toString(podId));
+            params.put("cluster",  Long.toString(clusterId));
+            params.put("guid", guid); 
+            params.put("agentIp", agentIp);
+            kvmResource.configure("kvm agent", params);
+            resources.put(kvmResource, details);
+
+            HostVO connectedHost = waitForHostConnect(dcId, podId, clusterId, guidWithTail);
+            if (connectedHost == null)
+                return null;
+
+            details.put("guid", guidWithTail);
+
+            // place a place holder guid derived from cluster ID
+            if (cluster.getGuid() == null) {
+                cluster.setGuid(UUID.nameUUIDFromBytes(String.valueOf(clusterId).getBytes()).toString());
+                _clusterDao.update(clusterId, cluster);
+            }
+
+            //save user name and password
+            _hostDao.loadDetails(connectedHost);
+            Map<String, String> hostDetails = connectedHost.getDetails();
+            hostDetails.put("password", password);
+            hostDetails.put("username", username);
+            _hostDao.saveDetails(connectedHost);
+            return resources;
+        } catch (DiscoveredWithErrorException e){ 
+            throw e;
+        }catch (Exception e) {
+            String msg = " can't setup agent, due to " + e.toString() + " - " + e.getMessage();
+            s_logger.warn(msg);
+        } finally {
+            if (sshConnection != null)
+                sshConnection.close();
+        }
+
+        return null;
+    }
+
+    private HostVO waitForHostConnect(long dcId, long podId, long clusterId, String guid) {
+        for (int i = 0; i < _waitTime *2; i++) {
+            List<HostVO> hosts = _resourceMgr.listAllUpAndEnabledHosts(Host.Type.Routing, clusterId, podId, dcId);
+            for (HostVO host : hosts) {
+                if (host.getGuid().equalsIgnoreCase(guid)) {
+                    return host;
+                }
+            }
+            try {
+                Thread.sleep(30000);
+            } catch (InterruptedException e) {
+                s_logger.debug("Failed to sleep: " + e.toString());
+            }
+        }
+        s_logger.debug("Timeout, to wait for the host connecting to mgt svr, assuming it is failed");
+        List<HostVO> hosts = _resourceMgr.findHostByGuid(dcId, guid);
+        if (hosts.size() == 1) {
+            return hosts.get(0);
+        } else {
+            return null;
+        }
+    }
+
+    @Override
+    public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
+//        _setupAgentPath = Script.findScript(getPatchPath(), "setup_agent.sh");
+        _kvmPrivateNic = _configDao.getValue(Config.KvmPrivateNetwork.key());
+        if (_kvmPrivateNic == null) {
+            _kvmPrivateNic = "cloudbr0";
+        }
+
+        _kvmPublicNic = _configDao.getValue(Config.KvmPublicNetwork.key());
+        if (_kvmPublicNic == null) {
+            _kvmPublicNic = _kvmPrivateNic;
+        }
+
+        _kvmGuestNic = _configDao.getValue(Config.KvmGuestNetwork.key());
+        if (_kvmGuestNic == null) {
+            _kvmGuestNic = _kvmPrivateNic;
+        }
+
+        _hostIp = _configDao.getValue("host");
+        if (_hostIp == null) {
+            throw new ConfigurationException("Can't get host IP");
+        }
+        _resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this);
+        return true;
+    }
+
+    protected String getPatchPath() {
+        return "scripts/vm/hypervisor/kvm/";
+    }
+
+    @Override
+    public void postDiscovery(List<HostVO> hosts, long msId)
+            throws DiscoveryException {
+        // TODO Auto-generated method stub
+    }
+
+    @Override
+    public boolean matchHypervisor(String hypervisor) {
+        // for backwards compatibility, if not supplied, always let to try it
+        if(hypervisor == null)
+            return true;
+
+        return getHypervisorType().toString().equalsIgnoreCase(hypervisor);
+    }
+
+    @Override
+    public HostVO createHostVOForConnectedAgent(HostVO host, StartupCommand[] cmd) {
+        StartupCommand firstCmd = cmd[0];
+        if (!(firstCmd instanceof StartupRoutingCommand)) {
+            return null;
+        }
+
+        StartupRoutingCommand ssCmd = ((StartupRoutingCommand) firstCmd);
+        if (ssCmd.getHypervisorType() != getHypervisorType()) {
+            return null;
+        }
+
+        /* KVM requires host are the same in cluster */
+        ClusterVO clusterVO = _clusterDao.findById(host.getClusterId());
+        List<HostVO> hostsInCluster = _resourceMgr.listAllHostsInCluster(clusterVO.getId());
+        if (!hostsInCluster.isEmpty()) {
+            HostVO oneHost = hostsInCluster.get(0);
+            _hostDao.loadDetails(oneHost);
+            String hostOsInCluster = oneHost.getDetail("Host.OS");
+            String hostOs = ssCmd.getHostDetails().get("Host.OS");
+            if (!hostOsInCluster.equalsIgnoreCase(hostOs)) {
+                throw new IllegalArgumentException("Can't add host: " + firstCmd.getPrivateIpAddress() + " with hostOS: " + hostOs + " into a cluster,"
+                        + "in which there are " + hostOsInCluster + " hosts added");
+            }
+        }
+
+        _hostDao.loadDetails(host);
+
+        return _resourceMgr.fillRoutingHostVO(host, ssCmd, getHypervisorType(), host.getDetails(), null);
+    }
+
+    @Override
+    public HostVO createHostVOForDirectConnectAgent(HostVO host, StartupCommand[] startup, ServerResource resource, Map<String, String> details,
+            List<String> hostTags) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public DeleteHostAnswer deleteHost(HostVO host, boolean isForced, boolean isForceDeleteStorage) throws UnableDeleteHostException {
+        if (host.getType() != Host.Type.Routing || 
+            (host.getHypervisorType() != HypervisorType.KVM &&
+             host.getHypervisorType() != HypervisorType.LXC)) {
+            return null;
+        }
+
+        _resourceMgr.deleteRoutingHost(host, isForced, isForceDeleteStorage);
+        try {
+            ShutdownCommand cmd = new ShutdownCommand(ShutdownCommand.DeleteHost, null);
+            _agentMgr.send(host.getId(), cmd);
+        } catch (AgentUnavailableException e) {
+            s_logger.warn("Sending ShutdownCommand failed: ", e);
+        } catch (OperationTimedoutException e) {
+            s_logger.warn("Sending ShutdownCommand failed: ", e);
+        }
+
+        return new DeleteHostAnswer(true);
+    }
+
+    @Override
+    public boolean stop() {
+        _resourceMgr.unregisterResourceStateAdapter(this.getClass().getSimpleName());
+        return super.stop();
+    }
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/server/src/com/cloud/hypervisor/kvm/discoverer/LxcServerDiscoverer.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/hypervisor/kvm/discoverer/LxcServerDiscoverer.java b/server/src/com/cloud/hypervisor/kvm/discoverer/LxcServerDiscoverer.java
new file mode 100644
index 0000000..0e6a82b
--- /dev/null
+++ b/server/src/com/cloud/hypervisor/kvm/discoverer/LxcServerDiscoverer.java
@@ -0,0 +1,33 @@
+// 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
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.hypervisor.kvm.discoverer;
+
+import com.cloud.hypervisor.Hypervisor;
+import com.cloud.resource.Discoverer;
+import org.apache.log4j.Logger;
+
+import javax.ejb.Local;
+
+@Local(value=Discoverer.class)
+public class LxcServerDiscoverer extends LibvirtServerDiscoverer {
+    private static final Logger s_logger = Logger.getLogger(LxcServerDiscoverer.class);
+
+    public Hypervisor.HypervisorType getHypervisorType() {
+        return Hypervisor.HypervisorType.LXC;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/server/src/com/cloud/network/SshKeysDistriMonitor.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/SshKeysDistriMonitor.java b/server/src/com/cloud/network/SshKeysDistriMonitor.java
index fc7c882..82f72de 100755
--- a/server/src/com/cloud/network/SshKeysDistriMonitor.java
+++ b/server/src/com/cloud/network/SshKeysDistriMonitor.java
@@ -72,7 +72,8 @@ public class SshKeysDistriMonitor implements Listener {
 	    public void processConnect(HostVO host, StartupCommand cmd, boolean forRebalance) throws ConnectionException {
 	    	if (cmd instanceof StartupRoutingCommand) {
 	    		if (((StartupRoutingCommand) cmd).getHypervisorType() == HypervisorType.KVM ||
-	    		    ((StartupRoutingCommand) cmd).getHypervisorType() == HypervisorType.XenServer) {
+                    ((StartupRoutingCommand) cmd).getHypervisorType() == HypervisorType.XenServer ||
+                    ((StartupRoutingCommand) cmd).getHypervisorType() == HypervisorType.LXC) {
 	    			/*TODO: Get the private/public keys here*/
 	    			
 	    			String pubKey = _configDao.getValue("ssh.publickey");

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/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 67c94fc..afdbbca 100755
--- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -1527,9 +1527,11 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                     DomainRouterVO router = deployRouter(owner, destination, plan, params, isRedundant, vrProvider, offeringId,
                         null, networks, false, null);
 
-                _routerDao.addRouterToGuestNetwork(router, guestNetwork);
-                routers.add(router);
-            }
+                    if (router != null) {
+                        _routerDao.addRouterToGuestNetwork(router, guestNetwork);
+                        routers.add(router);
+                    }
+                }
             }
         } finally {
             if (lock != null) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
index 46ac7af..9a4d6b0 100755
--- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
+++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
@@ -747,7 +747,11 @@ public class SecondaryStorageManagerImpl extends ManagerBase implements Secondar
                 }
             } else {
                 if (s_logger.isDebugEnabled()) {
-                    s_logger.debug("Zone host is ready, but secondary storage vm template: " + template.getId() + " is not ready on secondary storage: " + secHost.getId());
+                    if (template == null) {
+                        s_logger.debug("Zone host is ready, but secondary storage vm template does not exist");
+                    } else {
+                        s_logger.debug("Zone host is ready, but secondary storage vm template: " + template.getId() + " is not ready on secondary storage: " + secHost.getId());
+                    }
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/server/src/com/cloud/template/HypervisorTemplateAdapter.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/template/HypervisorTemplateAdapter.java b/server/src/com/cloud/template/HypervisorTemplateAdapter.java
index a0444e5..491900b 100755
--- a/server/src/com/cloud/template/HypervisorTemplateAdapter.java
+++ b/server/src/com/cloud/template/HypervisorTemplateAdapter.java
@@ -141,6 +141,8 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase implements Te
 	        &&(!url.toLowerCase().endsWith("qcow2.bz2"))&&(!url.toLowerCase().endsWith("qcow2.gz"))
 	        &&(!url.toLowerCase().endsWith("ova"))&&(!url.toLowerCase().endsWith("ova.zip"))
 	        &&(!url.toLowerCase().endsWith("ova.bz2"))&&(!url.toLowerCase().endsWith("ova.gz"))
+	        &&(!url.toLowerCase().endsWith("tar"))&&(!url.toLowerCase().endsWith("tar.zip"))
+	        &&(!url.toLowerCase().endsWith("tar.bz2"))&&(!url.toLowerCase().endsWith("tar.gz"))
 	        &&(!url.toLowerCase().endsWith("img"))&&(!url.toLowerCase().endsWith("raw"))){
 	        throw new InvalidParameterValueException("Please specify a valid "+ cmd.getFormat().toLowerCase());
 	    }
@@ -148,6 +150,7 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase implements Te
 		if ((cmd.getFormat().equalsIgnoreCase("vhd") && (!url.toLowerCase().endsWith("vhd") && !url.toLowerCase().endsWith("vhd.zip") && !url.toLowerCase().endsWith("vhd.bz2") && !url.toLowerCase().endsWith("vhd.gz") ))
 			|| (cmd.getFormat().equalsIgnoreCase("qcow2") && (!url.toLowerCase().endsWith("qcow2") && !url.toLowerCase().endsWith("qcow2.zip") && !url.toLowerCase().endsWith("qcow2.bz2") && !url.toLowerCase().endsWith("qcow2.gz") ))
 			|| (cmd.getFormat().equalsIgnoreCase("ova") && (!url.toLowerCase().endsWith("ova") && !url.toLowerCase().endsWith("ova.zip") && !url.toLowerCase().endsWith("ova.bz2") && !url.toLowerCase().endsWith("ova.gz")))
+			|| (cmd.getFormat().equalsIgnoreCase("tar") && (!url.toLowerCase().endsWith("tar") && !url.toLowerCase().endsWith("tar.zip") && !url.toLowerCase().endsWith("tar.bz2") && !url.toLowerCase().endsWith("tar.gz")))
 			|| (cmd.getFormat().equalsIgnoreCase("raw") && (!url.toLowerCase().endsWith("img") && !url.toLowerCase().endsWith("raw")))) {
 	        throw new InvalidParameterValueException("Please specify a valid URL. URL:" + url + " is an invalid for the format " + cmd.getFormat().toLowerCase());
 		}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
index 23746ae..af22716 100755
--- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -794,7 +794,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
                                 s_logger.info("The guru did not like the answers so stopping " + vm);
                             }
 
-                            StopCommand cmd = new StopCommand(vm.getInstanceName());
+                            StopCommand cmd = new StopCommand(vm);
                             StopAnswer answer = (StopAnswer) _agentMgr.easySend(destHostId, cmd);
                             if (answer == null || !answer.getResult()) {
                                 s_logger.warn("Unable to stop " + vm + " due to " + (answer != null ? answer.getDetails() : "no answers")); 
@@ -876,7 +876,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
 
     protected <T extends VMInstanceVO> boolean sendStop(VirtualMachineGuru<T> guru, VirtualMachineProfile<T> profile, boolean force) {
         VMInstanceVO vm = profile.getVirtualMachine();
-        StopCommand stop = new StopCommand(vm, vm.getInstanceName(), null);
+        StopCommand stop = new StopCommand(vm);
         try {
             Answer answer = _agentMgr.send(vm.getHostId(), stop);
             if (!answer.getResult()) {
@@ -1061,8 +1061,8 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
         }
 
         vmGuru.prepareStop(profile);
-
-        StopCommand stop = new StopCommand(vm, vm.getInstanceName(), null);
+        
+        StopCommand stop = new StopCommand(vm);
         boolean stopped = false;
         StopAnswer answer = null;
         try {
@@ -1380,7 +1380,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
                 if (!checkVmOnHost(vm, dstHostId)) {
                     s_logger.error("Unable to complete migration for " + vm);
                     try {
-                        _agentMgr.send(srcHostId, new Commands(cleanup(vm.getInstanceName())), null);
+                        _agentMgr.send(srcHostId, new Commands(cleanup(vm)), null);
                     } catch (AgentUnavailableException e) {
                         s_logger.error("AgentUnavailableException while cleanup on source host: " + srcHostId);
                     }
@@ -1399,7 +1399,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
                 _alertMgr.sendAlert(alertType, fromHost.getDataCenterId(), fromHost.getPodId(), "Unable to migrate vm " + vm.getInstanceName() + " from host " + fromHost.getName() + " in zone "
                         + dest.getDataCenter().getName() + " and pod " + dest.getPod().getName(), "Migrate Command failed.  Please check logs.");
                 try {
-                    _agentMgr.send(dstHostId, new Commands(cleanup(vm.getInstanceName())), null);
+                    _agentMgr.send(dstHostId, new Commands(cleanup(vm)), null);
                 } catch (AgentUnavailableException ae) {
                     s_logger.info("Looks like the destination Host is unavailable for cleanup");
                 }
@@ -1620,6 +1620,10 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
         return guru.findById(vmId);
     }
 
+    public Command cleanup(VirtualMachine vm) {
+        return new StopCommand(vm);
+    }
+
     public Command cleanup(String vmName) {
         return new StopCommand(vmName);
     }
@@ -1989,7 +1993,6 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
      */
     protected Command compareState(long hostId, VMInstanceVO vm, final AgentVmInfo info, final boolean fullSync, boolean trackExternalChange) {
         State agentState = info.state;
-        final String agentName = info.name;
         final State serverState = vm.getState();
         final String serverName = vm.getInstanceName();
 
@@ -2092,7 +2095,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
             }
 
             s_logger.debug("State matches but the agent said stopped so let's send a cleanup command anyways.");
-            return cleanup(agentName);
+            return cleanup(vm);
         }
 
         if (agentState == State.Shutdowned) {
@@ -2110,8 +2113,8 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
                     return null;
                 }
             } else {
-                s_logger.debug("Sending cleanup to a shutdowned vm: " + agentName);
-                command = cleanup(agentName);
+                s_logger.debug("Sending cleanup to a shutdowned vm: " + vm.getInstanceName());
+                command = cleanup(vm);
             }
         } else if (agentState == State.Stopped) {
             // This state means the VM on the agent was detected previously
@@ -2129,7 +2132,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
                 s_logger.debug("Ignoring VM in starting mode: " + vm.getInstanceName());
                 _haMgr.scheduleRestart(vm, false);
             }
-            command = cleanup(agentName);
+            command = cleanup(vm);
         } else if (agentState == State.Running) {
             if (serverState == State.Starting) {
                 if (fullSync) {
@@ -2155,7 +2158,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
                 s_logger.debug("server VM state " + serverState + " does not meet expectation of a running VM report from agent");
 
                 // just be careful not to stop VM for things we don't handle
-                // command = cleanup(agentName);
+                // command = cleanup(vm);
             }
         }
         return command;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/setup/db/db/schema-410to420.sql
----------------------------------------------------------------------
diff --git a/setup/db/db/schema-410to420.sql b/setup/db/db/schema-410to420.sql
index 53f3c44..3dee7ae 100644
--- a/setup/db/db/schema-410to420.sql
+++ b/setup/db/db/schema-410to420.sql
@@ -393,3 +393,15 @@ CREATE VIEW `cloud`.`account_view` AS
 
 ALTER TABLE remote_access_vpn ADD COLUMN `id` bigint unsigned NOT NULL UNIQUE AUTO_INCREMENT COMMENT 'id';
 ALTER TABLE remote_access_vpn ADD COLUMN `uuid` varchar(40) UNIQUE;
+
+-- START: support for LXC
+ 
+INSERT IGNORE INTO `cloud`.`hypervisor_capabilities`(hypervisor_type, hypervisor_version, max_guests_limit, security_group_enabled) VALUES ('LXC', 'default', 50, 1);
+ALTER TABLE `cloud`.`physical_network_traffic_types` ADD COLUMN `lxc_network_label` varchar(255) DEFAULT 'cloudbr0' COMMENT 'The network name label of the physical device dedicated to this traffic on a LXC host';
+ 
+UPDATE configuration SET value='KVM,XenServer,VMware,BareMetal,Ovm,LXC' WHERE name='hypervisor.list';
+ 
+INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type)
+     VALUES (10, 'routing-10', 'SystemVM Template (LXC)', 0, now(), 'SYSTEM', 0, 64, 1, 'http://download.cloud.com/templates/acton/acton-systemvm-02062012.qcow2.bz2', '2755de1f9ef2ce4d6f2bee2efbb4da92', 0, 'SystemVM Template (LXC)', 'QCOW2', 15, 0, 1, 'LXC');
+
+-- END: support for LXC

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/ui/scripts/system.js
----------------------------------------------------------------------
diff --git a/ui/scripts/system.js b/ui/scripts/system.js
index 9d6c476..98570d2 100644
--- a/ui/scripts/system.js
+++ b/ui/scripts/system.js
@@ -114,28 +114,34 @@
       }
     });
 
-		if(trafficType.xennetworklabel == null || trafficType.xennetworklabel == 0)
-		  trafficType.xennetworklabel = dictionary['label.network.label.display.for.blank.value'];
-		if(trafficType.kvmnetworklabel == null || trafficType.kvmnetworklabel == 0)
-		  trafficType.kvmnetworklabel = dictionary['label.network.label.display.for.blank.value'];
-		if(trafficType.vmwarenetworklabel == null || trafficType.vmwarenetworklabel == 0)
-		  trafficType.vmwarenetworklabel = dictionary['label.network.label.display.for.blank.value'];
-	        if(trafficType.ovmnetworklabel == null || trafficType.ovmnetworklabel == 0)
-                   trafficType.ovmnetworklabel = dictionary['label.network.label.display.for.blank.value'];	
+    if(trafficType.xennetworklabel == null || trafficType.xennetworklabel == 0)
+      trafficType.xennetworklabel = dictionary['label.network.label.display.for.blank.value'];
+    if(trafficType.kvmnetworklabel == null || trafficType.kvmnetworklabel == 0)
+      trafficType.kvmnetworklabel = dictionary['label.network.label.display.for.blank.value'];
+    if(trafficType.vmwarenetworklabel == null || trafficType.vmwarenetworklabel == 0)
+      trafficType.vmwarenetworklabel = dictionary['label.network.label.display.for.blank.value'];
+    if(trafficType.ovmnetworklabel == null || trafficType.ovmnetworklabel == 0)
+      trafficType.ovmnetworklabel = dictionary['label.network.label.display.for.blank.value'];
+    if(trafficType.lxcnetworklabel == null || trafficType.lxcnetworklabel == 0)
+      trafficType.lxcnetworklabel = dictionary['label.network.label.display.for.blank.value'];
+
     return trafficType;
   };
 
   var updateTrafficLabels = function(trafficType, labels, complete) {
     var array1 = [];
-		if(labels.xennetworklabel != dictionary['label.network.label.display.for.blank.value'])
-		  array1.push("&xennetworklabel=" + labels.xennetworklabel);
-		if(labels.kvmnetworklabel != dictionary['label.network.label.display.for.blank.value'])
-		  array1.push("&kvmnetworklabel=" + labels.kvmnetworklabel);
-		if(labels.vmwarenetworklabel != dictionary['label.network.label.display.for.blank.value'])
-		  array1.push("&vmwarenetworklabel=" + labels.vmwarenetworklabel);
-	        if(labels.ovmnetworklabel != dictionary['label.network.label.display.for.blank.value'])
-                  array1.push("&ovmnetworklabel=" + labels.ovmnetworklabel); 		
-		$.ajax({
+    if(labels.xennetworklabel != dictionary['label.network.label.display.for.blank.value'])
+      array1.push("&xennetworklabel=" + labels.xennetworklabel);
+    if(labels.kvmnetworklabel != dictionary['label.network.label.display.for.blank.value'])
+      array1.push("&kvmnetworklabel=" + labels.kvmnetworklabel);
+    if(labels.vmwarenetworklabel != dictionary['label.network.label.display.for.blank.value'])
+      array1.push("&vmwarenetworklabel=" + labels.vmwarenetworklabel);
+    if(labels.ovmnetworklabel != dictionary['label.network.label.display.for.blank.value'])
+      array1.push("&ovmnetworklabel=" + labels.ovmnetworklabel);
+    if(labels.lxcnetworklabel != dictionary['label.network.label.display.for.blank.value'])
+      array1.push("&lxcnetworklabel=" + labels.lxcnetworklabel);
+
+    $.ajax({
       url: createURL('updateTrafficType' + array1.join("")),
       data: {
         id: trafficType.id       
@@ -463,7 +469,8 @@
                     xennetworklabel: { label: 'label.xen.traffic.label', isEditable: true },
                     kvmnetworklabel: { label: 'label.kvm.traffic.label', isEditable: true },
                     vmwarenetworklabel: { label: 'label.vmware.traffic.label', isEditable: true },
-                    ovmnetworklabel: { label: 'OVM traffic label',isEditable: true }
+                    ovmnetworklabel: { label: 'OVM traffic label',isEditable: true },
+                    lxcnetworklabel: { label: 'label.lxc.traffic.label',isEditable: true }
                   }
                 ],
 
@@ -483,6 +490,7 @@
                       selectedPublicNetworkObj.kvmnetworklabel = trafficType.kvmnetworklabel;
                       selectedPublicNetworkObj.vmwarenetworklabel = trafficType.vmwarenetworklabel;
                       selectedPublicNetworkObj.ovmnetworklabel = trafficType.ovmnetworklabel;
+                      selectedPublicNetworkObj.lxcnetworklabel = trafficType.lxcnetworklabel;
 
                       args.response.success({data: selectedPublicNetworkObj});
                     }
@@ -636,7 +644,8 @@
                     xennetworklabel: { label: 'label.xen.traffic.label', isEditable: true },
                     kvmnetworklabel: { label: 'label.kvm.traffic.label', isEditable: true },
                     vmwarenetworklabel: { label: 'label.vmware.traffic.label', isEditable: true },
-                    ovmnetworklabel: { label: 'OVM traffic label', isEditable: true }
+                    ovmnetworklabel: { label: 'OVM traffic label', isEditable: true },
+                    lxcnetworklabel: { label: 'label.lxc.traffic.label', isEditable: true }
                   }
                 ],
 
@@ -795,7 +804,8 @@
                     xennetworklabel: { label: 'label.xen.traffic.label', isEditable: true },
                     kvmnetworklabel: { label: 'label.kvm.traffic.label', isEditable: true },
                     vmwarenetworklabel: { label: 'label.vmware.traffic.label', isEditable: true },
-                    ovmnetworklabel: { label: 'OVM traffic label', isEditable: true } 
+                    ovmnetworklabel: { label: 'OVM traffic label', isEditable: true },
+                    lxcnetworklabel: { label: 'label.lxc.traffic.label', isEditable: true }
                   }
                 ],
                 dataProvider: function(args) {
@@ -811,6 +821,7 @@
                       selectedManagementNetworkObj.kvmnetworklabel = trafficType.kvmnetworklabel;
                       selectedManagementNetworkObj.vmwarenetworklabel = trafficType.vmwarenetworklabel;
                       selectedManagementNetworkObj.ovmnetworklabel = trafficType.ovmnetworklabel;
+                      selectedManagementNetworkObj.lxcnetworklabel = trafficType.lxcnetworklabel;
                       args.response.success({ data: selectedManagementNetworkObj });
                     }
                   });
@@ -928,7 +939,8 @@
                     xennetworklabel: { label: 'label.xen.traffic.label', isEditable: true },
                     kvmnetworklabel: { label: 'label.kvm.traffic.label', isEditable: true },
                     vmwarenetworklabel: { label: 'label.vmware.traffic.label', isEditable: true },
-                    ovmnetworklabel: { label: 'OVM traffic label', isEditable: true }
+                    ovmnetworklabel: { label: 'OVM traffic label', isEditable: true },
+                    lxcnetworklabel: { label: 'label.lxc.traffic.label', isEditable: true }
                   }
                 ],
                 dataProvider: function(args) { //physical network + Guest traffic type       
@@ -964,6 +976,7 @@
 											selectedPhysicalNetworkObj["kvmnetworklabel"] = trafficType.kvmnetworklabel;
 											selectedPhysicalNetworkObj["vmwarenetworklabel"] = trafficType.vmwarenetworklabel;
                                                                                         selectedPhysicalNetworkObj["ovmnetworklabel"] = trafficType.ovmnetworklabel;
+                                                                                        selectedPhysicalNetworkObj["lxcnetworklabel"] = trafficType.lxcnetworklabel;
 
 											args.response.success({
 												actionFilter: function() {
@@ -9491,6 +9504,13 @@
                         items.push({id: "ocfs2", description: "ocfs2"});
                         args.response.success({data: items});
                       }
+                      else if(selectedClusterObj.hypervisortype == "LXC") {
+                        var items = [];
+                        items.push({id: "nfs", description: "nfs"});
+                        items.push({id: "SharedMountPoint", description: "SharedMountPoint"});
+                        items.push({id: "rbd", description: "RBD"});
+                        args.response.success({data: items});
+                      }
                       else {
                         args.response.success({data:[]});
                       }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/ui/scripts/templates.js
----------------------------------------------------------------------
diff --git a/ui/scripts/templates.js b/ui/scripts/templates.js
index 040ce4a..6268f6b 100644
--- a/ui/scripts/templates.js
+++ b/ui/scripts/templates.js
@@ -237,6 +237,10 @@
                         //formatSelect.append("<option value='RAW'>RAW</option>");
                         items.push({id:'RAW', description: 'RAW'});
                       }
+                      else if(args.hypervisor == "LXC") {
+                        //formatSelect.append("<option value='TAR'>TAR</option>");
+                        items.push({id:'TAR', description: 'TAR'});
+                      }
                       args.response.success({data: items});
                     }
                   },

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa79ccf9/ui/scripts/zoneWizard.js
----------------------------------------------------------------------
diff --git a/ui/scripts/zoneWizard.js b/ui/scripts/zoneWizard.js
index a64c86a..76fd5e9 100755
--- a/ui/scripts/zoneWizard.js
+++ b/ui/scripts/zoneWizard.js
@@ -53,6 +53,9 @@
       case 'Ovm':
         hypervisorAttr = 'ovmnetworklabel';
         break;
+      case 'LXC':
+        hypervisorAttr = 'lxcnetworklabel';
+        break;
     }
 
     trafficLabelStr = trafficLabel ? '&' + hypervisorAttr + '=' + trafficLabel : '';
@@ -395,6 +398,7 @@
 										nonSupportedHypervisors["VMware"] = 1;
 										nonSupportedHypervisors["BareMetal"] = 1;
 										nonSupportedHypervisors["Ovm"] = 1;
+										nonSupportedHypervisors["LXC"] = 1;
 									}
 									
 									if(items != null) {
@@ -1256,6 +1260,12 @@
                 items.push({id: "ocfs2", description: "ocfs2"});
                 args.response.success({data: items});
               }
+              else if(selectedClusterObj.hypervisortype == "LXC") {
+                var items = [];
+                items.push({id: "nfs", description: "nfs"});
+                items.push({id: "SharedMountPoint", description: "SharedMountPoint"});
+                args.response.success({data: items});
+              }
               else {
                 args.response.success({data:[]});
               }


[19/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
CLOUDSTACK-1395 Upgrade script for cpu and ram overcommit.
It sets the overcommit values of all the clusters to 1.


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

Branch: refs/heads/kvm-vnc-listen
Commit: 355589c1f0c583cbbdc601f74dba504064f81bac
Parents: 7a3a1c7
Author: Bharat Kumar <bh...@citrix.com>
Authored: Mon Apr 1 10:43:16 2013 +0530
Committer: Abhinandan Prateek <ap...@apache.org>
Committed: Mon Apr 1 10:43:16 2013 +0530

----------------------------------------------------------------------
 .../src/com/cloud/upgrade/dao/Upgrade410to420.java |   37 +++++++++++++++
 1 files changed, 37 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/355589c1/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 d26da4d..8ce118f 100644
--- a/server/src/com/cloud/upgrade/dao/Upgrade410to420.java
+++ b/server/src/com/cloud/upgrade/dao/Upgrade410to420.java
@@ -76,8 +76,45 @@ public class Upgrade410to420 implements DbUpgrade {
                 }
             }
         }
+        updateCluster_details(conn);
     }
 
+    //update the cluster_details table with default overcommit ratios.
+    private void updateCluster_details(Connection conn) {
+        PreparedStatement pstmt = null;
+        PreparedStatement pstmt1 = null;
+        PreparedStatement pstmt2 =null;
+        ResultSet rs = null;
+
+        try {
+            pstmt = conn.prepareStatement("select id from `cloud`.`cluster`");
+            pstmt1=conn.prepareStatement("INSERT INTO `cloud`.`cluster_details` (cluster_id, name, value)  VALUES(?, 'cpuOvercommitRatio', '1')");
+            pstmt2=conn.prepareStatement("INSERT INTO `cloud`.`cluster_details` (cluster_id, name, value)  VALUES(?, 'memoryOvercommitRatio', '1')");
+            rs = pstmt.executeQuery();
+            while (rs.next()) {
+                long id = rs.getLong(1);
+                //update cluster_details table with the default overcommit ratios.
+                pstmt1.setLong(1,id);
+                pstmt1.execute();
+                pstmt2.setLong(1,id);
+                pstmt2.execute();
+            }
+        } catch (SQLException e) {
+            throw new CloudRuntimeException("Unable to update cluster_details with default overcommit ratios.", e);
+        } finally {
+            try {
+                if (rs != null) {
+                    rs.close();
+                }
+                if (pstmt != null) {
+                    pstmt.close();
+                }
+            } catch (SQLException e) {
+            }
+        }
+    }
+
+
 	@Override
 	public File[] getCleanupScripts() {
         String script = Script.findScript("", "db/schema-410to420-cleanup.sql");


[41/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
CLOUDSTACK-1830: ZWPS: NPE while create volume from snapshot


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

Branch: refs/heads/kvm-vnc-listen
Commit: 6110e00c549630e8b08fc6ca4818a60ef6a0c919
Parents: b798c45
Author: Harikrishna Patnala <ha...@citrix.com>
Authored: Tue Apr 2 19:11:08 2013 +0530
Committer: Edison Su <su...@gmail.com>
Committed: Tue Apr 2 10:40:42 2013 -0700

----------------------------------------------------------------------
 .../allocator/ZoneWideStoragePoolAllocator.java    |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6110e00c/engine/storage/src/org/apache/cloudstack/storage/allocator/ZoneWideStoragePoolAllocator.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/allocator/ZoneWideStoragePoolAllocator.java b/engine/storage/src/org/apache/cloudstack/storage/allocator/ZoneWideStoragePoolAllocator.java
index c45f8a8..a4aa3d5 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/allocator/ZoneWideStoragePoolAllocator.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/allocator/ZoneWideStoragePoolAllocator.java
@@ -56,7 +56,7 @@ public class ZoneWideStoragePoolAllocator extends AbstractStoragePoolAllocator {
 			VirtualMachineProfile<? extends VirtualMachine> vmProfile,
 			DeploymentPlan plan, ExcludeList avoid, int returnUpTo) {
 		List<StoragePool> suitablePools = new ArrayList<StoragePool>();
-		HypervisorType hypervisor = vmProfile.getHypervisorType();
+		HypervisorType hypervisor = dskCh.getHypersorType();
 		if (hypervisor != null) {
 			if (hypervisor != HypervisorType.KVM) {
 				s_logger.debug("Only kvm supports zone wide storage");


[06/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
CLOUDSTACK-1746: update usage server startup configuration


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

Branch: refs/heads/kvm-vnc-listen
Commit: c3c7e7e57086dc4cdbca2dcb4ce0fe4a67d5ad62
Parents: 85971b5
Author: Kelven Yang <ke...@gmail.com>
Authored: Wed Mar 27 14:31:05 2013 -0700
Committer: Kelven Yang <ke...@gmail.com>
Committed: Fri Mar 29 11:12:36 2013 -0700

----------------------------------------------------------------------
 usage/resources/usageApplicationContext.xml |   17 ++++++++---------
 1 files changed, 8 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c3c7e7e5/usage/resources/usageApplicationContext.xml
----------------------------------------------------------------------
diff --git a/usage/resources/usageApplicationContext.xml b/usage/resources/usageApplicationContext.xml
index 0340038..fc67e0a 100644
--- a/usage/resources/usageApplicationContext.xml
+++ b/usage/resources/usageApplicationContext.xml
@@ -38,17 +38,16 @@
   <!--
     @DB support
   -->
-  <aop:config proxy-target-class="true">
-    <aop:aspect id="dbContextBuilder" ref="transactionContextBuilder">
-        <aop:pointcut id="captureAnyMethod"
-            expression="execution(* *(..))" 
-        />
-        <aop:around pointcut-ref="captureAnyMethod" method="AroundAnyMethod"/> 
-    </aop:aspect>
+  <bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" />
 
-  </aop:config>
+  <bean id="instantiatePostProcessor" class="com.cloud.utils.component.ComponentInstantiationPostProcessor">
+    <property name="Interceptors">
+        <list>
+            <ref bean="transactionContextBuilder" />
+        </list>
+    </property>
+  </bean>
   
-  <bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" />
   <bean id="ComponentContext" class="com.cloud.utils.component.ComponentContext" />
  
 </beans>


[42/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
41-42 db upgrade - added `cloud` db reference to the upgrade statements for remote access vpn


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

Branch: refs/heads/kvm-vnc-listen
Commit: 231367685789ff6e521879d25365d6ec65a1f076
Parents: 6110e00
Author: Alena Prokharchyk <al...@citrix.com>
Authored: Tue Apr 2 11:03:25 2013 -0700
Committer: Alena Prokharchyk <al...@citrix.com>
Committed: Tue Apr 2 11:11:18 2013 -0700

----------------------------------------------------------------------
 setup/db/db/schema-410to420-cleanup.sql |    8 ++++----
 setup/db/db/schema-410to420.sql         |    4 ++--
 2 files changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/23136768/setup/db/db/schema-410to420-cleanup.sql
----------------------------------------------------------------------
diff --git a/setup/db/db/schema-410to420-cleanup.sql b/setup/db/db/schema-410to420-cleanup.sql
index 187076f..b65717f 100644
--- a/setup/db/db/schema-410to420-cleanup.sql
+++ b/setup/db/db/schema-410to420-cleanup.sql
@@ -20,9 +20,9 @@
 --;
 
 #have to drop the foreign key in order to delete primary key; will re-insert the foreign key later
-ALTER TABLE remote_access_vpn DROP foreign key `fk_remote_access_vpn__vpn_server_addr_id`;
-ALTER TABLE remote_access_vpn DROP primary key;
-ALTER TABLE remote_access_vpn ADD primary key (`id`);
-ALTER TABLE remote_access_vpn ADD CONSTRAINT `fk_remote_access_vpn__vpn_server_addr_id` FOREIGN KEY (`vpn_server_addr_id`) REFERENCES `user_ip_address` (`id`);
+ALTER TABLE `cloud`.`remote_access_vpn` DROP foreign key `fk_remote_access_vpn__vpn_server_addr_id`;
+ALTER TABLE `cloud`.`remote_access_vpn` DROP primary key;
+ALTER TABLE `cloud`.`remote_access_vpn` ADD primary key (`id`);
+ALTER TABLE `cloud`.`remote_access_vpn` ADD CONSTRAINT `fk_remote_access_vpn__vpn_server_addr_id` FOREIGN KEY (`vpn_server_addr_id`) REFERENCES `user_ip_address` (`id`);
 
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/23136768/setup/db/db/schema-410to420.sql
----------------------------------------------------------------------
diff --git a/setup/db/db/schema-410to420.sql b/setup/db/db/schema-410to420.sql
index 3dee7ae..ab9df05 100644
--- a/setup/db/db/schema-410to420.sql
+++ b/setup/db/db/schema-410to420.sql
@@ -391,8 +391,8 @@ CREATE VIEW `cloud`.`account_view` AS
             and async_job.instance_type = 'Account'
             and async_job.job_status = 0;
 
-ALTER TABLE remote_access_vpn ADD COLUMN `id` bigint unsigned NOT NULL UNIQUE AUTO_INCREMENT COMMENT 'id';
-ALTER TABLE remote_access_vpn ADD COLUMN `uuid` varchar(40) UNIQUE;
+ALTER TABLE `cloud`.`remote_access_vpn` ADD COLUMN `id` bigint unsigned NOT NULL UNIQUE AUTO_INCREMENT COMMENT 'id';
+ALTER TABLE `cloud`.`remote_access_vpn` ADD COLUMN `uuid` varchar(40) UNIQUE;
 
 -- START: support for LXC
  


[04/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
Fixup after merging 4.1 fixes to master


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

Branch: refs/heads/kvm-vnc-listen
Commit: 2654e645c7f9f185ae212a721f333a342866ff7d
Parents: 9dcaf50
Author: Kelven Yang <ke...@gmail.com>
Authored: Thu Mar 28 17:34:15 2013 -0700
Committer: Kelven Yang <ke...@gmail.com>
Committed: Fri Mar 29 11:12:36 2013 -0700

----------------------------------------------------------------------
 client/tomcatconf/applicationContext.xml.in     |   76 +++++++++++------
 client/tomcatconf/componentContext.xml.in       |    8 ++-
 client/tomcatconf/nonossComponentContext.xml.in |    8 ++-
 3 files changed, 61 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2654e645/client/tomcatconf/applicationContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/applicationContext.xml.in b/client/tomcatconf/applicationContext.xml.in
index 17725f0..ca6b402 100644
--- a/client/tomcatconf/applicationContext.xml.in
+++ b/client/tomcatconf/applicationContext.xml.in
@@ -169,10 +169,13 @@
   <bean id="autoScaleVmGroupDaoImpl" class="com.cloud.network.as.dao.AutoScaleVmGroupDaoImpl" />
   <bean id="autoScaleVmGroupPolicyMapDaoImpl" class="com.cloud.network.as.dao.AutoScaleVmGroupPolicyMapDaoImpl" />
   <bean id="autoScaleVmProfileDaoImpl" class="com.cloud.network.as.dao.AutoScaleVmProfileDaoImpl" />
+  <bean id="baremetalDhcpDaoImpl" class="com.cloud.baremetal.database.BaremetalDhcpDaoImpl" />
+  <bean id="baremetalPxeDaoImpl" class="com.cloud.baremetal.database.BaremetalPxeDaoImpl" />
   <bean id="capacityDaoImpl" class="com.cloud.capacity.dao.CapacityDaoImpl" />
   <bean id="certificateDaoImpl" class="com.cloud.certificate.dao.CertificateDaoImpl" />
   <bean id="clusterDaoImpl" class="com.cloud.dc.dao.ClusterDaoImpl" />
   <bean id="clusterDetailsDaoImpl" class="com.cloud.dc.ClusterDetailsDaoImpl" />
+  <bean id="clusterVSMMapDaoImpl" class="com.cloud.dc.dao.ClusterVSMMapDaoImpl" />
   <bean id="commandExecLogDaoImpl" class="com.cloud.secstorage.CommandExecLogDaoImpl" />
   <bean id="conditionDaoImpl" class="com.cloud.network.as.dao.ConditionDaoImpl" />
   <bean id="consoleProxyDaoImpl" class="com.cloud.vm.dao.ConsoleProxyDaoImpl" />
@@ -200,12 +203,14 @@
   <bean id="externalPublicIpStatisticsDaoImpl" class="com.cloud.usage.dao.ExternalPublicIpStatisticsDaoImpl" />
   <bean id="firewallRulesCidrsDaoImpl" class="com.cloud.network.dao.FirewallRulesCidrsDaoImpl" />
   <bean id="firewallRulesDaoImpl" class="com.cloud.network.dao.FirewallRulesDaoImpl" />
+  <bean id="globalLoadBalancerDaoImpl" class="org.apache.cloudstack.region.gslb.GlobalLoadBalancerDaoImpl" />
+  <bean id="globalLoadBalancerLbRuleMapDaoImpl" class="org.apache.cloudstack.region.gslb.GlobalLoadBalancerLbRuleMapDaoImpl" />
   <bean id="guestOSCategoryDaoImpl" class="com.cloud.storage.dao.GuestOSCategoryDaoImpl" />
   <bean id="guestOSDaoImpl" class="com.cloud.storage.dao.GuestOSDaoImpl" />
   <bean id="highAvailabilityDaoImpl" class="com.cloud.ha.dao.HighAvailabilityDaoImpl" />
   <bean id="hostDaoImpl" class="com.cloud.host.dao.HostDaoImpl" />
-  <bean id="hostDetailsDaoImpl" class="com.cloud.host.dao.HostDetailsDaoImpl" />
   <bean id="engineHostDetailsDaoImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.db.dao.HostDetailsDaoImpl" />
+  <bean id="hostDetailsDaoImpl" class="com.cloud.host.dao.HostDetailsDaoImpl" />
   <bean id="hostJoinDaoImpl" class="com.cloud.api.query.dao.HostJoinDaoImpl" />
   <bean id="engineHostTagsDaoImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.db.dao.HostTagsDaoImpl" />
   <bean id="hostTagsDaoImpl" class="com.cloud.host.dao.HostTagsDaoImpl" />
@@ -213,7 +218,6 @@
   <bean id="iPAddressDaoImpl" class="com.cloud.network.dao.IPAddressDaoImpl" />
   <bean id="identityDaoImpl" class="com.cloud.uuididentity.dao.IdentityDaoImpl" />
   <bean id="imageDaoStoreDaoImpl" class="org.apache.cloudstack.storage.image.db.ImageDaoStoreDaoImpl" />
-  <bean id="imageDataDaoImpl" class="org.apache.cloudstack.storage.image.db.ImageDataDaoImpl" />
   <bean id="imageDataStoreProviderDaoImpl" class="org.apache.cloudstack.storage.image.db.ImageDataStoreProviderDaoImpl" />
   <bean id="inlineLoadBalancerNicMapDaoImpl" class="com.cloud.network.dao.InlineLoadBalancerNicMapDaoImpl" />
   <bean id="instanceGroupDaoImpl" class="com.cloud.vm.dao.InstanceGroupDaoImpl" />
@@ -221,12 +225,20 @@
   <bean id="instanceGroupVMMapDaoImpl" class="com.cloud.vm.dao.InstanceGroupVMMapDaoImpl" />
   <bean id="itWorkDaoImpl" class="com.cloud.vm.ItWorkDaoImpl" />
   <bean id="keystoreDaoImpl" class="com.cloud.keystore.KeystoreDaoImpl" />
+  <bean id="lBHealthCheckPolicyDaoImpl" class="com.cloud.network.dao.LBHealthCheckPolicyDaoImpl" />
   <bean id="lBStickinessPolicyDaoImpl" class="com.cloud.network.dao.LBStickinessPolicyDaoImpl" />
   <bean id="launchPermissionDaoImpl" class="com.cloud.storage.dao.LaunchPermissionDaoImpl" />
   <bean id="loadBalancerDaoImpl" class="com.cloud.network.dao.LoadBalancerDaoImpl" />
   <bean id="loadBalancerVMMapDaoImpl" class="com.cloud.network.dao.LoadBalancerVMMapDaoImpl" />
   <bean id="managementServerHostDaoImpl" class="com.cloud.cluster.dao.ManagementServerHostDaoImpl" />
   <bean id="managementServerHostPeerDaoImpl" class="com.cloud.cluster.dao.ManagementServerHostPeerDaoImpl" />
+  <bean id="mockConfigurationDaoImpl" class="com.cloud.simulator.dao.MockConfigurationDaoImpl" />
+  <bean id="mockHostDaoImpl" class="com.cloud.simulator.dao.MockHostDaoImpl" />
+  <bean id="mockSecStorageDaoImpl" class="com.cloud.simulator.dao.MockSecStorageDaoImpl" />
+  <bean id="mockSecurityRulesDaoImpl" class="com.cloud.simulator.dao.MockSecurityRulesDaoImpl" />
+  <bean id="mockStoragePoolDaoImpl" class="com.cloud.simulator.dao.MockStoragePoolDaoImpl" />
+  <bean id="mockVMDaoImpl" class="com.cloud.simulator.dao.MockVMDaoImpl" />
+  <bean id="mockVolumeDaoImpl" class="com.cloud.simulator.dao.MockVolumeDaoImpl" />
   <bean id="networkAccountDaoImpl" class="com.cloud.network.dao.NetworkAccountDaoImpl" />
   <bean id="networkDaoImpl" class="com.cloud.network.dao.NetworkDaoImpl" />
   <bean id="networkDomainDaoImpl" class="com.cloud.network.dao.NetworkDomainDaoImpl" />
@@ -238,6 +250,7 @@
   <bean id="networkRuleConfigDaoImpl" class="com.cloud.network.dao.NetworkRuleConfigDaoImpl" />
   <bean id="networkServiceMapDaoImpl" class="com.cloud.network.dao.NetworkServiceMapDaoImpl" />
   <bean id="nicDaoImpl" class="com.cloud.vm.dao.NicDaoImpl" />
+  <bean id="nicSecondaryIpDaoImpl" class="com.cloud.vm.dao.NicSecondaryIpDaoImpl" />
   <bean id="objectInDataStoreDaoImpl" class="org.apache.cloudstack.storage.db.ObjectInDataStoreDaoImpl" />
   <bean id="ovsTunnelInterfaceDaoImpl" class="com.cloud.network.ovs.dao.OvsTunnelInterfaceDaoImpl" />
   <bean id="ovsTunnelNetworkDaoImpl" class="com.cloud.network.ovs.dao.OvsTunnelNetworkDaoImpl" />
@@ -249,6 +262,7 @@
   <bean id="podVlanDaoImpl" class="com.cloud.dc.dao.PodVlanDaoImpl" />
   <bean id="podVlanMapDaoImpl" class="com.cloud.dc.dao.PodVlanMapDaoImpl" />
   <bean id="portForwardingRulesDaoImpl" class="com.cloud.network.rules.dao.PortForwardingRulesDaoImpl" />
+  <bean id="portProfileDaoImpl" class="com.cloud.network.dao.PortProfileDaoImpl" />
   <bean id="primaryDataStoreDaoImpl" class="org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDaoImpl" />
   <bean id="primaryDataStoreDetailsDaoImpl" class="org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDetailsDaoImpl" />
   <bean id="privateIpDaoImpl" class="com.cloud.network.vpc.dao.PrivateIpDaoImpl" />
@@ -286,7 +300,6 @@
   <bean id="staticRouteDaoImpl" class="com.cloud.network.vpc.dao.StaticRouteDaoImpl" />
   <bean id="storageNetworkIpAddressDaoImpl" class="com.cloud.dc.dao.StorageNetworkIpAddressDaoImpl" />
   <bean id="storageNetworkIpRangeDaoImpl" class="com.cloud.dc.dao.StorageNetworkIpRangeDaoImpl" />
-  <bean id="storagePoolDaoImpl" class="com.cloud.storage.dao.StoragePoolDaoImpl" />
   <bean id="storagePoolDetailsDaoImpl" class="com.cloud.storage.dao.StoragePoolDetailsDaoImpl" />
   <bean id="storagePoolHostDaoImpl" class="com.cloud.storage.dao.StoragePoolHostDaoImpl" />
   <bean id="storagePoolJoinDaoImpl" class="com.cloud.api.query.dao.StoragePoolJoinDaoImpl" />
@@ -314,6 +327,8 @@
   <bean id="userIpv6AddressDaoImpl" class="com.cloud.network.dao.UserIpv6AddressDaoImpl" />
   <bean id="userStatisticsDaoImpl" class="com.cloud.user.dao.UserStatisticsDaoImpl" />
   <bean id="userStatsLogDaoImpl" class="com.cloud.user.dao.UserStatsLogDaoImpl" />
+  <bean id="userVmCloneSettingDaoImpl" class="com.cloud.vm.dao.UserVmCloneSettingDaoImpl" />
+  <bean id="userVmDaoImpl" class="com.cloud.vm.dao.UserVmDaoImpl" />
   <bean id="userVmDetailsDaoImpl" class="com.cloud.vm.dao.UserVmDetailsDaoImpl" />
   <bean id="userVmJoinDaoImpl" class="com.cloud.api.query.dao.UserVmJoinDaoImpl" />
   <bean id="vMComputeTagDaoImpl" class="org.apache.cloudstack.engine.cloud.entity.api.db.dao.VMComputeTagDaoImpl" />
@@ -322,6 +337,7 @@
   <bean id="vMNetworkMapDaoImpl" class="org.apache.cloudstack.engine.cloud.entity.api.db.dao.VMNetworkMapDaoImpl" />
   <bean id="vMReservationDaoImpl" class="org.apache.cloudstack.engine.cloud.entity.api.db.dao.VMReservationDaoImpl" />
   <bean id="vMRootDiskTagDaoImpl" class="org.apache.cloudstack.engine.cloud.entity.api.db.dao.VMRootDiskTagDaoImpl" />
+  <bean id="vMSnapshotDaoImpl" class="com.cloud.vm.snapshot.dao.VMSnapshotDaoImpl" />
   <bean id="vMTemplateDetailsDaoImpl" class="com.cloud.storage.dao.VMTemplateDetailsDaoImpl" />
   <bean id="vMTemplateHostDaoImpl" class="com.cloud.storage.dao.VMTemplateHostDaoImpl" />
   <bean id="vMTemplatePoolDaoImpl" class="com.cloud.storage.dao.VMTemplatePoolDaoImpl" />
@@ -340,10 +356,8 @@
   <bean id="vpcGatewayDaoImpl" class="com.cloud.network.vpc.dao.VpcGatewayDaoImpl" />
   <bean id="vpcOfferingDaoImpl" class="com.cloud.network.vpc.dao.VpcOfferingDaoImpl" />
   <bean id="vpcOfferingServiceMapDaoImpl" class="com.cloud.network.vpc.dao.VpcOfferingServiceMapDaoImpl" />
+  <bean id="vpcServiceMapDaoImpl" class="com.cloud.network.vpc.dao.VpcServiceMapDaoImpl" />
   <bean id="vpnUserDaoImpl" class="com.cloud.network.dao.VpnUserDaoImpl" />
-  <bean id="userVmDaoImpl" class="com.cloud.vm.dao.UserVmDaoImpl" />
-  <bean id="portProfileDaoImpl" class="com.cloud.network.dao.PortProfileDaoImpl" />
-  <bean id="clusterVSMMapDaoImpl" class="com.cloud.dc.dao.ClusterVSMMapDaoImpl" />
 
   <!--
     Checkers
@@ -402,29 +416,25 @@
   <!--
     Storage pool allocators
   -->
-  <bean id="LocalStoragePoolAllocator" class="com.cloud.storage.allocator.LocalStoragePoolAllocator">
+  <bean id="LocalStoragePoolAllocator" class="org.apache.cloudstack.storage.allocator.LocalStoragePoolAllocator">
     <property name="name" value="LocalStorage"/>
   </bean>
-  <bean id="FirstFitStoragePoolAllocator" class="com.cloud.storage.allocator.FirstFitStoragePoolAllocator">
-    <property name="name" value="Storage"/>
+  <bean id="clusterScopeStoragePoolAllocator" class="org.apache.cloudstack.storage.allocator.ClusterScopeStoragePoolAllocator" />
+  <bean id="zoneWideStoragePoolAllocator" class="org.apache.cloudstack.storage.allocator.ZoneWideStoragePoolAllocator" />
+  <bean id="garbageCollectingStoragePoolAllocator" class="org.apache.cloudstack.storage.allocator.GarbageCollectingStoragePoolAllocator">
+    <property name="name" value="GCStorage"/>
   </bean>
 
   <bean id="UserConcentratedAllocator" class="com.cloud.agent.manager.allocator.impl.UserConcentratedAllocator">
     <property name="name" value="UserFirst"/>
   </bean>
   
-  <bean id="useLocalForRootAllocator" class="com.cloud.storage.allocator.UseLocalForRootAllocator">
-    <property name="name" value="LocalForRoot"/>
-  </bean>
   
-  <bean id="garbageCollectingStoragePoolAllocator" class="com.cloud.storage.allocator.GarbageCollectingStoragePoolAllocator">
-    <property name="name" value="GCStorage"/>
-  </bean>
-  <bean id="randomStoragePoolAllocator" class="com.cloud.storage.allocator.RandomStoragePoolAllocator" />
   <bean id="recreatableFencer" class="com.cloud.ha.RecreatableFencer" />
   <bean id="recreateHostAllocator" class="com.cloud.agent.manager.allocator.impl.RecreateHostAllocator" />
   <bean id="secondaryStorageVmDefaultAllocator" class="com.cloud.storage.secondary.SecondaryStorageVmDefaultAllocator" />
 
+
   <!--
     Misc allocator & Adapters
   -->
@@ -436,7 +446,7 @@
     <property name="name" value="Basic"/>
   </bean>
 
-  <bean id="hyervisorTemplateAdapter" class="com.cloud.template.HyervisorTemplateAdapter" />
+  <bean id="hyervisorTemplateAdapter" class="com.cloud.template.HypervisorTemplateAdapter" />
   <bean id="clusterAlertAdapter" class="com.cloud.alert.ClusterAlertAdapter" />
   <bean id="consoleProxyAlertAdapter" class="com.cloud.alert.ConsoleProxyAlertAdapter" />
   <bean id="secondaryStorageVmAlertAdapter" class="com.cloud.alert.SecondaryStorageVmAlertAdapter" />
@@ -591,8 +601,6 @@
   <bean id="clusterFenceManagerImpl" class="com.cloud.cluster.ClusterFenceManagerImpl" />
   <bean id="configurationManagerImpl" class="com.cloud.configuration.ConfigurationManagerImpl" />
   <bean id="dataStoreProviderManagerImpl" class="org.apache.cloudstack.storage.datastore.provider.DataStoreProviderManagerImpl" />
-  <bean id="domainManagerImpl" class="com.cloud.user.DomainManagerImpl" />
-  <bean id="downloadMonitorImpl" class="com.cloud.storage.download.DownloadMonitorImpl" />
   <bean id="elasticLoadBalancerManagerImpl" class="com.cloud.network.lb.ElasticLoadBalancerManagerImpl" />
   <bean id="entityManagerImpl" class="com.cloud.dao.EntityManagerImpl" />
   <bean id="externalLoadBalancerUsageManagerImpl" class="com.cloud.network.ExternalLoadBalancerUsageManagerImpl" />
@@ -676,17 +684,19 @@
   <!--
     Misc components
   -->
-  <bean id="cloudZonesStartupProcessor" class="com.cloud.hypervisor.CloudZonesStartupProcessor" />
-  <bean id="managementServerNode" class="com.cloud.cluster.ManagementServerNode" />
   <bean id="actionEventUtils" class="com.cloud.event.ActionEventUtils" />
   <bean id="agentMonitor" class="com.cloud.agent.manager.AgentMonitor" />
   <bean id="alertGenerator" class="com.cloud.event.AlertGenerator" />
+  <bean id="ancientDataMotionStrategy" class="org.apache.cloudstack.storage.motion.AncientDataMotionStrategy" />
+  <bean id="ancientImageDataStoreProvider" class="org.apache.cloudstack.storage.image.store.AncientImageDataStoreProvider" />
+  <bean id="ancientSnapshotStrategy" class="org.apache.cloudstack.storage.snapshot.strategy.AncientSnapshotStrategy" />
   <bean id="apiDBUtils" class="com.cloud.api.ApiDBUtils" />
   <bean id="apiDiscoveryServiceImpl" class="org.apache.cloudstack.discovery.ApiDiscoveryServiceImpl" />
   <bean id="apiDispatcher" class="com.cloud.api.ApiDispatcher" />
   <bean id="apiResponseHelper" class="com.cloud.api.ApiResponseHelper" />
   <bean id="apiServer" class="com.cloud.api.ApiServer" />
   <bean id="apiServlet" class="com.cloud.api.ApiServlet" />
+  <bean id="bAREMETAL" class="org.apache.cloudstack.storage.image.format.BAREMETAL" />
   <bean id="cloudOrchestrator" class="org.apache.cloudstack.platform.orchestration.CloudOrchestrator" />
   <bean id="clusterRestService" class="org.apache.cloudstack.engine.rest.service.api.ClusterRestService" />
   <bean id="consoleProxyServlet" class="com.cloud.servlet.ConsoleProxyServlet" />
@@ -696,12 +706,9 @@
   <bean id="dataObjectManagerImpl" class="org.apache.cloudstack.storage.datastore.DataObjectManagerImpl" />
   <bean id="dataStoreManagerImpl" class="org.apache.cloudstack.storage.datastore.DataStoreManagerImpl" />
   <bean id="defaultEndPointSelector" class="org.apache.cloudstack.storage.endpoint.DefaultEndPointSelector" />
-  <bean id="defaultImageDataStoreProvider" class="org.apache.cloudstack.storage.image.store.DefaultImageDataStoreProvider" />
-  <bean id="defaultImageMotionStrategy" class="org.apache.cloudstack.storage.image.motion.DefaultImageMotionStrategy" />
   <bean id="defaultPrimaryDataStoreProviderManagerImpl" class="org.apache.cloudstack.storage.datastore.manager.DefaultPrimaryDataStoreProviderManagerImpl" />
-  <bean id="defaultPrimaryDatastoreProviderImpl" class="org.apache.cloudstack.storage.datastore.provider.DefaultPrimaryDatastoreProviderImpl" />
   <bean id="eventUtils" class="com.cloud.event.EventUtils" />
-  <bean id="hypervisorBasedSnapshot" class="org.apache.cloudstack.storage.snapshot.strategy.HypervisorBasedSnapshot" />
+  <bean id="globalLoadBalancingRulesServiceImpl" class="org.apache.cloudstack.region.gslb.GlobalLoadBalancingRulesServiceImpl" />
   <bean id="hypervsiorHostEndPointRpcServer" class="org.apache.cloudstack.storage.HypervsiorHostEndPointRpcServer" />
   <bean id="iSCSI" class="org.apache.cloudstack.storage.datastore.type.ISCSI" />
   <bean id="iSO" class="org.apache.cloudstack.storage.image.format.ISO" />
@@ -710,7 +717,6 @@
   <bean id="imageDataStoreHelper" class="org.apache.cloudstack.storage.image.datastore.ImageDataStoreHelper" />
   <bean id="imageDataStoreManagerImpl" class="org.apache.cloudstack.storage.image.manager.ImageDataStoreManagerImpl" />
   <bean id="imageFormatHelper" class="org.apache.cloudstack.storage.image.format.ImageFormatHelper" />
-  <bean id="imageMotionServiceImpl" class="org.apache.cloudstack.storage.image.motion.ImageMotionServiceImpl" />
   <bean id="imageServiceImpl" class="org.apache.cloudstack.storage.image.ImageServiceImpl" />
   <bean id="iso" class="org.apache.cloudstack.engine.subsystem.api.storage.type.Iso" />
   <bean id="networkFileSystem" class="org.apache.cloudstack.storage.datastore.type.NetworkFileSystem" />
@@ -725,20 +731,36 @@
   <bean id="rootDisk" class="org.apache.cloudstack.engine.subsystem.api.storage.type.RootDisk" />
   <bean id="snapshotDataFactoryImpl" class="org.apache.cloudstack.storage.snapshot.SnapshotDataFactoryImpl" />
   <bean id="snapshotServiceImpl" class="org.apache.cloudstack.storage.snapshot.SnapshotServiceImpl" />
+  <bean id="snapshotStateMachineManagerImpl" class="org.apache.cloudstack.storage.snapshot.SnapshotStateMachineManagerImpl" />
   <bean id="statsCollector" class="com.cloud.server.StatsCollector" />
+  <bean id="storagePoolAutomationImpl" class="com.cloud.storage.StoragePoolAutomationImpl" />
   <bean id="templateInstallStrategyImpl" class="org.apache.cloudstack.storage.volume.TemplateInstallStrategyImpl" />
   <bean id="unknown" class="org.apache.cloudstack.storage.image.format.Unknown" />
   <bean id="usageEventUtils" class="com.cloud.event.UsageEventUtils" />
   <bean id="userContextInitializer" class="com.cloud.user.UserContextInitializer" />
   <bean id="vHD" class="org.apache.cloudstack.storage.image.format.VHD" />
   <bean id="vMEntityManagerImpl" class="org.apache.cloudstack.engine.cloud.entity.api.VMEntityManagerImpl" />
+  <bean id="virtualMachineEntityFactory" class="org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntityFactory" />
   <bean id="virtualMachineEntityImpl" class="org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntityImpl" />
   <bean id="virtualMachineRestService" class="org.apache.cloudstack.engine.rest.service.api.VirtualMachineRestService" />
   <bean id="volumeDataFactoryImpl" class="org.apache.cloudstack.storage.volume.VolumeDataFactoryImpl" />
-  <bean id="volumeManagerImpl" class="org.apache.cloudstack.storage.volume.VolumeManagerImpl" />
   <bean id="volumeRestService" class="org.apache.cloudstack.engine.rest.service.api.VolumeRestService" />
   <bean id="volumeServiceImpl" class="org.apache.cloudstack.storage.volume.VolumeServiceImpl" />
   <bean id="volumeTypeHelper" class="org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeTypeHelper" />
   <bean id="zoneRestService" class="org.apache.cloudstack.engine.rest.service.api.ZoneRestService" />
+  <bean id="cloudZonesStartupProcessor" class="com.cloud.hypervisor.CloudZonesStartupProcessor" />
+  <bean id="managementServerNode" class="com.cloud.cluster.ManagementServerNode" />
+  <bean id="testingAllocator" class="com.cloud.agent.manager.allocator.impl.TestingAllocator" />
+  <bean id="domainManagerImpl" class="com.cloud.user.DomainManagerImpl" />
+  <bean id="downloadMonitorImpl" class="com.cloud.storage.download.DownloadMonitorImpl" />
+  <bean id="lBHealthCheckManagerImpl" class="com.cloud.network.lb.LBHealthCheckManagerImpl" />
+  <bean id="mockAgentManagerImpl" class="com.cloud.agent.manager.MockAgentManagerImpl" />
+  <bean id="mockStorageManagerImpl" class="com.cloud.agent.manager.MockStorageManagerImpl" />
+  <bean id="mockVmManagerImpl" class="com.cloud.agent.manager.MockVmManagerImpl" />
+  <bean id="resourceManagerImpl" class="com.cloud.resource.ResourceManagerImpl" />
+  <bean id="simulatorManagerImpl" class="com.cloud.agent.manager.SimulatorManagerImpl" />
+  <bean id="vMSnapshotManagerImpl" class="com.cloud.vm.snapshot.VMSnapshotManagerImpl" />
+  <bean id="volumeManagerImpl" class="com.cloud.storage.VolumeManagerImpl" />
+  <bean id="ClassicalPrimaryDataStoreProvider" class="org.apache.cloudstack.storage.datastore.provider.CloudStackPrimaryDataStoreProviderImpl" />
   
 </beans>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2654e645/client/tomcatconf/componentContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/componentContext.xml.in b/client/tomcatconf/componentContext.xml.in
index a6bd420..9d95e15 100644
--- a/client/tomcatconf/componentContext.xml.in
+++ b/client/tomcatconf/componentContext.xml.in
@@ -71,7 +71,9 @@
     <property name="StoragePoolAllocators">
       <list>
           <ref bean="LocalStoragePoolAllocator"/>
-          <ref bean="FirstFitStoragePoolAllocator"/>
+          <ref bean="clusterScopeStoragePoolAllocator"/>
+          <ref bean="zoneWideStoragePoolAllocator"/>
+          <ref bean="garbageCollectingStoragePoolAllocator"/>
       </list>
     </property>
   </bean>
@@ -81,7 +83,9 @@
     <property name="StoragePoolAllocators">
       <list>
           <ref bean="LocalStoragePoolAllocator"/>
-          <ref bean="FirstFitStoragePoolAllocator"/>
+          <ref bean="clusterScopeStoragePoolAllocator"/>
+          <ref bean="zoneWideStoragePoolAllocator"/>
+          <ref bean="garbageCollectingStoragePoolAllocator"/>
       </list>
     </property>
     <property name="HostAllocators">

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2654e645/client/tomcatconf/nonossComponentContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/nonossComponentContext.xml.in b/client/tomcatconf/nonossComponentContext.xml.in
index 55a8f06..0b02eb6 100644
--- a/client/tomcatconf/nonossComponentContext.xml.in
+++ b/client/tomcatconf/nonossComponentContext.xml.in
@@ -163,7 +163,9 @@
     <property name="StoragePoolAllocators">
       <list>
           <ref bean="LocalStoragePoolAllocator"/>
-          <ref bean="FirstFitStoragePoolAllocator"/>
+          <ref bean="clusterScopeStoragePoolAllocator"/>
+          <ref bean="zoneWideStoragePoolAllocator"/>
+          <ref bean="garbageCollectingStoragePoolAllocator"/>
       </list>
     </property>
   </bean>
@@ -174,7 +176,9 @@
     <property name="StoragePoolAllocators">
       <list>
           <ref bean="LocalStoragePoolAllocator"/>
-          <ref bean="FirstFitStoragePoolAllocator"/>
+          <ref bean="clusterScopeStoragePoolAllocator"/>
+          <ref bean="zoneWideStoragePoolAllocator"/>
+          <ref bean="garbageCollectingStoragePoolAllocator"/>
       </list>
     </property>
     <property name="HostAllocators">


[36/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
moving out the vmpasswd into its own suite

vm passwords are extended features that don't need to be part of the
smoke suite.

Signed-off-by: Prasanna Santhanam <ts...@apache.org>


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

Branch: refs/heads/kvm-vnc-listen
Commit: fe48bbebda0ff05653fc2341649e410db6bfb159
Parents: 3075d0c
Author: Prasanna Santhanam <ts...@apache.org>
Authored: Thu Mar 21 15:34:26 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Tue Apr 2 18:31:29 2013 +0530

----------------------------------------------------------------------
 .../integration/component/test_vm_passwdenabled.py |  242 +++++++++++++++
 test/integration/smoke/test_vm_life_cycle.py       |  170 ----------
 tools/marvin/marvin/testSetupSuccess.py            |    2 +-
 3 files changed, 243 insertions(+), 171 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fe48bbeb/test/integration/component/test_vm_passwdenabled.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_vm_passwdenabled.py b/test/integration/component/test_vm_passwdenabled.py
new file mode 100644
index 0000000..fb88170
--- /dev/null
+++ b/test/integration/component/test_vm_passwdenabled.py
@@ -0,0 +1,242 @@
+# 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
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+import marvin
+from marvin.cloudstackTestCase import *
+from marvin.cloudstackAPI import *
+from marvin.remoteSSHClient import remoteSSHClient
+from marvin.integration.lib.utils import *
+from marvin.integration.lib.base import *
+from marvin.integration.lib.common import *
+from nose.plugins.attrib import attr
+
+
+_multiprocess_shared_ = True
+class Services:
+    """Test VM Life Cycle Services
+    """
+
+    def __init__(self):
+        self.services = {
+            "disk_offering":{
+                "displaytext": "Small",
+                "name": "Small",
+                "disksize": 1
+            },
+            "account": {
+                "email": "test@test.com",
+                "firstname": "Test",
+                "lastname": "User",
+                "username": "test",
+                # Random characters are appended in create account to
+                # ensure unique username generated each time
+                "password": "password",
+                },
+            "service_offerings":
+                {
+                    "small":
+                        {
+                            # Small service offering ID to for change VM
+                            # service offering from medium to small
+                            "name": "Small Instance",
+                            "displaytext": "Small Instance",
+                            "cpunumber": 1,
+                            "cpuspeed": 100,
+                            "memory": 256,
+                            },
+                },
+            "template": {
+                "displaytext": "Cent OS Template",
+                "name": "Cent OS Template",
+                "passwordenabled": True,
+                },
+            "sleep": 60,
+            "timeout": 10,
+            "ostype": 'CentOS 5.3 (64-bit)',
+            # CentOS 5.3 (64-bit)
+        }
+
+@unittest.skip("Additional test")
+class TestVMPasswordEnabled(cloudstackTestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        cls.api_client = super(
+            TestVMPasswordEnabled,
+            cls
+        ).getClsTestClient().getApiClient()
+        cls.services = Services().services
+
+        # Get Zone, Domain and templates
+        domain = get_domain(cls.api_client, cls.services)
+        zone = get_zone(cls.api_client, cls.services)
+        template = get_template(
+            cls.api_client,
+            zone.id,
+            cls.services["ostype"]
+        )
+        # Set Zones and disk offerings
+        cls.services["small"]["zoneid"] = zone.id
+        cls.services["small"]["template"] = template.id
+
+        # Create VMs, NAT Rules etc
+        cls.account = Account.create(
+            cls.api_client,
+            cls.services["account"],
+            domainid=domain.id
+        )
+
+        cls.small_offering = ServiceOffering.create(
+            cls.api_client,
+            cls.services["service_offerings"]["small"]
+        )
+
+        cls.virtual_machine = VirtualMachine.create(
+            cls.api_client,
+            cls.services["small"],
+            accountid=cls.account.account.name,
+            domainid=cls.account.account.domainid,
+            serviceofferingid=cls.small_offering.id,
+            mode=cls.services["mode"]
+        )
+        #Stop virtual machine
+        cls.virtual_machine.stop(cls.api_client)
+
+        # Poll listVM to ensure VM is stopped properly
+        timeout = cls.services["timeout"]
+        while True:
+            time.sleep(cls.services["sleep"])
+
+            # Ensure that VM is in stopped state
+            list_vm_response = list_virtual_machines(
+                cls.api_client,
+                id=cls.virtual_machine.id
+            )
+
+            if isinstance(list_vm_response, list):
+
+                vm = list_vm_response[0]
+                if vm.state == 'Stopped':
+                    break
+
+            if timeout == 0:
+                raise Exception(
+                    "Failed to stop VM (ID: %s) in change service offering" %
+                    vm.id)
+
+            timeout = timeout - 1
+
+        list_volume = list_volumes(
+            cls.api_client,
+            virtualmachineid=cls.virtual_machine.id,
+            type='ROOT',
+            listall=True
+        )
+        if isinstance(list_volume, list):
+            cls.volume = list_volume[0]
+        else:
+            raise Exception(
+                "Exception: Unable to find root volume foe VM: %s" %
+                cls.virtual_machine.id)
+
+        cls.services["template"]["ostype"] = cls.services["ostype"]
+        #Create templates for Edit, Delete & update permissions testcases
+        cls.pw_enabled_template = Template.create(
+            cls.api_client,
+            cls.services["template"],
+            cls.volume.id,
+            account=cls.account.account.name,
+            domainid=cls.account.account.domainid
+        )
+        # Delete the VM - No longer needed
+        cls.virtual_machine.delete(cls.api_client)
+        cls.services["small"]["template"] = cls.pw_enabled_template.id
+
+        cls.vm = VirtualMachine.create(
+            cls.api_client,
+            cls.services["small"],
+            accountid=cls.account.account.name,
+            domainid=cls.account.account.domainid,
+            serviceofferingid=cls.small_offering.id,
+            mode=cls.services["mode"]
+        )
+        cls._cleanup = [
+            cls.small_offering,
+            cls.pw_enabled_template,
+            cls.account
+        ]
+
+    @classmethod
+    def tearDownClass(cls):
+        # Cleanup VMs, templates etc.
+        cleanup_resources(cls.api_client, cls._cleanup)
+        return
+
+    def setUp(self):
+        self.apiclient = self.testClient.getApiClient()
+        self.dbclient = self.testClient.getDbConnection()
+        self.cleanup = []
+
+    def tearDown(self):
+        #Clean up, terminate the created instances
+        cleanup_resources(self.apiclient, self.cleanup)
+        return
+
+    @attr(tags = ["advanced", "advancedns", "smoke", "basic", "sg"])
+    def test_11_get_vm_password(self):
+        """Test get VM password for password enabled template"""
+
+        # Validate the following
+        # 1. Create an account
+        # 2. Deploy VM with default service offering and "password enabled"
+        #    template. Vm should be in running state.
+        # 3. Stop VM deployed in step 2
+        # 4. Reset VM password. SSH with new password should be successful
+
+        self.debug("Stopping VM: %s" % self.vm.name)
+        self.vm.stop(self.apiclient)
+
+        # Sleep to ensure VM is stopped properly
+        time.sleep(self.services["sleep"])
+
+        self.debug("Resetting VM password for VM: %s" % self.vm.name)
+        password = self.vm.resetPassword(self.apiclient)
+        self.debug("Password reset to: %s" % password)
+
+        self.debug("Starting VM to verify new password..")
+        self.vm.start(self.apiclient)
+        self.debug("VM - %s stated!" % self.vm.name)
+
+        vms = VirtualMachine.list(self.apiclient, id=self.vm.id, listall=True)
+        self.assertEqual(
+            isinstance(vms, list),
+            True,
+            "List VMs should retun valid response for VM: %s" % self.vm.name
+        )
+        virtual_machine = vms[0]
+
+        self.assertEqual(
+            virtual_machine.state,
+            "Running",
+            "VM state should be running"
+        )
+        try:
+            self.debug("SSHing into VM: %s" % self.vm.ssh_ip)
+            self.vm.password = password
+            ssh = self.vm.get_ssh_client()
+        except Exception as e:
+            self.fail("SSH into VM: %s failed" % self.vm.ssh_ip)
+        return

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fe48bbeb/test/integration/smoke/test_vm_life_cycle.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_vm_life_cycle.py b/test/integration/smoke/test_vm_life_cycle.py
index 0a5fbad..719984d 100644
--- a/test/integration/smoke/test_vm_life_cycle.py
+++ b/test/integration/smoke/test_vm_life_cycle.py
@@ -998,174 +998,4 @@ class TestVMLifeCycle(cloudstackTestCase):
                          )
         return
 
-@unittest.skip("Additional test")
-class TestVMPasswordEnabled(cloudstackTestCase):
 
-    @classmethod
-    def setUpClass(cls):
-        cls.api_client = super(
-                               TestVMPasswordEnabled,
-                               cls
-                               ).getClsTestClient().getApiClient()
-        cls.services = Services().services
-
-        # Get Zone, Domain and templates
-        domain = get_domain(cls.api_client, cls.services)
-        zone = get_zone(cls.api_client, cls.services)
-        template = get_template(
-                            cls.api_client,
-                            zone.id,
-                            cls.services["ostype"]
-                            )
-        # Set Zones and disk offerings
-        cls.services["small"]["zoneid"] = zone.id
-        cls.services["small"]["template"] = template.id
-
-        # Create VMs, NAT Rules etc
-        cls.account = Account.create(
-                            cls.api_client,
-                            cls.services["account"],
-                            domainid=domain.id
-                            )
-
-        cls.small_offering = ServiceOffering.create(
-                                    cls.api_client,
-                                    cls.services["service_offerings"]["small"]
-                                    )
-
-        cls.virtual_machine = VirtualMachine.create(
-                                        cls.api_client,
-                                        cls.services["small"],
-                                        accountid=cls.account.account.name,
-                                        domainid=cls.account.account.domainid,
-                                        serviceofferingid=cls.small_offering.id,
-                                        mode=cls.services["mode"]
-                                        )
-        #Stop virtual machine
-        cls.virtual_machine.stop(cls.api_client)
-
-        # Poll listVM to ensure VM is stopped properly
-        timeout = cls.services["timeout"]
-        while True:
-            time.sleep(cls.services["sleep"])
-
-            # Ensure that VM is in stopped state
-            list_vm_response = list_virtual_machines(
-                                            cls.api_client,
-                                            id=cls.virtual_machine.id
-                                            )
-
-            if isinstance(list_vm_response, list):
-
-                vm = list_vm_response[0]
-                if vm.state == 'Stopped':
-                    break
-
-            if timeout == 0:
-                raise Exception(
-                    "Failed to stop VM (ID: %s) in change service offering" %
-                                                                        vm.id)
-
-            timeout = timeout - 1
-
-        list_volume = list_volumes(
-                                   cls.api_client,
-                                   virtualmachineid=cls.virtual_machine.id,
-                                   type='ROOT',
-                                   listall=True
-                                   )
-        if isinstance(list_volume, list):
-            cls.volume = list_volume[0]
-        else:
-            raise Exception(
-                "Exception: Unable to find root volume foe VM: %s" %
-                                                    cls.virtual_machine.id)
-
-        cls.services["template"]["ostype"] = cls.services["ostype"]
-        #Create templates for Edit, Delete & update permissions testcases
-        cls.pw_enabled_template = Template.create(
-                                         cls.api_client,
-                                         cls.services["template"],
-                                         cls.volume.id,
-                                         account=cls.account.account.name,
-                                         domainid=cls.account.account.domainid
-                                         )
-        # Delete the VM - No longer needed
-        cls.virtual_machine.delete(cls.api_client)
-        cls.services["small"]["template"] = cls.pw_enabled_template.id
-
-        cls.vm = VirtualMachine.create(
-                                        cls.api_client,
-                                        cls.services["small"],
-                                        accountid=cls.account.account.name,
-                                        domainid=cls.account.account.domainid,
-                                        serviceofferingid=cls.small_offering.id,
-                                        mode=cls.services["mode"]
-                                        )
-        cls._cleanup = [
-                        cls.small_offering,
-                        cls.pw_enabled_template,
-                        cls.account
-                        ]
-
-    @classmethod
-    def tearDownClass(cls):
-        # Cleanup VMs, templates etc.
-        cleanup_resources(cls.api_client, cls._cleanup)
-        return
-
-    def setUp(self):
-        self.apiclient = self.testClient.getApiClient()
-        self.dbclient = self.testClient.getDbConnection()
-        self.cleanup = []
-
-    def tearDown(self):
-        #Clean up, terminate the created instances
-        cleanup_resources(self.apiclient, self.cleanup)
-        return
-
-    @attr(tags = ["advanced", "advancedns", "smoke", "basic", "sg"])
-    def test_11_get_vm_password(self):
-        """Test get VM password for password enabled template"""
-
-        # Validate the following
-        # 1. Create an account
-        # 2. Deploy VM with default service offering and "password enabled"
-        #    template. Vm should be in running state.
-        # 3. Stop VM deployed in step 2
-        # 4. Reset VM password. SSH with new password should be successful
-
-        self.debug("Stopping VM: %s" % self.vm.name)
-        self.vm.stop(self.apiclient)
-
-        # Sleep to ensure VM is stopped properly
-        time.sleep(self.services["sleep"])
-
-        self.debug("Resetting VM password for VM: %s" % self.vm.name)
-        password = self.vm.resetPassword(self.apiclient)
-        self.debug("Password reset to: %s" % password)
-
-        self.debug("Starting VM to verify new password..")
-        self.vm.start(self.apiclient)
-        self.debug("VM - %s stated!" % self.vm.name)
-
-        vms = VirtualMachine.list(self.apiclient, id=self.vm.id, listall=True)
-        self.assertEqual(
-            isinstance(vms, list),
-            True,
-            "List VMs should retun valid response for VM: %s" % self.vm.name
-            )
-        virtual_machine = vms[0]
-
-        self.assertEqual(
-                         virtual_machine.state,
-                         "Running",
-                         "VM state should be running"
-                         )
-        try:
-            self.debug("SSHing into VM: %s" % self.vm.ssh_ip)
-            self.vm.password = password
-            ssh = self.vm.get_ssh_client()
-        except Exception as e:
-            self.fail("SSH into VM: %s failed" % self.vm.ssh_ip)
-        return

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fe48bbeb/tools/marvin/marvin/testSetupSuccess.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/testSetupSuccess.py b/tools/marvin/marvin/testSetupSuccess.py
index 319fd21..b1721c4 100644
--- a/tools/marvin/marvin/testSetupSuccess.py
+++ b/tools/marvin/marvin/testSetupSuccess.py
@@ -33,7 +33,7 @@ class TestSetupSuccess(cloudstackTestCase):
         
         zones = listZones.listZonesCmd()
         cls.zones_list = cls.apiClient.listZones(zones)
-        cls.retry = 50
+        cls.retry = 2
         
     def test_systemVmReady(self):
         """


[10/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
Fixes/improvements for VPC feature:

1) Added comments to VPC/VPCService/VPCManager interfaces
2) Moved VPC offering related methods from VpcService to the new interface - VpcProvisioningService
3) Fixed static nat creation in the VPC - used to result in NPE due to invalid method referencing while obtaining VPC VR information


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

Branch: refs/heads/kvm-vnc-listen
Commit: cf72aa32747a44ef876b9566d5c85db2f189b84e
Parents: f8471e5
Author: Alena Prokharchyk <al...@citrix.com>
Authored: Fri Mar 29 16:24:24 2013 -0700
Committer: Alena Prokharchyk <al...@citrix.com>
Committed: Fri Mar 29 16:56:01 2013 -0700

----------------------------------------------------------------------
 api/src/com/cloud/network/NetworkModel.java        |    2 +
 api/src/com/cloud/network/vpc/Vpc.java             |   43 +++++-
 api/src/com/cloud/network/vpc/VpcOffering.java     |   21 +++-
 .../cloud/network/vpc/VpcProvisioningService.java  |   46 +++++++
 api/src/com/cloud/network/vpc/VpcService.java      |   95 +++++++++----
 api/src/org/apache/cloudstack/api/BaseCmd.java     |    2 +
 .../command/admin/vpc/CreateVPCOfferingCmd.java    |    4 +-
 .../command/admin/vpc/DeleteVPCOfferingCmd.java    |    2 +-
 .../command/admin/vpc/UpdateVPCOfferingCmd.java    |    2 +-
 .../api/command/user/network/UpdateNetworkCmd.java |    9 +-
 .../api/command/user/vpc/ListVPCOfferingsCmd.java  |    2 +-
 server/src/com/cloud/api/ApiDBUtils.java           |   77 +++++++++--
 server/src/com/cloud/network/NetworkManager.java   |    4 +-
 .../src/com/cloud/network/NetworkManagerImpl.java  |    1 -
 server/src/com/cloud/network/NetworkModelImpl.java |   13 ++
 .../src/com/cloud/network/NetworkServiceImpl.java  |    7 +
 .../network/element/VpcVirtualRouterElement.java   |   21 ++--
 .../router/VpcVirtualNetworkApplianceManager.java  |    6 +
 .../VpcVirtualNetworkApplianceManagerImpl.java     |   15 ++-
 server/src/com/cloud/network/vpc/VpcManager.java   |   84 +++++++-----
 .../src/com/cloud/network/vpc/VpcManagerImpl.java  |   77 +++--------
 .../src/com/cloud/network/vpc/VpcOfferingVO.java   |    1 -
 server/src/com/cloud/network/vpc/VpcVO.java        |    7 -
 .../com/cloud/network/MockNetworkModelImpl.java    |    6 +
 .../test/com/cloud/vpc/MockNetworkModelImpl.java   |    6 +
 server/test/com/cloud/vpc/MockVpcManagerImpl.java  |  106 ++-------------
 .../vpc/MockVpcVirtualNetworkApplianceManager.java |    6 +
 server/test/com/cloud/vpc/VpcApiUnitTest.java      |   37 +-----
 28 files changed, 395 insertions(+), 307 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/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 916f28a..c1f1674 100644
--- a/api/src/com/cloud/network/NetworkModel.java
+++ b/api/src/com/cloud/network/NetworkModel.java
@@ -261,4 +261,6 @@ public interface NetworkModel {
 	String getStartIpv6Address(long id);
 
     Nic getPlaceholderNic(Network network, Long podId);
+
+    boolean isProviderEnabledInZone(long zoneId, String provider);
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/api/src/com/cloud/network/vpc/Vpc.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/vpc/Vpc.java b/api/src/com/cloud/network/vpc/Vpc.java
index c07077f..249e80f 100644
--- a/api/src/com/cloud/network/vpc/Vpc.java
+++ b/api/src/com/cloud/network/vpc/Vpc.java
@@ -20,32 +20,63 @@ import org.apache.cloudstack.acl.ControlledEntity;
 import org.apache.cloudstack.api.Identity;
 import org.apache.cloudstack.api.InternalIdentity;
 
-import com.cloud.network.Network;
-
 public interface Vpc extends ControlledEntity, Identity, InternalIdentity {
+    
     public enum State {
         Enabled,
         Inactive
     }
 
-   public static final String _supportedProviders = Network.Provider.VPCVirtualRouter.getName();
-
-   boolean readyToUse();
-
+    /**
+     * 
+     * @return VPC name
+     */
    String getName();
 
+   
+   /**
+    * @return the id of the zone the VPC belongs to
+    */
    long getZoneId();
 
+   
+   /**
+    * @return super CIDR of the VPC. All the networks participating in VPC, should have CIDRs that are the part of the super cidr
+    */
    String getCidr();
 
+   /**
+    * 
+    * @return VPC state
+    */
    State getState();
 
+   
+   /**
+    * 
+    * @return VPC offering id - the offering that VPC is created from
+    */
    long getVpcOfferingId();
 
+   
+   /**
+    * 
+    * @return VPC display text
+    */
    String getDisplayText();
 
+   
+   /**
+    * 
+    * @return VPC network domain. All networks participating in the VPC, become the part of the same network domain
+    */
    String getNetworkDomain();
 
+   
+   /**
+    * 
+    * @return true if restart is required for the VPC; false otherwise
+    */
    boolean isRestartRequired();
 
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/api/src/com/cloud/network/vpc/VpcOffering.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/vpc/VpcOffering.java b/api/src/com/cloud/network/vpc/VpcOffering.java
index 1acfcd2..3961d0a 100644
--- a/api/src/com/cloud/network/vpc/VpcOffering.java
+++ b/api/src/com/cloud/network/vpc/VpcOffering.java
@@ -27,18 +27,33 @@ public interface VpcOffering extends InternalIdentity, Identity {
 
     public static final String defaultVPCOfferingName = "Default VPC offering";
 
+    /**
+     * 
+     * @return VPC offering name
+     */
     String getName();
 
-    String getUniqueName();
-
+    
+    /**
+     * @return VPC offering display text
+     */
     String getDisplayText();
+    
 
+    /**
+     * 
+     * @return VPC offering state
+     */
     State getState();
 
+    /**
+     * 
+     * @return true if offering is default - came with the cloudStack fresh install; false otherwise
+     */
     boolean isDefault();
 
     /**
-     * @return
+     * @return service offering id used by VPC virutal router
      */
     Long getServiceOfferingId();
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/api/src/com/cloud/network/vpc/VpcProvisioningService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/vpc/VpcProvisioningService.java b/api/src/com/cloud/network/vpc/VpcProvisioningService.java
new file mode 100644
index 0000000..70676ce
--- /dev/null
+++ b/api/src/com/cloud/network/vpc/VpcProvisioningService.java
@@ -0,0 +1,46 @@
+// 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
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.network.vpc;
+
+import java.util.List;
+import java.util.Map;
+
+public interface VpcProvisioningService {
+    
+    public VpcOffering getVpcOffering(long vpcOfferingId);
+    
+    public VpcOffering createVpcOffering(String name, String displayText, List<String> supportedServices, Map<String, List<String>> serviceProviders);
+    
+    List<? extends VpcOffering> listVpcOfferings(Long id, String name, String displayText, List<String> supportedServicesStr,
+            Boolean isDefault, String keyword, String state, Long startIndex, Long pageSizeVal);
+    
+    /**
+     * @param offId
+     * @return
+     */
+    public boolean deleteVpcOffering(long offId);
+    
+    /**
+     * @param vpcOffId
+     * @param vpcOfferingName
+     * @param displayText
+     * @param state
+     * @return
+     */
+    public VpcOffering updateVpcOffering(long vpcOffId, String vpcOfferingName, String displayText, String state);
+
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/api/src/com/cloud/network/vpc/VpcService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/vpc/VpcService.java b/api/src/com/cloud/network/vpc/VpcService.java
index 9bf1bee..07ce89b 100644
--- a/api/src/com/cloud/network/vpc/VpcService.java
+++ b/api/src/com/cloud/network/vpc/VpcService.java
@@ -18,7 +18,6 @@ package com.cloud.network.vpc;
 
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import org.apache.cloudstack.api.command.user.vpc.ListPrivateGatewaysCmd;
 import org.apache.cloudstack.api.command.user.vpc.ListStaticRoutesCmd;
@@ -31,45 +30,29 @@ import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.IpAddress;
 import com.cloud.network.Network;
-import com.cloud.network.Network.Provider;
-import com.cloud.network.Network.Service;
-import com.cloud.user.Account;
-import com.cloud.user.User;
 import com.cloud.utils.Pair;
 
 public interface VpcService {
 
-    public VpcOffering getVpcOffering(long vpcOfferingId);
-
-    public VpcOffering createVpcOffering(String name, String displayText, List<String> supportedServices, Map<String, List<String>> serviceProviders);
-
-    public Vpc getVpc(long vpcId);
-
-    public Vpc getActiveVpc(long vpcId);
-
-    public List<? extends Network> getVpcNetworks(long vpcId);
-
-    Map<Service, Set<Provider>> getVpcOffSvcProvidersMap(long vpcOffId);
-
-    List<? extends VpcOffering> listVpcOfferings(Long id, String name, String displayText, List<String> supportedServicesStr,
-            Boolean isDefault, String keyword, String state, Long startIndex, Long pageSizeVal);
-
-    /**
-     * @param offId
+    /**Returns existing VPC found by id
+     * 
+     * @param vpcId
      * @return
      */
-    public boolean deleteVpcOffering(long offId);
+    public Vpc getVpc(long vpcId);
 
+    
     /**
-     * @param vpcOffId
-     * @param vpcOfferingName
-     * @param displayText
-     * @param state
+     * Returns all the Guest networks that are part of VPC
+     * 
+     * @param vpcId
      * @return
      */
-    public VpcOffering updateVpcOffering(long vpcOffId, String vpcOfferingName, String displayText, String state);
+    public List<? extends Network> getVpcNetworks(long vpcId);
 
     /**
+     * Persists VPC record in the database
+     * 
      * @param zoneId
      * @param vpcOffId
      * @param vpcOwnerId
@@ -83,7 +66,10 @@ public interface VpcService {
     public Vpc createVpc(long zoneId, long vpcOffId, long vpcOwnerId, String vpcName, String displayText, String cidr,
             String networkDomain) throws ResourceAllocationException;
 
+    
     /**
+     * Deletes a VPC
+     * 
      * @param vpcId
      * @return
      * @throws InsufficientCapacityException
@@ -92,7 +78,10 @@ public interface VpcService {
      */
     public boolean deleteVpc(long vpcId) throws ConcurrentOperationException, ResourceUnavailableException;
 
+    
     /**
+     * Updates VPC with new name/displayText
+     * 
      * @param vpcId
      * @param vpcName
      * @param displayText
@@ -100,7 +89,10 @@ public interface VpcService {
      */
     public Vpc updateVpc(long vpcId, String vpcName, String displayText);
 
+    
     /**
+     * Lists VPC(s) based on the parameters passed to the method call
+     * 
      * @param id
      * @param vpcName
      * @param displayText
@@ -127,6 +119,8 @@ public interface VpcService {
             Boolean restartRequired, Map<String, String> tags, Long projectId);
 
     /**
+     * Starts VPC which includes starting VPC provider and applying all the neworking rules on the backend
+     * 
      * @param vpcId
      * @param destroyOnFailure TODO
      * @return
@@ -138,6 +132,8 @@ public interface VpcService {
                                                         ResourceUnavailableException, InsufficientCapacityException;
 
     /**
+     * Shuts down the VPC which includes shutting down all VPC provider and rules cleanup on the backend
+     * 
      * @param vpcId
      * @return
      * @throws ConcurrentOperationException
@@ -145,16 +141,28 @@ public interface VpcService {
      */
     boolean shutdownVpc(long vpcId) throws ConcurrentOperationException, ResourceUnavailableException;
 
+    
     /**
+     * Restarts the VPC. VPC gets shutdown and started as a part of it
+     * 
      * @param id
      * @return
      * @throws InsufficientCapacityException
      */
     boolean restartVpc(long id) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException;
 
+    /**
+     * Returns a Private gateway found in the VPC by id
+     * 
+     * @param id
+     * @return
+     */
     PrivateGateway getVpcPrivateGateway(long id);
 
+    
     /**
+     * Persists VPC private gateway in the Database.
+     * 
      * @param vpcId TODO
      * @param physicalNetworkId
      * @param vlan
@@ -172,6 +180,8 @@ public interface VpcService {
             ConcurrentOperationException, InsufficientCapacityException;
 
     /**
+     * Applies VPC private gateway on the backend, so it becomes functional
+     * 
      * @param gatewayId
      * @param destroyOnFailure TODO
      * @return
@@ -180,7 +190,10 @@ public interface VpcService {
      */
     public PrivateGateway applyVpcPrivateGateway(long gatewayId, boolean destroyOnFailure) throws ConcurrentOperationException, ResourceUnavailableException;
 
+    
     /**
+     * Deletes VPC private gateway
+     * 
      * @param id
      * @return
      * @throws ResourceUnavailableException
@@ -188,52 +201,76 @@ public interface VpcService {
      */
     boolean deleteVpcPrivateGateway(long gatewayId) throws ConcurrentOperationException, ResourceUnavailableException;
 
+    
     /**
+     * Returns the list of Private gateways existing in the VPC
+     * 
      * @param listPrivateGatewaysCmd
      * @return
      */
     public Pair<List<PrivateGateway>, Integer> listPrivateGateway(ListPrivateGatewaysCmd listPrivateGatewaysCmd);
 
+    
     /**
+     * Returns Static Route found by Id
+     * 
      * @param routeId
      * @return
      */
     StaticRoute getStaticRoute(long routeId);
 
+    
     /**
+     * Applies existing Static Routes to the VPC elements
+     * 
      * @param vpcId
      * @return
      * @throws ResourceUnavailableException
      */
     public boolean applyStaticRoutes(long vpcId) throws ResourceUnavailableException;
 
+    
     /**
+     * Deletes static route from the backend and the database
+     * 
      * @param routeId
      * @return TODO
      * @throws ResourceUnavailableException
      */
     public boolean revokeStaticRoute(long routeId) throws ResourceUnavailableException;
 
+    
     /**
+     * Persists static route entry in the Database
+     * 
      * @param gatewayId
      * @param cidr
      * @return
      */
     public StaticRoute createStaticRoute(long gatewayId, String cidr) throws NetworkRuleConflictException;
 
+    
     /**
+     * Lists static routes based on parameters passed to the call
+     * 
      * @param listStaticRoutesCmd
      * @return
      */
     public Pair<List<? extends StaticRoute>, Integer> listStaticRoutes(ListStaticRoutesCmd cmd);
 
+    
     /**
+     * Returns gateway (VPN or Public) existign in the VPC 
+     * 
      * @param id
      * @return
      */
     VpcGateway getVpcGateway(long id);
 
+    
     /**
+     * Associates IP address from the Public network, to the VPC
+     * 
      * @param ipId
      * @param vpcId
      * @return
@@ -245,6 +282,4 @@ public interface VpcService {
     IpAddress associateIPToVpc(long ipId, long vpcId) throws ResourceAllocationException, ResourceUnavailableException,
         InsufficientAddressCapacityException, ConcurrentOperationException;
 
-    public Network updateVpcGuestNetwork(long networkId, String name, String displayText, Account callerAccount,
-            User callerUser, String domainSuffix, Long ntwkOffId, Boolean changeCidr, String guestVmCidr);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/api/src/org/apache/cloudstack/api/BaseCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/BaseCmd.java b/api/src/org/apache/cloudstack/api/BaseCmd.java
index 7ccb72e..78a2af3 100644
--- a/api/src/org/apache/cloudstack/api/BaseCmd.java
+++ b/api/src/org/apache/cloudstack/api/BaseCmd.java
@@ -52,6 +52,7 @@ import com.cloud.network.firewall.NetworkACLService;
 import com.cloud.network.lb.LoadBalancingRulesService;
 import com.cloud.network.rules.RulesService;
 import com.cloud.network.security.SecurityGroupService;
+import com.cloud.network.vpc.VpcProvisioningService;
 import com.cloud.network.vpc.VpcService;
 import com.cloud.network.vpn.RemoteAccessVpnService;
 import com.cloud.network.vpn.Site2SiteVpnService;
@@ -132,6 +133,7 @@ public abstract class BaseCmd {
     @Inject public NetworkUsageService _networkUsageService;
     @Inject public VMSnapshotService _vmSnapshotService;
     @Inject public DataStoreProviderApiService dataStoreProviderApiService;
+    @Inject public VpcProvisioningService _vpcProvSvc;
 
     public abstract void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException;
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java
index 3c7956b..4a3a92a 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java
@@ -98,7 +98,7 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd{
 
     @Override
     public void create() throws ResourceAllocationException {
-        VpcOffering vpcOff = _vpcService.createVpcOffering(getVpcOfferingName(), getDisplayText(), getSupportedServices(), getServiceProviders());
+        VpcOffering vpcOff = _vpcProvSvc.createVpcOffering(getVpcOfferingName(), getDisplayText(), getSupportedServices(), getServiceProviders());
         if (vpcOff != null) {
             this.setEntityId(vpcOff.getId());
             this.setEntityUuid(vpcOff.getUuid());
@@ -109,7 +109,7 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd{
 
     @Override
     public void execute() {
-        VpcOffering vpc = _vpcService.getVpcOffering(this.getEntityId());
+        VpcOffering vpc = _vpcProvSvc.getVpcOffering(this.getEntityId());
         if (vpc != null) {
             VpcOfferingResponse response = _responseGenerator.createVpcOfferingResponse(vpc);
             response.setResponseName(getCommandName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java
index 9e2968e..4b16fa5 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java
@@ -66,7 +66,7 @@ public class DeleteVPCOfferingCmd extends BaseAsyncCmd{
 
     @Override
     public void execute(){
-        boolean result = _vpcService.deleteVpcOffering(getId());
+        boolean result = _vpcProvSvc.deleteVpcOffering(getId());
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());
             this.setResponseObject(response);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java
index de61ee7..9bbae06 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java
@@ -88,7 +88,7 @@ public class UpdateVPCOfferingCmd extends BaseAsyncCmd{
 
     @Override
     public void execute(){
-        VpcOffering result = _vpcService.updateVpcOffering(getId(), getVpcOfferingName(), getDisplayText(), getState());
+        VpcOffering result = _vpcProvSvc.updateVpcOffering(getId(), getVpcOfferingName(), getDisplayText(), getState());
         if (result != null) {
             VpcOfferingResponse response = _responseGenerator.createVpcOfferingResponse(result);
             response.setResponseName(getCommandName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java
index 41aaaaa..a61474e 100644
--- a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java
@@ -129,14 +129,9 @@ public class UpdateNetworkCmd extends BaseAsyncCmd {
             throw new InvalidParameterValueException("Couldn't find network by id");
         }
 
-        Network result = null;
-        if (network.getVpcId() != null) {
-            result = _vpcService.updateVpcGuestNetwork(getId(), getNetworkName(), getDisplayText(), callerAccount,
+        Network result = _networkService.updateGuestNetwork(getId(), getNetworkName(), getDisplayText(), callerAccount,
                     callerUser, getNetworkDomain(), getNetworkOfferingId(), getChangeCidr(), getGuestVmCidr());
-        } else {
-            result = _networkService.updateGuestNetwork(getId(), getNetworkName(), getDisplayText(), callerAccount,
-                    callerUser, getNetworkDomain(), getNetworkOfferingId(), getChangeCidr(), getGuestVmCidr());
-        }
+        
 
         if (result != null) {
             NetworkResponse response = _responseGenerator.createNetworkResponse(result);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java
index 9aef26f..ddae799 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java
@@ -92,7 +92,7 @@ public class ListVPCOfferingsCmd extends BaseListCmd{
 
     @Override
     public void execute(){
-        List<? extends VpcOffering> offerings = _vpcService.listVpcOfferings(getId(), getVpcOffName(), getDisplayText(),
+        List<? extends VpcOffering> offerings = _vpcProvSvc.listVpcOfferings(getId(), getVpcOffName(), getDisplayText(),
                 getSupportedServices(), isDefault, this.getKeyword(), getState(), this.getStartIndex(), this.getPageSizeVal());
         ListResponse<VpcOfferingResponse> response = new ListResponse<VpcOfferingResponse>();
         List<VpcOfferingResponse> offeringResponses = new ArrayList<VpcOfferingResponse>();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/server/src/com/cloud/api/ApiDBUtils.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java
index 8e6f806..7b44190 100755
--- a/server/src/com/cloud/api/ApiDBUtils.java
+++ b/server/src/com/cloud/api/ApiDBUtils.java
@@ -95,8 +95,20 @@ import com.cloud.configuration.Config;
 import com.cloud.configuration.ConfigurationService;
 import com.cloud.configuration.Resource.ResourceType;
 import com.cloud.configuration.dao.ConfigurationDao;
-import com.cloud.dc.*;
-import com.cloud.dc.dao.*;
+import com.cloud.dc.AccountVlanMapVO;
+import com.cloud.dc.ClusterDetailsDao;
+import com.cloud.dc.ClusterDetailsVO;
+import com.cloud.dc.ClusterVO;
+import com.cloud.dc.DataCenter;
+import com.cloud.dc.DataCenterVO;
+import com.cloud.dc.HostPodVO;
+import com.cloud.dc.Vlan;
+import com.cloud.dc.VlanVO;
+import com.cloud.dc.dao.AccountVlanMapDao;
+import com.cloud.dc.dao.ClusterDao;
+import com.cloud.dc.dao.DataCenterDao;
+import com.cloud.dc.dao.HostPodDao;
+import com.cloud.dc.dao.VlanDao;
 import com.cloud.domain.DomainVO;
 import com.cloud.domain.dao.DomainDao;
 import com.cloud.event.Event;
@@ -162,7 +174,12 @@ import com.cloud.network.security.SecurityGroup;
 import com.cloud.network.security.SecurityGroupManager;
 import com.cloud.network.security.SecurityGroupVO;
 import com.cloud.network.security.dao.SecurityGroupDao;
-import com.cloud.network.vpc.*;
+import com.cloud.network.vpc.StaticRouteVO;
+import com.cloud.network.vpc.VpcGatewayVO;
+import com.cloud.network.vpc.VpcManager;
+import com.cloud.network.vpc.VpcOffering;
+import com.cloud.network.vpc.VpcProvisioningService;
+import com.cloud.network.vpc.VpcVO;
 import com.cloud.network.vpc.dao.StaticRouteDao;
 import com.cloud.network.vpc.dao.VpcDao;
 import com.cloud.network.vpc.dao.VpcGatewayDao;
@@ -177,19 +194,57 @@ import com.cloud.projects.ProjectAccount;
 import com.cloud.projects.ProjectInvitation;
 import com.cloud.projects.ProjectService;
 import com.cloud.resource.ResourceManager;
-import com.cloud.server.*;
+import com.cloud.server.Criteria;
+import com.cloud.server.ManagementServer;
+import com.cloud.server.ResourceTag;
 import com.cloud.server.ResourceTag.TaggedResourceType;
+import com.cloud.server.StatsCollector;
+import com.cloud.server.TaggedResourceService;
 import com.cloud.service.ServiceOfferingVO;
 import com.cloud.service.dao.ServiceOfferingDao;
-import com.cloud.storage.*;
+import com.cloud.storage.DiskOfferingVO;
+import com.cloud.storage.GuestOS;
+import com.cloud.storage.GuestOSCategoryVO;
+import com.cloud.storage.Snapshot;
+import com.cloud.storage.SnapshotVO;
 import com.cloud.storage.Storage.ImageFormat;
-
+import com.cloud.storage.StorageManager;
+import com.cloud.storage.StoragePool;
+import com.cloud.storage.StorageStats;
+import com.cloud.storage.UploadVO;
+import com.cloud.storage.VMTemplateHostVO;
+import com.cloud.storage.VMTemplateS3VO;
+import com.cloud.storage.VMTemplateSwiftVO;
+import com.cloud.storage.VMTemplateVO;
+import com.cloud.storage.Volume;
 import com.cloud.storage.Volume.Type;
-import com.cloud.storage.dao.*;
+import com.cloud.storage.VolumeHostVO;
+import com.cloud.storage.VolumeManager;
+import com.cloud.storage.VolumeVO;
+import com.cloud.storage.dao.DiskOfferingDao;
+import com.cloud.storage.dao.GuestOSCategoryDao;
+import com.cloud.storage.dao.GuestOSDao;
+import com.cloud.storage.dao.SnapshotDao;
+import com.cloud.storage.dao.SnapshotPolicyDao;
+import com.cloud.storage.dao.UploadDao;
+import com.cloud.storage.dao.VMTemplateDao;
+import com.cloud.storage.dao.VMTemplateDetailsDao;
+import com.cloud.storage.dao.VMTemplateHostDao;
+import com.cloud.storage.dao.VMTemplateS3Dao;
+import com.cloud.storage.dao.VMTemplateSwiftDao;
+import com.cloud.storage.dao.VolumeDao;
+import com.cloud.storage.dao.VolumeHostDao;
 import com.cloud.storage.snapshot.SnapshotPolicy;
 import com.cloud.template.TemplateManager;
-import com.cloud.user.*;
-
+import com.cloud.user.Account;
+import com.cloud.user.AccountDetailsDao;
+import com.cloud.user.AccountVO;
+import com.cloud.user.ResourceLimitService;
+import com.cloud.user.SSHKeyPairVO;
+import com.cloud.user.User;
+import com.cloud.user.UserAccount;
+import com.cloud.user.UserStatisticsVO;
+import com.cloud.user.UserVO;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.user.dao.SSHKeyPairDao;
 import com.cloud.user.dao.UserDao;
@@ -202,7 +257,6 @@ import com.cloud.vm.DomainRouterVO;
 import com.cloud.vm.InstanceGroup;
 import com.cloud.vm.InstanceGroupVO;
 import com.cloud.vm.NicProfile;
-import com.cloud.vm.NicSecondaryIp;
 import com.cloud.vm.UserVmDetailVO;
 import com.cloud.vm.UserVmManager;
 import com.cloud.vm.UserVmVO;
@@ -324,6 +378,7 @@ public class ApiDBUtils {
     static VMSnapshotDao _vmSnapshotDao;
     static ClusterDetailsDao _clusterDetailsDao;
     static NicSecondaryIpDao _nicSecondaryIpDao;
+    static VpcProvisioningService _vpcProvSvc;
 
     @Inject private ManagementServer ms;
     @Inject public AsyncJobManager asyncMgr;
@@ -427,6 +482,7 @@ public class ApiDBUtils {
     @Inject private ClusterDetailsDao clusterDetailsDao;
     @Inject private VMSnapshotDao vmSnapshotDao;
     @Inject private NicSecondaryIpDao nicSecondaryIpDao;
+    @Inject private VpcProvisioningService vpcProvSvc;
     @PostConstruct
     void init() {
         _ms = ms;
@@ -528,6 +584,7 @@ public class ApiDBUtils {
         _clusterDetailsDao = clusterDetailsDao;
         _vmSnapshotDao = vmSnapshotDao;
         _nicSecondaryIpDao = nicSecondaryIpDao;
+        _vpcProvSvc = vpcProvSvc;
         // Note: stats collector should already have been initialized by this time, otherwise a null instance is returned
         _statsCollector = StatsCollector.getInstance();
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/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 e961f04..851f7f5 100755
--- a/server/src/com/cloud/network/NetworkManager.java
+++ b/server/src/com/cloud/network/NetworkManager.java
@@ -20,8 +20,8 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.cloudstack.acl.ControlledEntity.ACLType;
+
 import com.cloud.dc.DataCenter;
-import com.cloud.dc.DataCenterVO;
 import com.cloud.dc.Pod;
 import com.cloud.dc.Vlan.VlanType;
 import com.cloud.deploy.DataCenterDeployment;
@@ -51,13 +51,11 @@ import com.cloud.user.User;
 import com.cloud.utils.Pair;
 import com.cloud.vm.Nic;
 import com.cloud.vm.NicProfile;
-import com.cloud.vm.NicSecondaryIp;
 import com.cloud.vm.NicVO;
 import com.cloud.vm.ReservationContext;
 import com.cloud.vm.VMInstanceVO;
 import com.cloud.vm.VirtualMachine;
 import com.cloud.vm.VirtualMachineProfile;
-import com.cloud.vm.VirtualMachineProfileImpl;
 
 /**
  * NetworkManager manages the network for the different end users.

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/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 42544ae..c0685ba 100755
--- a/server/src/com/cloud/network/NetworkManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkManagerImpl.java
@@ -1528,7 +1528,6 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
         // associate a source NAT IP (if one isn't already associated with the network)
 
         boolean sharedSourceNat = offering.getSharedSourceNat();
-        DataCenter zone = _dcDao.findById(network.getDataCenterId());
         if (network.getGuestType() == Network.GuestType.Isolated
                && _networkModel.areServicesSupportedInNetwork(network.getId(), Service.SourceNat)
                && !sharedSourceNat) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/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 e7bdbca..d967f33 100644
--- a/server/src/com/cloud/network/NetworkModelImpl.java
+++ b/server/src/com/cloud/network/NetworkModelImpl.java
@@ -1212,6 +1212,19 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel {
         }
         return isProviderEnabled(ntwkSvcProvider);
     }
+    
+    @Override
+    public boolean isProviderEnabledInZone(long zoneId, String provider)
+    {
+        //the provider has to be enabled at least in one network in the zone
+        for (PhysicalNetwork pNtwk : _physicalNetworkDao.listByZone(zoneId)) {
+            if (isProviderEnabledInPhysicalNetwork(pNtwk.getId(), provider)) {
+                return true;
+            }
+        }
+        
+        return false;
+    }
 
     @Override
     public String getNetworkTag(HypervisorType hType, Network network) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/server/src/com/cloud/network/NetworkServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java
index 846d79e..d503459 100755
--- a/server/src/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/com/cloud/network/NetworkServiceImpl.java
@@ -94,6 +94,7 @@ import com.cloud.network.rules.FirewallRuleVO;
 import com.cloud.network.rules.PortForwardingRuleVO;
 import com.cloud.network.rules.RulesManager;
 import com.cloud.network.vpc.PrivateIpVO;
+import com.cloud.network.vpc.Vpc;
 import com.cloud.network.vpc.VpcManager;
 import com.cloud.network.vpc.dao.PrivateIpDao;
 import com.cloud.offering.NetworkOffering;
@@ -1715,6 +1716,12 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
             ex.addProxyObject("networks", networkId, "networkId");
             throw ex;
         }
+        
+        //perform below validation if the network is vpc network
+        if (network.getVpcId() != null && networkOfferingId != null) {
+            Vpc vpc = _vpcMgr.getVpc(network.getVpcId());
+            _vpcMgr.validateNtwkOffForNtwkInVpc(networkId, networkOfferingId, null, null, vpc, null, _accountMgr.getAccount(network.getAccountId()));
+        }
 
         // don't allow to update network in Destroy state
         if (network.getState() == Network.State.Destroy) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/server/src/com/cloud/network/element/VpcVirtualRouterElement.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java
index c7d4aed..0844369 100644
--- a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java
+++ b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java
@@ -37,6 +37,7 @@ import com.cloud.network.Network;
 import com.cloud.network.Network.Capability;
 import com.cloud.network.Network.Provider;
 import com.cloud.network.Network.Service;
+import com.cloud.network.NetworkModel;
 import com.cloud.network.PublicIpAddress;
 import com.cloud.network.Site2SiteVpnConnection;
 import com.cloud.network.Site2SiteVpnGateway;
@@ -76,6 +77,8 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc
     Site2SiteVpnGatewayDao _vpnGatewayDao;
     @Inject
     IPAddressDao _ipAddressDao;
+    @Inject
+    NetworkModel _ntwkModel;
 
     private static final Map<Service, Map<Capability, String>> capabilities = setCapabilities();
 
@@ -322,7 +325,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc
             return false;
         }
 
-        List<DomainRouterVO> routers = _vpcMgr.getVpcRouters(gateway.getVpcId());
+        List<DomainRouterVO> routers = _vpcRouterMgr.getVpcRouters(gateway.getVpcId());
         if (routers == null || routers.isEmpty()) {
             s_logger.debug(this.getName() + " element doesn't need to create Private gateway on the backend; VPC virtual " +
                     "router doesn't exist in the vpc id=" + gateway.getVpcId());
@@ -345,7 +348,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc
             return false;
         }
 
-        List<DomainRouterVO> routers = _vpcMgr.getVpcRouters(gateway.getVpcId());
+        List<DomainRouterVO> routers = _vpcRouterMgr.getVpcRouters(gateway.getVpcId());
         if (routers == null || routers.isEmpty()) {
             s_logger.debug(this.getName() + " element doesn't need to delete Private gateway on the backend; VPC virtual " +
                     "router doesn't exist in the vpc id=" + gateway.getVpcId());
@@ -361,10 +364,6 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc
         return _vpcRouterMgr.destroyPrivateGateway(gateway, router);
     }
 
-    @Override
-    protected List<DomainRouterVO> getRouters(Network network, DeployDestination dest) {
-        return  _vpcMgr.getVpcRouters(network.getVpcId());
-    }
 
     @Override
     public boolean applyIps(Network network, List<? extends PublicIpAddress> ipAddress, Set<Service> services) 
@@ -377,7 +376,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc
             }
         }
         if (canHandle) {
-            List<DomainRouterVO> routers = getRouters(network, null);
+            List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
             if (routers == null || routers.isEmpty()) {
                 s_logger.debug(this.getName() + " element doesn't need to associate ip addresses on the backend; VPC virtual " +
                         "router doesn't exist in the network " + network.getId());
@@ -446,12 +445,12 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc
         Long vpcId = ip.getVpcId();
         Vpc vpc = _vpcMgr.getVpc(vpcId);
 
-        if (!_vpcMgr.vpcProviderEnabledInZone(vpc.getZoneId(), Provider.VPCVirtualRouter.getName())) {
+        if (!_ntwkModel.isProviderEnabledInZone(vpc.getZoneId(), Provider.VPCVirtualRouter.getName())) {
             throw new ResourceUnavailableException("VPC provider is not enabled in zone " + vpc.getZoneId(),
                     DataCenter.class, vpc.getZoneId());
         }
 
-        List<DomainRouterVO> routers = _vpcMgr.getVpcRouters(ip.getVpcId());
+        List<DomainRouterVO> routers = _vpcRouterMgr.getVpcRouters(ip.getVpcId());
         if (routers == null || routers.size() != 1) {
             throw new ResourceUnavailableException("Cannot enable site-to-site VPN on the backend; virtual router doesn't exist in the vpc " + ip.getVpcId(),
                     DataCenter.class, vpc.getZoneId());
@@ -474,12 +473,12 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc
         Long vpcId = ip.getVpcId();
         Vpc vpc = _vpcMgr.getVpc(vpcId);
 
-        if (!_vpcMgr.vpcProviderEnabledInZone(vpc.getZoneId(), Provider.VPCVirtualRouter.getName())) {
+        if (!_ntwkModel.isProviderEnabledInZone(vpc.getZoneId(), Provider.VPCVirtualRouter.getName())) {
             throw new ResourceUnavailableException("VPC provider is not enabled in zone " + vpc.getZoneId(),
                     DataCenter.class, vpc.getZoneId());
         }
 
-        List<DomainRouterVO> routers = _vpcMgr.getVpcRouters(ip.getVpcId());
+        List<DomainRouterVO> routers = _vpcRouterMgr.getVpcRouters(ip.getVpcId());
         if (routers == null || routers.size() != 1) {
             throw new ResourceUnavailableException("Cannot enable site-to-site VPN on the backend; virtual router doesn't exist in the vpc " + ip.getVpcId(),
                     DataCenter.class, vpc.getZoneId());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java
index 297ae9b..76c8aa8 100644
--- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java
+++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java
@@ -101,4 +101,10 @@ public interface VpcVirtualNetworkApplianceManager extends VirtualNetworkApplian
      * @throws ResourceUnavailableException
      */
     boolean stopSite2SiteVpn(Site2SiteVpnConnection conn, VirtualRouter router) throws ResourceUnavailableException;
+    
+    /**
+     * @param vpcId
+     * @return
+     */
+    List<DomainRouterVO> getVpcRouters(long vpcId);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/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 22d823f..bdfac06 100644
--- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
@@ -234,7 +234,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
         long dcId = dest.getDataCenter().getId();
         
         DeploymentPlan plan = new DataCenterDeployment(dcId);
-        List<DomainRouterVO> routers = _routerDao.listByVpcId(vpcId);
+        List<DomainRouterVO> routers = getVpcRouters(vpcId);
         
         return new Pair<DeploymentPlan, List<DomainRouterVO>>(plan, routers);
     }
@@ -1212,7 +1212,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
         networks = super.createRouterNetworks(owner, isRedundant, plan, null, sourceNatIp);
 
         //2) allocate nic for private gateway if needed
-        VpcGateway privateGateway = _vpcMgr.getPrivateGatewayForVpc(vpcId);
+        PrivateGateway privateGateway = _vpcMgr.getVpcPrivateGateway(vpcId);
         if (privateGateway != null) {
             NicProfile privateNic = createPrivateNicProfileForGateway(privateGateway);
             Network privateNetwork = _networkModel.getNetwork(privateGateway.getNetworkId());
@@ -1233,7 +1233,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
         for (IPAddressVO ip : ips) {
             PublicIp publicIp = PublicIp.createFromAddrAndVlan(ip, _vlanDao.findById(ip.getVlanId()));
             if ((ip.getState() == IpAddress.State.Allocated || ip.getState() == IpAddress.State.Allocating) 
-                    && _vpcMgr.ipUsedInVpc(ip)&& !publicVlans.contains(publicIp.getVlanTag())) {
+                    && _vpcMgr.isIpAllocatedToVpc(ip)&& !publicVlans.contains(publicIp.getVlanTag())) {
                 s_logger.debug("Allocating nic for router in vlan " + publicIp.getVlanTag());
                 NicProfile publicNic = new NicProfile();
                 publicNic.setDefaultNic(false);
@@ -1314,7 +1314,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
             long publicNtwkId = ip.getNetworkId();
             
             //if ip is not associated to any network, and there are no firewall rules, release it on the backend
-            if (!_vpcMgr.ipUsedInVpc(ip)) {
+            if (!_vpcMgr.isIpAllocatedToVpc(ip)) {
                 ip.setState(IpAddress.State.Releasing);
             }
                          
@@ -1334,7 +1334,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
             long publicNtwkId = ip.getNetworkId();
             
             //if ip is not associated to any network, and there are no firewall rules, release it on the backend
-            if (!_vpcMgr.ipUsedInVpc(ip)) {
+            if (!_vpcMgr.isIpAllocatedToVpc(ip)) {
                 ip.setState(IpAddress.State.Releasing);
             }
                          
@@ -1376,4 +1376,9 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
         }
     }
     
+    @Override
+    public List<DomainRouterVO> getVpcRouters(long vpcId) {
+        return _routerDao.listByVpcId(vpcId);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/server/src/com/cloud/network/vpc/VpcManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/VpcManager.java b/server/src/com/cloud/network/vpc/VpcManager.java
index 714330d..84ab8ef 100644
--- a/server/src/com/cloud/network/vpc/VpcManager.java
+++ b/server/src/com/cloud/network/vpc/VpcManager.java
@@ -17,8 +17,11 @@
 package com.cloud.network.vpc;
 
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import org.apache.cloudstack.acl.ControlledEntity.ACLType;
+
 import com.cloud.exception.ConcurrentOperationException;
 import com.cloud.exception.InsufficientAddressCapacityException;
 import com.cloud.exception.InsufficientCapacityException;
@@ -27,33 +30,27 @@ import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.network.IpAddress;
 import com.cloud.network.Network;
+import com.cloud.network.Network.Provider;
 import com.cloud.network.Network.Service;
 import com.cloud.network.PhysicalNetwork;
 import com.cloud.network.addr.PublicIp;
 import com.cloud.offering.NetworkOffering;
 import com.cloud.user.Account;
-import com.cloud.vm.DomainRouterVO;
 
 
 public interface VpcManager extends VpcService{
 
     /**
-     * @param ntwkOffId
-     * @param cidr
-     * @param networkDomain
-     * @param networkOwner
-     * @param vpc TODO
-     * @param networkId TODO
-     * @param gateway TODO
+     * Returns all existing VPCs for a given account
+     * @param accountId
      * @return
      */
-    void validateNtkwOffForVpc(long ntwkOffId, String cidr, String networkDomain, Account networkOwner, 
-            Vpc vpc, Long networkId, String gateway);
-
-    
     List<? extends Vpc> getVpcsForAccount(long accountId);
 
+    
     /**
+     * Destroys the VPC
+     * 
      * @param vpc
      * @param caller TODO
      * @param callerUserId TODO
@@ -63,34 +60,19 @@ public interface VpcManager extends VpcService{
      */
     boolean destroyVpc(Vpc vpc, Account caller, Long callerUserId) throws ConcurrentOperationException, ResourceUnavailableException;
 
-    /**
-     * @param vpcId
-     * @return
-     */
-    List<DomainRouterVO> getVpcRouters(long vpcId);
-
-    /**
-     * @param zoneId
-     * @param provider
-     * @return
-     */
-    boolean vpcProviderEnabledInZone(long zoneId, String provider);
-
-    /**
-     * @param vpcId
-     * @return
-     */
-    VpcGateway getPrivateGatewayForVpc(long vpcId);
-
 
     /**
+     * Returns true if the IP is allocated to the VPC; false otherwise
+     * 
      * @param ip
      * @return
      */
-    boolean ipUsedInVpc(IpAddress ip);
+    boolean isIpAllocatedToVpc(IpAddress ip);
 
 
     /**
+     * Disassociates the public IP address from VPC
+     * 
      * @param ipId
      * @param networkId
      */
@@ -98,6 +80,8 @@ public interface VpcManager extends VpcService{
 
 
     /**
+     * Creates guest network in the VPC
+     * 
      * @param ntwkOffId
      * @param name
      * @param displayText
@@ -125,9 +109,11 @@ public interface VpcManager extends VpcService{
 
 
     /**
+     * Assigns source nat public IP address to VPC
+     * 
      * @param owner
      * @param vpc
-     * @return
+     * @return public IP address object
      * @throws InsufficientAddressCapacityException
      * @throws ConcurrentOperationException
      */
@@ -135,6 +121,8 @@ public interface VpcManager extends VpcService{
 
 
     /**
+     * Validates network offering to find if it can be used for network creation in VPC
+     * 
      * @param guestNtwkOff
      * @param supportedSvcs TODO
      */
@@ -142,8 +130,36 @@ public interface VpcManager extends VpcService{
 
 
     /**
-     * @return
+     * @return list of hypervisors that are supported by VPC
      */
     List<HypervisorType> getSupportedVpcHypervisors();
+    
+    
+    /**
+     * Lists all the services and providers that the current VPC suppots
+     * @param vpcOffId
+     * @return map of Service to Provider(s) map 
+     */
+    Map<Service, Set<Provider>> getVpcOffSvcProvidersMap(long vpcOffId);
+    
+    
+    /**
+     * Returns VPC that is ready to be used
+     * @param vpcId
+     * @return VPC object
+     */
+    public Vpc getActiveVpc(long vpcId);
 
+
+    /**
+     * Performs network offering validation to determine if it can be used for network upgrade inside the VPC 
+     * @param networkId
+     * @param newNtwkOffId
+     * @param newCidr
+     * @param newNetworkDomain
+     * @param vpc
+     * @param gateway
+     * @param networkOwner TODO
+     */
+    void validateNtwkOffForNtwkInVpc(Long networkId, long newNtwkOffId, String newCidr, String newNetworkDomain, Vpc vpc, String gateway, Account networkOwner);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/server/src/com/cloud/network/vpc/VpcManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/com/cloud/network/vpc/VpcManagerImpl.java
index fee4ef3..3948f2e 100644
--- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java
+++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java
@@ -31,13 +31,12 @@ import javax.ejb.Local;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
-import com.cloud.network.element.StaticNatServiceProvider;
+import org.apache.cloudstack.acl.ControlledEntity.ACLType;
+import org.apache.cloudstack.api.command.user.vpc.ListPrivateGatewaysCmd;
 import org.apache.cloudstack.api.command.user.vpc.ListStaticRoutesCmd;
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
-import org.apache.cloudstack.acl.ControlledEntity.ACLType;
-import org.apache.cloudstack.api.command.user.vpc.ListPrivateGatewaysCmd;
 import com.cloud.configuration.Config;
 import com.cloud.configuration.ConfigurationManager;
 import com.cloud.configuration.Resource.ResourceType;
@@ -77,6 +76,7 @@ import com.cloud.network.dao.NetworkDao;
 import com.cloud.network.dao.NetworkVO;
 import com.cloud.network.dao.PhysicalNetworkDao;
 import com.cloud.network.dao.Site2SiteVpnGatewayDao;
+import com.cloud.network.element.StaticNatServiceProvider;
 import com.cloud.network.element.VpcProvider;
 import com.cloud.network.vpc.VpcOffering.State;
 import com.cloud.network.vpc.dao.PrivateIpDao;
@@ -103,8 +103,6 @@ import com.cloud.user.UserContext;
 import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.Pair;
 import com.cloud.utils.Ternary;
-
-import com.cloud.utils.component.Manager;
 import com.cloud.utils.component.ManagerBase;
 import com.cloud.utils.concurrency.NamedThreadFactory;
 import com.cloud.utils.db.DB;
@@ -124,8 +122,8 @@ import com.cloud.vm.dao.DomainRouterDao;
 
 
 @Component
-@Local(value = { VpcManager.class, VpcService.class })
-public class VpcManagerImpl extends ManagerBase implements VpcManager{
+@Local(value = { VpcManager.class, VpcService.class, VpcProvisioningService.class })
+public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvisioningService{
     private static final Logger s_logger = Logger.getLogger(VpcManagerImpl.class);
     @Inject
     VpcOfferingDao _vpcOffDao;
@@ -584,19 +582,6 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager{
         
         return createVpc(zoneId, vpcOffId, owner, vpcName, displayText, cidr, networkDomain);
     }
-    
-    @Override
-    public boolean vpcProviderEnabledInZone(long zoneId, String provider)
-    {
-        //the provider has to be enabled at least in one network in the zone
-        for (PhysicalNetwork pNtwk : _pNtwkDao.listByZone(zoneId)) {
-            if (_ntwkModel.isProviderEnabledInPhysicalNetwork(pNtwk.getId(), provider)) {
-                return true;
-            }
-        }
-        
-        return false;
-    }
 
     
     @DB
@@ -656,7 +641,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager{
             }
 
 
-            if (!vpcProviderEnabledInZone(zoneId, provider)) {
+            if (!_ntwkModel.isProviderEnabledInZone(zoneId, provider)) {
                 throw new InvalidParameterValueException("Provider " + provider +
                         " should be enabled in at least one physical network of the zone specified");
             }
@@ -1015,20 +1000,20 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager{
         return success;
     }
     
-    @Override
     @DB
-    public void validateNtkwOffForVpc(long ntwkOffId, String cidr, String networkDomain, 
-            Account networkOwner, Vpc vpc, Long networkId, String gateway) {
+    @Override
+    public void validateNtwkOffForNtwkInVpc(Long networkId, long newNtwkOffId, String newCidr, 
+            String newNetworkDomain, Vpc vpc, String gateway, Account networkOwner) {
         
-        NetworkOffering guestNtwkOff = _configMgr.getNetworkOffering(ntwkOffId);
+        NetworkOffering guestNtwkOff = _configMgr.getNetworkOffering(newNtwkOffId);
         
         if (guestNtwkOff == null) {
             throw new InvalidParameterValueException("Can't find network offering by id specified");
         }
-
+        
         if (networkId == null) {
             //1) Validate attributes that has to be passed in when create new guest network
-            validateNewVpcGuestNetwork(cidr, gateway, networkOwner, vpc, networkDomain); 
+            validateNewVpcGuestNetwork(newCidr, gateway, networkOwner, vpc, newNetworkDomain); 
         }
 
         //2) validate network offering attributes
@@ -1213,7 +1198,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager{
         }
 
         //4) Delete private gateway
-        VpcGateway gateway = getPrivateGatewayForVpc(vpcId);
+        PrivateGateway gateway = getVpcPrivateGateway(vpcId);
         if (gateway != null) {
             s_logger.debug("Deleting private gateway " + gateway + " as a part of vpc " + vpcId + " resources cleanup");
             if (!deleteVpcPrivateGateway(gateway.getId())) {
@@ -1270,11 +1255,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager{
         }  
     }
     
-    @Override
-    public List<DomainRouterVO> getVpcRouters(long vpcId) {
-        return _routerDao.listByVpcId(vpcId);
-    }
-
+    
     @Override
     public PrivateGateway getVpcPrivateGateway(long id) {
         VpcGateway gateway = _vpcGatewayDao.findById(id);
@@ -1835,11 +1816,6 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager{
             }
         }
     }
-    
-    @Override
-    public VpcGateway getPrivateGatewayForVpc(long vpcId) {
-        return _vpcGatewayDao.getPrivateGatewayForVpc(vpcId);
-    }
 
     
     @DB
@@ -1895,7 +1871,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager{
     @Override
     public void unassignIPFromVpcNetwork(long ipId, long networkId) {
         IPAddressVO ip = _ipAddressDao.findById(ipId);
-        if (ipUsedInVpc(ip)) {
+        if (isIpAllocatedToVpc(ip)) {
             return;
         }
 
@@ -1927,7 +1903,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager{
     }
     
     @Override
-    public boolean ipUsedInVpc(IpAddress ip) {
+    public boolean isIpAllocatedToVpc(IpAddress ip) {
         return (ip != null && ip.getVpcId() != null && 
                 (ip.isOneToOneNat() || !_firewallDao.listByIp(ip.getId()).isEmpty()));
     }
@@ -1957,7 +1933,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager{
         }
         
         //1) Validate if network can be created for VPC
-        validateNtkwOffForVpc(ntwkOffId, cidr, networkDomain, owner, vpc, null, gateway);
+        validateNtwkOffForNtwkInVpc(null, ntwkOffId, cidr, networkDomain, vpc, gateway, owner);
 
         //2) Create network
         Network guestNetwork = _ntwkMgr.createGuestNetwork(ntwkOffId, name, displayText, gateway, cidr, vlanId, 
@@ -2020,24 +1996,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager{
 
         return ipToReturn;
     }
-
-
-    @Override
-    public Network updateVpcGuestNetwork(long networkId, String name, String displayText, Account callerAccount, 
-            User callerUser, String domainSuffix, Long ntwkOffId, Boolean changeCidr, String guestVmCidr) {
-        NetworkVO network = _ntwkDao.findById(networkId);
-        if (network == null) {
-            throw new InvalidParameterValueException("Couldn't find network by id");
-        }
-        //perform below validation if the network is vpc network
-        if (network.getVpcId() != null && ntwkOffId != null) {
-            Vpc vpc = getVpc(network.getVpcId());
-            validateNtkwOffForVpc(ntwkOffId, null, null, null, vpc, networkId, null);
-        }
-        
-        return _ntwkSvc.updateGuestNetwork(networkId, name, displayText, callerAccount, callerUser, domainSuffix,
-                ntwkOffId, changeCidr, guestVmCidr);
-    }
+    
 
     @Override
     public List<HypervisorType> getSupportedVpcHypervisors() {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/server/src/com/cloud/network/vpc/VpcOfferingVO.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/VpcOfferingVO.java b/server/src/com/cloud/network/vpc/VpcOfferingVO.java
index dce7a81..9d5becf 100644
--- a/server/src/com/cloud/network/vpc/VpcOfferingVO.java
+++ b/server/src/com/cloud/network/vpc/VpcOfferingVO.java
@@ -102,7 +102,6 @@ public class VpcOfferingVO implements VpcOffering {
         return name;
     }
 
-    @Override
     public String getUniqueName() {
         return uniqueName;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/server/src/com/cloud/network/vpc/VpcVO.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/VpcVO.java b/server/src/com/cloud/network/vpc/VpcVO.java
index 634df05..7b784eb 100644
--- a/server/src/com/cloud/network/vpc/VpcVO.java
+++ b/server/src/com/cloud/network/vpc/VpcVO.java
@@ -26,9 +26,7 @@ import javax.persistence.Enumerated;
 import javax.persistence.Id;
 import javax.persistence.Table;
 
-import org.apache.cloudstack.api.Identity;
 import com.cloud.utils.db.GenericDao;
-import org.apache.cloudstack.api.InternalIdentity;
 
 @Entity
 @Table(name="vpc")
@@ -94,11 +92,6 @@ public class VpcVO implements Vpc {
         this.networkDomain = networkDomain;
         this.vpcOfferingId = vpcOffId;
     }
-    
-    @Override
-    public boolean readyToUse() {
-        return state == State.Enabled;
-    }
 
     @Override
     public long getId() {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/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 b926519..c578965 100644
--- a/server/test/com/cloud/network/MockNetworkModelImpl.java
+++ b/server/test/com/cloud/network/MockNetworkModelImpl.java
@@ -844,4 +844,10 @@ public class MockNetworkModelImpl extends ManagerBase implements NetworkModel {
         // TODO Auto-generated method stub
         return null;
     }
+
+    @Override
+    public boolean isProviderEnabledInZone(long zoneId, String provider) {
+        // TODO Auto-generated method stub
+        return false;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/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 b05e8ea..e1534cb 100644
--- a/server/test/com/cloud/vpc/MockNetworkModelImpl.java
+++ b/server/test/com/cloud/vpc/MockNetworkModelImpl.java
@@ -857,4 +857,10 @@ public class MockNetworkModelImpl extends ManagerBase implements NetworkModel {
         return null;
     }
 
+    @Override
+    public boolean isProviderEnabledInZone(long zoneId, String provider) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/server/test/com/cloud/vpc/MockVpcManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vpc/MockVpcManagerImpl.java b/server/test/com/cloud/vpc/MockVpcManagerImpl.java
index e6c6520..0f26928 100644
--- a/server/test/com/cloud/vpc/MockVpcManagerImpl.java
+++ b/server/test/com/cloud/vpc/MockVpcManagerImpl.java
@@ -47,15 +47,11 @@ import com.cloud.network.vpc.StaticRoute;
 import com.cloud.network.vpc.Vpc;
 import com.cloud.network.vpc.VpcGateway;
 import com.cloud.network.vpc.VpcManager;
-import com.cloud.network.vpc.VpcOffering;
 import com.cloud.network.vpc.VpcService;
 import com.cloud.offering.NetworkOffering;
 import com.cloud.user.Account;
-import com.cloud.user.User;
 import com.cloud.utils.Pair;
-import com.cloud.utils.component.Manager;
 import com.cloud.utils.component.ManagerBase;
-import com.cloud.vm.DomainRouterVO;
 import com.cloud.vpc.dao.MockVpcDaoImpl;
 
 @Component
@@ -63,19 +59,6 @@ import com.cloud.vpc.dao.MockVpcDaoImpl;
 public class MockVpcManagerImpl extends ManagerBase implements VpcManager {
     @Inject MockVpcDaoImpl _vpcDao;
 
-    /* (non-Javadoc)
-     * @see com.cloud.network.vpc.VpcService#getVpcOffering(long)
-     */
-    @Override
-    public VpcOffering getVpcOffering(long vpcOfferingId) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public VpcOffering createVpcOffering(String name, String displayText, List<String> supportedServices, Map<String, List<String>> serviceProviders) {
-        return null;
-    }
 
     /* (non-Javadoc)
      * @see com.cloud.network.vpc.VpcService#getVpc(long)
@@ -105,42 +88,6 @@ public class MockVpcManagerImpl extends ManagerBase implements VpcManager {
     }
 
     /* (non-Javadoc)
-     * @see com.cloud.network.vpc.VpcService#getVpcOffSvcProvidersMap(long)
-     */
-    @Override
-    public Map<Service, Set<Provider>> getVpcOffSvcProvidersMap(long vpcOffId) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    /* (non-Javadoc)
-     * @see com.cloud.network.vpc.VpcService#listVpcOfferings(java.lang.Long, java.lang.String, java.lang.String, java.util.List, java.lang.Boolean, java.lang.String, java.lang.String, java.lang.Long, java.lang.Long)
-     */
-    @Override
-    public List<? extends VpcOffering> listVpcOfferings(Long id, String name, String displayText, List<String> supportedServicesStr, Boolean isDefault, String keyword, String state, Long startIndex, Long pageSizeVal) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    /* (non-Javadoc)
-     * @see com.cloud.network.vpc.VpcService#deleteVpcOffering(long)
-     */
-    @Override
-    public boolean deleteVpcOffering(long offId) {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-    /* (non-Javadoc)
-     * @see com.cloud.network.vpc.VpcService#updateVpcOffering(long, java.lang.String, java.lang.String, java.lang.String)
-     */
-    @Override
-    public VpcOffering updateVpcOffering(long vpcOffId, String vpcOfferingName, String displayText, String state) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    /* (non-Javadoc)
      * @see com.cloud.network.vpc.VpcService#createVpc(long, long, long, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
      */
     @Override
@@ -314,19 +261,6 @@ public class MockVpcManagerImpl extends ManagerBase implements VpcManager {
     }
 
     /* (non-Javadoc)
-     * @see com.cloud.network.vpc.VpcService#updateVpcGuestNetwork(long, java.lang.String, java.lang.String, com.cloud.user.Account, com.cloud.user.User, java.lang.String, java.lang.Long, java.lang.Boolean)
-     */
-
-    /* (non-Javadoc)
-     * @see com.cloud.network.vpc.VpcManager#validateNtkwOffForVpc(long, java.lang.String, java.lang.String, com.cloud.user.Account, com.cloud.network.vpc.Vpc, java.lang.Long, java.lang.String)
-     */
-    @Override
-    public void validateNtkwOffForVpc(long ntwkOffId, String cidr, String networkDomain, Account networkOwner, Vpc vpc, Long networkId, String gateway) {
-        // TODO Auto-generated method stub
-
-    }
-
-    /* (non-Javadoc)
      * @see com.cloud.network.vpc.VpcManager#getVpcsForAccount(long)
      */
     @Override
@@ -344,34 +278,13 @@ public class MockVpcManagerImpl extends ManagerBase implements VpcManager {
         return false;
     }
 
-    /* (non-Javadoc)
-     * @see com.cloud.network.vpc.VpcManager#getVpcRouters(long)
-     */
-    @Override
-    public List<DomainRouterVO> getVpcRouters(long vpcId) {
-        // TODO Auto-generated method stub
-        return null;
-    }
 
-    @Override
-    public boolean vpcProviderEnabledInZone(long zoneId, String provider) {
-        return false;
-    }
-
-    /* (non-Javadoc)
-     * @see com.cloud.network.vpc.VpcManager#getPrivateGatewayForVpc(long)
-     */
-    @Override
-    public VpcGateway getPrivateGatewayForVpc(long vpcId) {
-        // TODO Auto-generated method stub
-        return null;
-    }
 
     /* (non-Javadoc)
      * @see com.cloud.network.vpc.VpcManager#ipUsedInVpc(com.cloud.network.IpAddress)
      */
     @Override
-    public boolean ipUsedInVpc(IpAddress ip) {
+    public boolean isIpAllocatedToVpc(IpAddress ip) {
         // TODO Auto-generated method stub
         return false;
     }
@@ -458,11 +371,16 @@ public class MockVpcManagerImpl extends ManagerBase implements VpcManager {
         return null;
     }
 
-	@Override
-	public Network updateVpcGuestNetwork(long networkId, String name,  String displayText, Account callerAccount, User callerUser,
-			String domainSuffix, Long ntwkOffId, Boolean changeCidr,	String guestVmCidr) {
-		// TODO Auto-generated method stub
-		return null;
-	}
+    @Override
+    public Map<Service, Set<Provider>> getVpcOffSvcProvidersMap(long vpcOffId) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public void validateNtwkOffForNtwkInVpc(Long networkId, long newNtwkOffId, String newCidr, String newNetworkDomain, Vpc vpc, String gateway, Account networkOwner) {
+        // TODO Auto-generated method stub
+        
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java b/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java
index 0b47d1d..ef5478b 100644
--- a/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java
+++ b/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java
@@ -396,4 +396,10 @@ VpcVirtualNetworkApplianceService {
         return false;
     }
 
+    @Override
+    public List<DomainRouterVO> getVpcRouters(long vpcId) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf72aa32/server/test/com/cloud/vpc/VpcApiUnitTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vpc/VpcApiUnitTest.java b/server/test/com/cloud/vpc/VpcApiUnitTest.java
index 8e64ab1..d4d5b29 100644
--- a/server/test/com/cloud/vpc/VpcApiUnitTest.java
+++ b/server/test/com/cloud/vpc/VpcApiUnitTest.java
@@ -30,38 +30,13 @@ import org.junit.runner.RunWith;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
-import com.cloud.configuration.dao.ConfigurationDaoImpl;
-import com.cloud.configuration.dao.ResourceCountDaoImpl;
-import com.cloud.dc.dao.VlanDaoImpl;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.network.Network.Service;
-import com.cloud.network.dao.FirewallRulesDaoImpl;
-import com.cloud.network.dao.IPAddressDaoImpl;
-import com.cloud.network.dao.PhysicalNetworkDaoImpl;
-import com.cloud.network.dao.Site2SiteVpnGatewayDaoImpl;
 import com.cloud.network.vpc.Vpc;
-import com.cloud.network.vpc.VpcManager;
 import com.cloud.network.vpc.VpcManagerImpl;
-import com.cloud.network.vpc.dao.PrivateIpDaoImpl;
-import com.cloud.network.vpc.dao.StaticRouteDaoImpl;
-import com.cloud.network.vpc.dao.VpcGatewayDaoImpl;
-import com.cloud.network.vpc.dao.VpcOfferingDaoImpl;
-import com.cloud.server.ManagementService;
-import com.cloud.tags.dao.ResourceTagsDaoImpl;
 import com.cloud.user.AccountVO;
-import com.cloud.user.MockAccountManagerImpl;
-import com.cloud.user.dao.AccountDaoImpl;
 import com.cloud.utils.component.ComponentContext;
 
-import com.cloud.vm.dao.DomainRouterDaoImpl;
-import com.cloud.vpc.dao.MockNetworkDaoImpl;
-import com.cloud.vpc.dao.MockNetworkOfferingDaoImpl;
-import com.cloud.vpc.dao.MockNetworkOfferingServiceMapDaoImpl;
-import com.cloud.vpc.dao.MockNetworkServiceMapDaoImpl;
-import com.cloud.vpc.dao.MockVpcDaoImpl;
-import com.cloud.vpc.dao.MockVpcOfferingDaoImpl;
-import com.cloud.vpc.dao.MockVpcOfferingServiceMapDaoImpl;
-
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(locations = "classpath:/VpcTestContext.xml")
 public class VpcApiUnitTest extends TestCase{
@@ -180,7 +155,7 @@ public class VpcApiUnitTest extends TestCase{
         //1) correct network offering
         boolean result = false;
         try {
-            _vpcService.validateNtkwOffForVpc(1, "0.0.0.0", "111-", new AccountVO(), _vpcService.getVpc(1), 2L, "10.1.1.1");
+            _vpcService.validateNtwkOffForNtwkInVpc(2L, 1, "0.0.0.0", "111-", _vpcService.getVpc(1), "10.1.1.1", new AccountVO());
             result = true;
             s_logger.debug("Validate network offering: Test passed: the offering is valid for vpc creation");
         } catch (Exception ex) {
@@ -191,7 +166,7 @@ public class VpcApiUnitTest extends TestCase{
         result = false;
         String msg = null;
         try {
-            _vpcService.validateNtkwOffForVpc(2, "0.0.0.0", "111-", new AccountVO(), _vpcService.getVpc(1), 2L, "10.1.1.1");
+            _vpcService.validateNtwkOffForNtwkInVpc(2L, 2, "0.0.0.0", "111-", _vpcService.getVpc(1), "10.1.1.1", new AccountVO());
             result = true;
         } catch (InvalidParameterValueException ex) {
             msg = ex.getMessage();
@@ -207,7 +182,7 @@ public class VpcApiUnitTest extends TestCase{
         result = false;
         msg = null;
         try {
-            _vpcService.validateNtkwOffForVpc(3, "0.0.0.0", "111-", new AccountVO(), _vpcService.getVpc(1), 2L, "10.1.1.1");
+            _vpcService.validateNtwkOffForNtwkInVpc(2L, 3, "0.0.0.0", "111-", _vpcService.getVpc(1), "10.1.1.1", new AccountVO());
             result = true;
         } catch (InvalidParameterValueException ex) {
             msg = ex.getMessage();
@@ -222,7 +197,7 @@ public class VpcApiUnitTest extends TestCase{
         //4) invalid offering - guest type shared
         result = false;
         try {
-            _vpcService.validateNtkwOffForVpc(4, "0.0.0.0", "111-", new AccountVO(), _vpcService.getVpc(1), 2L, "10.1.1.1");
+            _vpcService.validateNtwkOffForNtwkInVpc(2L, 4, "0.0.0.0", "111-", _vpcService.getVpc(1), "10.1.1.1", new AccountVO());
             result = true;
         } catch (InvalidParameterValueException ex) {
             msg = ex.getMessage();
@@ -237,7 +212,7 @@ public class VpcApiUnitTest extends TestCase{
         //5) Invalid offering - no redundant router support
         result = false;
         try {
-            _vpcService.validateNtkwOffForVpc(5, "0.0.0.0", "111-", new AccountVO(), _vpcService.getVpc(1), 2L, "10.1.1.1");
+            _vpcService.validateNtwkOffForNtwkInVpc(2L, 5, "0.0.0.0", "111-", _vpcService.getVpc(1), "10.1.1.1", new AccountVO());
             result = true;
         } catch (InvalidParameterValueException ex) {
             msg = ex.getMessage();
@@ -252,7 +227,7 @@ public class VpcApiUnitTest extends TestCase{
         //6) Only one network in the VPC can support LB service - negative scenario
         result = false;
         try {
-            _vpcService.validateNtkwOffForVpc(6, "0.0.0.0", "111-", new AccountVO(), _vpcService.getVpc(1), 2L, "10.1.1.1");
+            _vpcService.validateNtwkOffForNtwkInVpc(2L, 6, "0.0.0.0", "111-", _vpcService.getVpc(1), "10.1.1.1", new AccountVO());
             result = true;
             s_logger.debug("Validate network offering: Test passed: the offering is valid for vpc creation");
         } catch (InvalidParameterValueException ex) {


[32/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
marvin-nose: include the plugin as part of marvin install

No need to register the plugin seperately now. The installer will
register with nose's entry_point automatically.

Signed-off-by: Prasanna Santhanam <ts...@apache.org>


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

Branch: refs/heads/kvm-vnc-listen
Commit: 9c755e11e5067bfbc14581a3a3fac9b5b7fd21a1
Parents: 2e2046f
Author: Prasanna Santhanam <ts...@apache.org>
Authored: Sat Mar 23 20:25:21 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Tue Apr 2 18:31:29 2013 +0530

----------------------------------------------------------------------
 tools/marvin/marvin/setup.py |   52 ---------------------------------
 tools/marvin/setup.py        |   58 +++++++++++++++++++++++--------------
 2 files changed, 36 insertions(+), 74 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9c755e11/tools/marvin/marvin/setup.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/setup.py b/tools/marvin/marvin/setup.py
deleted file mode 100644
index 07ff5b5..0000000
--- a/tools/marvin/marvin/setup.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# 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
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-# 
-#   http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-import os
-try:
-    from setuptools import setup, find_packages
-except ImportError:
-    from distribute_setup import use_setuptools
-    use_setuptools()
-    from setuptools import setup, find_packages
-
-
-def read(fname):
-    return open(os.path.join(os.path.dirname(__file__), fname)).read().strip()
-
-VERSION = '0.1.0'
-
-setup(
-    name = "marvin-nose",
-    version = VERSION,
-    author = "Prasanna Santhanam",
-    author_email = "Prasanna.Santhanam@citrix.com",
-    description = "Run tests written using CloudStack's Marvin testclient",
-    license = 'ASL 2.0',
-    classifiers = [
-        "Intended Audience :: Developers",
-        "Topic :: Software Development :: Testing",
-        "Programming Language :: Python",
-        ],
-
-    py_modules = ['marvinPlugin'],
-    zip_safe = False,
-    
-    entry_points = {
-        'nose.plugins': ['marvinPlugin = marvinPlugin:MarvinPlugin']
-        },
-    install_requires = ['nose', 'marvin'],
-)

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9c755e11/tools/marvin/setup.py
----------------------------------------------------------------------
diff --git a/tools/marvin/setup.py b/tools/marvin/setup.py
index f8198d7..ab5eb6f 100644
--- a/tools/marvin/setup.py
+++ b/tools/marvin/setup.py
@@ -16,27 +16,41 @@
 # specific language governing permissions and limitations
 # under the License.
 
-from setuptools import setup
-from sys import version
-import sys
+try:
+    from setuptools import setup, find_packages
+except ImportError:
+    from distribute_setup import use_setuptools
+    use_setuptools()
+    from setuptools import setup, find_packages
+
+VERSION = '0.1.0'
+
+import os
+def read(fname):
+    return open(os.path.join(os.path.dirname(__file__), fname)).read().strip()
 
 setup(name="Marvin",
-      version="0.1.0",
-      description="Marvin - Python client for testing cloudstack",
-      author="Edison Su",
-      author_email="Edison.Su@citrix.com",
-      maintainer="Prasanna Santhanam",
-      maintainer_email="Prasanna.Santhanam@citrix.com",
-      long_description="Marvin is the cloudstack testclient written around the python unittest framework",
-      platforms=("Any",),
-      url="http://jenkins.cloudstack.org:8080/job/marvin",
-      packages=["marvin", "marvin.cloudstackAPI", "marvin.integration",
-                "marvin.integration.lib", "marvin.sandbox",
-                "marvin.sandbox.advanced", "marvin.sandbox.basic"],
-      license="LICENSE.txt",
-      install_requires=[
-          "mysql-connector-python",
-          "paramiko",
-          "nose"
-      ],
-     )
+    version=VERSION,
+    description="Marvin - Python client for Apache CloudStack",
+    author="Edison Su",
+    author_email="Edison.Su@citrix.com",
+    maintainer="Prasanna Santhanam",
+    maintainer_email="Prasanna.Santhanam@citrix.com",
+    long_description="Marvin is the Apache CloudStack python client written around the unittest framework",
+    platforms=("Any",),
+    url="https://builds.apache.org/view/CloudStack/job/cloudstack-marvin/",
+    packages=["marvin", "marvin.cloudstackAPI", "marvin.integration",
+              "marvin.integration.lib", "marvin.sandbox",
+              "marvin.sandbox.advanced", "marvin.sandbox.basic"],
+    license="LICENSE.txt",
+    install_requires=[
+        "mysql-connector-python",
+        "paramiko",
+        "nose"
+    ],
+    py_modules=['marvin.marvinPlugin'],
+    zip_safe=False,
+    entry_points={
+        'nose.plugins': ['marvinPlugin = marvin.marvinPlugin:MarvinPlugin']
+    },
+)


[17/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
git: Add debian packaging files to .gitignore


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

Branch: refs/heads/kvm-vnc-listen
Commit: 45eb9fdf8bf0e721555921464c239e9f3af03c37
Parents: 44a0fac
Author: Wido den Hollander <wi...@42on.com>
Authored: Sun Mar 31 17:02:08 2013 +0200
Committer: Wido den Hollander <wi...@42on.com>
Committed: Sun Mar 31 17:02:08 2013 +0200

----------------------------------------------------------------------
 .gitignore |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/45eb9fdf/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 15f7f91..f418628 100644
--- a/.gitignore
+++ b/.gitignore
@@ -75,3 +75,11 @@ docs/runbook/tmp
 docs/runbook/publish
 .project
 Gemfile.lock
+debian/tmp
+debian/files
+debian/cloudstack-*/*
+debian/*.substvars
+debian/*.debhelper
+replace.properties.tmp
+build-indep-stamp
+configure-stamp


[29/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
fix CLOUDSTACK-1700


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

Branch: refs/heads/kvm-vnc-listen
Commit: 4edef1fd305891beb5393b722e96f4a140934f9f
Parents: dedec16
Author: Mice Xia <mi...@tcloudcomputing.com>
Authored: Tue Apr 2 17:24:49 2013 +0800
Committer: Mice Xia <mi...@tcloudcomputing.com>
Committed: Tue Apr 2 17:36:51 2013 +0800

----------------------------------------------------------------------
 .../xen/resource/CitrixResourceBase.java           |   12 +++++++++++-
 server/src/com/cloud/api/ApiResponseHelper.java    |    1 +
 .../cloud/vm/snapshot/VMSnapshotManagerImpl.java   |    8 ++++++--
 3 files changed, 18 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4edef1fd/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
index d2f3f69..c50f13c 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
@@ -262,6 +262,7 @@ import com.xensource.xenapi.SR;
 import com.xensource.xenapi.Session;
 import com.xensource.xenapi.Task;
 import com.xensource.xenapi.Types;
+import com.xensource.xenapi.Types.BadAsyncResult;
 import com.xensource.xenapi.Types.BadServerResponse;
 import com.xensource.xenapi.Types.ConsoleProtocol;
 import com.xensource.xenapi.Types.IpConfigurationMode;
@@ -6452,7 +6453,16 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
             success = true;
             return new CreateVMSnapshotAnswer(cmd, cmd.getTarget(), cmd.getVolumeTOs());
         } catch (Exception e) {
-            String msg = e.getMessage();
+            String msg = "";
+            if(e instanceof BadAsyncResult){
+                String licenseKeyWord = "LICENCE_RESTRICTION";
+                BadAsyncResult errorResult = (BadAsyncResult)e;
+                if(errorResult.shortDescription != null && errorResult.shortDescription.contains(licenseKeyWord)){
+                    msg = licenseKeyWord;
+                }
+            }else{
+                msg = e.getMessage();
+            }
             s_logger.error("Creating VM Snapshot " + cmd.getTarget().getSnapshotName() + " failed due to: " + msg);
             return new CreateVMSnapshotAnswer(cmd, false, msg);
         } finally {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4edef1fd/server/src/com/cloud/api/ApiResponseHelper.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java
index d350de2..64be7f8 100755
--- a/server/src/com/cloud/api/ApiResponseHelper.java
+++ b/server/src/com/cloud/api/ApiResponseHelper.java
@@ -446,6 +446,7 @@ public class ApiResponseHelper implements ResponseGenerator {
             vmSnapshotResponse.setParentName(ApiDBUtils.getVMSnapshotById(vmSnapshot.getParent()).getDisplayName());
         vmSnapshotResponse.setCurrent(vmSnapshot.getCurrent());
         vmSnapshotResponse.setType(vmSnapshot.getType().toString());
+        vmSnapshotResponse.setObjectName("vmsnapshot");
         return vmSnapshotResponse;
     }
     

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4edef1fd/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java b/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
index 12a0597..638be6c 100644
--- a/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
+++ b/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
@@ -367,9 +367,13 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana
                 processAnswer(vmSnapshot, userVm, answer, hostId);
                 s_logger.debug("Create vm snapshot " + vmSnapshot.getName() + " succeeded for vm: " + userVm.getInstanceName());
             }else{
-                String errMsg = answer.getDetails();
-                s_logger.error("Agent reports creating vm snapshot " + vmSnapshot.getName() + " failed for vm: " + userVm.getInstanceName() + " due to " + errMsg);
+                
+                String errMsg = "Creating VM snapshot: " + vmSnapshot.getName() + " failed";
+                if(answer != null && answer.getDetails() != null)
+                    errMsg = errMsg + " due to " + answer.getDetails();
+                s_logger.error(errMsg);
                 vmSnapshotStateTransitTo(vmSnapshot, VMSnapshot.Event.OperationFailed);
+                throw new CloudRuntimeException(errMsg);
             }
             return vmSnapshot;
         } catch (Exception e) {


[34/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
simulator: removing cyclic dependency from simulator

The database creator caused a cyclic dependecny in the simulator which
is removed with this commit. Additionally the simulator profile is now
merged with developer profile and a test for server health is included


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

Branch: refs/heads/kvm-vnc-listen
Commit: 7ee602beaf85643c643d878e52f77e8c9bbcabb1
Parents: 8e917b1
Author: Prasanna Santhanam <ts...@apache.org>
Authored: Sun Mar 10 21:07:29 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Tue Apr 2 18:31:29 2013 +0530

----------------------------------------------------------------------
 client/pom.xml                            |   25 +--
 client/tomcatconf/componentContext.xml.in |  428 +++++++++++++++---------
 pom.xml                                   |  230 ++++----------
 3 files changed, 327 insertions(+), 356 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7ee602be/client/pom.xml
----------------------------------------------------------------------
diff --git a/client/pom.xml b/client/pom.xml
index 61cda76..7565029 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -67,16 +67,6 @@
     </dependency>
     <dependency>
       <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-syslog-alerts</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-snmp-alerts</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
       <artifactId>cloud-plugin-network-ovs</artifactId>
       <version>${project.version}</version>
     </dependency>
@@ -101,6 +91,11 @@
       <version>${project.version}</version>
     </dependency>
     <dependency>
+      <groupId>org.apache.cloudstack</groupId>
+      <artifactId>cloud-plugin-hypervisor-ucs</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
        <groupId>org.apache.cloudstack</groupId>
        <artifactId>cloud-plugin-hypervisor-ovm</artifactId>
        <version>${project.version}</version>
@@ -224,16 +219,6 @@
       <artifactId>cloud-plugin-hypervisor-simulator</artifactId>
       <version>${project.version}</version>
     </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-hypervisor-ucs</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>org.apache.cloudstack</groupId>
-        <artifactId>cloud-plugin-storage-volume-default</artifactId>
-        <version>${project.version}</version>
-    </dependency>
   </dependencies>
   <build>
     <defaultGoal>install</defaultGoal>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7ee602be/client/tomcatconf/componentContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/componentContext.xml.in b/client/tomcatconf/componentContext.xml.in
index fea1d0f..d5714ea 100644
--- a/client/tomcatconf/componentContext.xml.in
+++ b/client/tomcatconf/componentContext.xml.in
@@ -30,192 +30,286 @@
                       http://www.springframework.org/schema/context
                       http://www.springframework.org/schema/context/spring-context-3.0.xsd">                     
 
+
   <!--
-    OSS deployment component configuration
+      Compose a CloudStack deployment with selected components here
   -->
   <bean id="databaseUpgradeChecker" class="com.cloud.upgrade.DatabaseUpgradeChecker" />
-  <bean id="configurationDaoImpl" class="com.cloud.configuration.dao.ConfigurationDaoImpl" />
+  <bean id="encryptionSecretKeyChecker" class="com.cloud.utils.crypt.EncryptionSecretKeyChecker" />
+
+  <bean id="managementServerImpl" class ="com.cloud.server.ManagementServerImpl" />
+  <bean id="configurationServerImpl" class="com.cloud.server.ConfigurationServerImpl" />
+
+  <bean id="clusterManagerImpl" class="com.cloud.cluster.ClusterManagerImpl" />
+  <bean id="clusteredAgentManagerImpl" class="com.cloud.agent.manager.ClusteredAgentManagerImpl" />
+  <bean id="clusteredVirtualMachineManagerImpl" class="com.cloud.vm.ClusteredVirtualMachineManagerImpl" />
+  <bean id="highAvailabilityManagerExtImpl" class="com.cloud.ha.HighAvailabilityManagerExtImpl" />
+  <bean id="userVmManagerImpl" class="com.cloud.vm.UserVmManagerImpl" />
+  <bean id="consoleProxyManagerImpl" class="com.cloud.consoleproxy.ConsoleProxyManagerImpl" />
+  <bean id="securityGroupManagerImpl2" class="com.cloud.network.security.SecurityGroupManagerImpl2" />
+  <bean id="premiumSecondaryStorageManagerImpl" class="com.cloud.secstorage.PremiumSecondaryStorageManagerImpl" />
+  <bean id="userVmDaoImpl" class="com.cloud.vm.dao.UserVmDaoImpl" />
+  <bean id="ipv6AddressManagerImpl" class="com.cloud.network.Ipv6AddressManagerImpl" />
+
+  <bean id="apiRateLimitServiceImpl" class="org.apache.cloudstack.ratelimit.ApiRateLimitServiceImpl"/>
+  <bean id="BaremetalManager" class="com.cloud.baremetal.manager.BaremetalManagerImpl"/>
+  <bean id="BaremetalDhcpManager" class="com.cloud.baremetal.networkservice.BaremetalDhcpManagerImpl"/>
+  <bean id="BaremetalKickStartPxeService" class="com.cloud.baremetal.networkservice.BaremetalKickStartServiceImpl"/>
+  <bean id="BaremetalPingPxeService" class="com.cloud.baremetal.networkservice.BareMetalPingServiceImpl" />
+  <bean id="BaremetalPxeManager" class="com.cloud.baremetal.networkservice.BaremetalPxeManagerImpl" />
+  <bean id="UcsManager" class="com.cloud.ucs.manager.UcsManagerImpl" />
+  <bean id="UcsBladeDao" class="com.cloud.ucs.database.UcsBladeDaoImpl" />
+  <bean id="UcsManagerDao" class="com.cloud.ucs.database.UcsManagerDaoImpl" />
+
+
+  <!--
+      Network Elements
+  -->
+  <bean id="Ovs" class="com.cloud.network.element.OvsElement">
+    <property name="name" value="Ovs"/>
+  </bean>
+  <bean id="BareMetalDhcp" class="com.cloud.baremetal.networkservice.BaremetalDhcpElement">
+      <property name="name" value="BareMetalDhcp"/>
+  </bean>
+  <bean id="BareMetalPxe" class="com.cloud.baremetal.networkservice.BaremetalPxeElement">
+      <property name="name" value="BareMetalPxe"/>
+  </bean>
+  <bean id="BareMetalUserdata" class="com.cloud.baremetal.networkservice.BaremetalUserdataElement">
+      <property name="name" value="BareMetalUserdata"/>
+  </bean>
+  <bean id="SecurityGroupProvider" class="com.cloud.network.element.SecurityGroupElement">
+    <property name="name" value="SecurityGroupProvider"/>
+  </bean>
+  <bean id="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement">
+    <property name="name" value="VirtualRouter"/>
+  </bean>
+  <bean id="VpcVirtualRouter" class="com.cloud.network.element.VpcVirtualRouterElement">
+    <property name="name" value="VpcVirtualRouter"/>
+  </bean>
+  <!--
+  <bean id="NiciraNvp" class="com.cloud.network.element.NiciraNvpElement">
+    <property name="name" value="NiciraNvp"/>
+  </bean>
+  -->
   
-  <!-- 
-    Managers & pluggable adapters configuration under OSS deployment
+<!--
+  <bean id="BigSwitchVnsElementService" class="com.cloud.network.element.BigSwitchVnsElement">
+    <property name="name" value="BigSwitchVnsElementService"/>
+  </bean>
+-->
+
+  <!--
+     Adapters
   -->
-  <bean id="accountManagerImpl" class="com.cloud.user.AccountManagerImpl" >
-    <property name="UserAuthenticators">
-      <list>
-          <ref bean="MD5UserAuthenticator"/>
-          <ref bean="LDAPUserAuthenticator"/>
-      </list>
-    </property>
-    <property name="SecurityCheckers">
-      <list>
-          <ref bean="domainChecker"/>
-      </list>
-    </property>
+  <bean id="FirstFitRouting" class="com.cloud.agent.manager.allocator.impl.FirstFitRoutingAllocator">
+    <property name="name" value="FirstFitRouting"/>
   </bean>
   
-  <bean id="managementServerImpl" class ="com.cloud.server.ManagementServerImpl">
-    <property name="UserAuthenticators">
-      <list>
-          <ref bean="MD5UserAuthenticator"/>
-          <ref bean="LDAPUserAuthenticator"/>
-      </list>
-    </property>
-    <property name="HostAllocators">
-      <list>
-          <ref bean="FirstFitRouting"/>
-      </list>
-    </property>
-  </bean>
-
-  <bean id="storageManagerImpl" class="com.cloud.storage.StorageManagerImpl">
-    <property name="StoragePoolAllocators">
-      <list>
-          <ref bean="LocalStoragePoolAllocator"/>
-          <ref bean="clusterScopeStoragePoolAllocator"/>
-          <ref bean="zoneWideStoragePoolAllocator"/>
-          <ref bean="garbageCollectingStoragePoolAllocator"/>
-      </list>
-    </property>
+  <bean id="hypervisorTemplateAdapter" class="com.cloud.template.HypervisorTemplateAdapter">
+    <property name="name" value="HypervisorAdapter"/>
+  </bean>
+
+   <bean id="bareMetalTemplateAdapter" class="com.cloud.baremetal.BareMetalTemplateAdapter">
+    <property name="name" value="BareMetalAdapter"/>
+  </bean>
+
+  <!--
+    Storage pool allocators
+  -->
+
+  <bean id="LocalStoragePoolAllocator" class="org.apache.cloudstack.storage.allocator.LocalStoragePoolAllocator">
+    <property name="name" value="LocalStorage"/>
+  </bean>
+  <!--
+  <bean id="FirstFitStoragePoolAllocator" class="org.apache.cloudstack.storage.allocator.FirstFitStoragePoolAllocator">
+    <property name="name" value="Storage"/>
+  </bean>
+  -->
+
+  <bean id="UserConcentratedAllocator" class="com.cloud.agent.manager.allocator.impl.UserConcentratedAllocator">
+    <property name="name" value="User First"/>
+  </bean>
+
+  <bean id="ConsoleProxyAllocator" class="com.cloud.consoleproxy.ConsoleProxyBalanceAllocator">
+    <property name="name" value="Balance"/>
+  </bean>
+
+  <bean id="StaticRoleBasedAPIAccessChecker" class="org.apache.cloudstack.acl.StaticRoleBasedAPIAccessChecker"/>
+
+  <bean id="ExteralIpAddressAllocator" class="com.cloud.network.ExteralIpAddressAllocator">
+    <property name="name" value="Basic"/>
+  </bean>
+
+  <bean id="HypervisorTemplateAdapter" class="com.cloud.template.HypervisorTemplateAdapter">
+    <property name="name" value="HypervisorAdapter"/>
+  </bean>
+
+  <bean id="BareMetalTemplateAdapter" class="com.cloud.baremetal.manager.BareMetalTemplateAdapter" >
+    <property name="name" value="BareMetalTemplateAdapter"/>
+  </bean>
+
+  <!--
+    Authenticators
+  -->
+  <bean id="MD5UserAuthenticator" class="com.cloud.server.auth.MD5UserAuthenticator">
+    <property name="name" value="MD5"/>
+  </bean>
+
+  <bean id="LDAPUserAuthenticator" class="com.cloud.server.auth.LDAPUserAuthenticator">
+    <property name="name" value="LDAP"/>
+  </bean>
+
+  <!--
+    Investigators
+  -->
+  <bean id="CheckOnAgentInvestigator" class="com.cloud.ha.CheckOnAgentInvestigator">
+    <property name="name" value="SimpleInvestigator"/>
+  </bean>
+
+  <bean id="XenServerInvestigator" class="com.cloud.ha.XenServerInvestigator">
+    <property name="name" value="XenServerInvestigator"/>
+  </bean>
+
+  <bean id="UserVmDomRInvestigator" class="com.cloud.ha.UserVmDomRInvestigator">
+    <property name="name" value="PingInvestigator"/>
+  </bean>
+
+  <bean id="ManagementIPSystemVMInvestigator" class="com.cloud.ha.ManagementIPSystemVMInvestigator">
+    <property name="name" value="ManagementIPSysVMInvestigator"/>
+  </bean>
+
+  <!--
+    Fencers
+  -->
+  <bean id="XenServerFencer" class="com.cloud.ha.XenServerFencer">
+    <property name="name" value="XenServerFenceBuilder"/>
+  </bean>
+  <bean id="KVMFencer" class="com.cloud.ha.KVMFencer">
+    <property name="name" value="KVMFenceBuilder"/>
+  </bean>
+  <bean id="OvmFencer" class="com.cloud.ovm.hypervisor.OvmFencer">
+    <property name="name" value="OvmFenceBuilder"/>
+  </bean>
+
+  <bean id="XcpServerDiscoverer" class="com.cloud.hypervisor.xen.discoverer.XcpServerDiscoverer">
+    <property name="name" value="XCP Agent"/>
+  </bean>
+
+  <bean id="SecondaryStorageDiscoverer" class="com.cloud.storage.secondary.SecondaryStorageDiscoverer">
+    <property name="name" value="SecondaryStorage"/>
+  </bean>
+
+  <bean id="KvmServerDiscoverer" class="com.cloud.hypervisor.kvm.discoverer.KvmServerDiscoverer">
+    <property name="name" value="KVM Agent"/>
+  </bean>
+
+  <bean id="SimulatorDiscoverer" class="com.cloud.resource.SimulatorDiscoverer">
+    <property name="name" value="Simulator Agent"/>
+  </bean>
+
+
+  <bean id="BareMetalDiscoverer" class="com.cloud.baremetal.manager.BareMetalDiscoverer">
+    <property name="name" value="Bare Metal Agent"/>
+  </bean>
+
+  <bean id="HypervServerDiscoverer" class="com.cloud.hypervisor.hyperv.HypervServerDiscoverer">
+    <property name="name" value="SCVMMServer"/>
+  </bean>
+
+  <bean id="OvmDiscoverer" class="com.cloud.ovm.hypervisor.OvmDiscoverer">
+    <property name="name" value="Ovm Discover"/>
   </bean>
 
   <bean id="FirstFitPlanner" class="com.cloud.deploy.FirstFitPlanner">
     <property name="name" value="First Fit"/>
-    <property name="StoragePoolAllocators">
-      <list>
-          <ref bean="LocalStoragePoolAllocator"/>
-          <ref bean="clusterScopeStoragePoolAllocator"/>
-          <ref bean="zoneWideStoragePoolAllocator"/>
-          <ref bean="garbageCollectingStoragePoolAllocator"/>
-      </list>
-    </property>
-    <property name="HostAllocators">
-      <list>
-          <ref bean="FirstFitRouting"/>
-      </list>
-    </property>
+  </bean>
+
+  <bean id="UserDispersingPlanner" class="com.cloud.deploy.UserDispersingPlanner">
+    <property name="name" value="UserDispersing"/>
   </bean>
   
-  <bean id="resourceManagerImpl" class="com.cloud.resource.ResourceManagerImpl" >
-    <property name="PodAllocators">
-      <list>
-          <ref bean="UserConcentratedAllocator"/>
-      </list>
-    </property>
-    <property name="Discoverers">
-      <list>
-          <ref bean="XcpServerDiscoverer"/>
-          <ref bean="SecondaryStorageDiscoverer"/>
-          <ref bean="KvmServerDiscoverer"/>
-          <ref bean="LxcServerDiscoverer"/>
-          
+  <bean id="UserConcentratedPodPlanner" class="com.cloud.deploy.UserConcentratedPodPlanner">
+    <property name="name" value="UserConcentratedPod"/>
+  </bean>
+
+  <bean id="BareMetalPlanner" class="com.cloud.baremetal.manager.BareMetalPlanner">
+    <property name="name" value="BareMetal Fit"/>
+  </bean>
+
+  <bean id="BaremetalPlannerSelector" class="com.cloud.baremetal.manager.BaremetalPlannerSelector">
+    <property name="name" value="BaremetalPlannerSelector"/>
+  </bean>
+
+  <bean id="HypervisorPlannerSelector" class="com.cloud.deploy.HypervisorVmPlannerSelector">
+    <property name="name" value="HypervisorPlannerSelector"/>
+  </bean>
+
+
   <!--
-          <ref bean="BareMetalDiscoverer"/>
+    Network Gurus
   -->
-          
-          <ref bean="OvmDiscoverer"/>
-       </list>
-    </property>
-  </bean>
-
-  <bean id="highAvailabilityManagerExtImpl" class="com.cloud.ha.HighAvailabilityManagerExtImpl" >
-    <property name="Investigators">
-      <list>
-          <ref bean="CheckOnAgentInvestigator"/>
-          <ref bean="XenServerInvestigator"/>
-          <ref bean="UserVmDomRInvestigator"/>
-          <ref bean="ManagementIPSystemVMInvestigator"/>
-      </list>
-    </property>
-    <property name="FenceBuilders">
-      <list>
-          <ref bean="XenServerFencer"/>
-          <ref bean="KVMFencer"/>
-          <ref bean="OvmFencer"/>
-      </list>
-    </property>
-  </bean>
-
-  <bean id="clusteredVirtualMachineManagerImpl" class="com.cloud.vm.ClusteredVirtualMachineManagerImpl" >
-    <property name="HostAllocators">
-      <list>
-          <ref bean="FirstFitRouting"/>
-      </list>
-    </property>
-    <property name="Planners">
-      <list>
-          <ref bean="FirstFitPlanner" />
-          <ref bean="UserDispersingPlanner" />
-          <ref bean="UserConcentratedPodPlanner" />
-          
-<!--
-          <ref bean="BareMetalPlanner" />
--->
-    
-      </list>
-    </property>
+  <bean id="StorageNetworkGuru" class="com.cloud.network.guru.StorageNetworkGuru">
+    <property name="name" value="StorageNetworkGuru"/>
+  </bean>
+  <bean id="ExternalGuestNetworkGuru" class="com.cloud.network.guru.ExternalGuestNetworkGuru">
+    <property name="name" value="ExternalGuestNetworkGuru"/>
+  </bean>
+  <bean id="PublicNetworkGuru" class="com.cloud.network.guru.PublicNetworkGuru">
+    <property name="name" value="PublicNetworkGuru"/>
+  </bean>
+  <bean id="PodBasedNetworkGuru" class="com.cloud.network.guru.PodBasedNetworkGuru">
+    <property name="name" value="PodBasedNetworkGuru"/>
+  </bean>
+  <bean id="ControlNetworkGuru" class="com.cloud.network.guru.ControlNetworkGuru">
+    <property name="name" value="ControlNetworkGuru"/>
+  </bean>
+  <bean id="DirectNetworkGuru" class="com.cloud.network.guru.DirectNetworkGuru">
+    <property name="name" value="DirectNetworkGuru"/>
+  </bean>
+  <bean id="DirectPodBasedNetworkGuru" class="com.cloud.network.guru.DirectPodBasedNetworkGuru">
+    <property name="name" value="DirectPodBasedNetworkGuru"/>
+  </bean>
+  <bean id="OvsGuestNetworkGuru" class="com.cloud.network.guru.OvsGuestNetworkGuru">
+    <property name="name" value="OvsGuestNetworkGuru"/>
+  </bean>
+  <bean id="PrivateNetworkGuru" class="com.cloud.network.guru.PrivateNetworkGuru">
+    <property name="name" value="PrivateNetworkGuru"/>
+  </bean>
+  <bean id="NiciraNvpGuestNetworkGuru" class="com.cloud.network.guru.NiciraNvpGuestNetworkGuru">
+    <property name="name" value="NiciraNvpGuestNetworkGuru"/>
   </bean>
   
-  <bean id="networkManagerImpl" class="com.cloud.network.NetworkManagerImpl" >
-    <property name="NetworkGurus">
-      <list>
-          <ref bean="StorageNetworkGuru"/>
-          <ref bean="ExternalGuestNetworkGuru"/>
-          <ref bean="PublicNetworkGuru"/>
-          <ref bean="PodBasedNetworkGuru"/>
-          <ref bean="DirectPodBasedNetworkGuru"/>
-          <ref bean="ControlNetworkGuru"/>
-          <ref bean="DirectNetworkGuru"/>
-          <ref bean="OvsGuestNetworkGuru"/>
-          <ref bean="PrivateNetworkGuru"/>
-      </list>
-    </property>
-    <property name="NetworkElements">
-      <list>
-          <ref bean="VirtualRouter"/>
-          <ref bean="Ovs"/>
-          <ref bean="SecurityGroupProvider"/>
-          <ref bean="VpcVirtualRouter"/>
-<!--          
-          <ref bean="BareMetalDhcp"/>
-          <ref bean="BareMetalPxe"/>
-          <ref bean="BareMetalUserdata"/>
+<!--
+  <bean id="BigSwitchVnsGuestNetworkGuru" class=".BigSwitchVnsGuestNetworkGuru">
+    <property name="name" value="com.cloud.network.guru.BigSwitchVnsGuestNetworkGuru"/>
+  </bean>
 -->
-      </list>
-    </property>
-    <property name="IpDeployers">
-      <list>
-          <ref bean="elasticLoadBalancerElement"/>
-          <ref bean="VirtualRouter"/>
-          <ref bean="VpcVirtualRouter"/>
-      </list>
-    </property>
-    <property name="DhcpProviders">
-      <list>
-          <ref bean="VirtualRouter"/>
-          <ref bean="VpcVirtualRouter"/>
-<!--          
-          <ref bean="BareMetalDhcp"/>
--->    
-      </list>
-    </property>
-  </bean>
-
-  <bean id="networkModelImpl" class="com.cloud.network.NetworkModelImpl">
-    <property name="NetworkElements">
-      <list>
-          <ref bean="VirtualRouter"/>
-          <ref bean="Ovs"/>
-          <ref bean="SecurityGroupProvider"/>
-          <ref bean="VpcVirtualRouter"/>
-<!--          
-          <ref bean="BareMetalDhcp"/>
-          <ref bean="BareMetalPxe"/>
-          <ref bean="BareMetalUserdata"/>
--->    
-      </list>
-    </property>
+
+  <!--
+   Hypervisor Gurus
+  -->
+  <bean id="XenServerGuru" class="com.cloud.hypervisor.XenServerGuru">
+    <property name="name" value="XenServerGuru"/>
   </bean>
   
-  <bean id="GlobalLoadBalancingRulesServiceImpl" class ="org.apache.cloudstack.region.gslb.GlobalLoadBalancingRulesServiceImpl" />
+  <bean id="KVMGuru" class="com.cloud.hypervisor.KVMGuru">
+    <property name="name" value="KVMGuru"/>
+  </bean>
+
+  <bean id="HypervGuru" class="com.cloud.hypervisor.guru.HypervGuru">
+    <property name="name" value="HypervGuru"/>
+  </bean>
+
+  <bean id="OvmGuru" class="com.cloud.ovm.hypervisor.OvmGuru">
+    <property name="name" value="OvmGuru"/>
+  </bean>
+
+  <bean id="SimulatorGuru" class="com.cloud.simulator.SimulatorGuru">
+    <property name="name" value="SimulatorGuru"/>
+  </bean>
+
+  <bean id="BaremetalGuru" class="com.cloud.baremetal.manager.BareMetalGuru">
+    <property name="name" value="BaremetalGuru"/>
+  </bean>
 
 </beans>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7ee602be/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 0393d0c..5e5f624 100644
--- a/pom.xml
+++ b/pom.xml
@@ -174,11 +174,11 @@
 
   <dependencyManagement>
     <dependencies>
-        <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
-            <version>${cs.mysql.version}</version>
-        </dependency>
+      <dependency>
+        <groupId>mysql</groupId>
+        <artifactId>mysql-connector-java</artifactId>
+        <version>${cs.mysql.version}</version>
+      </dependency>
     </dependencies>
   </dependencyManagement>
 
@@ -188,12 +188,12 @@
       <artifactId>junit</artifactId>
       <version>${cs.junit.version}</version>
       <scope>test</scope>
-	</dependency>
-	<dependency>
-	  <groupId>org.springframework</groupId>
-	  <artifactId>spring-core</artifactId>
-	  <version>${org.springframework.version}</version>
-	</dependency>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-core</artifactId>
+      <version>${org.springframework.version}</version>
+    </dependency>
     <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-context</artifactId>
@@ -205,17 +205,17 @@
       <version>${org.springframework.version}</version>
     </dependency>
     <dependency>
-	<groupId>org.mockito</groupId>
-	<artifactId>mockito-all</artifactId>
-	<version>1.9.5</version>
-        <scope>test</scope>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-all</artifactId>
+      <version>1.9.5</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-test</artifactId>
+      <version>${org.springframework.version}</version>
+      <scope>test</scope>
     </dependency>
-	<dependency>
-	  <groupId>org.springframework</groupId>
-	  <artifactId>spring-test</artifactId>
-	  <version>${org.springframework.version}</version>
-	  <scope>test</scope>
-	</dependency>
     <dependency>
       <groupId>org.aspectj</groupId>
       <artifactId>aspectjrt</artifactId>
@@ -227,9 +227,9 @@
       <version>1.7.1</version>
     </dependency>
     <dependency>
-        <groupId>javax.inject</groupId>
-        <artifactId>javax.inject</artifactId>
-        <version>1</version>
+      <groupId>javax.inject</groupId>
+      <artifactId>javax.inject</artifactId>
+      <version>1</version>
     </dependency>
   </dependencies>
 
@@ -260,7 +260,7 @@
                     </goals>
                   </pluginExecutionFilter>
                   <action>
-                    <ignore />
+                    <ignore/>
                   </action>
                 </pluginExecution>
               </pluginExecutions>
@@ -390,41 +390,41 @@
           <configuration>
             <source>${cs.jdk.version}</source>
             <target>${cs.jdk.version}</target>
-			<fork>true</fork>
-		<meminitial>128m</meminitial>
-		<maxmem>512m</maxmem>
-		<compilerArgument>-XDignore.symbol.file=true</compilerArgument>
+            <fork>true</fork>
+            <meminitial>128m</meminitial>
+            <maxmem>512m</maxmem>
+            <compilerArgument>-XDignore.symbol.file=true</compilerArgument>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-jar-plugin</artifactId>
+          <version>2.4</version>
+          <configuration>
+            <archive>
+              <manifest>
+                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
+              </manifest>
+            </archive>
           </configuration>
         </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <version>2.4</version>
-        <configuration>
-          <archive>
-            <manifest>
-              <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
-              <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
-            </manifest>
-          </archive>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>build-helper-maven-plugin</artifactId>
-        <version>1.7</version>
-        <executions>
-          <execution>
-            <id>remove-old-installers</id>
-            <goals>
-              <goal>remove-project-artifact</goal>
-            </goals>
-            <configuration>
-              <removeAll>true</removeAll>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
+        <plugin>
+          <groupId>org.codehaus.mojo</groupId>
+          <artifactId>build-helper-maven-plugin</artifactId>
+          <version>1.7</version>
+          <executions>
+            <execution>
+              <id>remove-old-installers</id>
+              <goals>
+                <goal>remove-project-artifact</goal>
+              </goals>
+              <configuration>
+                <removeAll>true</removeAll>
+              </configuration>
+            </execution>
+          </executions>
+        </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-dependency-plugin</artifactId>
@@ -453,9 +453,9 @@
     </profile>
     <profile>
       <id>developer</id>
-        <properties>
-            <marvin.config>tools/devcloud/devcloud.cfg</marvin.config>
-        </properties>
+      <properties>
+        <marvin.config>tools/devcloud/devcloud.cfg</marvin.config>
+      </properties>
       <modules>
         <module>developer</module>
         <module>tools</module>
@@ -472,113 +472,5 @@
         <module>vmware-base</module>
       </modules>
     </profile>
-    <profile>
-          <id>simulator</id>
-          <activation>
-              <property>
-                  <name>deploydb-simulator</name>
-              </property>
-          </activation>
-          <build>
-              <plugins>
-                  <plugin>
-                      <groupId>org.codehaus.mojo</groupId>
-                      <artifactId>properties-maven-plugin</artifactId>
-                      <version>1.0-alpha-2</version>
-                      <executions>
-                          <execution>
-                              <phase>initialize</phase>
-                              <goals>
-                                  <goal>read-project-properties</goal>
-                              </goals>
-                              <configuration>
-                                  <files>
-                                      <file>${project.basedir}/utils/conf/db.properties</file>
-                                      <file>${project.basedir}/utils/conf/db.properties.override</file>
-                                  </files>
-                                  <quiet>true</quiet>
-                              </configuration>
-                          </execution>
-                      </executions>
-                  </plugin>
-                  <!-- DatabaseCreator driver here -->
-                  <plugin>
-                      <groupId>org.codehaus.mojo</groupId>
-                      <artifactId>exec-maven-plugin</artifactId>
-                      <version>1.2.1</version>
-                      <dependencies>
-                          <!-- specify the dependent jdbc driver here -->
-                          <dependency>
-                              <groupId>mysql</groupId>
-                              <artifactId>mysql-connector-java</artifactId>
-                              <version>${cs.mysql.version}</version>
-                          </dependency>
-                          <dependency>
-                              <groupId>commons-dbcp</groupId>
-                              <artifactId>commons-dbcp</artifactId>
-                              <version>${cs.dbcp.version}</version>
-                          </dependency>
-                          <dependency>
-                              <groupId>commons-pool</groupId>
-                              <artifactId>commons-pool</artifactId>
-                              <version>${cs.pool.version}</version>
-                          </dependency>
-                          <dependency>
-                              <groupId>org.jasypt</groupId>
-                              <artifactId>jasypt</artifactId>
-                              <version>${cs.jasypt.version}</version>
-                          </dependency>
-                          <dependency>
-                              <groupId>org.apache.cloudstack</groupId>
-                              <artifactId>cloud-utils</artifactId>
-                              <version>${project.version}</version>
-                          </dependency>
-                          <dependency>
-                              <groupId>org.apache.cloudstack</groupId>
-                              <artifactId>cloud-server</artifactId>
-                              <version>${project.version}</version>
-                          </dependency>
-                      </dependencies>
-                      <executions>
-                          <execution>
-                              <phase>process-resources</phase>
-                              <id>create-schema</id>
-                              <goals>
-                                  <goal>java</goal>
-                              </goals>
-                          </execution>
-                      </executions>
-                      <configuration>
-                          <includeProjectDependencies>false</includeProjectDependencies>
-                          <includePluginDependencies>true</includePluginDependencies>
-                          <executableDependency>
-                              <groupId>org.apache.cloudstack</groupId>
-                              <artifactId>cloud-server</artifactId>
-                          </executableDependency>
-                          <mainClass>com.cloud.upgrade.DatabaseCreator</mainClass>
-                          <arguments>
-                              <!-- db properties file -->
-                              <argument>${project.basedir}/utils/conf/db.properties</argument>
-                              <argument>${project.basedir}/utils/conf/db.properties.override</argument>
-                              <!-- simulator sql files -->
-                              <argument>${basedir}/target/db/create-schema-simulator.sql</argument>
-                              <argument>${basedir}/target/db/templates.simulator.sql</argument>
-                              <!-- database upgrade-->
-                              <argument>com.cloud.upgrade.DatabaseUpgradeChecker</argument>
-                              <argument>--database=simulator</argument>
-                              <argument>--rootpassword=${db.root.password}</argument>
-                              <!-- enable verbosity by -v or dash-dash-verbose -->
-                          </arguments>
-                          <systemProperties>
-                              <systemProperty>
-                                  <key>catalina.home</key>
-                                  <value>${project.basedir}/utils</value>
-                              </systemProperty>
-                          </systemProperties>
-                      </configuration>
-                  </plugin>
-              </plugins>
-          </build>
-      </profile>
   </profiles>
 </project>


[15/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
debian: Update the init script for the management server

Signed-off-by: Wido den Hollander <wi...@42on.com>


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

Branch: refs/heads/kvm-vnc-listen
Commit: bc1ce57c9b75029399b8842c7bd4818c3465ee3e
Parents: 29baacd
Author: Wido den Hollander <wi...@42on.com>
Authored: Sat Mar 30 20:09:56 2013 +0100
Committer: Wido den Hollander <wi...@42on.com>
Committed: Sun Mar 31 14:16:31 2013 +0200

----------------------------------------------------------------------
 packaging/debian/init/cloud-management |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bc1ce57c/packaging/debian/init/cloud-management
----------------------------------------------------------------------
diff --git a/packaging/debian/init/cloud-management b/packaging/debian/init/cloud-management
index 69a0428..3ebaa73 100755
--- a/packaging/debian/init/cloud-management
+++ b/packaging/debian/init/cloud-management
@@ -19,7 +19,7 @@
 # specific language governing permissions and limitations
 # under the License.
 ### BEGIN INIT INFO
-# Provides:          tomcat-vmops
+# Provides:          cloudstack-management
 # Required-Start:    $local_fs $remote_fs $network
 # Required-Stop:     $local_fs $remote_fs $network
 # Should-Start:      $named
@@ -34,7 +34,7 @@ PATH=/bin:/usr/bin:/sbin:/usr/sbin
 NAME=cloudstack-management
 DESC="CloudStack-specific Tomcat servlet engine"
 DAEMON=/usr/bin/jsvc
-CATALINA_HOME=/usr/share/cloudstack/management
+CATALINA_HOME=/usr/share/cloudstack-management
 DEFAULT=/etc/cloudstack/management/tomcat6.conf
 JVM_TMP=/tmp/$NAME-temp
 
@@ -65,7 +65,7 @@ TOMCAT6_USER=tomcat6
 
 # The first existing directory is used for JAVA_HOME (if JAVA_HOME is not
 # defined in $DEFAULT)
-JDK_DIRS="/usr/lib/jvm/java-1.6.0-openjdk-amd64/ /usr/lib/jvm/java-1.6.0-openjdk-i386/ /usr/lib/jvm/java-1.6.0-openjdk/ /usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-sun"
+JDK_DIRS="/usr/lib/jvm/java-7-openjdk-amd64 /usr/lib/jvm/java-7-openjdk-i386 /usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-openjdk-i386 /usr/lib/jvm/java-6-openjdk-amd64 /usr/lib/jvm/java-6-sun"
 
 # Look for the right JVM to use
 for jdir in $JDK_DIRS; do
@@ -76,7 +76,7 @@ done
 export JAVA_HOME
 
 # Directory for per-instance configuration files and webapps
-CATALINA_BASE=/usr/share/cloudstack/management
+CATALINA_BASE=/usr/share/cloudstack-management
 
 # Use the Java security manager? (yes/no)
 TOMCAT6_SECURITY=no


[16/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
debian: Include jasypt in the cloudstack-common package

This is required for the cloud-install-sys-tmplt installer.

Signed-off-by: Wido den Hollander <wi...@42on.com>


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

Branch: refs/heads/kvm-vnc-listen
Commit: 29baacd12062a9d9dedb4b0b8828a6e273e71dca
Parents: 5a16e70
Author: Wido den Hollander <wi...@42on.com>
Authored: Sat Mar 30 16:32:08 2013 +0100
Committer: Wido den Hollander <wi...@42on.com>
Committed: Sun Mar 31 14:16:31 2013 +0200

----------------------------------------------------------------------
 debian/cloudstack-common.install                  |    1 +
 debian/rules                                      |    3 +++
 scripts/storage/secondary/cloud-install-sys-tmplt |    2 +-
 3 files changed, 5 insertions(+), 1 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/29baacd1/debian/cloudstack-common.install
----------------------------------------------------------------------
diff --git a/debian/cloudstack-common.install b/debian/cloudstack-common.install
index 9677f87..021474e 100644
--- a/debian/cloudstack-common.install
+++ b/debian/cloudstack-common.install
@@ -26,6 +26,7 @@
 /usr/share/cloudstack-common/scripts/vm/hypervisor/kvm/*
 /usr/share/cloudstack-common/scripts/vm/hypervisor/versions.sh
 /usr/share/cloudstack-common/scripts/vm/hypervisor/xenserver/*
+/usr/share/cloudstack-common/lib/*
 /usr/bin/cloud-set-guest-password
 /usr/bin/cloud-set-guest-sshkey
 /usr/lib/python2.?/*-packages/*

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/29baacd1/debian/rules
----------------------------------------------------------------------
diff --git a/debian/rules b/debian/rules
index 3804d8d..907cdcd 100755
--- a/debian/rules
+++ b/debian/rules
@@ -116,6 +116,7 @@ install:
 	mkdir -p $(DESTDIR)/usr/share/$(PACKAGE)-common
 	mkdir $(DESTDIR)/usr/share/$(PACKAGE)-common/scripts
 	mkdir $(DESTDIR)/usr/share/$(PACKAGE)-common/setup
+	mkdir $(DESTDIR)/usr/share/$(PACKAGE)-common/lib
 	cp -r scripts/installer $(DESTDIR)/usr/share/$(PACKAGE)-common/scripts
 	cp -r scripts/network $(DESTDIR)/usr/share/$(PACKAGE)-common/scripts
 	cp -r scripts/storage $(DESTDIR)/usr/share/$(PACKAGE)-common/scripts
@@ -127,6 +128,8 @@ install:
 	install -D client/target/utilities/bin/cloud-setup-databases $(DESTDIR)/usr/bin
 	install -D client/target/utilities/bin/cloud-setup-management $(DESTDIR)/usr/bin
 	install -D client/target/cloud-client-ui-$(VERSION)-SNAPSHOT/WEB-INF/classes/vms/systemvm.iso $(DESTDIR)/usr/share/$(PACKAGE)-common/vms/systemvm.iso
+	# We need jasypt for cloud-install-sys-tmplt, so this is a nasty hack to get it into the right place
+	install -D agent/target/dependencies/jasypt-1.9.0.jar $(DESTDIR)/usr/share/$(PACKAGE)-common/lib
 
 	# cloudstack-python
 	mkdir -p $(DESTDIR)/usr/lib/python2.7/dist-packages

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/29baacd1/scripts/storage/secondary/cloud-install-sys-tmplt
----------------------------------------------------------------------
diff --git a/scripts/storage/secondary/cloud-install-sys-tmplt b/scripts/storage/secondary/cloud-install-sys-tmplt
index 2172b28..bcdc4c4 100755
--- a/scripts/storage/secondary/cloud-install-sys-tmplt
+++ b/scripts/storage/secondary/cloud-install-sys-tmplt
@@ -40,7 +40,7 @@ DISKSPACE=5120000  #free disk space required in kilobytes
 dbHost=
 dbUser=
 dbPassword=
-jasypt='/usr/share/java/jasypt-1.9.0.jar'
+jasypt='/usr/share/cloudstack-common/lib/jasypt-1.9.0.jar'
 while getopts 'm:h:f:u:Ft:e:s:o:r:d' OPTION
 do
   case $OPTION in


[09/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
CLOUDSTACK-1746: fix logging warning in usage server


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

Branch: refs/heads/kvm-vnc-listen
Commit: f8471e545f41dd3c57fd65f9be9c2b3f25dba4ab
Parents: 5782abf
Author: Kelven Yang <ke...@gmail.com>
Authored: Fri Mar 29 13:44:12 2013 -0700
Committer: Kelven Yang <ke...@gmail.com>
Committed: Fri Mar 29 13:44:12 2013 -0700

----------------------------------------------------------------------
 usage/src/com/cloud/usage/UsageServer.java |   17 ++++++++++++++---
 1 files changed, 14 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f8471e54/usage/src/com/cloud/usage/UsageServer.java
----------------------------------------------------------------------
diff --git a/usage/src/com/cloud/usage/UsageServer.java b/usage/src/com/cloud/usage/UsageServer.java
index 881962f..3f2b43e 100644
--- a/usage/src/com/cloud/usage/UsageServer.java
+++ b/usage/src/com/cloud/usage/UsageServer.java
@@ -17,12 +17,14 @@
 package com.cloud.usage;
 
 import java.io.File;
+import java.io.FileNotFoundException;
 
 import org.apache.log4j.Logger;
 import org.apache.log4j.PropertyConfigurator;
 import org.apache.log4j.xml.DOMConfigurator;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.springframework.util.Log4jConfigurer;
 
 import com.cloud.utils.PropertiesUtil;
 import com.cloud.utils.component.ComponentContext;
@@ -75,12 +77,21 @@ public class UsageServer {
     static private void initLog4j() {
     	File file = PropertiesUtil.findConfigFile("log4j-cloud.xml");
     	if (file != null) {
-        s_logger.info("log4j configuration found at " + file.getAbsolutePath());
-        DOMConfigurator.configureAndWatch(file.getAbsolutePath());
+	        System.out.println("log4j configuration found at " + file.getAbsolutePath());
+	        try {
+				Log4jConfigurer.initLogging(file.getAbsolutePath());
+			} catch (FileNotFoundException e) {
+			}
+	        DOMConfigurator.configureAndWatch(file.getAbsolutePath());
+	        
 	    } else {
 	        file = PropertiesUtil.findConfigFile("log4j-cloud.properties");
 	        if (file != null) {
-	            s_logger.info("log4j configuration found at " + file.getAbsolutePath());
+		        System.out.println("log4j configuration found at " + file.getAbsolutePath());
+		        try {
+					Log4jConfigurer.initLogging(file.getAbsolutePath());
+				} catch (FileNotFoundException e) {
+				}
 	            PropertyConfigurator.configureAndWatch(file.getAbsolutePath());
 	        }
 	    }


[18/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
Cloudstack-1739

Signed-off-by: Abhinandan Prateek <ap...@apache.org>


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

Branch: refs/heads/kvm-vnc-listen
Commit: 7a3a1c792a0c263ccde74e6156afaa57470b2847
Parents: 45eb9fd
Author: Bharat Kumar <bh...@citrix.com>
Authored: Fri Mar 29 17:14:59 2013 +0530
Committer: Abhinandan Prateek <ap...@apache.org>
Committed: Mon Apr 1 10:36:19 2013 +0530

----------------------------------------------------------------------
 .../kvm/resource/LibvirtComputingResource.java     |    4 ++--
 .../hypervisor/kvm/resource/LibvirtVMDef.java      |    4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7a3a1c79/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index 6852e2c..7b70b62 100755
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -3066,8 +3066,8 @@ ServerResource {
 
         if (vmTO.getMinRam() != vmTO.getMaxRam()){
             grd.setMemBalloning(true);
-            grd.setCurrentMem((int)vmTO.getMinRam()/1024);
-            grd.setMemorySize((int)vmTO.getMaxRam()/1024);
+            grd.setCurrentMem((long)vmTO.getMinRam()/1024);
+            grd.setMemorySize((long)vmTO.getMaxRam()/1024);
         }
         else{
             grd.setMemorySize(vmTO.getMaxRam() / 1024);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7a3a1c79/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
index c93aeeb..3d896a7 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
@@ -113,7 +113,7 @@ public class LibvirtVMDef {
 
     public static class GuestResourceDef {
         private long _mem;
-        private int _currentMem = -1;
+        private long _currentMem = -1;
         private String _memBacking;
         private int _vcpu = -1;
         private boolean _memBalloning= false;
@@ -122,7 +122,7 @@ public class LibvirtVMDef {
             _mem = mem;
         }
 
-        public void setCurrentMem(int currMem) {
+        public void setCurrentMem(long currMem) {
             _currentMem = currMem;
         }
 


[33/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
removing unused commented dependencies

removing the spring related dependencies that were commented out.

Signed-off-by: Prasanna Santhanam <ts...@apache.org>


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

Branch: refs/heads/kvm-vnc-listen
Commit: 8e917b1ad3c0d3076b0c6425ea3318a6d6dd5c25
Parents: 009749f
Author: Prasanna Santhanam <ts...@apache.org>
Authored: Tue Mar 5 11:48:16 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Tue Apr 2 18:31:29 2013 +0530

----------------------------------------------------------------------
 plugins/pom.xml |    3 +-
 pom.xml         |  354 ++++++++++++++++++++++++++++++--------------------
 2 files changed, 215 insertions(+), 142 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8e917b1a/plugins/pom.xml
----------------------------------------------------------------------
diff --git a/plugins/pom.xml b/plugins/pom.xml
index d7e8deb..348ffa2 100755
--- a/plugins/pom.xml
+++ b/plugins/pom.xml
@@ -16,7 +16,8 @@
   KIND, either express or implied. See the License for the
   specific language governing permissions and limitations
   under the License.
---><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <artifactId>cloudstack-plugins</artifactId>
   <name>Apache CloudStack Plugin POM</name>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8e917b1a/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index dab3db2..0393d0c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,15 +1,23 @@
-<!-- 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 regarding copyright ownership. The ASF licenses this file to 
-  you under the Apache License, Version 2.0 (the "License"); you may not use 
-  this file except in compliance with the License. You may obtain a copy of 
-  the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-  by applicable law or agreed to in writing, software distributed under the 
-  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific 
-  language governing permissions and limitations under the License. -->
+<!--
+  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
+  regarding copyright ownership. The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License. You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied. See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
@@ -26,8 +34,8 @@
   <description>Apache CloudStack is an IaaS (“Infrastracture as a Service”) cloud orchestration platform.</description>
   <url>http://www.cloudstack.org</url>
   <scm>
-    <connection>scm:git:https://git-wip-us.apache.org/repos/asf/cloudstack.git</connection>
-    <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/cloudstack.git</developerConnection>
+    <connection>scm:git:https://git-wip-us.apache.org/repos/asf/incubator-cloudstack.git</connection>
+    <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/incubator-cloudstack.git</developerConnection>
   </scm>
   <issueManagement>
     <system>jira</system>
@@ -35,7 +43,7 @@
   </issueManagement>
 
   <properties>
-    <!--skipTests>true</skipTests -->
+    <!--skipTests>true</skipTests-->
     <cs.jdk.version>1.6</cs.jdk.version>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 
@@ -84,7 +92,6 @@
     <cs.java-ipv6.version>0.10</cs.java-ipv6.version>
     <cs.replace.properties>build/replace.properties</cs.replace.properties>
     <cs.libvirt-java.version>0.4.9</cs.libvirt-java.version>
-    <cs.target.dir>target</cs.target.dir>
   </properties>
 
   <distributionManagement>
@@ -99,49 +106,40 @@
   <mailingLists>
     <mailingList>
       <name>Apache CloudStack User List</name>
-      <subscribe>users-subscribe@cloudstack.apache.org</subscribe>
-      <unsubscribe>users-unsubscribe@cloudstack.apache.org</unsubscribe>
-      <post>users@cloudstack.apache.org</post>
-      <archive>http://mail-archives.apache.org/mod_mbox/cloudstack-users</archive>
-      <otherArchives>
-        <otherArchive>http://mail-archives.apache.org/mod_mbox/incubator-cloudstack-users</otherArchive>
-      </otherArchives>
+      <subscribe>cloudstack-users-subscribe@incubator.apache.org</subscribe>
+      <unsubscribe>cloudstack-users-unsubscribe@incubator.apache.org</unsubscribe>
+      <post>cloudstack-users@incubator.apache.org</post>
+      <archive>http://mail-archives.apache.org/mod_mbox/incubator-cloudstack-users</archive>
     </mailingList>
     <mailingList>
       <name>Apache CloudStack Developer List</name>
-      <subscribe>dev-subscribe@cloudstack.apache.org</subscribe>
-      <unsubscribe>dev-unsubscribe@cloudstack.apache.org</unsubscribe>
-      <post>dev@cloudstack.apache.org</post>
-      <archive>http://mail-archives.apache.org/mod_mbox/cloudstack-dev</archive>
-      <otherArchives>
-        <otherArchive>http://mail-archives.apache.org/mod_mbox/incubator-cloudstack-dev</otherArchive>
-      </otherArchives>
+      <subscribe>cloudstack-dev-subscribe@incubator.apache.org</subscribe>
+      <unsubscribe>cloudstack-dev-unsubscribe@incubator.apache.org</unsubscribe>
+      <post>cloudstack-dev@incubator.apache.org</post>
+      <archive>http://mail-archives.apache.org/mod_mbox/incubator-cloudstack-dev</archive>
     </mailingList>
     <mailingList>
       <name>Apache CloudStack Commits List</name>
-      <subscribe>commits-subscribe@cloudstack.apache.org</subscribe>
-      <unsubscribe>commits-unsubscribe@cloudstack.apache.org</unsubscribe>
-      <post>commits@cloudstack.apache.org</post>
-      <archive>http://mail-archives.apache.org/mod_mbox/cloudstack-commits</archive>
-      <otherArchives>
-        <otherArchive>http://mail-archives.apache.org/mod_mbox/incubator-cloudstack-commits</otherArchive>
-      </otherArchives>
+      <subscribe>cloudstack-commits-subscribe@incubator.apache.org</subscribe>
+      <unsubscribe>cloudstack-commits-unsubscribe@incubator.apache.org</unsubscribe>
+      <post>cloudstack-commits@incubator.apache.org</post>
+      <archive>http://mail-archives.apache.org/mod_mbox/incubator-cloudstack-commits</archive>
     </mailingList>
   </mailingLists>
 
   <developers>
     <developer>
       <name>The Apache CloudStack Team</name>
-      <email>dev@cloudstack.apache.org</email>
-      <url>http://cloudstack.apache.org/</url>
+      <email>cloudstack-dev@incubator.apache.org</email>
+      <url>http://incubator.apache.org/projects/cloudstack.html</url>
       <organization>Apache Software Foundation</organization>
       <organizationUrl>http://apache.org/</organizationUrl>
     </developer>
   </developers>
 
   <ciManagement>
-    <system>Jenkins</system>
-    <url>http://builds.apache.org/</url>
+    <system>Jenkin</system>
+    <url>http://jenkins.cloudstack.org/</url>
   </ciManagement>
 
   <licenses>
@@ -176,11 +174,11 @@
 
   <dependencyManagement>
     <dependencies>
-      <dependency>
-        <groupId>mysql</groupId>
-        <artifactId>mysql-connector-java</artifactId>
-        <version>${cs.mysql.version}</version>
-      </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>${cs.mysql.version}</version>
+        </dependency>
     </dependencies>
   </dependencyManagement>
 
@@ -190,12 +188,12 @@
       <artifactId>junit</artifactId>
       <version>${cs.junit.version}</version>
       <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.springframework</groupId>
-      <artifactId>spring-core</artifactId>
-      <version>${org.springframework.version}</version>
-    </dependency>
+	</dependency>
+	<dependency>
+	  <groupId>org.springframework</groupId>
+	  <artifactId>spring-core</artifactId>
+	  <version>${org.springframework.version}</version>
+	</dependency>
     <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-context</artifactId>
@@ -206,36 +204,18 @@
       <artifactId>spring-web</artifactId>
       <version>${org.springframework.version}</version>
     </dependency>
-    <!-- <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> 
-      <version>${org.springframework.version}</version> </dependency> <dependency> 
-      <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> 
-      <version>${org.springframework.version}</version> </dependency> <dependency> 
-      <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> 
-      <version>${org.springframework.version}</version> </dependency> <dependency> 
-      <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> 
-      <version>${org.springframework.version}</version> </dependency> <dependency> 
-      <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> 
-      <version>${org.springframework.version}</version> </dependency> <dependency> 
-      <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> 
-      <version>${org.springframework.version}</version> </dependency> <dependency> 
-      <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> 
-      <version>${org.springframework.version}</version> </dependency> <dependency> 
-      <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> 
-      <version>${org.springframework.version}</version> </dependency> <dependency> 
-      <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> 
-      <version>${org.springframework.version}</version> </dependency> -->
     <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-all</artifactId>
-      <version>1.9.5</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.springframework</groupId>
-      <artifactId>spring-test</artifactId>
-      <version>${org.springframework.version}</version>
-      <scope>test</scope>
+	<groupId>org.mockito</groupId>
+	<artifactId>mockito-all</artifactId>
+	<version>1.9.5</version>
+        <scope>test</scope>
     </dependency>
+	<dependency>
+	  <groupId>org.springframework</groupId>
+	  <artifactId>spring-test</artifactId>
+	  <version>${org.springframework.version}</version>
+	  <scope>test</scope>
+	</dependency>
     <dependency>
       <groupId>org.aspectj</groupId>
       <artifactId>aspectjrt</artifactId>
@@ -247,19 +227,17 @@
       <version>1.7.1</version>
     </dependency>
     <dependency>
-      <groupId>javax.inject</groupId>
-      <artifactId>javax.inject</artifactId>
-      <version>1</version>
+        <groupId>javax.inject</groupId>
+        <artifactId>javax.inject</artifactId>
+        <version>1</version>
     </dependency>
   </dependencies>
 
   <build>
     <defaultGoal>install</defaultGoal>
-    <outputDirectory>${basedir}/${cs.target.dir}/classes</outputDirectory>
-    <testOutputDirectory>${basedir}/${cs.target.dir}/test-classes</testOutputDirectory>
     <pluginManagement>
       <plugins>
-        <!--This plugin's configuration is used to store Eclipse m2e settings 
+        <!--This plugin's configuration is used to store Eclipse m2e settings
           only. It has no influence on the Maven build itself. -->
         <plugin>
           <groupId>org.eclipse.m2e</groupId>
@@ -282,7 +260,7 @@
                     </goals>
                   </pluginExecutionFilter>
                   <action>
-                    <ignore/>
+                    <ignore />
                   </action>
                 </pluginExecution>
               </pluginExecutions>
@@ -340,9 +318,11 @@
               <exclude>dist/console-proxy/js/jquery.js</exclude>
               <exclude>scripts/vm/systemvm/id_rsa.cloud</exclude>
               <exclude>tools/devcloud/basebuild/puppet-devcloudinitial/files/network.conf</exclude>
-              <exclude>tools/appliance/definitions/devcloud/*</exclude>
-              <exclude>tools/appliance/definitions/systemvmtemplate/*</exclude>
-              <exclude>tools/appliance/definitions/systemvmtemplate64/*</exclude>
+              <exclude>tools/appliance/definitions/systemvmtemplate/base.sh</exclude>
+              <exclude>tools/appliance/definitions/systemvmtemplate/cleanup.sh</exclude>
+              <exclude>tools/appliance/definitions/systemvmtemplate/definition.rb</exclude>
+              <exclude>tools/appliance/definitions/systemvmtemplate/preseed.cfg</exclude>
+              <exclude>tools/appliance/definitions/systemvmtemplate/zerodisk.sh</exclude>
               <exclude>tools/cli/cloudmonkey.egg-info/*</exclude>
               <exclude>tools/devcloud/src/deps/boxes/basebox-build/definition.rb</exclude>
               <exclude>tools/devcloud/src/deps/boxes/basebox-build/preseed.cfg</exclude>
@@ -410,41 +390,41 @@
           <configuration>
             <source>${cs.jdk.version}</source>
             <target>${cs.jdk.version}</target>
-            <fork>true</fork>
-            <meminitial>128m</meminitial>
-            <maxmem>512m</maxmem>
-            <compilerArgument>-XDignore.symbol.file=true</compilerArgument>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-jar-plugin</artifactId>
-          <version>2.4</version>
-          <configuration>
-            <archive>
-              <manifest>
-                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
-                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
-              </manifest>
-            </archive>
+			<fork>true</fork>
+		<meminitial>128m</meminitial>
+		<maxmem>512m</maxmem>
+		<compilerArgument>-XDignore.symbol.file=true</compilerArgument>
           </configuration>
         </plugin>
-        <plugin>
-          <groupId>org.codehaus.mojo</groupId>
-          <artifactId>build-helper-maven-plugin</artifactId>
-          <version>1.7</version>
-          <executions>
-            <execution>
-              <id>remove-old-installers</id>
-              <goals>
-                <goal>remove-project-artifact</goal>
-              </goals>
-              <configuration>
-                <removeAll>true</removeAll>
-              </configuration>
-            </execution>
-          </executions>
-        </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <version>2.4</version>
+        <configuration>
+          <archive>
+            <manifest>
+              <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+              <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
+            </manifest>
+          </archive>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>build-helper-maven-plugin</artifactId>
+        <version>1.7</version>
+        <executions>
+          <execution>
+            <id>remove-old-installers</id>
+            <goals>
+              <goal>remove-project-artifact</goal>
+            </goals>
+            <configuration>
+              <removeAll>true</removeAll>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-dependency-plugin</artifactId>
@@ -472,32 +452,16 @@
       </modules>
     </profile>
     <profile>
-      <id>eclipse</id>
-      <properties>
-        <cs.target.dir>target-eclipse</cs.target.dir>
-      </properties>
-    </profile>
-    <profile> 
       <id>developer</id>
-      <properties>
-        <marvin.config>tools/devcloud/devcloud.cfg</marvin.config>
-      </properties>
+        <properties>
+            <marvin.config>tools/devcloud/devcloud.cfg</marvin.config>
+        </properties>
       <modules>
         <module>developer</module>
         <module>tools</module>
       </modules>
     </profile>
     <profile>
-      <id>impatient</id>
-      <properties>
-        <marvin.config>tools/devcloud/devcloud.cfg</marvin.config>
-      </properties>
-      <modules>
-        <module>developer</module>
-        <!--module>tools/devcloud</module-->
-      </modules>
-    </profile>
-    <profile>
       <id>vmware</id>
       <activation>
         <property>
@@ -508,5 +472,113 @@
         <module>vmware-base</module>
       </modules>
     </profile>
+    <profile>
+          <id>simulator</id>
+          <activation>
+              <property>
+                  <name>deploydb-simulator</name>
+              </property>
+          </activation>
+          <build>
+              <plugins>
+                  <plugin>
+                      <groupId>org.codehaus.mojo</groupId>
+                      <artifactId>properties-maven-plugin</artifactId>
+                      <version>1.0-alpha-2</version>
+                      <executions>
+                          <execution>
+                              <phase>initialize</phase>
+                              <goals>
+                                  <goal>read-project-properties</goal>
+                              </goals>
+                              <configuration>
+                                  <files>
+                                      <file>${project.basedir}/utils/conf/db.properties</file>
+                                      <file>${project.basedir}/utils/conf/db.properties.override</file>
+                                  </files>
+                                  <quiet>true</quiet>
+                              </configuration>
+                          </execution>
+                      </executions>
+                  </plugin>
+                  <!-- DatabaseCreator driver here -->
+                  <plugin>
+                      <groupId>org.codehaus.mojo</groupId>
+                      <artifactId>exec-maven-plugin</artifactId>
+                      <version>1.2.1</version>
+                      <dependencies>
+                          <!-- specify the dependent jdbc driver here -->
+                          <dependency>
+                              <groupId>mysql</groupId>
+                              <artifactId>mysql-connector-java</artifactId>
+                              <version>${cs.mysql.version}</version>
+                          </dependency>
+                          <dependency>
+                              <groupId>commons-dbcp</groupId>
+                              <artifactId>commons-dbcp</artifactId>
+                              <version>${cs.dbcp.version}</version>
+                          </dependency>
+                          <dependency>
+                              <groupId>commons-pool</groupId>
+                              <artifactId>commons-pool</artifactId>
+                              <version>${cs.pool.version}</version>
+                          </dependency>
+                          <dependency>
+                              <groupId>org.jasypt</groupId>
+                              <artifactId>jasypt</artifactId>
+                              <version>${cs.jasypt.version}</version>
+                          </dependency>
+                          <dependency>
+                              <groupId>org.apache.cloudstack</groupId>
+                              <artifactId>cloud-utils</artifactId>
+                              <version>${project.version}</version>
+                          </dependency>
+                          <dependency>
+                              <groupId>org.apache.cloudstack</groupId>
+                              <artifactId>cloud-server</artifactId>
+                              <version>${project.version}</version>
+                          </dependency>
+                      </dependencies>
+                      <executions>
+                          <execution>
+                              <phase>process-resources</phase>
+                              <id>create-schema</id>
+                              <goals>
+                                  <goal>java</goal>
+                              </goals>
+                          </execution>
+                      </executions>
+                      <configuration>
+                          <includeProjectDependencies>false</includeProjectDependencies>
+                          <includePluginDependencies>true</includePluginDependencies>
+                          <executableDependency>
+                              <groupId>org.apache.cloudstack</groupId>
+                              <artifactId>cloud-server</artifactId>
+                          </executableDependency>
+                          <mainClass>com.cloud.upgrade.DatabaseCreator</mainClass>
+                          <arguments>
+                              <!-- db properties file -->
+                              <argument>${project.basedir}/utils/conf/db.properties</argument>
+                              <argument>${project.basedir}/utils/conf/db.properties.override</argument>
+                              <!-- simulator sql files -->
+                              <argument>${basedir}/target/db/create-schema-simulator.sql</argument>
+                              <argument>${basedir}/target/db/templates.simulator.sql</argument>
+                              <!-- database upgrade-->
+                              <argument>com.cloud.upgrade.DatabaseUpgradeChecker</argument>
+                              <argument>--database=simulator</argument>
+                              <argument>--rootpassword=${db.root.password}</argument>
+                              <!-- enable verbosity by -v or dash-dash-verbose -->
+                          </arguments>
+                          <systemProperties>
+                              <systemProperty>
+                                  <key>catalina.home</key>
+                                  <value>${project.basedir}/utils</value>
+                              </systemProperty>
+                          </systemProperties>
+                      </configuration>
+                  </plugin>
+              </plugins>
+          </build>
+      </profile>
   </profiles>
 </project>


[20/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
Mulitiple ip address per nic support for advacned shared networks

Description:
Changes added for supporting multiple ip address per nic for shared networks

Testing Done:
Tested adding and removing the ip for nic using the APIs


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

Branch: refs/heads/kvm-vnc-listen
Commit: 8dd0b7747b2da1aa71110e871b0bd4ffdbcdfcb4
Parents: 355589c
Author: Jayapal Reddy <ja...@citrix.com>
Authored: Mon Apr 1 16:22:12 2013 +0530
Committer: Murali Reddy <mu...@citrix.com>
Committed: Mon Apr 1 16:24:48 2013 +0530

----------------------------------------------------------------------
 .../src/com/cloud/network/NetworkServiceImpl.java  |   24 ++++++++-------
 1 files changed, 13 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8dd0b774/server/src/com/cloud/network/NetworkServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java
index d503459..4eb620c 100755
--- a/server/src/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/com/cloud/network/NetworkServiceImpl.java
@@ -490,6 +490,9 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
         accountId = network.getAccountId();
         domainId = network.getDomainId();
 
+        // Validate network offering
+        NetworkOfferingVO ntwkOff = _networkOfferingDao.findById(network.getNetworkOfferingId());
+
         // verify permissions
         _accountMgr.checkAccess(ipOwner, null, true, network);
 
@@ -518,7 +521,7 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
             } catch (InsufficientAddressCapacityException e) {
                 throw new InvalidParameterValueException("Allocating guest ip for nic failed");
             }
-        } else if (dc.getNetworkType() == NetworkType.Basic) {
+        } else if (dc.getNetworkType() == NetworkType.Basic || ntwkOff.getGuestType()  == Network.GuestType.Shared) {
             Account caller = UserContext.current().getCaller();
             long callerUserId = UserContext.current().getCallerUserId();
             _accountMgr.checkAccess(caller, AccessType.UseNetwork, false, network);
@@ -546,14 +549,6 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
                 s_logger.error("Allocating ip to guest nic " + nicId + " failed");
                 return null;
             }
-        } else if (isSharedNetworkOfferingWithServices(network.getNetworkOfferingId()) && zone.getNetworkType() == NetworkType.Advanced) {
-            // if shared network in the advanced zone, then check the caller against the network for 'AccessType.UseNetwork'
-            Account caller = UserContext.current().getCaller();
-            long callerUserId = UserContext.current().getCallerUserId();
-            _accountMgr.checkAccess(caller, AccessType.UseNetwork, false, network);
-            if (s_logger.isDebugEnabled()) {
-                s_logger.debug("Associate IP address called by the user " + callerUserId + " account " + ipOwner.getId());
-            }
         } else {
             s_logger.error("AddIpToVMNic is not supported in this network...");
             return null;
@@ -594,6 +589,13 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
 
         Network network = _networksDao.findById(secIpVO.getNetworkId());
 
+        if (network == null) {
+            throw new InvalidParameterValueException("Invalid network id is given");
+        }
+
+        // Validate network offering
+        NetworkOfferingVO ntwkOff = _networkOfferingDao.findById(network.getNetworkOfferingId());
+
         // verify permissions
         _accountMgr.checkAccess(caller, null, true, network);
 
@@ -627,7 +629,7 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
                 s_logger.debug("VM nic IP " + secondaryIp + " is associated with the static NAT rule public IP address id " + publicIpVO.getId());
                 throw new InvalidParameterValueException("Can' remove the ip " + secondaryIp + "is associate with static NAT rule public IP address id " + publicIpVO.getId());
             }
-        } else if (dc.getNetworkType() == NetworkType.Basic) {
+        } else if (dc.getNetworkType() == NetworkType.Basic || ntwkOff.getGuestType()  == Network.GuestType.Shared) {
             IPAddressVO ip = _ipAddressDao.findByIpAndNetworkId(secIpVO.getNetworkId(), secIpVO.getIp4Address());
             if (ip != null) {
                 Transaction txn = Transaction.currentTxn();
@@ -636,7 +638,7 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
                 _ipAddressDao.unassignIpAddress(ip.getId());
                 txn.commit();
             }
-        } else if (isSharedNetworkOfferingWithServices(network.getNetworkOfferingId()) && dc.getNetworkType() == NetworkType.Advanced) {
+        } else {
             throw new InvalidParameterValueException("Not supported for this network now");
         }
 


[03/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
CLOUDSTACK-1795: implement custom AOP to fully support legacy CloudStack AOP semantcis (rebase fixups)


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

Branch: refs/heads/kvm-vnc-listen
Commit: 8bb09901442d79a7dddf33465bedaccb62190952
Parents: 1621672
Author: Kelven Yang <ke...@gmail.com>
Authored: Tue Mar 26 14:25:52 2013 -0700
Committer: Kelven Yang <ke...@gmail.com>
Committed: Fri Mar 29 11:12:36 2013 -0700

----------------------------------------------------------------------
 client/tomcatconf/applicationContext.xml.in        |   78 ++++++++-------
 client/tomcatconf/componentContext.xml.in          |   15 +++-
 client/tomcatconf/nonossComponentContext.xml.in    |   11 ++
 .../src/com/cloud/network/NetworkServiceImpl.java  |    4 +
 4 files changed, 72 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8bb09901/client/tomcatconf/applicationContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/applicationContext.xml.in b/client/tomcatconf/applicationContext.xml.in
index 608ffc4..3c93b8a 100644
--- a/client/tomcatconf/applicationContext.xml.in
+++ b/client/tomcatconf/applicationContext.xml.in
@@ -177,8 +177,6 @@
   <bean id="autoScaleVmGroupDaoImpl" class="com.cloud.network.as.dao.AutoScaleVmGroupDaoImpl" />
   <bean id="autoScaleVmGroupPolicyMapDaoImpl" class="com.cloud.network.as.dao.AutoScaleVmGroupPolicyMapDaoImpl" />
   <bean id="autoScaleVmProfileDaoImpl" class="com.cloud.network.as.dao.AutoScaleVmProfileDaoImpl" />
-  <bean id="baremetalDhcpDaoImpl" class="com.cloud.baremetal.database.BaremetalDhcpDaoImpl" />
-  <bean id="baremetalPxeDaoImpl" class="com.cloud.baremetal.database.BaremetalPxeDaoImpl" />
   <bean id="capacityDaoImpl" class="com.cloud.capacity.dao.CapacityDaoImpl" />
   <bean id="certificateDaoImpl" class="com.cloud.certificate.dao.CertificateDaoImpl" />
   <bean id="clusterDaoImpl" class="com.cloud.dc.dao.ClusterDaoImpl" />
@@ -382,15 +380,6 @@
   <bean id="Ovs" class="com.cloud.network.element.OvsElement">
     <property name="name" value="Ovs"/>
   </bean>
-  <bean id="BareMetalDhcp" class="com.cloud.baremetal.networkservice.BaremetalDhcpElement">
-    <property name="name" value="BareMetalDhcp"/>
-  </bean>
-  <bean id="BareMetalPxe" class="com.cloud.baremetal.networkservice.BaremetalPxeElement">
-    <property name="name" value="BareMetalPxe"/>
-  </bean>
-  <bean id="BareMetalUserdata" class="com.cloud.baremetal.networkservice.BaremetalUserdataElement">
-      <property name="name" value="BareMetalUserdata"/>
-  </bean>
   <bean id="SecurityGroupProvider" class="com.cloud.network.element.SecurityGroupElement">
     <property name="name" value="SecurityGroupProvider"/>
   </bean>
@@ -455,7 +444,6 @@
     <property name="name" value="Basic"/>
   </bean>
 
-  <bean id="BareMetalTemplateAdapter" class="com.cloud.baremetal.manager.BareMetalTemplateAdapter" />
   <bean id="hyervisorTemplateAdapter" class="com.cloud.template.HyervisorTemplateAdapter" />
   <bean id="clusterAlertAdapter" class="com.cloud.alert.ClusterAlertAdapter" />
   <bean id="consoleProxyAlertAdapter" class="com.cloud.alert.ConsoleProxyAlertAdapter" />
@@ -509,10 +497,6 @@
     <property name="name" value="KVM Agent"/>
   </bean>
 
-  <bean id="BareMetalDiscoverer" class="com.cloud.baremetal.manager.BareMetalDiscoverer">
-    <property name="name" value="Bare Metal Agent"/>
-  </bean>
-
   <bean id="HypervServerDiscoverer" class="com.cloud.hypervisor.hyperv.HypervServerDiscoverer">
     <property name="name" value="SCVMMServer"/>
   </bean>
@@ -536,10 +520,6 @@
     <property name="name" value="UserConcentratedPod"/>
   </bean>
 
-  <bean id="BareMetalPlanner" class="com.cloud.baremetal.manager.BareMetalPlanner">
-    <property name="name" value="BareMetal Fit"/>
-  </bean>
-  
   <bean id="clusterBasedAgentLoadBalancerPlanner" class="com.cloud.cluster.agentlb.ClusterBasedAgentLoadBalancerPlanner">
     <property name="name" value="ClusterBasedAgentLoadBalancerPlanner"/>
   </bean>
@@ -590,14 +570,6 @@
     <property name="name" value="OvmGuru"/>
   </bean>
   
-  <bean id="BaremetalGuru" class="com.cloud.baremetal.manager.BareMetalGuru">
-    <property name="name" value="BaremetalGuru"/>
-  </bean>
-
-  <bean id="BaremetalPlannerSelector" class="com.cloud.baremetal.manager.BaremetalPlannerSelector">
-    <property name="name" value="BaremetalPlannerSelector"/>
-  </bean>
-
   <bean id="HypervisorPlannerSelector" class="com.cloud.deploy.HypervisorVmPlannerSelector">
     <property name="name" value="HypervisorPlannerSelector"/>
   </bean>
@@ -619,12 +591,6 @@
 
   <bean id="apiRateLimitServiceImpl" class="org.apache.cloudstack.ratelimit.ApiRateLimitServiceImpl"/>
 
-  <bean id="BaremetalManager" class="com.cloud.baremetal.manager.BaremetalManagerImpl"/>
-  <bean id="BaremetalDhcpManager" class="com.cloud.baremetal.networkservice.BaremetalDhcpManagerImpl"/>
-  <bean id="BaremetalKickStartPxeService" class="com.cloud.baremetal.networkservice.BaremetalKickStartServiceImpl"/>
-  <bean id="BaremetalPingPxeService" class="com.cloud.baremetal.networkservice.BareMetalPingServiceImpl" />
-  <bean id="BaremetalPxeManager" class="com.cloud.baremetal.networkservice.BaremetalPxeManagerImpl" /> 
-    
   <bean id="alertManagerImpl" class="com.cloud.alert.AlertManagerImpl" />
   <bean id="asyncJobExecutorContextImpl" class="com.cloud.async.AsyncJobExecutorContextImpl" />
   <bean id="asyncJobManagerImpl" class="com.cloud.async.AsyncJobManagerImpl" />
@@ -673,6 +639,49 @@
   <bean id="vpcVirtualNetworkApplianceManagerImpl" class="com.cloud.network.router.VpcVirtualNetworkApplianceManagerImpl" />
 
   <!--
+    Baremetal components
+  -->
+<!--
+  <bean id="BareMetalDhcp" class="com.cloud.baremetal.networkservice.BaremetalDhcpElement">
+    <property name="name" value="BareMetalDhcp"/>
+  </bean>
+  <bean id="BareMetalPxe" class="com.cloud.baremetal.networkservice.BaremetalPxeElement">
+    <property name="name" value="BareMetalPxe"/>
+  </bean>
+  <bean id="BareMetalUserdata" class="com.cloud.baremetal.networkservice.BaremetalUserdataElement">
+      <property name="name" value="BareMetalUserdata"/>
+  </bean>
+
+  <bean id="BareMetalTemplateAdapter" class="com.cloud.baremetal.manager.BareMetalTemplateAdapter" />
+
+  <bean id="BareMetalDiscoverer" class="com.cloud.baremetal.manager.BareMetalDiscoverer">
+    <property name="name" value="Bare Metal Agent"/>
+  </bean>
+
+  <bean id="BareMetalPlanner" class="com.cloud.baremetal.manager.BareMetalPlanner">
+    <property name="name" value="BareMetal Fit"/>
+  </bean>
+  
+  <bean id="BaremetalGuru" class="com.cloud.baremetal.manager.BareMetalGuru">
+    <property name="name" value="BaremetalGuru"/>
+  </bean>
+
+  <bean id="BaremetalPlannerSelector" class="com.cloud.baremetal.manager.BaremetalPlannerSelector">
+    <property name="name" value="BaremetalPlannerSelector"/>
+  </bean>
+
+  <bean id="BaremetalManager" class="com.cloud.baremetal.manager.BaremetalManagerImpl"/>
+  <bean id="BaremetalDhcpManager" class="com.cloud.baremetal.networkservice.BaremetalDhcpManagerImpl"/>
+  <bean id="BaremetalKickStartPxeService" class="com.cloud.baremetal.networkservice.BaremetalKickStartServiceImpl"/>
+  <bean id="BaremetalPingPxeService" class="com.cloud.baremetal.networkservice.BareMetalPingServiceImpl" />
+  <bean id="BaremetalPxeManager" class="com.cloud.baremetal.networkservice.BaremetalPxeManagerImpl" /> 
+    
+  <bean id="bAREMETAL" class="org.apache.cloudstack.storage.image.format.BAREMETAL" />
+  <bean id="baremetalDhcpDaoImpl" class="com.cloud.baremetal.database.BaremetalDhcpDaoImpl" />
+  <bean id="baremetalPxeDaoImpl" class="com.cloud.baremetal.database.BaremetalPxeDaoImpl" />
+-->
+
+  <!--
     Misc components
   -->
   <bean id="cloudZonesStartupProcessor" class="com.cloud.hypervisor.CloudZonesStartupProcessor" />
@@ -686,7 +695,6 @@
   <bean id="apiResponseHelper" class="com.cloud.api.ApiResponseHelper" />
   <bean id="apiServer" class="com.cloud.api.ApiServer" />
   <bean id="apiServlet" class="com.cloud.api.ApiServlet" />
-  <bean id="bAREMETAL" class="org.apache.cloudstack.storage.image.format.BAREMETAL" />
   <bean id="cloudOrchestrator" class="org.apache.cloudstack.platform.orchestration.CloudOrchestrator" />
   <bean id="clusterRestService" class="org.apache.cloudstack.engine.rest.service.api.ClusterRestService" />
   <bean id="componentContext" class="com.cloud.utils.component.ComponentContext" />

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8bb09901/client/tomcatconf/componentContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/componentContext.xml.in b/client/tomcatconf/componentContext.xml.in
index 159bf85..a6bd420 100644
--- a/client/tomcatconf/componentContext.xml.in
+++ b/client/tomcatconf/componentContext.xml.in
@@ -33,7 +33,6 @@
   <!--
     OSS deployment component configuration
   -->
-
   <bean id="databaseUpgradeChecker" class="com.cloud.upgrade.DatabaseUpgradeChecker" />
   <bean id="configurationDaoImpl" class="com.cloud.configuration.dao.ConfigurationDaoImpl" />
   
@@ -103,7 +102,11 @@
           <ref bean="XcpServerDiscoverer"/>
           <ref bean="SecondaryStorageDiscoverer"/>
           <ref bean="KvmServerDiscoverer"/>
+          
+  <!--
           <ref bean="BareMetalDiscoverer"/>
+  -->
+          
           <ref bean="OvmDiscoverer"/>
        </list>
     </property>
@@ -138,7 +141,11 @@
           <ref bean="FirstFitPlanner" />
           <ref bean="UserDispersingPlanner" />
           <ref bean="UserConcentratedPodPlanner" />
+          
+<!--
           <ref bean="BareMetalPlanner" />
+-->
+    
       </list>
     </property>
   </bean>
@@ -163,9 +170,11 @@
           <ref bean="Ovs"/>
           <ref bean="SecurityGroupProvider"/>
           <ref bean="VpcVirtualRouter"/>
+<!--          
           <ref bean="BareMetalDhcp"/>
           <ref bean="BareMetalPxe"/>
           <ref bean="BareMetalUserdata"/>
+-->
       </list>
     </property>
     <property name="IpDeployers">
@@ -179,7 +188,9 @@
       <list>
           <ref bean="VirtualRouter"/>
           <ref bean="VpcVirtualRouter"/>
+<!--          
           <ref bean="BareMetalDhcp"/>
+-->    
       </list>
     </property>
   </bean>
@@ -191,9 +202,11 @@
           <ref bean="Ovs"/>
           <ref bean="SecurityGroupProvider"/>
           <ref bean="VpcVirtualRouter"/>
+<!--          
           <ref bean="BareMetalDhcp"/>
           <ref bean="BareMetalPxe"/>
           <ref bean="BareMetalUserdata"/>
+-->    
       </list>
     </property>
   </bean>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8bb09901/client/tomcatconf/nonossComponentContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/nonossComponentContext.xml.in b/client/tomcatconf/nonossComponentContext.xml.in
index 13bb3f5..55a8f06 100644
--- a/client/tomcatconf/nonossComponentContext.xml.in
+++ b/client/tomcatconf/nonossComponentContext.xml.in
@@ -170,6 +170,7 @@
 
   <bean id="FirstFitPlanner" class="com.cloud.deploy.FirstFitPlanner">
     <property name="name" value="First Fit"/>
+
     <property name="StoragePoolAllocators">
       <list>
           <ref bean="LocalStoragePoolAllocator"/>
@@ -194,7 +195,9 @@
           <ref bean="XcpServerDiscoverer"/>
           <ref bean="SecondaryStorageDiscoverer"/>
           <ref bean="KvmServerDiscoverer"/>
+<!--          
           <ref bean="BareMetalDiscoverer"/>
+-->
           <ref bean="OvmDiscoverer"/>
           <ref bean="vmwareServerDiscoverer"/>
        </list>
@@ -232,7 +235,9 @@
           <ref bean="FirstFitPlanner" />
           <ref bean="UserDispersingPlanner" />
           <ref bean="UserConcentratedPodPlanner" />
+<!--
           <ref bean="BareMetalPlanner" />
+-->
       </list>
     </property>
   </bean>
@@ -262,9 +267,11 @@
           <ref bean="Ovs"/>
           <ref bean="SecurityGroupProvider"/>
           <ref bean="VpcVirtualRouter"/>
+<!--
           <ref bean="BareMetalDhcp"/>
           <ref bean="BareMetalPxe"/>
           <ref bean="BareMetalUserdata"/>
+-->    
       </list>
     </property>
     <property name="IpDeployers">
@@ -278,7 +285,9 @@
       <list>
           <ref bean="VirtualRouter"/>
           <ref bean="VpcVirtualRouter"/>
+<!--
           <ref bean="BareMetalDhcp"/>
+-->
       </list>
     </property>
   </bean>
@@ -295,9 +304,11 @@
           <ref bean="Ovs"/>
           <ref bean="SecurityGroupProvider"/>
           <ref bean="VpcVirtualRouter"/>
+<!--
           <ref bean="BareMetalDhcp"/>
           <ref bean="BareMetalPxe"/>
           <ref bean="BareMetalUserdata"/>
+-->    
       </list>
     </property>
   </bean>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8bb09901/server/src/com/cloud/network/NetworkServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java
index 130cb1b..846d79e 100755
--- a/server/src/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/com/cloud/network/NetworkServiceImpl.java
@@ -3081,9 +3081,13 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
         PhysicalNetworkVO pvo = _physicalNetworkDao.findById(physicalNetworkId);
         DataCenterVO dvo = _dcDao.findById(pvo.getDataCenterId());
         if (dvo.getNetworkType() == NetworkType.Basic) {
+ 
+        	// Baremetal is currently disabled
+/*
             addProviderToPhysicalNetwork(physicalNetworkId, "BaremetalDhcpProvider", null, null);
             addProviderToPhysicalNetwork(physicalNetworkId, "BaremetalPxeProvider", null, null);
             addProviderToPhysicalNetwork(physicalNetworkId, "BaremetaUserdataProvider", null, null);
+*/        
         }
         return null;
     }


[21/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
CLOUDSTACK-1689: Adding ipset as part of agent install for debian
Signed-off-by: Chip Childers <ch...@gmail.com>


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

Branch: refs/heads/kvm-vnc-listen
Commit: 6eac4229434b46ee74b5952d3abd26b646166b39
Parents: 8dd0b77
Author: Pradeep Soundararajan <pr...@citrix.com>
Authored: Mon Apr 1 15:31:08 2013 +0100
Committer: Chip Childers <ch...@gmail.com>
Committed: Mon Apr 1 15:33:23 2013 +0100

----------------------------------------------------------------------
 debian/control |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6eac4229/debian/control
----------------------------------------------------------------------
diff --git a/debian/control b/debian/control
index 8f82fc3..27a3150 100644
--- a/debian/control
+++ b/debian/control
@@ -22,7 +22,7 @@ Description: CloudStack server library
 
 Package: cloudstack-agent
 Architecture: all
-Depends: openjdk-6-jre | openjdk-7-jre, cloudstack-common (= ${source:Version}), lsb-base (>= 3.2), libcommons-daemon-java, libjna-java, openssh-client, libvirt0, sysvinit-utils, chkconfig, qemu-kvm, libvirt-bin, uuid-runtime, rsync, grep, iproute, perl-base, perl-modules, ebtables, vlan, wget, jsvc
+Depends: openjdk-6-jre | openjdk-7-jre, cloudstack-common (= ${source:Version}), lsb-base (>= 3.2), libcommons-daemon-java, libjna-java, openssh-client, libvirt0, sysvinit-utils, chkconfig, qemu-kvm, libvirt-bin, uuid-runtime, rsync, grep, iproute, perl-base, perl-modules, ebtables, vlan, wget, jsvc, ipset
 Conflicts: cloud-agent, cloud-agent-libs, cloud-agent-deps, cloud-agent-scripts
 Description: CloudStack agent
  The CloudStack agent is in charge of managing shared computing resources in


[43/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
CLOUDSTACK-1865: Change StatsCollector to be a manager so that it can initialize itself at proper run level


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

Branch: refs/heads/kvm-vnc-listen
Commit: f2ad38aa0f5623551fdd0a295219fb948030bd28
Parents: 2313676
Author: Kelven Yang <ke...@gmail.com>
Authored: Mon Apr 1 18:25:06 2013 -0700
Committer: Kelven Yang <ke...@gmail.com>
Committed: Tue Apr 2 11:22:56 2013 -0700

----------------------------------------------------------------------
 server/src/com/cloud/server/StatsCollector.java |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f2ad38aa/server/src/com/cloud/server/StatsCollector.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/server/StatsCollector.java b/server/src/com/cloud/server/StatsCollector.java
index b1f4a57..05be0e2 100755
--- a/server/src/com/cloud/server/StatsCollector.java
+++ b/server/src/com/cloud/server/StatsCollector.java
@@ -66,6 +66,7 @@ import com.cloud.storage.dao.VolumeDao;
 import com.cloud.storage.secondary.SecondaryStorageVmManager;
 import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.component.ComponentMethodInterceptable;
+import com.cloud.utils.component.ManagerBase;
 import com.cloud.utils.concurrency.NamedThreadFactory;
 import com.cloud.utils.db.SearchCriteria;
 import com.cloud.vm.UserVmManager;
@@ -78,7 +79,7 @@ import com.cloud.vm.dao.UserVmDao;
  *
  */
 @Component
-public class StatsCollector implements ComponentMethodInterceptable {
+public class StatsCollector extends ManagerBase implements ComponentMethodInterceptable {
 	public static final Logger s_logger = Logger.getLogger(StatsCollector.class.getName());
 
 	private static StatsCollector s_instance = null;
@@ -122,10 +123,11 @@ public class StatsCollector implements ComponentMethodInterceptable {
 		s_instance = this;
 	}
 
-    @PostConstruct
-    private void init(){
+	@Override
+	public boolean start() {
         init(_configDao.getConfiguration());
-    }
+		return true;
+	}
 
 	private void init(Map<String, String> configs) {
 		_executor = Executors.newScheduledThreadPool(3, new NamedThreadFactory("StatsCollector"));


[14/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
CLOUDSTACK-1490: deb packaging tomcat fixes

Signed-off-by: Wido den Hollander <wi...@42on.com>


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

Branch: refs/heads/kvm-vnc-listen
Commit: 80da4d5baf9381985f61faa257f6684cc80b8c9f
Parents: bc1ce57
Author: Wido den Hollander <wi...@42on.com>
Authored: Sun Mar 31 12:46:23 2013 +0200
Committer: Wido den Hollander <wi...@42on.com>
Committed: Sun Mar 31 14:16:31 2013 +0200

----------------------------------------------------------------------
 debian/cloudstack-management.install |    1 -
 debian/rules                         |    2 --
 packaging/debian/replace.properties  |    2 +-
 3 files changed, 1 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/80da4d5b/debian/cloudstack-management.install
----------------------------------------------------------------------
diff --git a/debian/cloudstack-management.install b/debian/cloudstack-management.install
index e80701d..b42343a 100644
--- a/debian/cloudstack-management.install
+++ b/debian/cloudstack-management.install
@@ -31,5 +31,4 @@
 /usr/bin/cloud-setup-databases
 /usr/bin/cloud-migrate-databases
 /usr/share/cloudstack-management/*
-/usr/share/java/*
 /usr/share/tomcat6/lib/*

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/80da4d5b/debian/rules
----------------------------------------------------------------------
diff --git a/debian/rules b/debian/rules
index 907cdcd..55496e4 100755
--- a/debian/rules
+++ b/debian/rules
@@ -100,10 +100,8 @@ install:
 	ln -s tomcat6-nonssl.conf $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/management/tomcat6.conf
 	mkdir -p $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/management/Catalina/localhost/client
 	mkdir -p ${DESTDIR}/usr/share/tomcat6/lib
-	mkdir -p ${DESTDIR}/usr/share/java
 	install -D packaging/debian/init/cloud-management $(DESTDIR)/$(SYSCONFDIR)/init.d/$(PACKAGE)-management
 	install -D client/bindir/cloud-update-xenserver-licenses.in $(DESTDIR)/usr/bin/cloud-update-xenserver-licenses
-	install -D server/target/cloud-server-$(VERSION)-SNAPSHOT.jar $(DESTDIR)/usr/share/java/$(PACKAGE)-server.jar
 	ln -s /usr/share/tomcat6/bin $(DESTDIR)/usr/share/$(PACKAGE)-management/bin
 	ln -s ../../..$(SYSCONFDIR)/$(PACKAGE)/management $(DESTDIR)/usr/share/$(PACKAGE)-management/conf
 	ln -s ../../../usr/share/tomcat6/lib $(DESTDIR)/usr/share/$(PACKAGE)-management/lib

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/80da4d5b/packaging/debian/replace.properties
----------------------------------------------------------------------
diff --git a/packaging/debian/replace.properties b/packaging/debian/replace.properties
index 8705c78..8c85206 100644
--- a/packaging/debian/replace.properties
+++ b/packaging/debian/replace.properties
@@ -34,7 +34,7 @@ AWSAPILOG=/var/log/cloudstack/awsapi/awsapi.log
 BINDIR=/usr/bin
 COMMONLIBDIR=/usr/share/cloudstack-common
 CONFIGUREVARS=
-DEPSCLASSPATH=
+DEPSCLASSPATH=/usr/share/tomcat6/bin/bootstrap.jar:/usr/share/tomcat6/bin/tomcat-juli.jar
 DOCDIR=
 IPALOCATORLOG=/var/log/cloudstack/management/ipallocator.log
 JAVADIR=/usr/share/cloudstack-management/webapps/client/WEB-INF/lib


[08/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
CLOUDSTACK-1795: implement custom AOP to fully support legacy CloudStack AOP semantcis
Signed-off-by: Chip Childers <ch...@gmail.com>


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

Branch: refs/heads/kvm-vnc-listen
Commit: 3ab744d1009ded8b937edf102d881df3e8208691
Parents: 95011d6
Author: Kelven Yang <ke...@gmail.com>
Authored: Wed Mar 27 13:06:49 2013 +0000
Committer: Kelven Yang <ke...@gmail.com>
Committed: Fri Mar 29 11:12:36 2013 -0700

----------------------------------------------------------------------
 client/tomcatconf/applicationContext.xml.in        |   27 +--
 server/src/com/cloud/api/ApiDispatcher.java        |    5 +-
 server/src/com/cloud/api/ApiServer.java            |   39 ++--
 .../src/com/cloud/cluster/ClusterManagerImpl.java  |    4 +-
 .../com/cloud/event/ActionEventInterceptor.java    |   52 +----
 .../ExternalLoadBalancerDeviceManagerImpl.java     |    2 +-
 .../src/com/cloud/network/NetworkManagerImpl.java  |   16 +-
 server/src/com/cloud/network/NetworkModelImpl.java |    6 +-
 server/src/com/cloud/server/StatsCollector.java    |    3 +-
 .../src/com/cloud/utils/component/AdapterBase.java |    4 +-
 .../cloud/utils/component/ComponentContext.java    |   32 +++-
 .../ComponentInstantiationPostProcessor.java       |  152 +++++++++++++++
 .../component/ComponentMethodInterceptable.java    |   24 +++
 .../component/ComponentMethodInterceptor.java      |   27 +++
 .../utils/component/ComponentNamingPolicy.java     |   63 ++++++
 .../src/com/cloud/utils/component/ManagerBase.java |    2 +-
 utils/src/com/cloud/utils/db/GenericDaoBase.java   |   29 +---
 .../cloud/utils/db/TransactionContextBuilder.java  |   70 ++-----
 .../utils/log/CglibThrowableRendererTest.java      |    2 +-
 utils/test/resources/testContext.xml               |   20 +--
 20 files changed, 383 insertions(+), 196 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ab744d1/client/tomcatconf/applicationContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/applicationContext.xml.in b/client/tomcatconf/applicationContext.xml.in
index 3c93b8a..6bab4fd 100644
--- a/client/tomcatconf/applicationContext.xml.in
+++ b/client/tomcatconf/applicationContext.xml.in
@@ -35,27 +35,18 @@
   <!--
     @DB support
   -->
-  <aop:config>
-    <aop:aspect id="dbContextBuilder" ref="transactionContextBuilder">
-        <aop:pointcut id="captureAnyMethod"
-            expression="execution(* *(..))" 
-        />
-        
-        <aop:around pointcut-ref="captureAnyMethod" method="AroundAnyMethod"/> 
-    </aop:aspect>
-
-    <aop:aspect id="actionEventInterceptorAspect" ref="actionEventInterceptor">
-        <aop:pointcut id="captureEventMethod"
-            expression="execution(* *(..)) and @annotation(com.cloud.event.ActionEvent)" 
-        />
-
-        <aop:around pointcut-ref="captureEventMethod" method="AroundAnyMethod"/> 
-    </aop:aspect>
-  </aop:config>
-
   <bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" />
   <bean id="actionEventInterceptor" class="com.cloud.event.ActionEventInterceptor" />
 
+  <bean id="instantiatePostProcessor" class="com.cloud.utils.component.ComponentInstantiationPostProcessor">
+    <property name="Interceptors">
+        <list>
+            <ref bean="transactionContextBuilder" />
+            <ref bean="actionEventInterceptor" />
+        </list>
+    </property>
+  </bean>
+
   <!--
     RPC/Async/EventBus
   -->

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ab744d1/server/src/com/cloud/api/ApiDispatcher.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java
index f7a3236..925d90a 100755
--- a/server/src/com/cloud/api/ApiDispatcher.java
+++ b/server/src/com/cloud/api/ApiDispatcher.java
@@ -138,8 +138,7 @@ public class ApiDispatcher {
             UserContext ctx = UserContext.current();
             ctx.setAccountId(cmd.getEntityOwnerId());
             
-            BaseCmd realCmdObj = ComponentContext.getTargetObject(cmd);
-            if (realCmdObj instanceof BaseAsyncCmd) {
+            if (cmd instanceof BaseAsyncCmd) {
 
                 BaseAsyncCmd asyncCmd = (BaseAsyncCmd) cmd;
                 String startEventId = params.get("ctxStartEventId");
@@ -171,8 +170,6 @@ public class ApiDispatcher {
         Map<Object, AccessType> entitiesToAccess = new HashMap<Object, AccessType>();
         Map<String, Object> unpackedParams = cmd.unpackParams(params);
 
-        cmd = ComponentContext.getTargetObject(cmd);
-
         if (cmd instanceof BaseListCmd) {
             Object pageSizeObj = unpackedParams.get(ApiConstants.PAGE_SIZE);
             Long pageSize = null;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ab744d1/server/src/com/cloud/api/ApiServer.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java
index 3c08575..d842819 100755
--- a/server/src/com/cloud/api/ApiServer.java
+++ b/server/src/com/cloud/api/ApiServer.java
@@ -388,16 +388,15 @@ public class ApiServer implements HttpRequestHandler, ApiServerService {
         Long callerUserId = ctx.getCallerUserId();
         Account caller = ctx.getCaller();
 
-        BaseCmd realCmdObj = ComponentContext.getTargetObject(cmdObj);
 
         // Queue command based on Cmd super class:
         // BaseCmd: cmd is dispatched to ApiDispatcher, executed, serialized and returned.
         // BaseAsyncCreateCmd: cmd params are processed and create() is called, then same workflow as BaseAsyncCmd.
         // BaseAsyncCmd: cmd is processed and submitted as an AsyncJob, job related info is serialized and returned.
-        if (realCmdObj instanceof BaseAsyncCmd) {
+        if (cmdObj instanceof BaseAsyncCmd) {
             Long objectId = null;
             String objectUuid = null;
-            if (realCmdObj instanceof BaseAsyncCreateCmd) {
+            if (cmdObj instanceof BaseAsyncCreateCmd) {
                 BaseAsyncCreateCmd createCmd = (BaseAsyncCreateCmd) cmdObj;
                 _dispatcher.dispatchCreateCmd(createCmd, params);
                 objectId = createCmd.getEntityId();
@@ -433,7 +432,7 @@ public class ApiServer implements HttpRequestHandler, ApiServerService {
             ctx.setAccountId(asyncCmd.getEntityOwnerId());
 
             Long instanceId = (objectId == null) ? asyncCmd.getInstanceId() : objectId;
-            AsyncJobVO job = new AsyncJobVO(callerUserId, caller.getId(), realCmdObj.getClass().getName(),
+            AsyncJobVO job = new AsyncJobVO(callerUserId, caller.getId(), cmdObj.getClass().getName(),
                     ApiGsonHelper.getBuilder().create().toJson(params), instanceId, asyncCmd.getInstanceType());
 
             long jobId = _asyncMgr.submitAsyncJob(job);
@@ -457,22 +456,22 @@ public class ApiServer implements HttpRequestHandler, ApiServerService {
             // if the command is of the listXXXCommand, we will need to also return the
             // the job id and status if possible
             // For those listXXXCommand which we have already created DB views, this step is not needed since async job is joined in their db views.
-            if (realCmdObj instanceof BaseListCmd && !(realCmdObj instanceof ListVMsCmd) && !(realCmdObj instanceof ListRoutersCmd)
-                    && !(realCmdObj instanceof ListSecurityGroupsCmd)
-                    && !(realCmdObj instanceof ListTagsCmd)
-                    && !(realCmdObj instanceof ListEventsCmd)
-                    && !(realCmdObj instanceof ListVMGroupsCmd)
-                    && !(realCmdObj instanceof ListProjectsCmd)
-                    && !(realCmdObj instanceof ListProjectAccountsCmd)
-                    && !(realCmdObj instanceof ListProjectInvitationsCmd)
-                    && !(realCmdObj instanceof ListHostsCmd)
-                    && !(realCmdObj instanceof ListVolumesCmd)
-                    && !(realCmdObj instanceof ListUsersCmd)
-                    && !(realCmdObj instanceof ListAccountsCmd)
-                    && !(realCmdObj instanceof ListStoragePoolsCmd)
-                    && !(realCmdObj instanceof ListDiskOfferingsCmd)
-                    && !(realCmdObj instanceof ListServiceOfferingsCmd)
-                    && !(realCmdObj instanceof ListZonesByCmd)
+            if (cmdObj instanceof BaseListCmd && !(cmdObj instanceof ListVMsCmd) && !(cmdObj instanceof ListRoutersCmd)
+                    && !(cmdObj instanceof ListSecurityGroupsCmd)
+                    && !(cmdObj instanceof ListTagsCmd)
+                    && !(cmdObj instanceof ListEventsCmd)
+                    && !(cmdObj instanceof ListVMGroupsCmd)
+                    && !(cmdObj instanceof ListProjectsCmd)
+                    && !(cmdObj instanceof ListProjectAccountsCmd)
+                    && !(cmdObj instanceof ListProjectInvitationsCmd)
+                    && !(cmdObj instanceof ListHostsCmd)
+                    && !(cmdObj instanceof ListVolumesCmd)
+                    && !(cmdObj instanceof ListUsersCmd)
+                    && !(cmdObj instanceof ListAccountsCmd)
+                    && !(cmdObj instanceof ListStoragePoolsCmd)
+                    && !(cmdObj instanceof ListDiskOfferingsCmd)
+                    && !(cmdObj instanceof ListServiceOfferingsCmd)
+                    && !(cmdObj instanceof ListZonesByCmd)
                     ) {
                 buildAsyncListResponse((BaseListCmd) cmdObj, caller);
             }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ab744d1/server/src/com/cloud/cluster/ClusterManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/cluster/ClusterManagerImpl.java b/server/src/com/cloud/cluster/ClusterManagerImpl.java
index 27e0e03..118de41 100755
--- a/server/src/com/cloud/cluster/ClusterManagerImpl.java
+++ b/server/src/com/cloud/cluster/ClusterManagerImpl.java
@@ -365,11 +365,11 @@ public class ClusterManagerImpl extends ManagerBase implements ClusterManager {
 
         try {
             // schedule a scan task immediately
-            if (ComponentContext.getTargetObject(_agentMgr) instanceof ClusteredAgentManagerImpl) {
+            if (_agentMgr instanceof ClusteredAgentManagerImpl) {
                 if (s_logger.isDebugEnabled()) {
                     s_logger.debug("Received notification as part of addHost command to start a host scan task");
                 }
-                ClusteredAgentManagerImpl clusteredAgentMgr = (ClusteredAgentManagerImpl)ComponentContext.getTargetObject(_agentMgr);
+                ClusteredAgentManagerImpl clusteredAgentMgr = (ClusteredAgentManagerImpl)_agentMgr;
                 clusteredAgentMgr.scheduleHostScanTask();
             }
         } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ab744d1/server/src/com/cloud/event/ActionEventInterceptor.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/event/ActionEventInterceptor.java b/server/src/com/cloud/event/ActionEventInterceptor.java
index a6c2565..01eefcd 100644
--- a/server/src/com/cloud/event/ActionEventInterceptor.java
+++ b/server/src/com/cloud/event/ActionEventInterceptor.java
@@ -16,55 +16,22 @@
 // under the License.
 package com.cloud.event;
 
-import java.lang.reflect.AnnotatedElement;
 import java.lang.reflect.Method;
 
 import org.apache.log4j.Logger;
-import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.reflect.MethodSignature;
 
 import com.cloud.user.UserContext;
-import com.cloud.utils.component.ComponentMethodProxyCache;
+import com.cloud.utils.component.ComponentMethodInterceptor;
 
-public class ActionEventInterceptor {
+public class ActionEventInterceptor implements ComponentMethodInterceptor {
 	private static final Logger s_logger = Logger.getLogger(ActionEventInterceptor.class);
 
 	public ActionEventInterceptor() {
 	}
 
-	public Object AroundAnyMethod(ProceedingJoinPoint call) throws Throwable {
-		MethodSignature methodSignature = (MethodSignature)call.getSignature();
-		
-		// Note: AOP for ActionEvent is triggered annotation, no need to check the annotation on method again
-        Method targetMethod = ComponentMethodProxyCache.getTargetMethod(
-        	methodSignature.getMethod(), call.getTarget());	
-        
-        if(targetMethod != null) {
-            EventVO event = interceptStart(targetMethod);
-        			
-            boolean success = true;
-			Object ret = null;
-			try {
-				 ret = call.proceed();
-			} catch (Throwable e) {
-	            success = false;
-	            interceptException(targetMethod, event);
-	            throw e;
-			} finally {
-	            if(success){
-	                interceptComplete(targetMethod, event);
-	            }
-			}
-			return ret;
-        } else {
-        	s_logger.error("Unable to find the proxied method behind. Method: " + methodSignature.getMethod().getName());
-        }
-        return call.proceed();
-	}
-
-    public EventVO interceptStart(AnnotatedElement element) {
+	@Override
+    public Object interceptStart(Method method, Object target) {
         EventVO event = null;
-        Method method = (Method)element;
         ActionEvent actionEvent = method.getAnnotation(ActionEvent.class);
         if (actionEvent != null) {
             boolean async = actionEvent.async();
@@ -83,8 +50,8 @@ public class ActionEventInterceptor {
         return event;
     }
 
-    public void interceptComplete(AnnotatedElement element, EventVO event) {
-        Method method = (Method)element;
+	@Override
+    public void interceptComplete(Method method, Object target, Object event) {
         ActionEvent actionEvent = method.getAnnotation(ActionEvent.class);
         if (actionEvent != null) {
             UserContext ctx = UserContext.current();
@@ -105,8 +72,8 @@ public class ActionEventInterceptor {
         }
     }
 
-    public void interceptException(AnnotatedElement element, EventVO event) {
-        Method method = (Method)element;
+	@Override
+    public void interceptException(Method method, Object target, Object event) {
         ActionEvent actionEvent = method.getAnnotation(ActionEvent.class);
         if (actionEvent != null) {
             UserContext ctx = UserContext.current();
@@ -126,7 +93,8 @@ public class ActionEventInterceptor {
         }
     }
 	
-	private boolean needToIntercept(Method method) {
+	@Override
+	public boolean needToIntercept(Method method) {
         ActionEvent actionEvent = method.getAnnotation(ActionEvent.class);
         if (actionEvent != null) {
             return true;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ab744d1/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 cafe95a..4853256 100644
--- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java
+++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java
@@ -1113,7 +1113,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
         }
 
         NetworkElement element = _networkModel.getElementImplementingProvider(providers.get(0).getName());
-        if (!(ComponentContext.getTargetObject(element) instanceof IpDeployer)) {
+        if (!(element instanceof IpDeployer)) {
             s_logger.error("The firewall provider for network " + network.getName() + " don't have ability to deploy IP address!");
             return null;
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ab744d1/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 a4eac36..42544ae 100755
--- a/server/src/com/cloud/network/NetworkManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkManagerImpl.java
@@ -611,10 +611,10 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
                 }
                 IpDeployer deployer = null;
                 NetworkElement element = _networkModel.getElementImplementingProvider(provider.getName());
-                if (!(ComponentContext.getTargetObject(element) instanceof IpDeployingRequester)) {
+                if (!(element instanceof IpDeployingRequester)) {
                     throw new CloudRuntimeException("Element " + element + " is not a IpDeployingRequester!");
                 }
-                deployer = ((IpDeployingRequester)ComponentContext.getTargetObject(element)).getIpDeployer(network);
+                deployer = ((IpDeployingRequester)element).getIpDeployer(network);
                 if (deployer == null) {
                     throw new CloudRuntimeException("Fail to get ip deployer for element: " + element);
                 }
@@ -1594,13 +1594,13 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
         if (vmProfile.getType() == Type.User && element.getProvider() != null) {
             if (_networkModel.areServicesSupportedInNetwork(network.getId(), Service.Dhcp) &&
                     _networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, element.getProvider()) &&
-                    (ComponentContext.getTargetObject(element) instanceof DhcpServiceProvider)) {
+                    element instanceof DhcpServiceProvider) {
                 DhcpServiceProvider sp = (DhcpServiceProvider) element;
                 sp.addDhcpEntry(network, profile, vmProfile, dest, context);
             }
             if (_networkModel.areServicesSupportedInNetwork(network.getId(), Service.UserData) &&
                     _networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.UserData, element.getProvider()) &&
-                    (ComponentContext.getTargetObject(element) instanceof UserDataServiceProvider)) {
+                    element instanceof UserDataServiceProvider) {
                 UserDataServiceProvider sp = (UserDataServiceProvider) element;
                 sp.addPasswordAndUserdata(network, profile, vmProfile, dest, context);
             }
@@ -3678,15 +3678,15 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
     @Override
     public StaticNatServiceProvider getStaticNatProviderForNetwork(Network network) {
         NetworkElement element = getElementForServiceInNetwork(network, Service.StaticNat);
-        assert ComponentContext.getTargetObject(element) instanceof StaticNatServiceProvider;
-        return (StaticNatServiceProvider)ComponentContext.getTargetObject(element);
+        assert element instanceof StaticNatServiceProvider;
+        return (StaticNatServiceProvider)element;
     }
 
     @Override
     public LoadBalancingServiceProvider getLoadBalancingProviderForNetwork(Network network) {
         NetworkElement element = getElementForServiceInNetwork(network, Service.Lb);
-        assert ComponentContext.getTargetObject(element) instanceof LoadBalancingServiceProvider; 
-        return ( LoadBalancingServiceProvider)ComponentContext.getTargetObject(element);
+        assert element instanceof LoadBalancingServiceProvider; 
+        return (LoadBalancingServiceProvider)element;
     }
     @Override
     public boolean isNetworkInlineMode(Network network) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ab744d1/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 788e031..e7bdbca 100644
--- a/server/src/com/cloud/network/NetworkModelImpl.java
+++ b/server/src/com/cloud/network/NetworkModelImpl.java
@@ -404,9 +404,9 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel {
         Network network = _networksDao.findById(networkId);
         NetworkElement oldElement = getElementImplementingProvider(oldProvider.getName());
         NetworkElement newElement = getElementImplementingProvider(newProvider.getName());
-        if (ComponentContext.getTargetObject(oldElement) instanceof IpDeployingRequester && ComponentContext.getTargetObject(newElement) instanceof IpDeployingRequester) {
-        	IpDeployer oldIpDeployer = ((IpDeployingRequester)ComponentContext.getTargetObject(oldElement)).getIpDeployer(network);
-        	IpDeployer newIpDeployer = ((IpDeployingRequester)ComponentContext.getTargetObject(newElement)).getIpDeployer(network);
+        if (oldElement instanceof IpDeployingRequester && newElement instanceof IpDeployingRequester) {
+        	IpDeployer oldIpDeployer = ((IpDeployingRequester)oldElement).getIpDeployer(network);
+        	IpDeployer newIpDeployer = ((IpDeployingRequester)newElement).getIpDeployer(network);
         	if (!oldIpDeployer.getProvider().getName().equals(newIpDeployer.getProvider().getName())) {
         		throw new InvalidParameterException("There would be multiple providers for IP " + publicIp.getAddress() + "!");
         	}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ab744d1/server/src/com/cloud/server/StatsCollector.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/server/StatsCollector.java b/server/src/com/cloud/server/StatsCollector.java
index 7dcf091..b1f4a57 100755
--- a/server/src/com/cloud/server/StatsCollector.java
+++ b/server/src/com/cloud/server/StatsCollector.java
@@ -65,6 +65,7 @@ import com.cloud.storage.dao.StoragePoolHostDao;
 import com.cloud.storage.dao.VolumeDao;
 import com.cloud.storage.secondary.SecondaryStorageVmManager;
 import com.cloud.utils.NumbersUtil;
+import com.cloud.utils.component.ComponentMethodInterceptable;
 import com.cloud.utils.concurrency.NamedThreadFactory;
 import com.cloud.utils.db.SearchCriteria;
 import com.cloud.vm.UserVmManager;
@@ -77,7 +78,7 @@ import com.cloud.vm.dao.UserVmDao;
  *
  */
 @Component
-public class StatsCollector {
+public class StatsCollector implements ComponentMethodInterceptable {
 	public static final Logger s_logger = Logger.getLogger(StatsCollector.class.getName());
 
 	private static StatsCollector s_instance = null;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ab744d1/utils/src/com/cloud/utils/component/AdapterBase.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/component/AdapterBase.java b/utils/src/com/cloud/utils/component/AdapterBase.java
index ea5e961..8353cee 100644
--- a/utils/src/com/cloud/utils/component/AdapterBase.java
+++ b/utils/src/com/cloud/utils/component/AdapterBase.java
@@ -19,7 +19,7 @@ package com.cloud.utils.component;
 import java.util.List;
 
 // Typical Adapter implementation.
-public class AdapterBase extends ComponentLifecycleBase implements Adapter {
+public class AdapterBase extends ComponentLifecycleBase implements Adapter, ComponentMethodInterceptable {
 
 	public AdapterBase() {
         // set default run level for adapter components
@@ -29,7 +29,7 @@ public class AdapterBase extends ComponentLifecycleBase implements Adapter {
 	public static <T extends Adapter> T getAdapterByName(List<T> adapters, String name) {
     	for(T adapter : adapters) {
     		if(adapter.getName() != null && adapter.getName().equalsIgnoreCase(name))
-    			return ComponentContext.getTargetObject(adapter);
+    			return adapter;
     	}
     	return null;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ab744d1/utils/src/com/cloud/utils/component/ComponentContext.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/component/ComponentContext.java b/utils/src/com/cloud/utils/component/ComponentContext.java
index ca7ad5c..d11d354 100644
--- a/utils/src/com/cloud/utils/component/ComponentContext.java
+++ b/utils/src/com/cloud/utils/component/ComponentContext.java
@@ -59,16 +59,18 @@ public class ComponentContext implements ApplicationContextAware {
 
     public static ApplicationContext getApplicationContext() {  
         return s_appContext;  
-    } 
-
+    }
+    
     public static void initComponentsLifeCycle() {
-        // Run the SystemIntegrityCheckers first
-        Map<String, SystemIntegrityChecker> integrityCheckers = getApplicationContext().getBeansOfType(SystemIntegrityChecker.class);
-        for (Entry<String,SystemIntegrityChecker> entry : integrityCheckers.entrySet() ){
-            s_logger.info ("Running SystemIntegrityChecker " + entry.getKey());
-            entry.getValue().check();
-        }
-        
+        AutowireCapableBeanFactory  beanFactory = s_appContext.getAutowireCapableBeanFactory();
+
+    	Map<String, ComponentMethodInterceptable> interceptableComponents = getApplicationContext().getBeansOfType(
+    		ComponentMethodInterceptable.class);
+    	for(Map.Entry<String, ComponentMethodInterceptable> entry : interceptableComponents.entrySet()) {
+    		Object bean = getTargetObject(entry.getValue());
+    		beanFactory.configureBean(bean, entry.getKey());
+    	}
+    	
     	Map<String, ComponentLifecycle> lifecyleComponents = getApplicationContext().getBeansOfType(ComponentLifecycle.class);
  
     	Map[] classifiedComponents = new Map[ComponentLifecycle.MAX_RUN_LEVELS];
@@ -103,6 +105,18 @@ public class ComponentContext implements ApplicationContextAware {
                 avoidMap.put(implClassName, implClassName);
     		}
     	}
+    	
+        // Run the SystemIntegrityCheckers first
+        Map<String, SystemIntegrityChecker> integrityCheckers = getApplicationContext().getBeansOfType(SystemIntegrityChecker.class);
+        for (Entry<String,SystemIntegrityChecker> entry : integrityCheckers.entrySet() ){
+            s_logger.info ("Running SystemIntegrityChecker " + entry.getKey());
+            try {
+            	entry.getValue().check();
+            } catch(Throwable e) {
+            	s_logger.error("System integrity check failed. Refuse to startup");
+            	System.exit(1);
+            }
+        }
  
     	// starting phase
     	avoidMap.clear();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ab744d1/utils/src/com/cloud/utils/component/ComponentInstantiationPostProcessor.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/component/ComponentInstantiationPostProcessor.java b/utils/src/com/cloud/utils/component/ComponentInstantiationPostProcessor.java
new file mode 100644
index 0000000..cb64975
--- /dev/null
+++ b/utils/src/com/cloud/utils/component/ComponentInstantiationPostProcessor.java
@@ -0,0 +1,152 @@
+// 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
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// the License.  You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.utils.component;
+
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+import net.sf.cglib.proxy.Callback;
+import net.sf.cglib.proxy.CallbackFilter;
+import net.sf.cglib.proxy.Enhancer;
+import net.sf.cglib.proxy.MethodInterceptor;
+import net.sf.cglib.proxy.MethodProxy;
+import net.sf.cglib.proxy.NoOp;
+
+import org.apache.log4j.Logger;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.PropertyValues;
+import org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor;
+
+import com.cloud.utils.Pair;
+
+public class ComponentInstantiationPostProcessor implements InstantiationAwareBeanPostProcessor {
+    private static final Logger s_logger = Logger.getLogger(ComponentInstantiationPostProcessor.class);
+
+    private List<ComponentMethodInterceptor> _interceptors = new ArrayList<ComponentMethodInterceptor>();
+    private Callback[] _callbacks;
+    private CallbackFilter _callbackFilter;
+    
+	public ComponentInstantiationPostProcessor() {
+		_callbacks = new Callback[2];
+		_callbacks[0] = NoOp.INSTANCE;
+		_callbacks[1] = new InterceptorDispatcher();
+
+		_callbackFilter = new InterceptorFilter();
+	}
+	
+	public List<ComponentMethodInterceptor> getInterceptors() {
+		return _interceptors;
+	}
+	
+	public void setInterceptors(List<ComponentMethodInterceptor> interceptors) {
+		_interceptors = interceptors;
+	}
+	
+	private Callback[] getCallbacks() {
+		return _callbacks;
+	}
+	
+	private CallbackFilter getCallbackFilter() {
+		return _callbackFilter;
+	}
+	
+	@Override
+	public Object postProcessBeforeInitialization(Object bean, String beanName)
+			throws BeansException {
+		return bean;
+	}
+
+	@Override
+	public Object postProcessAfterInitialization(Object bean, String beanName)
+			throws BeansException {
+		return bean;
+	}
+
+	@Override
+	public Object postProcessBeforeInstantiation(Class<?> beanClass,
+			String beanName) throws BeansException {
+		if(_interceptors != null && _interceptors.size() > 0) {
+			if(ComponentMethodInterceptable.class.isAssignableFrom(beanClass)) {
+		        Enhancer enhancer = new Enhancer();
+		        enhancer.setSuperclass(beanClass);
+		        enhancer.setCallbacks(getCallbacks());
+		        enhancer.setCallbackFilter(getCallbackFilter());
+		        enhancer.setNamingPolicy(ComponentNamingPolicy.INSTANCE);
+		        
+		        Object bean = enhancer.create();
+		        return bean;
+			}
+		}
+		return null;
+	}
+
+	@Override
+	public boolean postProcessAfterInstantiation(Object bean, String beanName)
+			throws BeansException {
+		return true;
+	}
+
+	@Override
+	public PropertyValues postProcessPropertyValues(PropertyValues pvs,
+			PropertyDescriptor[] pds, Object bean, String beanName)
+			throws BeansException {
+		return pvs;
+	}
+	
+    protected class InterceptorDispatcher implements MethodInterceptor {
+        @Override
+        public Object intercept(Object target, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
+            ArrayList<Pair<ComponentMethodInterceptor, Object>> interceptors = new ArrayList<Pair<ComponentMethodInterceptor, Object>>();
+            
+            for (ComponentMethodInterceptor interceptor : getInterceptors()) {
+                if (interceptor.needToIntercept(method)) {
+                    Object objReturnedInInterceptStart = interceptor.interceptStart(method, target);
+                    interceptors.add(new Pair<ComponentMethodInterceptor, Object>(interceptor, objReturnedInInterceptStart));
+                }
+            }
+            boolean success = false;
+            try {
+                Object obj = methodProxy.invokeSuper(target, args);
+                success = true;
+                return obj;
+            } finally {
+                for (Pair<ComponentMethodInterceptor, Object> interceptor : interceptors) {
+                    if (success) {
+                        interceptor.first().interceptComplete(method, target, interceptor.second());
+                    } else {
+                        interceptor.first().interceptException(method, target, interceptor.second());
+                    }
+                }
+            }
+        }
+    }
+    
+    protected class InterceptorFilter implements CallbackFilter {
+        @Override
+        public int accept(Method method) {
+            for(ComponentMethodInterceptor interceptor : getInterceptors()) {
+            
+                if (interceptor.needToIntercept(method)) {
+                	return 1;
+                }
+            }
+            return 0;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ab744d1/utils/src/com/cloud/utils/component/ComponentMethodInterceptable.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/component/ComponentMethodInterceptable.java b/utils/src/com/cloud/utils/component/ComponentMethodInterceptable.java
new file mode 100644
index 0000000..5a95c43
--- /dev/null
+++ b/utils/src/com/cloud/utils/component/ComponentMethodInterceptable.java
@@ -0,0 +1,24 @@
+// 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
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// the License.  You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.utils.component;
+
+/**
+ * Marker interface to work with CGLIB based CloudStack legacy AOP
+ *
+ */
+public interface ComponentMethodInterceptable {
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ab744d1/utils/src/com/cloud/utils/component/ComponentMethodInterceptor.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/component/ComponentMethodInterceptor.java b/utils/src/com/cloud/utils/component/ComponentMethodInterceptor.java
new file mode 100644
index 0000000..39a81d0
--- /dev/null
+++ b/utils/src/com/cloud/utils/component/ComponentMethodInterceptor.java
@@ -0,0 +1,27 @@
+// 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
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// the License.  You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.utils.component;
+
+import java.lang.reflect.Method;
+
+public interface ComponentMethodInterceptor {
+	boolean needToIntercept(Method method);
+	
+    Object interceptStart(Method method, Object target);
+    void interceptComplete(Method method, Object target, Object objReturnedInInterceptStart);
+    void interceptException(Method method, Object target, Object objReturnedInInterceptStart);
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ab744d1/utils/src/com/cloud/utils/component/ComponentNamingPolicy.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/component/ComponentNamingPolicy.java b/utils/src/com/cloud/utils/component/ComponentNamingPolicy.java
new file mode 100644
index 0000000..5659a48
--- /dev/null
+++ b/utils/src/com/cloud/utils/component/ComponentNamingPolicy.java
@@ -0,0 +1,63 @@
+// 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
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// the License.  You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.utils.component;
+
+import net.sf.cglib.core.NamingPolicy;
+import net.sf.cglib.core.Predicate;
+
+/**
+ * Copied/Modified from Spring source
+ *
+ */
+public class ComponentNamingPolicy implements NamingPolicy {
+
+	public static final ComponentNamingPolicy INSTANCE = new ComponentNamingPolicy();
+    
+    public String getClassName(String prefix, String source, Object key, Predicate names) {
+        if (prefix == null) {
+            prefix = "net.sf.cglib.empty.Object";
+        } else if (prefix.startsWith("java")) {
+            prefix = "_" + prefix;
+        }
+        String base =
+            prefix + "_" + 
+            source.substring(source.lastIndexOf('.') + 1) +
+            getTag() + "_" +
+            Integer.toHexString(key.hashCode());
+        String attempt = base;
+        int index = 2;
+        while (names.evaluate(attempt))
+            attempt = base + "_" + index++;
+        return attempt;
+    }
+
+    /**
+     * Returns a string which is incorporated into every generated class name.
+     * By default returns "ByCloudStack"
+     */
+    protected String getTag() {
+        return "ByCloudStack";
+    }
+
+	public int hashCode() {
+	    return getTag().hashCode();
+	}
+	
+	public boolean equals(Object o) {
+	    return (o instanceof ComponentNamingPolicy) && ((ComponentNamingPolicy) o).getTag().equals(getTag());
+	}
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ab744d1/utils/src/com/cloud/utils/component/ManagerBase.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/component/ManagerBase.java b/utils/src/com/cloud/utils/component/ManagerBase.java
index 529ef62..1908f4e 100644
--- a/utils/src/com/cloud/utils/component/ManagerBase.java
+++ b/utils/src/com/cloud/utils/component/ManagerBase.java
@@ -16,7 +16,7 @@
 // under the License.
 package com.cloud.utils.component;
 
-public class ManagerBase extends ComponentLifecycleBase {
+public class ManagerBase extends ComponentLifecycleBase implements ComponentMethodInterceptable {
 	public ManagerBase() {
 		// set default run level for manager components
 		setRunLevel(ComponentLifecycle.RUN_LEVEL_COMPONENT_BOOTSTRAP);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ab744d1/utils/src/com/cloud/utils/db/GenericDaoBase.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/db/GenericDaoBase.java b/utils/src/com/cloud/utils/db/GenericDaoBase.java
index afb1247..f0fc700 100755
--- a/utils/src/com/cloud/utils/db/GenericDaoBase.java
+++ b/utils/src/com/cloud/utils/db/GenericDaoBase.java
@@ -71,6 +71,7 @@ import com.cloud.utils.Ternary;
 import com.cloud.utils.component.ComponentContext;
 import com.cloud.utils.component.ComponentLifecycle;
 import com.cloud.utils.component.ComponentLifecycleBase;
+import com.cloud.utils.component.ComponentMethodInterceptable;
 import com.cloud.utils.crypt.DBEncryptionUtil;
 import com.cloud.utils.db.SearchCriteria.SelectType;
 import com.cloud.utils.exception.CloudRuntimeException;
@@ -114,7 +115,7 @@ import edu.emory.mathcs.backport.java.util.Collections;
  * 
  **/
 @DB
-public abstract class GenericDaoBase<T, ID extends Serializable> extends ComponentLifecycleBase implements GenericDao<T, ID> {
+public abstract class GenericDaoBase<T, ID extends Serializable> extends ComponentLifecycleBase implements GenericDao<T, ID>, ComponentMethodInterceptable {
     private final static Logger s_logger = Logger.getLogger(GenericDaoBase.class);
 
     protected final static TimeZone s_gmtTimeZone = TimeZone.getTimeZone("GMT");
@@ -193,15 +194,14 @@ public abstract class GenericDaoBase<T, ID extends Serializable> extends Compone
                     ( (Class<?>)((Class<?>)t).getGenericSuperclass()).getGenericSuperclass()).getActualTypeArguments()[0];
         }
 
-/*        
-        s_daoMaps.put(_entityBeanType, ComponentContext.getComponent(this.getClass()));
+        s_daoMaps.put(_entityBeanType, this);
         Class<?>[] interphaces = _entityBeanType.getInterfaces();
         if (interphaces != null) {
             for (Class<?> interphace : interphaces) {
-                s_daoMaps.put(interphace, ComponentContext.getComponent(this.getClass()));
+                s_daoMaps.put(interphace, this);
             }
         }
-*/  
+  
         _table = DbUtil.getTableName(_entityBeanType);
 
         final SqlGenerator generator = new SqlGenerator(_entityBeanType);
@@ -1750,25 +1750,6 @@ public abstract class GenericDaoBase<T, ID extends Serializable> extends Compone
     public boolean configure(final String name, final Map<String, Object> params) throws ConfigurationException {
         _name = name;
 
-        Class<?> daoInterface = null;
-        for(Class<?> intf : this.getClass().getInterfaces()) {
-        	if(GenericDao.class.isAssignableFrom(intf)) {
-        		daoInterface = intf;
-        		break;
-        	}
-        }
- 
-        if(daoInterface != null) {
-        	s_logger.info("Register dao interface in GenericDaoBase entity-DAO map. " + daoInterface.getName());
-	        s_daoMaps.put(_entityBeanType, (GenericDao<?, ? extends Serializable>) ComponentContext.getComponent(daoInterface));
-	        Class<?>[] interphaces = _entityBeanType.getInterfaces();
-	        if (interphaces != null) {
-	            for (Class<?> interphace : interphaces) {
-	                s_daoMaps.put(interphace,  (GenericDao<?, ? extends Serializable>) ComponentContext.getComponent(daoInterface));
-	            }
-	        }
-	    }
-       
         final String value = (String)params.get("lock.timeout");
         _timeoutSeconds = NumbersUtil.parseInt(value, 300);
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ab744d1/utils/src/com/cloud/utils/db/TransactionContextBuilder.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/db/TransactionContextBuilder.java b/utils/src/com/cloud/utils/db/TransactionContextBuilder.java
index 7ca33ab..40fcbbf 100644
--- a/utils/src/com/cloud/utils/db/TransactionContextBuilder.java
+++ b/utils/src/com/cloud/utils/db/TransactionContextBuilder.java
@@ -18,65 +18,20 @@ package com.cloud.utils.db;
 
 import java.lang.reflect.Method;
 
-import org.aopalliance.intercept.MethodInterceptor;
-import org.aopalliance.intercept.MethodInvocation;
-import org.apache.log4j.Logger;
-import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.reflect.MethodSignature;
+import com.cloud.utils.component.ComponentMethodInterceptor;
 
-import com.cloud.utils.component.ComponentMethodProxyCache;
-
-public class TransactionContextBuilder implements MethodInterceptor {
-	private static final Logger s_logger = Logger.getLogger(TransactionContextBuilder.class);
+public class TransactionContextBuilder implements ComponentMethodInterceptor {
 	public TransactionContextBuilder() {
 	}
 	
-	public Object AroundAnyMethod(ProceedingJoinPoint call) throws Throwable {
-		MethodSignature methodSignature = (MethodSignature)call.getSignature();
-        Method targetMethod = methodSignature.getMethod();
-        if(needToIntercept(targetMethod, call.getTarget())) {
-			Transaction txn = Transaction.open(call.getSignature().getName());
-			Object ret = null;
-			try {
-				 ret = call.proceed();
-			} finally {
-				txn.close();
-			}
-			return ret;
-        }
-        return call.proceed();
-	}
-
 	@Override
-	public Object invoke(MethodInvocation method) throws Throwable {
-		Method targetMethod = method.getMethod();
-		
-        if(needToIntercept(targetMethod, method.getThis())) {
-			Transaction txn = Transaction.open(targetMethod.getName());
-			Object ret = null;
-			try {
-				 ret = method.proceed();
-			} finally {
-				txn.close();
-			}
-			return ret;
-        }
-        return method.proceed();
-	}
-	
-	private boolean needToIntercept(Method method, Object target) {
+	public boolean needToIntercept(Method method) {
         DB db = method.getAnnotation(DB.class);
         if (db != null) {
             return true;
         }
         
         Class<?> clazz = method.getDeclaringClass();
-        if(clazz.isInterface()) {
-        	clazz = target.getClass();
-        	Method targetMethod = ComponentMethodProxyCache.getTargetMethod(method, target);
-			if(targetMethod != null && targetMethod.getAnnotation(DB.class) != null)
-				return true;
-        }
         
         do {
             db = clazz.getAnnotation(DB.class);
@@ -88,4 +43,23 @@ public class TransactionContextBuilder implements MethodInterceptor {
         
         return false;
     }
+
+	@Override
+    public Object interceptStart(Method method, Object target) {
+    	return Transaction.open(method.getName());
+    }
+    
+	@Override
+    public void interceptComplete(Method method, Object target, Object objReturnedInInterceptStart) {
+    	Transaction txn = (Transaction)objReturnedInInterceptStart;
+    	if(txn != null)
+    		txn.close();
+    }
+    
+	@Override
+    public void interceptException(Method method, Object target, Object objReturnedInInterceptStart) {
+    	Transaction txn = (Transaction)objReturnedInInterceptStart;
+    	if(txn != null)
+    		txn.close();
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ab744d1/utils/test/com/cloud/utils/log/CglibThrowableRendererTest.java
----------------------------------------------------------------------
diff --git a/utils/test/com/cloud/utils/log/CglibThrowableRendererTest.java b/utils/test/com/cloud/utils/log/CglibThrowableRendererTest.java
index ae50f5b..5e3571a 100644
--- a/utils/test/com/cloud/utils/log/CglibThrowableRendererTest.java
+++ b/utils/test/com/cloud/utils/log/CglibThrowableRendererTest.java
@@ -80,7 +80,7 @@ public class CglibThrowableRendererTest extends TestCase {
         Writer w = new CharArrayWriter();
         Logger alt = getAlternateLogger(w, null);
 
-        TestClass test = ComponentContext.inject(TestClass.class);
+        TestClass test = new TestClass();
         try {
             test.exception();
         } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ab744d1/utils/test/resources/testContext.xml
----------------------------------------------------------------------
diff --git a/utils/test/resources/testContext.xml b/utils/test/resources/testContext.xml
index 26cdaae..5cccfcd 100644
--- a/utils/test/resources/testContext.xml
+++ b/utils/test/resources/testContext.xml
@@ -33,22 +33,18 @@
   <context:annotation-config />
 
   <context:component-scan base-package="org.apache.cloudstack, com.cloud" />
-  
+
   <!--
     @DB support
   -->
-  <aop:config proxy-target-class="true">
-    <aop:aspect id="dbContextBuilder" ref="transactionContextBuilder">
-        <aop:pointcut id="captureAnyMethod"
-            expression="execution(* *(..))" 
-        />
-        
-        <aop:around pointcut-ref="captureAnyMethod" method="AroundAnyMethod"/> 
-    </aop:aspect>
-
-  </aop:config>
-  
   <bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" />
 
+  <bean id="instantiatePostProcessor" class="com.cloud.utils.component.ComponentInstantiationPostProcessor">
+    <property name="Interceptors">
+        <list>
+            <ref bean="transactionContextBuilder" />
+        </list>
+    </property>
+  </bean>
 
 </beans>


[11/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
CLOUDSTACK-1846, CLOUDSTACK-1845 - KVM Storage, sometimes KVMHA will remount
deleted NFS pools, causing failures when defining new storage pools. Sometimes
a storage pool has never been used on a host, and getStoragePool fails when
copying templates or in storage migration. deleteStoragePool(pool) often fails
silently, leaving no pool defined in libvirt, but a mountpoint left behind.
This patch handles some of these exceptions and brings forward any issues via
logging.

Signed-off-by: Marcus Sorensen <ma...@betterservers.com> 1364603486 -0600


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

Branch: refs/heads/kvm-vnc-listen
Commit: 5a16e70de9d7bfd93f71bf476de8e23f84e52152
Parents: cf72aa3
Author: Marcus Sorensen <ma...@betterservers.com>
Authored: Fri Mar 29 18:31:26 2013 -0600
Committer: Marcus Sorensen <ma...@betterservers.com>
Committed: Fri Mar 29 18:31:26 2013 -0600

----------------------------------------------------------------------
 .../kvm/resource/LibvirtComputingResource.java     |   34 ++++++++++-
 .../kvm/storage/LibvirtStorageAdaptor.java         |   46 ++++++++++----
 2 files changed, 63 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5a16e70d/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index f786f88..6852e2c 100755
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -1218,10 +1218,23 @@ ServerResource {
         StorageFilerTO pool = cmd.getPool();
         String secondaryStorageUrl = cmd.getSecondaryStorageURL();
         KVMStoragePool secondaryStoragePool = null;
+        KVMStoragePool primaryPool = null;
         try {
-            KVMStoragePool primaryPool = _storagePoolMgr.getStoragePool(
-                    pool.getType(),
-                    pool.getUuid());
+            try {
+                primaryPool = _storagePoolMgr.getStoragePool(
+                     pool.getType(),
+                     pool.getUuid());
+            } catch (CloudRuntimeException e) {
+                if (e.getMessage().contains("not found")) {
+                    primaryPool = _storagePoolMgr.createStoragePool(cmd.getPool().getUuid(),
+                                      cmd.getPool().getHost(), cmd.getPool().getPort(),
+                                      cmd.getPool().getPath(), cmd.getPool().getUserInfo(),
+                                      cmd.getPool().getType());
+                } else {
+                    return new CopyVolumeAnswer(cmd, false, e.getMessage(), null, null);
+                }
+            }
+
             String volumeName = UUID.randomUUID().toString();
 
             if (copyToSecondary) {
@@ -2155,6 +2168,7 @@ ServerResource {
         String secondaryStorageURL = cmd.getSecondaryStorageUrl();
 
         KVMStoragePool secondaryStorage = null;
+        KVMStoragePool primary = null;
         try {
             Connect conn = LibvirtConnection.getConnection();
             String templateFolder = cmd.getAccountId() + File.separator
@@ -2164,9 +2178,21 @@ ServerResource {
             secondaryStorage = _storagePoolMgr.getStoragePoolByURI(
                     secondaryStorageURL);
 
-            KVMStoragePool primary = _storagePoolMgr.getStoragePool(
+            try {
+                primary = _storagePoolMgr.getStoragePool(
                     cmd.getPool().getType(),
                     cmd.getPrimaryStoragePoolNameLabel());
+            } catch (CloudRuntimeException e) {
+                if (e.getMessage().contains("not found")) {
+                    primary = _storagePoolMgr.createStoragePool(cmd.getPool().getUuid(),
+                                      cmd.getPool().getHost(), cmd.getPool().getPort(),
+                                      cmd.getPool().getPath(), cmd.getPool().getUserInfo(),
+                                      cmd.getPool().getType());
+                } else {
+                    return new CreatePrivateTemplateAnswer(cmd, false, e.getMessage());
+                }
+            }
+
             KVMPhysicalDisk disk = primary.getPhysicalDisk(cmd.getVolumePath());
             String tmpltPath = secondaryStorage.getLocalPath() + File.separator
                     + templateInstallFolder;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5a16e70d/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
index ca5da5c..5e83ef6 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
@@ -124,6 +124,23 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
             return sp;
         } catch (LibvirtException e) {
             s_logger.error(e.toString());
+            // if error is that pool is mounted, try to handle it
+            if (e.toString().contains("already mounted")) {
+                s_logger.error("Attempting to unmount old mount libvirt is unaware of at "+targetPath);
+                String result = Script.runSimpleBashScript("umount " + targetPath );
+                if (result == null) {
+                    s_logger.error("Succeeded in unmounting " + targetPath);
+                    try {
+                        sp = conn.storagePoolCreateXML(spd.toString(), 0);
+                        s_logger.error("Succeeded in redefining storage");
+                        return sp;
+                    } catch (LibvirtException l) {
+                        s_logger.error("Target was already mounted, unmounted it but failed to redefine storage:" + l);
+                    }
+                } else {
+                    s_logger.error("Failed in unmounting and redefining storage");
+                }
+            }
             if (sp != null) {
                 try {
                     if (sp.isPersistent() == 1) {
@@ -134,8 +151,8 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
                     }
                     sp.free();
                 } catch (LibvirtException l) {
-                    s_logger.debug("Failed to define nfs storage pool with: "
-                            + l.toString());
+                    s_logger.debug("Failed to undefine nfs storage pool with: "
+                        + l.toString());
                 }
             }
             return null;
@@ -541,6 +558,19 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
             }
             return true;
         } catch (LibvirtException e) {
+            // handle ebusy error when pool is quickly destroyed
+            if (e.toString().contains("exit status 16")) {
+                String targetPath = _mountPoint + File.separator + uuid;
+                s_logger.error("deleteStoragePool removed pool from libvirt, but libvirt had trouble"
+                               + "unmounting the pool. Trying umount location " + targetPath
+                               + "again in a few seconds");
+                String result = Script.runSimpleBashScript("sleep 5 && umount " + targetPath );
+                if (result == null) {
+                    s_logger.error("Succeeded in unmounting " + targetPath);
+                    return true;
+                }
+                s_logger.error("failed in umount retry");
+            }
             throw new CloudRuntimeException(e.toString());
         }
     }
@@ -766,17 +796,7 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
 
     @Override
     public boolean deleteStoragePool(KVMStoragePool pool) {
-        LibvirtStoragePool libvirtPool = (LibvirtStoragePool) pool;
-        StoragePool virtPool = libvirtPool.getPool();
-        try {
-            virtPool.destroy();
-            virtPool.undefine();
-            virtPool.free();
-        } catch (LibvirtException e) {
-            return false;
-        }
-
-        return true;
+        return deleteStoragePool(pool.getUuid());
     }
 
     public boolean deleteVbdByPath(String diskPath) {


[31/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
marvin changes to do an pre-integration and integration test

Introducing the simulator spring context -
simulatorComponentContext.xml.in. This separates the simulator beans so
that production deployments don't have the simulator in them. Context is
enabled with -Dsimulator as part of the developer profile.

Also adding config files - Simulator Config for advanced zone and basic
zone deployments under setup/dev.

Signed-off-by: Prasanna Santhanam <ts...@apache.org>


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

Branch: refs/heads/kvm-vnc-listen
Commit: 2e2046fe389b79b2b105ef40b792263cee831929
Parents: fe48bbe
Author: Prasanna Santhanam <ts...@apache.org>
Authored: Thu Mar 21 20:02:23 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Tue Apr 2 18:31:29 2013 +0530

----------------------------------------------------------------------
 client/pom.xml                                     |   67 +++-
 client/tomcatconf/componentContext.xml.in          |    9 -
 client/tomcatconf/simulatorComponentContext.xml.in |  270 +++++++++++++++
 setup/db/templates.simulator.sql                   |    2 +-
 setup/dev/advanced.cfg                             |  195 +++++++++++
 setup/dev/basic.cfg                                |  178 ++++++++++
 test/integration/smoke/test_vm_life_cycle.py       |   14 +-
 .../marvin/sandbox/demo/simulator/simulator.cfg    |  196 -----------
 tools/marvin/marvin/testSetupSuccess.py            |    5 +
 tools/marvin/pom.xml                               |   49 ++-
 10 files changed, 738 insertions(+), 247 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2e2046fe/client/pom.xml
----------------------------------------------------------------------
diff --git a/client/pom.xml b/client/pom.xml
index 7565029..91dfece 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -219,6 +219,10 @@
       <artifactId>cloud-plugin-hypervisor-simulator</artifactId>
       <version>${project.version}</version>
     </dependency>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloud-plugin-storage-volume-default</artifactId>
+        <version>${project.version}</version>
+    </dependency>
   </dependencies>
   <build>
     <defaultGoal>install</defaultGoal>
@@ -376,22 +380,38 @@
               </target>
             </configuration>
           </execution>
-           <execution>
-                <id>process-nonoss</id>
-                <phase>process-resources</phase>
-                <goals>
-                  <goal>run</goal>
-                </goals>
-                <configuration>
-                  <target if="${nonoss}">
-                    <echo>test</echo>
-                    <replaceregexp
-                      file="${basedir}/target/generated-webapp/WEB-INF/classes/environment.properties"
-                      match="cloud-stack-components-specification=.*"
-                      replace="cloud-stack-components-specification=components-nonoss.xml" byline="true" />
-                  </target>
-                </configuration>
-              </execution>
+          <execution>
+            <id>process-nonoss</id>
+            <phase>process-resources</phase>
+            <goals>
+              <goal>run</goal>
+            </goals>
+            <configuration>
+              <target if="${nonoss}">
+                <echo>test</echo>
+                <replaceregexp
+                    file="${basedir}/target/generated-webapp/WEB-INF/classes/environment.properties"
+                    match="cloud-stack-components-specification=.*"
+                    replace="cloud-stack-components-specification=components-nonoss.xml" byline="true"/>
+              </target>
+            </configuration>
+          </execution>
+          <execution>
+            <id>process-simulator-context</id>
+            <phase>process-resources</phase>
+            <goals>
+              <goal>run</goal>
+            </goals>
+            <configuration>
+              <target if="${simulator}">
+                <echo>test</echo>
+                <replaceregexp
+                    file="${basedir}/target/generated-webapp/WEB-INF/web.xml"
+                    match="classpath:componentContext.xml"
+                    replace="classpath:simulatorComponentContext.xml" byline="true" />
+              </target>
+            </configuration>
+          </execution>
           <execution>
             <id>process-nonoss-spring-context</id>
             <phase>process-resources</phase>
@@ -481,6 +501,21 @@
   </build>
   <profiles>
     <profile>
+      <id>developer</id>
+      <activation>
+        <property>
+          <name>simulator</name>
+        </property>
+      </activation>
+      <dependencies>
+        <dependency>
+          <groupId>org.apache.cloudstack</groupId>
+          <artifactId>cloud-plugin-hypervisor-simulator</artifactId>
+          <version>${project.version}</version>
+        </dependency>
+      </dependencies>
+    </profile>
+    <profile>
       <id>netapp</id>
       <activation>
         <property>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2e2046fe/client/tomcatconf/componentContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/componentContext.xml.in b/client/tomcatconf/componentContext.xml.in
index d5714ea..584be97 100644
--- a/client/tomcatconf/componentContext.xml.in
+++ b/client/tomcatconf/componentContext.xml.in
@@ -203,11 +203,6 @@
     <property name="name" value="KVM Agent"/>
   </bean>
 
-  <bean id="SimulatorDiscoverer" class="com.cloud.resource.SimulatorDiscoverer">
-    <property name="name" value="Simulator Agent"/>
-  </bean>
-
-
   <bean id="BareMetalDiscoverer" class="com.cloud.baremetal.manager.BareMetalDiscoverer">
     <property name="name" value="Bare Metal Agent"/>
   </bean>
@@ -304,10 +299,6 @@
     <property name="name" value="OvmGuru"/>
   </bean>
 
-  <bean id="SimulatorGuru" class="com.cloud.simulator.SimulatorGuru">
-    <property name="name" value="SimulatorGuru"/>
-  </bean>
-
   <bean id="BaremetalGuru" class="com.cloud.baremetal.manager.BareMetalGuru">
     <property name="name" value="BaremetalGuru"/>
   </bean>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2e2046fe/client/tomcatconf/simulatorComponentContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/simulatorComponentContext.xml.in b/client/tomcatconf/simulatorComponentContext.xml.in
new file mode 100644
index 0000000..d501ca1
--- /dev/null
+++ b/client/tomcatconf/simulatorComponentContext.xml.in
@@ -0,0 +1,270 @@
+<!--
+  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
+  regarding copyright ownership. The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License. You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied. See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:context="http://www.springframework.org/schema/context"
+       xmlns:tx="http://www.springframework.org/schema/tx"
+       xmlns:aop="http://www.springframework.org/schema/aop"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans
+                      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+                      http://www.springframework.org/schema/tx
+                      http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
+                      http://www.springframework.org/schema/aop
+                      http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
+                      http://www.springframework.org/schema/context
+                      http://www.springframework.org/schema/context/spring-context-3.0.xsd">
+
+
+  <!--
+      Compose a CloudStack deployment with selected components here
+  -->
+  <bean id="databaseUpgradeChecker" class="com.cloud.upgrade.DatabaseUpgradeChecker" />
+  <bean id="encryptionSecretKeyChecker" class="com.cloud.utils.crypt.EncryptionSecretKeyChecker" />
+  <bean id="configurationServerImpl" class="com.cloud.server.ConfigurationServerImpl" />
+
+  <bean id="managementServerImpl" class ="com.cloud.server.ManagementServerImpl" >
+    <property name="UserAuthenticators">
+      <list>
+        <ref bean="MD5UserAuthenticator"/>
+        <ref bean="LDAPUserAuthenticator"/>
+      </list>
+    </property>
+  </bean>
+
+  <bean id ="AccountManagerImpl" class="com.cloud.user.AccountManagerImpl">
+    <property name="UserAuthenticators">
+      <list>
+        <ref bean="MD5UserAuthenticator"/>
+        <ref bean="LDAPUserAuthenticator"/>
+      </list>
+    </property>
+  </bean>
+
+  <bean id="clusterManagerImpl" class="com.cloud.cluster.ClusterManagerImpl" />
+  <bean id="clusteredAgentManagerImpl" class="com.cloud.agent.manager.ClusteredAgentManagerImpl" />
+  <bean id="clusteredVirtualMachineManagerImpl" class="com.cloud.vm.ClusteredVirtualMachineManagerImpl" />
+  <bean id="highAvailabilityManagerExtImpl" class="com.cloud.ha.HighAvailabilityManagerExtImpl" />
+  <bean id="userVmManagerImpl" class="com.cloud.vm.UserVmManagerImpl" />
+  <bean id="consoleProxyManagerImpl" class="com.cloud.consoleproxy.ConsoleProxyManagerImpl" />
+  <bean id="securityGroupManagerImpl2" class="com.cloud.network.security.SecurityGroupManagerImpl2" />
+  <bean id="premiumSecondaryStorageManagerImpl" class="com.cloud.secstorage.PremiumSecondaryStorageManagerImpl" />
+  <bean id="userVmDaoImpl" class="com.cloud.vm.dao.UserVmDaoImpl" />
+  <bean id="ipv6AddressManagerImpl" class="com.cloud.network.Ipv6AddressManagerImpl" />
+
+  <bean id="apiRateLimitServiceImpl" class="org.apache.cloudstack.ratelimit.ApiRateLimitServiceImpl"/>
+
+  <!--
+      Network Elements
+  -->
+  <bean id="Ovs" class="com.cloud.network.element.OvsElement">
+    <property name="name" value="Ovs"/>
+  </bean>
+  <bean id="SecurityGroupProvider" class="com.cloud.network.element.SecurityGroupElement">
+    <property name="name" value="SecurityGroupProvider"/>
+  </bean>
+  <bean id="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement">
+    <property name="name" value="VirtualRouter"/>
+  </bean>
+  <bean id="VpcVirtualRouter" class="com.cloud.network.element.VpcVirtualRouterElement">
+    <property name="name" value="VpcVirtualRouter"/>
+  </bean>
+
+  <!--
+     Adapters
+  -->
+  <bean id="FirstFitRouting" class="com.cloud.agent.manager.allocator.impl.FirstFitRoutingAllocator">
+    <property name="name" value="FirstFitRouting"/>
+  </bean>
+
+  <bean id="hypervisorTemplateAdapter" class="com.cloud.template.HypervisorTemplateAdapter">
+    <property name="name" value="HypervisorAdapter"/>
+  </bean>
+
+  <!--
+    Storage pool allocators
+  -->
+
+  <bean id="LocalStoragePoolAllocator" class="org.apache.cloudstack.storage.allocator.LocalStoragePoolAllocator">
+    <property name="name" value="LocalStorage"/>
+  </bean>
+
+  <bean id="UserConcentratedAllocator" class="com.cloud.agent.manager.allocator.impl.UserConcentratedAllocator">
+    <property name="name" value="User First"/>
+  </bean>
+
+  <bean id="ConsoleProxyAllocator" class="com.cloud.consoleproxy.ConsoleProxyBalanceAllocator">
+    <property name="name" value="Balance"/>
+  </bean>
+
+  <bean id="StaticRoleBasedAPIAccessChecker" class="org.apache.cloudstack.acl.StaticRoleBasedAPIAccessChecker"/>
+
+  <bean id="ExteralIpAddressAllocator" class="com.cloud.network.ExteralIpAddressAllocator">
+    <property name="name" value="Basic"/>
+  </bean>
+
+  <bean id="HypervisorTemplateAdapter" class="com.cloud.template.HypervisorTemplateAdapter">
+    <property name="name" value="HypervisorAdapter"/>
+  </bean>
+
+  <!--
+    Authenticators
+  -->
+  <bean id="MD5UserAuthenticator" class="com.cloud.server.auth.MD5UserAuthenticator">
+    <property name="name" value="MD5"/>
+  </bean>
+
+  <bean id="LDAPUserAuthenticator" class="com.cloud.server.auth.LDAPUserAuthenticator">
+    <property name="name" value="LDAP"/>
+  </bean>
+
+  <!--
+    Investigators
+  -->
+  <bean id="CheckOnAgentInvestigator" class="com.cloud.ha.CheckOnAgentInvestigator">
+    <property name="name" value="SimpleInvestigator"/>
+  </bean>
+
+  <bean id="XenServerInvestigator" class="com.cloud.ha.XenServerInvestigator">
+    <property name="name" value="XenServerInvestigator"/>
+  </bean>
+
+  <bean id="UserVmDomRInvestigator" class="com.cloud.ha.UserVmDomRInvestigator">
+    <property name="name" value="PingInvestigator"/>
+  </bean>
+
+  <bean id="ManagementIPSystemVMInvestigator" class="com.cloud.ha.ManagementIPSystemVMInvestigator">
+    <property name="name" value="ManagementIPSysVMInvestigator"/>
+  </bean>
+
+  <!--
+    Fencers
+  -->
+  <bean id="XenServerFencer" class="com.cloud.ha.XenServerFencer">
+    <property name="name" value="XenServerFenceBuilder"/>
+  </bean>
+  <bean id="KVMFencer" class="com.cloud.ha.KVMFencer">
+    <property name="name" value="KVMFenceBuilder"/>
+  </bean>
+  <bean id="OvmFencer" class="com.cloud.ovm.hypervisor.OvmFencer">
+    <property name="name" value="OvmFenceBuilder"/>
+  </bean>
+
+  <bean id="XcpServerDiscoverer" class="com.cloud.hypervisor.xen.discoverer.XcpServerDiscoverer">
+    <property name="name" value="XCP Agent"/>
+  </bean>
+
+  <bean id="SimulatorSecondaryStorageDiscoverer" class="com.cloud.resource.SimulatorSecondaryDiscoverer">
+    <property name="name" value="SecondaryStorage"/>
+  </bean>
+
+  <bean id="SecondaryStorageDiscoverer" class="com.cloud.storage.secondary.SecondaryStorageDiscoverer">
+    <property name="name" value="SecondaryStorage"/>
+  </bean>
+
+  <bean id="KvmServerDiscoverer" class="com.cloud.hypervisor.kvm.discoverer.KvmServerDiscoverer">
+    <property name="name" value="KVM Agent"/>
+  </bean>
+
+  <bean id="SimulatorDiscoverer" class="com.cloud.resource.SimulatorDiscoverer">
+    <property name="name" value="Simulator Agent"/>
+  </bean>
+
+  <bean id="HypervServerDiscoverer" class="com.cloud.hypervisor.hyperv.HypervServerDiscoverer">
+    <property name="name" value="SCVMMServer"/>
+  </bean>
+
+  <bean id="OvmDiscoverer" class="com.cloud.ovm.hypervisor.OvmDiscoverer">
+    <property name="name" value="Ovm Discover"/>
+  </bean>
+
+  <bean id="FirstFitPlanner" class="com.cloud.deploy.FirstFitPlanner">
+    <property name="name" value="First Fit"/>
+  </bean>
+
+  <bean id="UserDispersingPlanner" class="com.cloud.deploy.UserDispersingPlanner">
+    <property name="name" value="UserDispersing"/>
+  </bean>
+
+  <bean id="UserConcentratedPodPlanner" class="com.cloud.deploy.UserConcentratedPodPlanner">
+    <property name="name" value="UserConcentratedPod"/>
+  </bean>
+
+  <bean id="HypervisorPlannerSelector" class="com.cloud.deploy.HypervisorVmPlannerSelector">
+    <property name="name" value="HypervisorPlannerSelector"/>
+  </bean>
+
+
+  <!--
+    Network Gurus
+  -->
+  <bean id="StorageNetworkGuru" class="com.cloud.network.guru.StorageNetworkGuru">
+    <property name="name" value="StorageNetworkGuru"/>
+  </bean>
+  <bean id="ExternalGuestNetworkGuru" class="com.cloud.network.guru.ExternalGuestNetworkGuru">
+    <property name="name" value="ExternalGuestNetworkGuru"/>
+  </bean>
+  <bean id="PublicNetworkGuru" class="com.cloud.network.guru.PublicNetworkGuru">
+    <property name="name" value="PublicNetworkGuru"/>
+  </bean>
+  <bean id="PodBasedNetworkGuru" class="com.cloud.network.guru.PodBasedNetworkGuru">
+    <property name="name" value="PodBasedNetworkGuru"/>
+  </bean>
+  <bean id="ControlNetworkGuru" class="com.cloud.network.guru.ControlNetworkGuru">
+    <property name="name" value="ControlNetworkGuru"/>
+  </bean>
+  <bean id="DirectNetworkGuru" class="com.cloud.network.guru.DirectNetworkGuru">
+    <property name="name" value="DirectNetworkGuru"/>
+  </bean>
+  <bean id="DirectPodBasedNetworkGuru" class="com.cloud.network.guru.DirectPodBasedNetworkGuru">
+    <property name="name" value="DirectPodBasedNetworkGuru"/>
+  </bean>
+  <bean id="OvsGuestNetworkGuru" class="com.cloud.network.guru.OvsGuestNetworkGuru">
+    <property name="name" value="OvsGuestNetworkGuru"/>
+  </bean>
+  <bean id="PrivateNetworkGuru" class="com.cloud.network.guru.PrivateNetworkGuru">
+    <property name="name" value="PrivateNetworkGuru"/>
+  </bean>
+
+  <!--
+   Hypervisor Gurus
+  -->
+  <bean id="XenServerGuru" class="com.cloud.hypervisor.XenServerGuru">
+    <property name="name" value="XenServerGuru"/>
+  </bean>
+
+  <bean id="KVMGuru" class="com.cloud.hypervisor.KVMGuru">
+    <property name="name" value="KVMGuru"/>
+  </bean>
+
+  <bean id="HypervGuru" class="com.cloud.hypervisor.guru.HypervGuru">
+    <property name="name" value="HypervGuru"/>
+  </bean>
+
+  <bean id="OvmGuru" class="com.cloud.ovm.hypervisor.OvmGuru">
+    <property name="name" value="OvmGuru"/>
+  </bean>
+
+  <bean id="SimulatorGuru" class="com.cloud.simulator.SimulatorGuru">
+    <property name="name" value="SimulatorGuru"/>
+  </bean>
+
+  <bean id="ClassicalPrimaryDataStoreProvider" class="org.apache.cloudstack.storage.datastore.provider.CloudStackPrimaryDataStoreProviderImpl">
+  </bean>
+
+</beans>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2e2046fe/setup/db/templates.simulator.sql
----------------------------------------------------------------------
diff --git a/setup/db/templates.simulator.sql b/setup/db/templates.simulator.sql
index 1324623..a804450 100755
--- a/setup/db/templates.simulator.sql
+++ b/setup/db/templates.simulator.sql
@@ -19,4 +19,4 @@
 INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type, image_data_store_id)
     VALUES (10, UUID(), 'simulator-domR', 'SystemVM Template (simulator)', 0, now(), 'SYSTEM', 0, 64, 1, 'http://nfs1.lab.vmops.com/templates/routing/debian/latest/systemvm.vhd.bz2', '', 0, 'SystemVM Template (simulator)', 'VHD', 15, 0, 1, 'Simulator', 1);
 INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text,  format, guest_os_id, featured, cross_zones, hypervisor_type, image_data_store_id)
-    VALUES (11, UUID(), 'simulator-Centos', 'CentOS 5.3(64-bit) no GUI (Simulator)', 1, now(), 'BUILTIN', 0, 64, 1, 'http://nfs1.lab.vmops.com/templates/centos53-x86_64/latest/f59f18fb-ae94-4f97-afd2-f84755767aca.vhd.bz2', '', 0, 'CentOS 5.3(64-bit) no GUI (Simulator)', 'VHD', 11, 1, 1, 'Simulator', 1);
+    VALUES (11, UUID(), 'simulator-Centos', 'CentOS 5.3(64-bit) no GUI (Simulator)', 1, now(), 'BUILTIN', 0, 64, 1, 'http://nfs1.lab.vmops.com/templates/centos53-x86_64/latest/f59f18fb-ae94-4f97-afd2-f84755767aca.vhd.bz2', '', 0, 'CentOS 5.3(64-bit) no GUI (Simulator)', 'VHD', 12, 1, 1, 'Simulator', 1);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2e2046fe/setup/dev/advanced.cfg
----------------------------------------------------------------------
diff --git a/setup/dev/advanced.cfg b/setup/dev/advanced.cfg
new file mode 100644
index 0000000..c031c2a
--- /dev/null
+++ b/setup/dev/advanced.cfg
@@ -0,0 +1,195 @@
+# 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
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+{
+    "zones": [
+        {
+            "name": "Sandbox-simulator",
+            "guestcidraddress": "10.1.1.0/24",
+            "dns1": "10.147.28.6",
+            "physical_networks": [
+                {
+                    "broadcastdomainrange": "Zone",
+                    "vlan": "100-200",
+                    "name": "Sandbox-pnet",
+                    "traffictypes": [
+                        {
+                            "typ": "Guest"
+                        },
+                        {
+                            "typ": "Management"
+                        },
+                        {
+                            "typ": "Public"
+                        }
+                    ],
+                    "providers": [
+                        {
+                            "broadcastdomainrange": "ZONE",
+                            "name": "VirtualRouter"
+                        },
+                        {
+                            "broadcastdomainrange": "ZONE",
+                            "name": "VpcVirtualRouter"
+                        }
+                    ]
+                }
+            ],
+            "ipranges": [
+                {
+                    "startip": "192.168.2.2",
+                    "endip": "192.168.2.200",
+                    "netmask": "255.255.255.0",
+                    "vlan": "50",
+                    "gateway": "192.168.2.1"
+                }
+            ],
+            "networktype": "Advanced",
+            "pods": [
+                {
+                    "endip": "172.16.15.200",
+                    "name": "POD0",
+                    "startip": "172.16.15.2",
+                    "netmask": "255.255.255.0",
+                    "clusters": [
+                        {
+                            "clustername": "C0",
+                            "hypervisor": "simulator",
+                            "hosts": [
+                                {
+                                    "username": "root",
+                                    "url": "http://sim/c0/h0",
+                                    "password": "password"
+                                },
+                                {
+                                    "username": "root",
+                                    "url": "http://sim/c0/h1",
+                                    "password": "password"
+                                }
+                            ],
+                            "clustertype": "CloudManaged",
+                            "primaryStorages": [
+                                {
+                                    "url": "nfs://10.147.28.6:/export/home/sandbox/primary",
+                                    "name": "PS0"
+                                }
+                            ]
+                        }
+                    ],
+                    "gateway": "172.16.15.1"
+                }
+            ],
+            "internaldns1": "10.147.28.6",
+            "secondaryStorages": [
+                {
+                    "url": "nfs://10.147.28.6:/export/home/sandbox/secondary"
+                }
+            ]
+        }
+    ],
+    "dbSvr": {
+        "dbSvr": "localhost",
+        "passwd": "cloud",
+        "db": "cloud",
+        "port": 3306,
+        "user": "cloud"
+    },
+    "logger": [
+        {
+            "name": "TestClient",
+            "file": "/tmp/testclient.log"
+        },
+        {
+            "name": "TestCase",
+            "file": "/tmp/testcase.log"
+        }
+    ],
+    "globalConfig": [
+        {
+            "name": "network.gc.wait",
+            "value": "60"
+        },
+        {
+            "name": "storage.cleanup.interval",
+            "value": "300"
+        },
+        {
+            "name": "vm.op.wait.interval",
+            "value": "5"
+        },
+        {
+            "name": "default.page.size",
+            "value": "10000"
+        },
+        {
+            "name": "network.gc.interval",
+            "value": "60"
+        },
+        {
+            "name": "instance.name",
+            "value": "QA"
+        },
+        {
+            "name": "workers",
+            "value": "10"
+        },
+        {
+            "name": "account.cleanup.interval",
+            "value": "600"
+        },
+        {
+            "name": "guest.domain.suffix",
+            "value": "sandbox.simulator"
+        },
+        {
+            "name": "expunge.delay",
+            "value": "60"
+        },
+        {
+            "name": "vm.allocation.algorithm",
+            "value": "random"
+        },
+        {
+            "name": "expunge.interval",
+            "value": "60"
+        },
+        {
+            "name": "expunge.workers",
+            "value": "3"
+        },
+        {
+            "name": "check.pod.cidrs",
+            "value": "true"
+        },
+        {
+            "name": "secstorage.allowed.internal.sites",
+            "value": "10.147.28.0/24"
+        },
+        {
+            "name": "direct.agent.load.size",
+            "value": "1000"
+        }
+    ],
+    "mgtSvr": [
+        {
+            "mgtSvrIp": "localhost",
+            "passwd": "password",
+            "user": "root",
+            "port": 8096
+        }
+    ]
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2e2046fe/setup/dev/basic.cfg
----------------------------------------------------------------------
diff --git a/setup/dev/basic.cfg b/setup/dev/basic.cfg
new file mode 100644
index 0000000..fb99b8b
--- /dev/null
+++ b/setup/dev/basic.cfg
@@ -0,0 +1,178 @@
+# 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
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+
+{
+    "zones": [
+        {
+            "name": "Sandbox-simulator",
+            "dns1": "8.8.8.8",
+            "physical_networks": [
+                {
+                    "broadcastdomainrange": "Zone",
+                    "name": "Sandbox-pnet",
+                    "traffictypes": [
+                        {
+                            "typ": "Guest"
+                        },
+                        {
+                            "typ": "Management"
+                        }
+                    ],
+                    "providers": [
+                        {
+                            "broadcastdomainrange": "ZONE",
+                            "name": "VirtualRouter"
+                        },
+                        {
+                            "broadcastdomainrange": "Pod",
+                            "name": "SecurityGroupProvider"
+                        }
+                    ]
+                }
+            ],
+            "securitygroupenabled": "true",
+            "networktype": "Basic",
+            "pods": [
+                {
+                    "endip": "172.16.15.254",
+                    "name": "POD0",
+                    "startip": "172.16.15.2",
+                    "guestIpRanges": [
+                        {
+                            "startip": "60.147.41.2",
+                            "endip": "60.147.41.254",
+                            "netmask": "255.255.255.0",
+                            "gateway": "60.147.40.1"
+                        }
+                    ],
+                    "netmask": "255.255.255.0",
+                    "clusters": [
+                        {
+                            "clustername": "C0",
+                            "hypervisor": "simulator",
+                            "hosts": [
+                                {
+                                    "username": "root",
+                                    "url": "http://sim/c0/h0",
+                                    "password": "password"
+                                }
+                            ],
+                            "clustertype": "CloudManaged",
+                            "primaryStorages": [
+                                {
+                                    "url": "nfs://nfsstor:/export/home/sandbox/primary",
+                                    "name": "PS0"
+                                }
+                            ]
+                        }
+                    ],
+                    "gateway": "172.16.15.1"
+                }
+            ],
+            "internaldns1": "8.8.8.8",
+            "secondaryStorages": [
+                {
+                    "url": "nfs://nfsstor:/export/home/sandbox/secondary"
+                }
+            ]
+        }
+    ],
+    "dbSvr": {
+        "dbSvr": "localhost",
+        "passwd": "cloud",
+        "db": "cloud",
+        "port": 3306,
+        "user": "cloud"
+    },
+    "logger": [
+        {
+            "name": "TestClient",
+            "file": "/var/log/testclient.log"
+        },
+        {
+            "name": "TestCase",
+            "file": "/var/log/testcase.log"
+        }
+    ],
+    "globalConfig": [
+        {
+            "name": "storage.cleanup.interval",
+            "value": "300"
+        },
+        {
+            "name": "direct.agent.load.size",
+            "value": "1000"
+        },
+        {
+            "name": "default.page.size",
+            "value": "10000"
+        },
+        {
+            "name": "instance.name",
+            "value": "QA"
+        },
+        {
+            "name": "workers",
+            "value": "10"
+        },
+        {
+            "name": "vm.op.wait.interval",
+            "value": "5"
+        },
+        {
+            "name": "account.cleanup.interval",
+            "value": "600"
+        },
+        {
+            "name": "guest.domain.suffix",
+            "value": "sandbox.simulator"
+        },
+        {
+            "name": "expunge.delay",
+            "value": "60"
+        },
+        {
+            "name": "vm.allocation.algorithm",
+            "value": "random"
+        },
+        {
+            "name": "expunge.interval",
+            "value": "60"
+        },
+        {
+            "name": "expunge.workers",
+            "value": "3"
+        },
+        {
+            "name": "secstorage.allowed.internal.sites",
+            "value": "172.16.15.0/24"
+        },
+        {
+            "name": "check.pod.cidrs",
+            "value": "true"
+        }
+    ],
+    "mgtSvr": [
+        {
+            "mgtSvrIp": "localhost",
+            "passwd": "password",
+            "user": "root",
+            "port": 8096
+        }
+    ]
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2e2046fe/test/integration/smoke/test_vm_life_cycle.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_vm_life_cycle.py b/test/integration/smoke/test_vm_life_cycle.py
index 719984d..143fea7 100644
--- a/test/integration/smoke/test_vm_life_cycle.py
+++ b/test/integration/smoke/test_vm_life_cycle.py
@@ -20,7 +20,6 @@
 import marvin
 from marvin.cloudstackTestCase import *
 from marvin.cloudstackAPI import *
-from marvin.remoteSSHClient import remoteSSHClient
 from marvin.integration.lib.utils import *
 from marvin.integration.lib.base import *
 from marvin.integration.lib.common import *
@@ -177,7 +176,7 @@ class TestDeployVM(cloudstackTestCase):
                         self.account
                         ]
 
-    @attr(tags = ["devcloud", "advanced", "advancedns", "smoke", "basic", "sg"])
+    @attr(tags = ["simulator", "devcloud", "advanced", "advancedns", "smoke", "basic", "sg"])
     def test_deploy_vm(self):
         """Test Deploy Virtual Machine
         """
@@ -231,6 +230,13 @@ class TestDeployVM(cloudstackTestCase):
                     self.virtual_machine.name,
                     "Check virtual machine name in listVirtualMachines"
                     )
+
+        self.assertEqual(
+            vm_response.state,
+            'Running',
+             msg="VM is not in Running state"
+        )
+
         return
 
     def tearDown(self):
@@ -996,6 +1002,4 @@ class TestVMLifeCycle(cloudstackTestCase):
                          False,
                          "Check if ISO is detached from virtual machine"
                          )
-        return
-
-
+        return
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2e2046fe/tools/marvin/marvin/sandbox/demo/simulator/simulator.cfg
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/sandbox/demo/simulator/simulator.cfg b/tools/marvin/marvin/sandbox/demo/simulator/simulator.cfg
deleted file mode 100644
index ca79460..0000000
--- a/tools/marvin/marvin/sandbox/demo/simulator/simulator.cfg
+++ /dev/null
@@ -1,196 +0,0 @@
-# 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
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-# 
-#   http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-
-{
-    "zones": [
-        {
-            "name": "Sandbox-simulator", 
-            "guestcidraddress": "10.1.1.0/24", 
-            "dns1": "10.147.28.6", 
-            "vlan": "100-200", 
-            "physical_networks": [
-                {
-                    "broadcastdomainrange": "Zone", 
-                    "name": "Sandbox-pnet", 
-                    "traffictypes": [
-                        {
-                            "typ": "Guest"
-                        }, 
-                        {
-                            "typ": "Management"
-                        }, 
-                        {
-                            "typ": "Public"
-                        }
-                    ], 
-                    "providers": [
-                        {
-                            "broadcastdomainrange": "ZONE", 
-                            "name": "VirtualRouter"
-                        }, 
-                        {
-                            "broadcastdomainrange": "ZONE", 
-                            "name": "VpcVirtualRouter"
-                        }
-                    ]
-                }
-            ], 
-            "ipranges": [
-                {
-                    "startip": "192.168.2.2", 
-                    "endip": "192.168.2.200", 
-                    "netmask": "255.255.255.0", 
-                    "vlan": "50", 
-                    "gateway": "192.168.2.1"
-                }
-            ], 
-            "networktype": "Advanced", 
-            "pods": [
-                {
-                    "endip": "172.16.15.200", 
-                    "name": "POD0", 
-                    "startip": "172.16.15.2", 
-                    "netmask": "255.255.255.0", 
-                    "clusters": [
-                        {
-                            "clustername": "C0", 
-                            "hypervisor": "simulator", 
-                            "hosts": [
-                                {
-                                    "username": "root", 
-                                    "url": "http://sim/c0/h0", 
-                                    "password": "password"
-                                }, 
-                                {
-                                    "username": "root", 
-                                    "url": "http://sim/c0/h1", 
-                                    "password": "password"
-                                }
-                            ], 
-                            "clustertype": "CloudManaged", 
-                            "primaryStorages": [
-                                {
-                                    "url": "nfs://10.147.28.6:/export/home/sandbox/primary", 
-                                    "name": "PS0"
-                                }
-                            ]
-                        }
-                    ], 
-                    "gateway": "172.16.15.1"
-                }
-            ], 
-            "internaldns1": "10.147.28.6", 
-            "secondaryStorages": [
-                {
-                    "url": "nfs://10.147.28.6:/export/home/sandbox/secondary"
-                }
-            ]
-        }
-    ], 
-    "dbSvr": {
-        "dbSvr": "localhost", 
-        "passwd": "cloud", 
-        "db": "cloud", 
-        "port": 3306, 
-        "user": "cloud"
-    }, 
-    "logger": [
-        {
-            "name": "TestClient", 
-            "file": "/tmp/testclient.log"
-        }, 
-        {
-            "name": "TestCase", 
-            "file": "/tmp/testcase.log"
-        }
-    ], 
-    "globalConfig": [
-        {
-            "name": "network.gc.wait", 
-            "value": "60"
-        }, 
-        {
-            "name": "storage.cleanup.interval", 
-            "value": "300"
-        }, 
-        {
-            "name": "vm.op.wait.interval", 
-            "value": "5"
-        }, 
-        {
-            "name": "default.page.size", 
-            "value": "10000"
-        }, 
-        {
-            "name": "network.gc.interval", 
-            "value": "60"
-        }, 
-        {
-            "name": "instance.name", 
-            "value": "QA"
-        }, 
-        {
-            "name": "workers", 
-            "value": "10"
-        }, 
-        {
-            "name": "account.cleanup.interval", 
-            "value": "600"
-        }, 
-        {
-            "name": "guest.domain.suffix", 
-            "value": "sandbox.simulator"
-        }, 
-        {
-            "name": "expunge.delay", 
-            "value": "60"
-        }, 
-        {
-            "name": "vm.allocation.algorithm", 
-            "value": "random"
-        }, 
-        {
-            "name": "expunge.interval", 
-            "value": "60"
-        }, 
-        {
-            "name": "expunge.workers", 
-            "value": "3"
-        }, 
-        {
-            "name": "check.pod.cidrs", 
-            "value": "true"
-        }, 
-        {
-            "name": "secstorage.allowed.internal.sites", 
-            "value": "10.147.28.0/24"
-        }, 
-        {
-            "name": "direct.agent.load.size", 
-            "value": "1000"
-        }
-    ], 
-    "mgtSvr": [
-        {
-            "mgtSvrIp": "localhost", 
-            "passwd": "password", 
-            "user": "root", 
-            "port": 8096
-        }
-    ]
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2e2046fe/tools/marvin/marvin/testSetupSuccess.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/testSetupSuccess.py b/tools/marvin/marvin/testSetupSuccess.py
index b1721c4..dcd15e6 100644
--- a/tools/marvin/marvin/testSetupSuccess.py
+++ b/tools/marvin/marvin/testSetupSuccess.py
@@ -76,6 +76,11 @@ class TestSetupSuccess(cloudstackTestCase):
                 delay(60) #wait a minute for retry
             self.assertNotEqual(retry, 0, "builtIn templates not ready in zone %s"%z.name)
 
+    def test_deployVmWithBuiltIn(self):
+        """
+        Deploys a VM with the built-in CentOS template
+        """
+
     @classmethod
     def tearDownClass(cls):
         pass

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2e2046fe/tools/marvin/pom.xml
----------------------------------------------------------------------
diff --git a/tools/marvin/pom.xml b/tools/marvin/pom.xml
index 194d784..ff5176f 100644
--- a/tools/marvin/pom.xml
+++ b/tools/marvin/pom.xml
@@ -48,8 +48,8 @@
         <version>1.2.1</version>
         <executions>
           <execution>
-            <id>compile</id>
-            <phase>compile</phase>
+            <id>generate-sources</id>
+            <phase>generate-sources</phase>
             <goals>
               <goal>exec</goal>
             </goals>
@@ -80,7 +80,6 @@
             </configuration>
           </execution>
         </executions>
-
       </plugin>
     </plugins>
   </build>
@@ -88,7 +87,9 @@
     <profile>
       <id>marvin</id>
       <activation>
-        <property><name>marvin.config</name></property>
+        <property>
+          <name>marvin.config</name>
+        </property>
       </activation>
       <build>
         <plugins>
@@ -96,24 +97,32 @@
             <groupId>org.codehaus.mojo</groupId>
             <artifactId>exec-maven-plugin</artifactId>
             <version>1.2.1</version>
-            <configuration>
-              <workingDirectory>${basedir}/marvin</workingDirectory>
-              <executable>python</executable>
-              <arguments>
-                <argument>deployAndRun.py</argument>
-                <argument>-c</argument>
-                <argument>${user.dir}/${marvin.config}</argument>
-                <argument>-t</argument>
-                <argument>/tmp/t.log</argument>
-                <argument>-r</argument>
-                <argument>/tmp/r.log</argument>
-                <argument>-f</argument>
-                <argument>${basedir}/marvin/testSetupSuccess.py</argument>
-              </arguments>
-            </configuration>
             <executions>
               <execution>
-                <phase>test</phase>
+                <id>pre-integration-test</id>
+                <phase>pre-integration-test</phase>
+                <goals>
+                  <goal>exec</goal>
+                </goals>
+                <configuration>
+                  <workingDirectory>${basedir}/marvin</workingDirectory>
+                  <executable>python</executable>
+                  <arguments>
+                    <argument>deployAndRun.py</argument>
+                    <argument>-c</argument>
+                    <argument>${user.dir}/${marvin.config}</argument>
+                    <argument>-t</argument>
+                    <argument>/tmp/t.log</argument>
+                    <argument>-r</argument>
+                    <argument>/tmp/r.log</argument>
+                    <argument>-f</argument>
+                    <argument>${basedir}/marvin/testSetupSuccess.py</argument>
+                  </arguments>
+                </configuration>
+              </execution>
+              <execution>
+                <id>integration-test</id>
+                <phase>integration-test</phase>
                 <goals>
                   <goal>exec</goal>
                 </goals>


[05/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
CLOUDSTACK-1825: Update AWSAPI server's XML configuration


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

Branch: refs/heads/kvm-vnc-listen
Commit: 9dcaf508c9bea022d1704ba545f935df84af782c
Parents: c3c7e7e
Author: Kelven Yang <ke...@gmail.com>
Authored: Wed Mar 27 14:51:58 2013 -0700
Committer: Kelven Yang <ke...@gmail.com>
Committed: Fri Mar 29 11:12:36 2013 -0700

----------------------------------------------------------------------
 awsapi/conf/applicationContext.xml.in |   24 +++++++++++++-----------
 1 files changed, 13 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9dcaf508/awsapi/conf/applicationContext.xml.in
----------------------------------------------------------------------
diff --git a/awsapi/conf/applicationContext.xml.in b/awsapi/conf/applicationContext.xml.in
index 0a24df2..8b3a022 100644
--- a/awsapi/conf/applicationContext.xml.in
+++ b/awsapi/conf/applicationContext.xml.in
@@ -37,17 +37,19 @@
   <!--
     @DB support
   -->
-  <aop:config proxy-target-class="true">
-    <aop:aspect id="dbContextBuilder" ref="transactionContextBuilder">
-        <aop:pointcut id="captureAnyMethod"
-            expression="execution(* *(..))" 
-        />
-        
-        <aop:around pointcut-ref="captureAnyMethod" method="AroundAnyMethod"/> 
-    </aop:aspect>
-
-  </aop:config>
   
+   <!--
+    @DB support
+  -->
+  <bean id="componentContext" class="com.cloud.utils.component.ComponentContext" />
   <bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" />
-
+ 
+  <bean id="instantiatePostProcessor" class="com.cloud.utils.component.ComponentInstantiationPostProcessor">
+    <property name="Interceptors">
+        <list>
+            <ref bean="transactionContextBuilder" />
+        </list>
+    </property>
+  </bean>
+ 
 </beans>


[45/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
CLOUDSTACK-1897: Ignore appliance definitions for license checking

Regression caused due to 8e917b1ad3c0d3076b0c6425ea3318a6d6dd5c25

Signed-off-by: Rohit Yadav <bh...@apache.org>


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

Branch: refs/heads/kvm-vnc-listen
Commit: 7e54f40a028a909e19756e07ebe05782f31cfd05
Parents: f52820f
Author: Rohit Yadav <bh...@apache.org>
Authored: Wed Apr 3 01:29:45 2013 +0530
Committer: Rohit Yadav <bh...@apache.org>
Committed: Wed Apr 3 01:30:38 2013 +0530

----------------------------------------------------------------------
 pom.xml |    8 +++-----
 1 files changed, 3 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7e54f40a/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 5e5f624..6208124 100644
--- a/pom.xml
+++ b/pom.xml
@@ -318,11 +318,9 @@
               <exclude>dist/console-proxy/js/jquery.js</exclude>
               <exclude>scripts/vm/systemvm/id_rsa.cloud</exclude>
               <exclude>tools/devcloud/basebuild/puppet-devcloudinitial/files/network.conf</exclude>
-              <exclude>tools/appliance/definitions/systemvmtemplate/base.sh</exclude>
-              <exclude>tools/appliance/definitions/systemvmtemplate/cleanup.sh</exclude>
-              <exclude>tools/appliance/definitions/systemvmtemplate/definition.rb</exclude>
-              <exclude>tools/appliance/definitions/systemvmtemplate/preseed.cfg</exclude>
-              <exclude>tools/appliance/definitions/systemvmtemplate/zerodisk.sh</exclude>
+              <exclude>tools/appliance/definitions/devcloud/*</exclude>
+              <exclude>tools/appliance/definitions/systemvmtemplate/*</exclude>
+              <exclude>tools/appliance/definitions/systemvmtemplate64/*</exclude>
               <exclude>tools/cli/cloudmonkey.egg-info/*</exclude>
               <exclude>tools/devcloud/src/deps/boxes/basebox-build/definition.rb</exclude>
               <exclude>tools/devcloud/src/deps/boxes/basebox-build/preseed.cfg</exclude>


[39/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
marvin+sync: apidiscovery sync and regenerate for marvin

Use codegenerator to sync marvin cloudstackAPIs from a given cloudstack
endpoint. Sometimes you want to synchronize marvin with the new APIs
that you have introduced locally or any alterations you may have made
the API. In such cases you can sync marvin's libraries as follows.

$sudo mvn -Pdeveloper,marvin.sync -Dendpoint=localhost -pl :cloud-marvin

This needs sudo privileges since it will call on pip to upgrade the existing
marvin installation on your machine. The endpoint is where your management
server is running and is exposing the API discovery plugin. A listApis call is
made and the resulting json deserialized back into marvin's library entities.

Signed-off-by: Prasanna Santhanam <ts...@apache.org>


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

Branch: refs/heads/kvm-vnc-listen
Commit: 82fd9382b7497f1ee753e1298a9db1aed325fbc6
Parents: 5d67c98
Author: Prasanna Santhanam <ts...@apache.org>
Authored: Thu Mar 28 18:19:15 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Tue Apr 2 19:56:28 2013 +0530

----------------------------------------------------------------------
 .../cloudstack/api/response/ServiceResponse.java   |    9 +-
 tools/marvin/marvin/cloudstackTestClient.py        |    8 -
 tools/marvin/marvin/codegenerator.py               |  213 ++++++++-------
 tools/marvin/marvin/integration/lib/base.py        |    2 +
 tools/marvin/marvin/marvinPlugin.py                |   16 +-
 tools/marvin/pom.xml                               |   71 +++++-
 6 files changed, 191 insertions(+), 128 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/82fd9382/api/src/org/apache/cloudstack/api/response/ServiceResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/ServiceResponse.java b/api/src/org/apache/cloudstack/api/response/ServiceResponse.java
index 445afcf..c93c55e 100644
--- a/api/src/org/apache/cloudstack/api/response/ServiceResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/ServiceResponse.java
@@ -16,13 +16,12 @@
 // under the License.
 package org.apache.cloudstack.api.response;
 
-import java.util.List;
-
+import com.cloud.serializer.Param;
+import com.google.gson.annotations.SerializedName;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.BaseResponse;
 
-import com.cloud.serializer.Param;
-import com.google.gson.annotations.SerializedName;
+import java.util.List;
 
 @SuppressWarnings("unused")
 public class ServiceResponse extends BaseResponse {
@@ -30,7 +29,7 @@ public class ServiceResponse extends BaseResponse {
     @SerializedName(ApiConstants.NAME) @Param(description="the service name")
     private String name;
 
-    @SerializedName(ApiConstants.PROVIDER) @Param(description="the service provider name")
+    @SerializedName(ApiConstants.PROVIDER) @Param(description="the service provider name", responseObject = ProviderResponse.class)
     private List<ProviderResponse> providers;
 
     @SerializedName("capability") @Param(description="the list of capabilities", responseObject = CapabilityResponse.class)

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/82fd9382/tools/marvin/marvin/cloudstackTestClient.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/cloudstackTestClient.py b/tools/marvin/marvin/cloudstackTestClient.py
index 4bfb90b..e4735e4 100644
--- a/tools/marvin/marvin/cloudstackTestClient.py
+++ b/tools/marvin/marvin/cloudstackTestClient.py
@@ -148,14 +148,6 @@ class cloudstackTestClient(object):
             return self.userApiClient
         return None
 
-    def synchronize(self):
-        """
-        synchronize the api from an endpoint
-        """
-        apiclient = self.getApiClient()
-        cmd = listApis.listApisCmd()
-        response = apiclient.listApis(cmd)
-
 
     '''FixME, httplib has issue if more than one thread submitted'''
     def submitCmdsAndWait(self, cmds, workers=1):

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/82fd9382/tools/marvin/marvin/codegenerator.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/codegenerator.py b/tools/marvin/marvin/codegenerator.py
index 5d9a2df..0622e5d 100644
--- a/tools/marvin/marvin/codegenerator.py
+++ b/tools/marvin/marvin/codegenerator.py
@@ -21,6 +21,7 @@ from optparse import OptionParser
 from textwrap import dedent
 import os
 import sys
+import urllib2
 
 class cmdParameterProperty(object):
     def __init__(self):
@@ -38,18 +39,21 @@ class cloudStackCmd:
         self.request = []
         self.response = []
 
+
 class codeGenerator:
+    """
+    Apache CloudStack- marvin python classes can be generated from the json returned by API discovery or from the
+    xml spec of commands generated by the ApiDocWriter. This class provides helper methods for these uses.
+    """
     space = "    "
-
     cmdsName = []
-    
-    def __init__(self, outputFolder, apiSpecFile):
+
+    def __init__(self, outputFolder):
         self.cmd = None
         self.code = ""
         self.required = []
         self.subclass = []
         self.outputFolder = outputFolder
-        self.apiSpecFile = apiSpecFile
         lic = """\
           # Licensed to the Apache Software Foundation (ASF) under one
           # or more contributor license agreements.  See the NOTICE file
@@ -58,19 +62,19 @@ class codeGenerator:
           # to you under the Apache License, Version 2.0 (the
           # "License"); you may not use this file except in compliance
           # with the License.  You may obtain a copy of the License at
-          # 
+          #
           #   http://www.apache.org/licenses/LICENSE-2.0
-          # 
+          #
           # Unless required by applicable law or agreed to in writing,
           # software distributed under the License is distributed on an
           # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
           # KIND, either express or implied.  See the License for the
           # specific language governing permissions and limitations
-          # under the License. 
+          # under the License.
 
           """
         self.license = dedent(lic)
-        
+
     def addAttribute(self, attr, pro):
         value = pro.value
         if pro.required:
@@ -80,11 +84,11 @@ class codeGenerator:
             self.code += self.space
             self.code += "''' " + pro.desc + " '''"
             self.code += "\n"
-        
+
         self.code += self.space
         self.code += attr + " = " + str(value)
         self.code += "\n"
-    
+
     def generateSubClass(self, name, properties):
         '''generate code for sub list'''
         subclass = 'class %s:\n'%name
@@ -97,44 +101,44 @@ class codeGenerator:
                 self.generateSubClass(pro.name, pro.subProperties)
             else:
                 subclass += self.space + self.space + 'self.%s = None\n'%pro.name
-        
+
         self.subclass.append(subclass)
 
     def generate(self, cmd):
-       
+
         self.cmd = cmd
         self.cmdsName.append(self.cmd.name)
         self.code = self.license
         self.code += "\n"
-        self.code += '"""%s"""\n'%self.cmd.desc  
+        self.code += '"""%s"""\n'%self.cmd.desc
         self.code += 'from baseCmd import *\n'
         self.code += 'from baseResponse import *\n'
         self.code += "class %sCmd (baseCmd):\n"%self.cmd.name
         self.code += self.space + "def __init__(self):\n"
-        
-        self.code += self.space + self.space + 'self.isAsync = "%s"\n' %self.cmd.async
-        
+
+        self.code += self.space + self.space + 'self.isAsync = "%s"\n' %str(self.cmd.async).lower()
+
         for req in self.cmd.request:
             if req.desc is not None:
                 self.code += self.space + self.space + '"""%s"""\n'%req.desc
             if req.required == "true":
                 self.code += self.space + self.space + '"""Required"""\n'
-            
+
             value = "None"
             if req.type == "list" or req.type == "map":
                 value = "[]"
-            
+
             self.code += self.space + self.space  + 'self.%s = %s\n'%(req.name,value)
             if req.required == "true":
                 self.required.append(req.name)
-        
+
         self.code += self.space + self.space + "self.required = ["
         for require in self.required:
             self.code += '"' + require + '",'
         self.code += "]\n"
         self.required = []
-        
-        
+
+
         """generate response code"""
         subItems = {}
         self.code += "\n"
@@ -146,17 +150,17 @@ class codeGenerator:
             for res in self.cmd.response:
                 if res.desc is not None:
                     self.code += self.space + self.space + '"""%s"""\n'%res.desc
-            
+
                 if len(res.subProperties) > 0:
                     self.code += self.space + self.space + 'self.%s = []\n'%res.name
                     self.generateSubClass(res.name, res.subProperties)
                 else:
                     self.code += self.space + self.space + 'self.%s = None\n'%res.name
         self.code += '\n'
-        
+
         for subclass in self.subclass:
             self.code += subclass + "\n"
-        
+
         fp = open(self.outputFolder + "/cloudstackAPI/%s.py"%self.cmd.name, "w")
         fp.write(self.code)
         fp.close()
@@ -165,7 +169,7 @@ class codeGenerator:
 
     def finalize(self):
         '''generate an api call'''
-        
+
         header = '"""Test Client for CloudStack API"""\n'
         imports = "import copy\n"
         initCmdsList = '__all__ = ['
@@ -174,33 +178,33 @@ class codeGenerator:
         body += self.space + 'def __init__(self, connection):\n'
         body += self.space + self.space + 'self.connection = connection\n'
         body += "\n"
-        
+
         body += self.space + 'def __copy__(self):\n'
         body += self.space + self.space + 'return CloudStackAPIClient(copy.copy(self.connection))\n'
         body += "\n"
-        
+
         for cmdName in self.cmdsName:
             body += self.space + 'def %s(self,command):\n'%cmdName
             body += self.space + self.space + 'response = %sResponse()\n'%cmdName
             body += self.space + self.space + 'response = self.connection.make_request(command, response)\n'
             body += self.space + self.space + 'return response\n'
             body += '\n'
-        
+
             imports += 'from %s import %sResponse\n'%(cmdName, cmdName)
             initCmdsList += '"%s",'%cmdName
-        
+
         fp = open(self.outputFolder + '/cloudstackAPI/cloudstackAPIClient.py', 'w')
         fp.write(self.license)
         for item in [header, imports, body]:
             fp.write(item)
         fp.close()
-        
+
         '''generate __init__.py'''
         initCmdsList = self.license + initCmdsList + '"cloudstackAPIClient"]'
         fp = open(self.outputFolder + '/cloudstackAPI/__init__.py', 'w')
         fp.write(initCmdsList)
         fp.close()
-        
+
         fp = open(self.outputFolder + '/cloudstackAPI/baseCmd.py', 'w')
         basecmd = self.license
         basecmd += '"""Base Command"""\n'
@@ -208,7 +212,7 @@ class codeGenerator:
         basecmd += self.space + 'pass\n'
         fp.write(basecmd)
         fp.close()
-        
+
         fp = open(self.outputFolder + '/cloudstackAPI/baseResponse.py', 'w')
         basecmd = self.license
         basecmd += '"""Base class for response"""\n'
@@ -216,7 +220,7 @@ class codeGenerator:
         basecmd += self.space + 'pass\n'
         fp.write(basecmd)
         fp.close()
-        
+
     def constructResponseFromXML(self, response):
         paramProperty = cmdParameterProperty()
         paramProperty.name = getText(response.getElementsByTagName('name'))
@@ -229,74 +233,84 @@ class codeGenerator:
                 paramProperty.subProperties.append(subProperty)
         return paramProperty
 
-    def constructResponseFromJSON(self, response):
-        paramProperty = cmdParameterProperty()
-        if response.has_key('name'):
-            paramProperty.name = response['name']
-        assert paramProperty.name
-
-        if response.has_key('description'):
-            paramProperty.desc = response['description']
-        if response.has_key('type') and response['type'] == 'list':
-            #Here list becomes a subproperty
-            paramProperty.name = paramProperty.name.split('(*)')[0]
-            for subresponse in response.getElementsByTagName('arguments')[0].getElementsByTagName('arg'):
-                subProperty = self.constructResponseFromXML(subresponse)
-                paramProperty.subProperties.append(subProperty)
-        return paramProperty
-
-    def loadCmdFromXML(self):
-        dom = xml.dom.minidom.parse(self.apiSpecFile)
+    def loadCmdFromXML(self, dom):
         cmds = []
         for cmd in dom.getElementsByTagName("command"):
             csCmd = cloudStackCmd()
             csCmd.name = getText(cmd.getElementsByTagName('name'))
             assert csCmd.name
-        
+
             desc = getText(cmd.getElementsByTagName('description'))
-            if desc: 
+            if desc:
                 csCmd.desc = desc
-    
+
             async = getText(cmd.getElementsByTagName('isAsync'))
             if async:
                 csCmd.async = async
-        
+
             for param in cmd.getElementsByTagName("request")[0].getElementsByTagName("arg"):
                 paramProperty = cmdParameterProperty()
-            
+
                 paramProperty.name = getText(param.getElementsByTagName('name'))
                 assert paramProperty.name
-            
+
                 required = param.getElementsByTagName('required')
                 if required:
                     paramProperty.required = getText(required)
-            
+
                 requestDescription = param.getElementsByTagName('description')
-                if requestDescription:            
+                if requestDescription:
                     paramProperty.desc = getText(requestDescription)
-            
+
                 type = param.getElementsByTagName("type")
                 if type:
                     paramProperty.type = getText(type)
-                
+
                 csCmd.request.append(paramProperty)
-        
+
             responseEle = cmd.getElementsByTagName("response")[0]
             for response in responseEle.getElementsByTagName("arg"):
                 if response.parentNode != responseEle:
                     continue
-            
+
                 paramProperty = self.constructResponseFromXML(response)
                 csCmd.response.append(paramProperty)
-            
+
             cmds.append(csCmd)
         return cmds
 
+    def generateCodeFromXML(self, apiSpecFile):
+        dom = xml.dom.minidom.parse(apiSpecFile)
+        cmds = self.loadCmdFromXML(dom)
+        for cmd in cmds:
+            self.generate(cmd)
+        self.finalize()
+
+    def constructResponseFromJSON(self, response):
+        paramProperty = cmdParameterProperty()
+        if response.has_key('name'):
+            paramProperty.name = response['name']
+        assert paramProperty.name, "%s has no property name"%response
+
+        if response.has_key('description'):
+            paramProperty.desc = response['description']
+        if response.has_key('type'):
+            if response['type'] in ['list', 'map', 'set']:
+            #Here list becomes a subproperty
+                if response.has_key('response'):
+                    for innerResponse in response['response']:
+                        subProperty = self.constructResponseFromJSON(innerResponse)
+                        paramProperty.subProperties.append(subProperty)
+            paramProperty.type = response['type']
+        return paramProperty
+
     def loadCmdFromJSON(self, apiStream):
         if apiStream is None:
             raise Exception("No APIs found through discovery")
 
-        apiDict = json.loads(apiStream)
+        jsonOut = apiStream.readlines()
+        assert len(jsonOut) > 0
+        apiDict = json.loads(jsonOut[0])
         if not apiDict.has_key('listapisresponse'):
             raise Exception("API discovery plugin response failed")
         if not apiDict['listapisresponse'].has_key('count'):
@@ -313,7 +327,7 @@ class codeGenerator:
             if cmd.has_key('description'):
                 csCmd.desc = cmd['description']
 
-            if cmd.has_key('async'):
+            if cmd.has_key('isasync'):
                 csCmd.async = cmd['isasync']
 
             for param in cmd['params']:
@@ -324,7 +338,7 @@ class codeGenerator:
                 assert paramProperty.name
 
                 if param.has_key('required'):
-                    paramProperty.required = param.getElementsByTagName('required')
+                    paramProperty.required = param['required']
 
                 if param.has_key('description'):
                     paramProperty.desc = param['description']
@@ -335,29 +349,25 @@ class codeGenerator:
                 csCmd.request.append(paramProperty)
 
             for response in cmd['response']:
-                paramProperty = self.constructResponseFromJSON(response)
-                csCmd.response.append(paramProperty)
+                #FIXME: ExtractImage related APIs return empty dicts in response
+                if len(response) > 0:
+                    paramProperty = self.constructResponseFromJSON(response)
+                    csCmd.response.append(paramProperty)
 
             cmds.append(csCmd)
         return cmds
 
-
-    def generateCodeFromXML(self):
-        cmds = self.loadCmdFromXML()
-        for cmd in cmds:
-            self.generate(cmd)
-        self.finalize()
-
-    def generateCodeFromJSON(self, apiJson):
+    def generateCodeFromJSON(self, endpointUrl):
         """
         Api Discovery plugin returns the supported APIs of a CloudStack endpoint.
         @return: The classes in cloudstackAPI/ formed from api discovery json
         """
-        with open(apiJson, 'r') as apiStream:
-            cmds = self.loadCmdFromJSON(apiStream)
-            for cmd in cmds:
-                self.generate(cmd)
-            self.finalize()
+        if endpointUrl.find('response=json') >= 0:
+                apiStream = urllib2.urlopen(endpointUrl)
+                cmds = self.loadCmdFromJSON(apiStream)
+                for cmd in cmds:
+                    self.generate(cmd)
+                self.finalize()
 
 def getText(elements):
     return elements[0].childNodes[0].nodeValue.strip()
@@ -365,20 +375,14 @@ def getText(elements):
 if __name__ == "__main__":
     parser = OptionParser()
   
-    parser.add_option("-o", "--output", dest="output", help="the root path where code genereted, default is .")
-    parser.add_option("-s", "--specfile", dest="spec", help="the path and name of the api spec xml file, default is /etc/cloud/cli/commands.xml")
-    
+    parser.add_option("-o", "--output", dest="output",
+        help="The path to the generated code entities, default is .")
+    parser.add_option("-s", "--specfile", dest="spec",
+        help="The path and name of the api spec xml file, default is /etc/cloud/cli/commands.xml")
+    parser.add_option("-e", "--endpoint", dest="endpoint",
+        help="The endpoint mgmt server (with open 8096) where apis are discovered, default is localhost")
+
     (options, args) = parser.parse_args()
-    
-    apiSpecFile = "/etc/cloud/cli/commands.xml"
-    if options.spec is not None:
-        apiSpecFile = options.spec
-    
-    if not os.path.exists(apiSpecFile):
-        print "the spec file %s does not exists"%apiSpecFile
-        print parser.print_help()
-        exit(1)
-    
 
     folder = "."
     if options.output is not None:
@@ -391,7 +395,18 @@ if __name__ == "__main__":
             print "Failed to create folder %s, due to %s"%(apiModule,sys.exc_info())
             print parser.print_help()
             exit(2)
-    
-    cg = codeGenerator(folder, apiSpecFile)
-    cg.generateCodeFromXML()
-    
+
+    apiSpecFile = "/etc/cloud/cli/commands.xml"
+    if options.spec is not None:
+        apiSpecFile = options.spec
+        if not os.path.exists(apiSpecFile):
+            print "the spec file %s does not exists"%apiSpecFile
+            print parser.print_help()
+            exit(1)
+
+    cg = codeGenerator(folder)
+    if options.spec is not None:
+        cg.generateCodeFromXML(apiSpecFile)
+    elif options.endpoint is not None:
+        endpointUrl='http://%s:8096/client/api?command=listApis&response=json'%options.endpoint
+        cg.generateCodeFromJSON(endpointUrl)

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/82fd9382/tools/marvin/marvin/integration/lib/base.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/integration/lib/base.py b/tools/marvin/marvin/integration/lib/base.py
index 3751d98..f3370eb 100644
--- a/tools/marvin/marvin/integration/lib/base.py
+++ b/tools/marvin/marvin/integration/lib/base.py
@@ -883,6 +883,8 @@ class PublicIPAddress:
 
         if accountid:
             cmd.account = accountid
+        elif "account" in services:
+            cmd.account = services["account"]
 
         if zoneid:
             cmd.zoneid = zoneid

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/82fd9382/tools/marvin/marvin/marvinPlugin.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/marvinPlugin.py b/tools/marvin/marvin/marvinPlugin.py
index 518f27f..46a8a4f 100644
--- a/tools/marvin/marvin/marvinPlugin.py
+++ b/tools/marvin/marvin/marvinPlugin.py
@@ -21,7 +21,6 @@ import logging
 import nose.core
 from marvin.cloudstackTestCase import cloudstackTestCase
 from marvin import deployDataCenter
-from marvin import apiSynchronizer
 from nose.plugins.base import Plugin
 from functools import partial
 
@@ -40,10 +39,6 @@ class MarvinPlugin(Plugin):
         self.enableOpt = "--with-marvin"
         self.logformat = logging.Formatter("%(asctime)s - %(levelname)s - %(name)s - %(message)s")
 
-        if options.sync:
-            self.do_sync(options.config)
-            return
-
         if options.debug_log:
             self.logger = logging.getLogger("NoseTestExecuteEngine")
             self.debug_stream = logging.FileHandler(options.debug_log) 
@@ -71,13 +66,6 @@ class MarvinPlugin(Plugin):
         
         self.testrunner = nose.core.TextTestRunner(stream=self.result_stream, descriptions=True, verbosity=2, config=config)
 
-    def do_sync(self, config):
-        """
-        Use the ApiDiscovery plugin exposed by the CloudStack mgmt server to rebuild the cloudStack API
-        """
-        apiSynchronizer.sync(config)
-
-    
     def options(self, parser, env):
         """
         Register command line options
@@ -96,9 +84,7 @@ class MarvinPlugin(Plugin):
                           help="The path to the testcase debug logs [DEBUG_LOG]")
         parser.add_option("--load", action="store_true", default=False, dest="load",
                           help="Only load the deployment configuration given")
-        parser.add_option("--sync", action="store_true", default=False, dest="sync",
-                          help="Sync the APIs from the CloudStack endpoint in marvin-config")
-        
+
         Plugin.options(self, parser, env)
  
     def __init__(self):

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/82fd9382/tools/marvin/pom.xml
----------------------------------------------------------------------
diff --git a/tools/marvin/pom.xml b/tools/marvin/pom.xml
index 4f012ee..a5cbd31 100644
--- a/tools/marvin/pom.xml
+++ b/tools/marvin/pom.xml
@@ -83,8 +83,77 @@
       </plugin>
     </plugins>
   </build>
+  <!-- Custom profiles for sync and integration tests-->
   <profiles>
     <profile>
+      <id>sync</id>
+      <activation>
+        <property>
+          <name>endpoint</name>
+          <value>localhost</value>
+        </property>
+      </activation>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.codehaus.mojo</groupId>
+            <artifactId>exec-maven-plugin</artifactId>
+            <version>1.2.1</version>
+            <executions>
+              <execution>
+                <id>generate-sources</id>
+                <phase>generate-sources</phase>
+                <goals>
+                  <goal>exec</goal>
+                </goals>
+                <configuration>
+                  <workingDirectory>${basedir}/marvin</workingDirectory>
+                  <executable>python</executable>
+                  <arguments>
+                    <argument>codegenerator.py</argument>
+                    <argument>-e</argument>
+                    <argument>${endpoint}</argument>
+                    <echo>Generating ${project.artifactId} API classes}</echo>
+                  </arguments>
+                </configuration>
+              </execution>
+              <execution>
+                <id>package</id>
+                <phase>package</phase>
+                <goals>
+                  <goal>exec</goal>
+                </goals>
+                <configuration>
+                  <workingDirectory>${exec.workingdir}</workingDirectory>
+                  <executable>python</executable>
+                  <arguments>
+                    <argument>setup.py</argument>
+                    <argument>sdist</argument>
+                  </arguments>
+                </configuration>
+              </execution>
+              <execution>
+                <id>install</id>
+                <phase>install</phase>
+                <goals>
+                  <goal>exec</goal>
+                </goals>
+                <configuration>
+                  <workingDirectory>${basedir}/dist</workingDirectory>
+                  <executable>pip</executable>
+                  <arguments>
+                    <argument>install</argument>
+                    <argument>--upgrade</argument>
+                    <argument>Marvin-0.1.0.tar.gz</argument>
+                  </arguments>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+    <profile>
       <id>marvin</id>
       <activation>
         <property>
@@ -128,7 +197,7 @@
                 </goals>
                 <configuration>
                   <workingDirectory>${basedir}/marvin</workingDirectory>
-                  <executable>/usr/local/bin/nosetests</executable>
+                  <executable>nosetests</executable>
                   <arguments>
                     <argument>--with-marvin</argument>
                     <argument>--marvin-config</argument>


[46/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
Retire unused files to avoid confusions


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

Branch: refs/heads/kvm-vnc-listen
Commit: 58c962ef15d507226a8cc0eb18abca23142cff1f
Parents: 7e54f40
Author: Kelven Yang <ke...@gmail.com>
Authored: Tue Apr 2 15:53:09 2013 -0700
Committer: Kelven Yang <ke...@gmail.com>
Committed: Tue Apr 2 15:55:41 2013 -0700

----------------------------------------------------------------------
 .../configuration/DefaultInterceptorLibrary.java   |   33 ----
 server/src/com/cloud/event/ActionEventUtils.java   |  114 ---------------
 .../utils/component/AnnotationInterceptor.java     |   36 -----
 .../utils/component/ComponentMethodProxyCache.java |   90 ------------
 .../cloud/utils/component/InterceptorLibrary.java  |   25 ---
 .../utils/component/MatchAnyMethodPointcut.java    |   27 ----
 utils/src/com/cloud/utils/db/DatabaseCallback.java |   84 -----------
 .../com/cloud/utils/db/DatabaseCallbackFilter.java |   58 --------
 8 files changed, 0 insertions(+), 467 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58c962ef/server/src/com/cloud/configuration/DefaultInterceptorLibrary.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/DefaultInterceptorLibrary.java b/server/src/com/cloud/configuration/DefaultInterceptorLibrary.java
deleted file mode 100644
index 13a22db..0000000
--- a/server/src/com/cloud/configuration/DefaultInterceptorLibrary.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// 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
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.configuration;
-
-import com.cloud.event.ActionEventUtils;
-import com.cloud.utils.component.AnnotationInterceptor;
-import com.cloud.utils.component.InterceptorLibrary;
-import com.cloud.utils.db.DatabaseCallback;
-
-import java.util.List;
-
-public class DefaultInterceptorLibrary implements InterceptorLibrary {
-
-    @Override
-    public void addInterceptors(List<AnnotationInterceptor<?>> interceptors) {
-        interceptors.add(new DatabaseCallback());
-        interceptors.add(new ActionEventUtils.ActionEventCallback());
-    }
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58c962ef/server/src/com/cloud/event/ActionEventUtils.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/event/ActionEventUtils.java b/server/src/com/cloud/event/ActionEventUtils.java
index 3f3ca68..a2d4906 100755
--- a/server/src/com/cloud/event/ActionEventUtils.java
+++ b/server/src/com/cloud/event/ActionEventUtils.java
@@ -22,14 +22,9 @@ import com.cloud.server.ManagementServer;
 import com.cloud.user.Account;
 import com.cloud.user.AccountVO;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.user.dao.UserDao;
-import com.cloud.utils.component.AnnotationInterceptor;
 import com.cloud.utils.component.ComponentContext;
-import net.sf.cglib.proxy.Callback;
-import net.sf.cglib.proxy.MethodInterceptor;
-import net.sf.cglib.proxy.MethodProxy;
 import org.apache.cloudstack.framework.events.EventBus;
 import org.apache.cloudstack.framework.events.EventBusException;
 import org.apache.log4j.Logger;
@@ -38,8 +33,6 @@ import org.springframework.stereotype.Component;
 
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
-import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -185,111 +178,4 @@ public class ActionEventUtils {
         AccountVO account = _accountDao.findByIdIncludingRemoved(accountId);
         return account.getDomainId();
     }
-
-    public static class ActionEventCallback implements MethodInterceptor, AnnotationInterceptor<EventVO> {
-
-        @Override
-        public Object intercept(Object object, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
-            EventVO event = interceptStart(method);
-            boolean success = true;
-            try {
-                return methodProxy.invokeSuper(object, args);
-            } catch (Exception e){
-                success = false;
-                interceptException(method, event);
-                throw e;
-            } finally {
-                if(success){
-                    interceptComplete(method, event);
-                }
-            }
-        }
-
-        @Override
-        public boolean needToIntercept(AnnotatedElement element) {
-            if (!(element instanceof Method)) {
-                return false;
-
-            }
-            Method method = (Method)element;
-            ActionEvent actionEvent = method.getAnnotation(ActionEvent.class);
-            if (actionEvent != null) {
-                return true;
-            }
-
-            return false;
-        }
-
-        @Override
-        public EventVO interceptStart(AnnotatedElement element) {
-            EventVO event = null;
-            Method method = (Method)element;
-            ActionEvent actionEvent = method.getAnnotation(ActionEvent.class);
-            if (actionEvent != null) {
-                boolean async = actionEvent.async();
-                if(async){
-                    UserContext ctx = UserContext.current();
-                    long userId = ctx.getCallerUserId();
-                    long accountId = ctx.getAccountId();
-                    long startEventId = ctx.getStartEventId();
-                    String eventDescription = actionEvent.eventDescription();
-                    if(ctx.getEventDetails() != null){
-                        eventDescription += ". "+ctx.getEventDetails();
-                    }
-                    ActionEventUtils.onStartedActionEvent(userId, accountId, actionEvent.eventType(), eventDescription, startEventId);
-                }
-            }
-            return event;
-        }
-
-        @Override
-        public void interceptComplete(AnnotatedElement element, EventVO event) {
-            Method method = (Method)element;
-            ActionEvent actionEvent = method.getAnnotation(ActionEvent.class);
-            if (actionEvent != null) {
-                UserContext ctx = UserContext.current();
-                long userId = ctx.getCallerUserId();
-                long accountId = ctx.getAccountId();
-                long startEventId = ctx.getStartEventId();
-                String eventDescription = actionEvent.eventDescription();
-                if(ctx.getEventDetails() != null){
-                    eventDescription += ". "+ctx.getEventDetails();
-                }
-                if(actionEvent.create()){
-                    //This start event has to be used for subsequent events of this action
-                    startEventId = ActionEventUtils.onCreatedActionEvent(userId, accountId, EventVO.LEVEL_INFO, actionEvent.eventType(), "Successfully created entity for " + eventDescription);
-                    ctx.setStartEventId(startEventId);
-                } else {
-                    ActionEventUtils.onCompletedActionEvent(userId, accountId, EventVO.LEVEL_INFO, actionEvent.eventType(), "Successfully completed " + eventDescription, startEventId);
-                }
-            }
-        }
-
-        @Override
-        public void interceptException(AnnotatedElement element, EventVO event) {
-            Method method = (Method)element;
-            ActionEvent actionEvent = method.getAnnotation(ActionEvent.class);
-            if (actionEvent != null) {
-                UserContext ctx = UserContext.current();
-                long userId = ctx.getCallerUserId();
-                long accountId = ctx.getAccountId();
-                long startEventId = ctx.getStartEventId();
-                String eventDescription = actionEvent.eventDescription();
-                if(ctx.getEventDetails() != null){
-                    eventDescription += ". "+ctx.getEventDetails();
-                }
-                if(actionEvent.create()){
-                    long eventId = ActionEventUtils.onCreatedActionEvent(userId, accountId, EventVO.LEVEL_ERROR, actionEvent.eventType(), "Error while creating entity for " + eventDescription);
-                    ctx.setStartEventId(eventId);
-                } else {
-                    ActionEventUtils.onCompletedActionEvent(userId, accountId, EventVO.LEVEL_ERROR, actionEvent.eventType(), "Error while " + eventDescription, startEventId);
-                }
-            }
-        }
-
-        @Override
-        public Callback getCallback() {
-            return this;
-        }
-    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58c962ef/utils/src/com/cloud/utils/component/AnnotationInterceptor.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/component/AnnotationInterceptor.java b/utils/src/com/cloud/utils/component/AnnotationInterceptor.java
deleted file mode 100644
index e69862c..0000000
--- a/utils/src/com/cloud/utils/component/AnnotationInterceptor.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// 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
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// the License.  You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.utils.component;
-
-import java.lang.reflect.AnnotatedElement;
-
-import net.sf.cglib.proxy.Callback;
-
-/**
- *  AnnotationIntercepter says it can intercept an annotation.
- */
-public interface AnnotationInterceptor<T> {
-    boolean needToIntercept(AnnotatedElement element);
-    
-    T interceptStart(AnnotatedElement element);
-    
-    void interceptComplete(AnnotatedElement element, T attach);
-    
-    void interceptException(AnnotatedElement element, T attach);
-    
-    Callback getCallback();
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58c962ef/utils/src/com/cloud/utils/component/ComponentMethodProxyCache.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/component/ComponentMethodProxyCache.java b/utils/src/com/cloud/utils/component/ComponentMethodProxyCache.java
deleted file mode 100644
index ea3b685..0000000
--- a/utils/src/com/cloud/utils/component/ComponentMethodProxyCache.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// 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
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// the License.  You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package com.cloud.utils.component;
-
-import java.lang.ref.WeakReference;
-import java.lang.reflect.Method;
-import java.util.WeakHashMap;
-
-public class ComponentMethodProxyCache {
-
-	private static WeakHashMap<TargetKey, WeakReference<Method>> s_cache = new WeakHashMap<TargetKey, WeakReference<Method>>();
-	
-	public ComponentMethodProxyCache() {
-	}
-	
-	public static Method getTargetMethod(Method method, Object target) {
-		synchronized(s_cache) {
-			WeakReference<Method> targetMethod = s_cache.get(new TargetKey(method, target));
-			if(targetMethod != null && targetMethod.get() != null)
-				return targetMethod.get();
-
-        	Class<?> clazz = target.getClass();
-        	for(Method m : clazz.getMethods()) {
-        		if(isMethodMatched(method, m)) {
-        			s_cache.put(new TargetKey(method, target), new WeakReference<Method>(m));
-        			return m;
-        		}
-        	}
-			
-        	return method;
-		}
-	}
-	
-	private static boolean isMethodMatched(Method m1, Method m2) {
-		if(!m1.getName().equals(m2.getName()))
-			return false;
-		
-		Class<?>[] params1 = m1.getParameterTypes();
-		Class<?>[] params2 = m2.getParameterTypes();
-		
-		if(params1.length != params2.length)
-			return false;
-		
-		for(int i = 0; i < params1.length; i++) {
-			if(!params1[i].isAssignableFrom(params2[i]))
-				return false;
-		}
-		
-		return true;
-	}
-	
-	public static class TargetKey {
-		Method _method;
-		Object _target;
-		
-		public TargetKey(Method method, Object target) {
-			_method = method;
-			_target = target;
-		}
-		
-		@Override
-	    public boolean equals(Object obj) {
-			if(!(obj instanceof TargetKey))
-				return false;
-			
-			// for target object, we just check the reference
-			return _method.equals(((TargetKey)obj)._method) &&
-					_target == ((TargetKey)obj)._target;
-		}
-		
-	    public int hashCode() {
-	    	return _target.hashCode() ^ _target.hashCode();
-	    }
-	}
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58c962ef/utils/src/com/cloud/utils/component/InterceptorLibrary.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/component/InterceptorLibrary.java b/utils/src/com/cloud/utils/component/InterceptorLibrary.java
deleted file mode 100644
index 96be50b..0000000
--- a/utils/src/com/cloud/utils/component/InterceptorLibrary.java
+++ /dev/null
@@ -1,25 +0,0 @@
-// 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
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// the License.  You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.utils.component;
-
-import java.util.List;
-
-public interface InterceptorLibrary {
-    
-    void addInterceptors(List<AnnotationInterceptor<?>> interceptors);
-
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58c962ef/utils/src/com/cloud/utils/component/MatchAnyMethodPointcut.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/component/MatchAnyMethodPointcut.java b/utils/src/com/cloud/utils/component/MatchAnyMethodPointcut.java
deleted file mode 100644
index dd59734..0000000
--- a/utils/src/com/cloud/utils/component/MatchAnyMethodPointcut.java
+++ /dev/null
@@ -1,27 +0,0 @@
-// 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
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// the License.  You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.utils.component;
-
-import java.lang.reflect.Method;
-
-import org.springframework.aop.support.StaticMethodMatcherPointcut;
-
-public class MatchAnyMethodPointcut extends StaticMethodMatcherPointcut {
-	public boolean matches(Method method, Class<?> cls) {
-		return true;
-    }
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58c962ef/utils/src/com/cloud/utils/db/DatabaseCallback.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/db/DatabaseCallback.java b/utils/src/com/cloud/utils/db/DatabaseCallback.java
deleted file mode 100644
index 718acf5..0000000
--- a/utils/src/com/cloud/utils/db/DatabaseCallback.java
+++ /dev/null
@@ -1,84 +0,0 @@
-// 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
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// the License.  You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.utils.db;
-
-import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Method;
-
-import net.sf.cglib.proxy.Callback;
-import net.sf.cglib.proxy.MethodInterceptor;
-import net.sf.cglib.proxy.MethodProxy;
-
-import com.cloud.utils.component.AnnotationInterceptor;
-
-public class DatabaseCallback implements MethodInterceptor, AnnotationInterceptor<Transaction> {
-
-    @Override
-    public Object intercept(Object object, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
-        Transaction txn = interceptStart(method);
-        try {
-            return methodProxy.invokeSuper(object, args);
-        } finally {
-            interceptComplete(method, txn);
-        }
-    }
-
-    @Override
-    public boolean needToIntercept(AnnotatedElement element) {
-        if (!(element instanceof Method)) {
-            return false;
-            
-        }
-        Method method = (Method)element;
-        DB db = method.getAnnotation(DB.class);
-        if (db != null) {
-            return db.txn();
-        }
-        
-        Class<?> clazz = method.getDeclaringClass();
-        do {
-            db = clazz.getAnnotation(DB.class);
-            if (db != null) {
-                return db.txn();
-            }
-            clazz = clazz.getSuperclass();
-        } while (clazz != Object.class && clazz != null);
-        
-        return false;
-    }
-
-    @Override
-    public Transaction interceptStart(AnnotatedElement element) {
-        return Transaction.open(((Method)element).getName());
-    }
-
-    @Override
-    public void interceptComplete(AnnotatedElement element, Transaction txn) {
-        txn.close();
-    }
-
-    @Override
-    public void interceptException(AnnotatedElement element, Transaction txn) {
-        txn.close();
-    }
-
-    @Override
-    public Callback getCallback() {
-        return this;
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58c962ef/utils/src/com/cloud/utils/db/DatabaseCallbackFilter.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/db/DatabaseCallbackFilter.java b/utils/src/com/cloud/utils/db/DatabaseCallbackFilter.java
deleted file mode 100755
index 7bace70..0000000
--- a/utils/src/com/cloud/utils/db/DatabaseCallbackFilter.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// 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
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// the License.  You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.utils.db;
-
-import java.lang.reflect.Method;
-
-import net.sf.cglib.proxy.CallbackFilter;
-
-public class DatabaseCallbackFilter implements CallbackFilter {
-    @Override
-    public int accept(Method method) {
-        return checkAnnotation(method) ? 1 : 0;
-    }
-    
-    public static boolean checkAnnotation(Method method) {
-    	/*Check self*/
-        DB db = method.getAnnotation(DB.class);
-        if (db != null) {
-            return db.txn();
-        }
-        Class<?> clazz = method.getDeclaringClass();
-        
-        /*Check parent method*/
-        try {
-	        Method pMethod = clazz.getMethod(method.getName(), method.getParameterTypes());
-	        db = pMethod.getAnnotation(DB.class);
-	        if (db != null) {
-	            return db.txn();
-	        }
-        } catch (SecurityException e) {
-        } catch (NoSuchMethodException e) {
-        }
-        
-        /*Check class's annotation and ancestor's annotation*/
-        do {
-            db = clazz.getAnnotation(DB.class);
-            if (db != null) {
-                return db.txn();
-            }
-            clazz = clazz.getSuperclass();
-        } while (clazz != Object.class && clazz != null);
-        return false;
-    }
-}


[38/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
marvin+apidiscovery: Extend API discovery plugin

API discovery plugin will return embedded entities for marvin to
discovery and generate it's API classes.

Signed-off-by: Prasanna Santhanam <ts...@apache.org>


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

Branch: refs/heads/kvm-vnc-listen
Commit: 5d67c98e5b7b763fde5ea87850e9cd7bafd2a4e1
Parents: d4dc264
Author: Prasanna Santhanam <ts...@apache.org>
Authored: Tue Mar 26 18:29:23 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Tue Apr 2 18:31:30 2013 +0530

----------------------------------------------------------------------
 client/pom.xml                                     |    5 -
 .../api/response/ApiDiscoveryResponse.java         |    4 +
 .../api/response/ApiResponseResponse.java          |   15 ++-
 .../discovery/ApiDiscoveryServiceImpl.java         |  167 +++++++++------
 .../cloud/api/response/ApiResponseSerializer.java  |   32 +--
 .../api/response/EmptyFieldExclusionStrategy.java  |   40 ++++
 test/integration/smoke/test_vm_life_cycle.py       |   17 ++-
 tools/marvin/marvin/cloudstackTestClient.py        |   15 +-
 tools/marvin/marvin/codegenerator.py               |   96 ++++++++-
 tools/marvin/marvin/marvinPlugin.py                |   14 ++
 10 files changed, 295 insertions(+), 110 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5d67c98e/client/pom.xml
----------------------------------------------------------------------
diff --git a/client/pom.xml b/client/pom.xml
index 91dfece..35588aa 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -91,11 +91,6 @@
       <version>${project.version}</version>
     </dependency>
     <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-hypervisor-ucs</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
        <groupId>org.apache.cloudstack</groupId>
        <artifactId>cloud-plugin-hypervisor-ovm</artifactId>
        <version>${project.version}</version>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5d67c98e/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiDiscoveryResponse.java
----------------------------------------------------------------------
diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiDiscoveryResponse.java b/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiDiscoveryResponse.java
index 77484f0..ce7eb49 100644
--- a/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiDiscoveryResponse.java
+++ b/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiDiscoveryResponse.java
@@ -47,6 +47,9 @@ public class ApiDiscoveryResponse extends BaseResponse {
     @SerializedName(ApiConstants.RESPONSE)  @Param(description="api response fields", responseObject = ApiResponseResponse.class)
     private Set<ApiResponseResponse> apiResponse;
 
+    @SerializedName(ApiConstants.TYPE) @Param(description="response field type")
+    private String type;
+
     public ApiDiscoveryResponse(){
         params = new HashSet<ApiParameterResponse>();
         apiResponse = new HashSet<ApiResponseResponse>();
@@ -81,6 +84,7 @@ public class ApiDiscoveryResponse extends BaseResponse {
         this.isAsync = isAsync;
     }
 
+
     public boolean getAsync() {
         return isAsync;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5d67c98e/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiResponseResponse.java
----------------------------------------------------------------------
diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiResponseResponse.java b/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiResponseResponse.java
index b96295e..1433879 100644
--- a/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiResponseResponse.java
+++ b/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiResponseResponse.java
@@ -16,11 +16,14 @@
 // under the License.
 package org.apache.cloudstack.api.response;
 
-import org.apache.cloudstack.api.ApiConstants;
 import com.cloud.serializer.Param;
 import com.google.gson.annotations.SerializedName;
+import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.BaseResponse;
 
+import java.util.HashSet;
+import java.util.Set;
+
 public class ApiResponseResponse extends BaseResponse {
     @SerializedName(ApiConstants.NAME) @Param(description="the name of the api response field")
     private String name;
@@ -31,6 +34,9 @@ public class ApiResponseResponse extends BaseResponse {
     @SerializedName(ApiConstants.TYPE) @Param(description="response field type")
     private String type;
 
+    @SerializedName(ApiConstants.RESPONSE)  @Param(description="api response fields")
+    private Set<ApiResponseResponse> apiResponse;
+
     public void setName(String name) {
         this.name = name;
     }
@@ -42,4 +48,11 @@ public class ApiResponseResponse extends BaseResponse {
     public void setType(String type) {
         this.type = type;
     }
+
+    public void addApiResponse(ApiResponseResponse childApiResponse) {
+        if(this.apiResponse == null) {
+            this.apiResponse = new HashSet<ApiResponseResponse>();
+        }
+        this.apiResponse.add(childApiResponse);
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5d67c98e/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java
----------------------------------------------------------------------
diff --git a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java
index b371488..2d7dbd1 100755
--- a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java
+++ b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java
@@ -16,25 +16,14 @@
 // under the License.
 package org.apache.cloudstack.discovery;
 
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.PostConstruct;
-import javax.ejb.Local;
-import javax.inject.Inject;
-
+import com.cloud.serializer.Param;
+import com.cloud.user.User;
+import com.cloud.utils.ReflectUtil;
+import com.cloud.utils.StringUtils;
+import com.cloud.utils.component.PluggableService;
+import com.google.gson.annotations.SerializedName;
 import org.apache.cloudstack.acl.APIChecker;
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.BaseAsyncCmd;
-import org.apache.cloudstack.api.BaseAsyncCreateCmd;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.BaseResponse;
-import org.apache.cloudstack.api.Parameter;
+import org.apache.cloudstack.api.*;
 import org.apache.cloudstack.api.command.user.discovery.ListApisCmd;
 import org.apache.cloudstack.api.response.ApiDiscoveryResponse;
 import org.apache.cloudstack.api.response.ApiParameterResponse;
@@ -43,12 +32,11 @@ import org.apache.cloudstack.api.response.ListResponse;
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
-import com.cloud.serializer.Param;
-import com.cloud.user.User;
-import com.cloud.utils.ReflectUtil;
-import com.cloud.utils.StringUtils;
-import com.cloud.utils.component.PluggableService;
-import com.google.gson.annotations.SerializedName;
+import javax.annotation.PostConstruct;
+import javax.ejb.Local;
+import javax.inject.Inject;
+import java.lang.reflect.Field;
+import java.util.*;
 
 @Component
 @Local(value = ApiDiscoveryService.class)
@@ -69,9 +57,9 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService {
             long startTime = System.nanoTime();
             s_apiNameDiscoveryResponseMap = new HashMap<String, ApiDiscoveryResponse>();
             Set<Class<?>> cmdClasses = new HashSet<Class<?>>();
-            for(PluggableService service: _services) {
+            for(PluggableService service: _services) {
                 s_logger.debug(String.format("getting api commands of service: %s", service.getClass().getName()));
-                cmdClasses.addAll(service.getCommands());
+                cmdClasses.addAll(service.getCommands());
             }
             cmdClasses.addAll(this.getCommands());
             cacheResponseMap(cmdClasses);
@@ -80,72 +68,39 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService {
         }
     }
 
-    protected void cacheResponseMap(Set<Class<?>> cmdClasses) {
+    protected Map<String, List<String>> cacheResponseMap(Set<Class<?>> cmdClasses) {
         Map<String, List<String>> responseApiNameListMap = new HashMap<String, List<String>>();
 
         for(Class<?> cmdClass: cmdClasses) {
             APICommand apiCmdAnnotation = cmdClass.getAnnotation(APICommand.class);
-            if (apiCmdAnnotation == null)
+            if (apiCmdAnnotation == null) {
                 apiCmdAnnotation = cmdClass.getSuperclass().getAnnotation(APICommand.class);
+            }
             if (apiCmdAnnotation == null
                     || !apiCmdAnnotation.includeInApiDoc()
-                    || apiCmdAnnotation.name().isEmpty())
+                    || apiCmdAnnotation.name().isEmpty()) {
                 continue;
+            }
 
             String apiName = apiCmdAnnotation.name();
+            ApiDiscoveryResponse response = getCmdRequestMap(cmdClass, apiCmdAnnotation);
+
             String responseName = apiCmdAnnotation.responseObject().getName();
             if (!responseName.contains("SuccessResponse")) {
-                if (!responseApiNameListMap.containsKey(responseName))
+                if (!responseApiNameListMap.containsKey(responseName)) {
                     responseApiNameListMap.put(responseName, new ArrayList<String>());
+                }
                 responseApiNameListMap.get(responseName).add(apiName);
             }
-            ApiDiscoveryResponse response = new ApiDiscoveryResponse();
-            response.setName(apiName);
-            response.setDescription(apiCmdAnnotation.description());
-            if (!apiCmdAnnotation.since().isEmpty())
-                response.setSince(apiCmdAnnotation.since());
             response.setRelated(responseName);
 
+
             Field[] responseFields = apiCmdAnnotation.responseObject().getDeclaredFields();
             for(Field responseField: responseFields) {
-                SerializedName serializedName = responseField.getAnnotation(SerializedName.class);
-                if(serializedName != null) {
-                    ApiResponseResponse responseResponse = new ApiResponseResponse();
-                    responseResponse.setName(serializedName.value());
-                    Param param = responseField.getAnnotation(Param.class);
-                    if (param != null)
-                        responseResponse.setDescription(param.description());
-                    responseResponse.setType(responseField.getType().getSimpleName().toLowerCase());
-                    response.addApiResponse(responseResponse);
-                }
+                ApiResponseResponse responseResponse = getFieldResponseMap(responseField);
+                response.addApiResponse(responseResponse);
             }
 
-            Set<Field> fields = ReflectUtil.getAllFieldsForClass(cmdClass,
-                    new Class<?>[]{BaseCmd.class, BaseAsyncCmd.class, BaseAsyncCreateCmd.class});
-
-            boolean isAsync = ReflectUtil.isCmdClassAsync(cmdClass,
-                    new Class<?>[] {BaseAsyncCmd.class, BaseAsyncCreateCmd.class});
-
-            response.setAsync(isAsync);
-
-            for(Field field: fields) {
-                Parameter parameterAnnotation = field.getAnnotation(Parameter.class);
-                if (parameterAnnotation != null
-                        && parameterAnnotation.expose()
-                        && parameterAnnotation.includeInApiDoc()) {
-
-                    ApiParameterResponse paramResponse = new ApiParameterResponse();
-                    paramResponse.setName(parameterAnnotation.name());
-                    paramResponse.setDescription(parameterAnnotation.description());
-                    paramResponse.setType(parameterAnnotation.type().toString().toLowerCase());
-                    paramResponse.setLength(parameterAnnotation.length());
-                    paramResponse.setRequired(parameterAnnotation.required());
-                    if (!parameterAnnotation.since().isEmpty())
-                        paramResponse.setSince(parameterAnnotation.since());
-                    paramResponse.setRelated(parameterAnnotation.entityType()[0].getName());
-                    response.addParam(paramResponse);
-                }
-            }
             response.setObjectName("api");
             s_apiNameDiscoveryResponseMap.put(apiName, response);
         }
@@ -173,6 +128,76 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService {
             }
             s_apiNameDiscoveryResponseMap.put(apiName, response);
         }
+        return responseApiNameListMap;
+    }
+
+    private ApiResponseResponse getFieldResponseMap(Field responseField) {
+        ApiResponseResponse responseResponse = new ApiResponseResponse();
+        SerializedName serializedName = responseField.getAnnotation(SerializedName.class);
+        Param param = responseField.getAnnotation(Param.class);
+        if (serializedName != null && param != null) {
+            responseResponse.setName(serializedName.value());
+            responseResponse.setDescription(param.description());
+            responseResponse.setType(responseField.getType().getSimpleName().toLowerCase());
+            //If response is not of primitive type - we have a nested entity
+            Class fieldClass = param.responseObject();
+            if (fieldClass != null) {
+                Class<?> superClass = fieldClass.getSuperclass();
+                if (superClass != null) {
+                    String superName = superClass.getName();
+                    if (superName.equals(BaseResponse.class.getName())) {
+                        Field[] fields = fieldClass.getDeclaredFields();
+                        for (Field field : fields) {
+                            ApiResponseResponse innerResponse = getFieldResponseMap(field);
+                            if (innerResponse != null) {
+                                responseResponse.addApiResponse(innerResponse);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return responseResponse;
+    }
+
+    private ApiDiscoveryResponse getCmdRequestMap(Class<?> cmdClass, APICommand apiCmdAnnotation) {
+        String apiName = apiCmdAnnotation.name();
+        ApiDiscoveryResponse response = new ApiDiscoveryResponse();
+        response.setName(apiName);
+        response.setDescription(apiCmdAnnotation.description());
+        if (!apiCmdAnnotation.since().isEmpty()) {
+            response.setSince(apiCmdAnnotation.since());
+        }
+
+
+        Set<Field> fields = ReflectUtil.getAllFieldsForClass(cmdClass,
+                new Class<?>[]{BaseCmd.class, BaseAsyncCmd.class, BaseAsyncCreateCmd.class});
+
+        boolean isAsync = ReflectUtil.isCmdClassAsync(cmdClass,
+                new Class<?>[]{BaseAsyncCmd.class, BaseAsyncCreateCmd.class});
+
+        response.setAsync(isAsync);
+
+        for(Field field: fields) {
+            Parameter parameterAnnotation = field.getAnnotation(Parameter.class);
+            if (parameterAnnotation != null
+                    && parameterAnnotation.expose()
+                    && parameterAnnotation.includeInApiDoc()) {
+
+                ApiParameterResponse paramResponse = new ApiParameterResponse();
+                paramResponse.setName(parameterAnnotation.name());
+                paramResponse.setDescription(parameterAnnotation.description());
+                paramResponse.setType(parameterAnnotation.type().toString().toLowerCase());
+                paramResponse.setLength(parameterAnnotation.length());
+                paramResponse.setRequired(parameterAnnotation.required());
+                if (!parameterAnnotation.since().isEmpty()) {
+                    paramResponse.setSince(parameterAnnotation.since());
+                }
+                paramResponse.setRelated(parameterAnnotation.entityType()[0].getName());
+                response.addParam(paramResponse);
+            }
+        }
+        return response;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5d67c98e/server/src/com/cloud/api/response/ApiResponseSerializer.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/response/ApiResponseSerializer.java b/server/src/com/cloud/api/response/ApiResponseSerializer.java
index 3b1d9a6..965660a 100644
--- a/server/src/com/cloud/api/response/ApiResponseSerializer.java
+++ b/server/src/com/cloud/api/response/ApiResponseSerializer.java
@@ -16,33 +16,25 @@
 // under the License.
 package com.cloud.api.response;
 
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.cloudstack.api.response.ListResponse;
-import org.apache.cloudstack.api.response.*;
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.ApiConstants;
 import com.cloud.api.ApiDBUtils;
 import com.cloud.api.ApiResponseGsonHelper;
 import com.cloud.api.ApiServer;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.ResponseObject;
 import com.cloud.utils.encoding.URLEncoder;
 import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.uuididentity.dao.IdentityDao;
-import com.cloud.uuididentity.dao.IdentityDaoImpl;
 import com.google.gson.Gson;
 import com.google.gson.annotations.SerializedName;
+import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.BaseCmd;
+import org.apache.cloudstack.api.ResponseObject;
+import org.apache.cloudstack.api.response.*;
+import org.apache.log4j.Logger;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 public class ApiResponseSerializer {
     private static final Logger s_logger = Logger.getLogger(ApiResponseSerializer.class.getName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5d67c98e/server/src/com/cloud/api/response/EmptyFieldExclusionStrategy.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/response/EmptyFieldExclusionStrategy.java b/server/src/com/cloud/api/response/EmptyFieldExclusionStrategy.java
new file mode 100644
index 0000000..3099d83
--- /dev/null
+++ b/server/src/com/cloud/api/response/EmptyFieldExclusionStrategy.java
@@ -0,0 +1,40 @@
+/*
+ * 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
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.cloud.api.response;
+
+import com.cloud.serializer.Param;
+import com.google.gson.ExclusionStrategy;
+import com.google.gson.FieldAttributes;
+
+public class EmptyFieldExclusionStrategy implements ExclusionStrategy {
+
+    @Override
+    public boolean shouldSkipField(FieldAttributes fieldAttributes) {
+        if (fieldAttributes.getAnnotation(Param.class) != null) {
+                return true;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean shouldSkipClass(Class<?> aClass) {
+        return false;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5d67c98e/test/integration/smoke/test_vm_life_cycle.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_vm_life_cycle.py b/test/integration/smoke/test_vm_life_cycle.py
index d9571f6..564f6e8 100644
--- a/test/integration/smoke/test_vm_life_cycle.py
+++ b/test/integration/smoke/test_vm_life_cycle.py
@@ -262,11 +262,26 @@ class TestDeployVM(cloudstackTestCase):
         self.assertIsNotNone(router.publicip, msg="Router has no public ip")
         self.assertIsNotNone(router.guestipaddress, msg="Router has no guest ip")
 
+    @attr(hypervisor = ["simulator"])
+    @attr(mode = ["basic"])
+    def test_basicZoneVirtualRouter(self):
+        """
+        Tests for basic zone virtual router
+        1. Is Running
+        2. is in the account the VM was deployed in
+        @return:
+        """
+        routers = list_routers(self.apiclient, account=self.account.account.name)
+        self.assertTrue(len(routers) > 0, msg = "No virtual router found")
+        router = routers[0]
+
+        self.assertEqual(router.state, 'Running', msg="Router is not in running state")
+        self.assertEqual(router.account, self.account.account.name, msg="Router does not belong to the account")
+
     def tearDown(self):
         pass
 
 
-
 class TestVMLifeCycle(cloudstackTestCase):
 
     @classmethod

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5d67c98e/tools/marvin/marvin/cloudstackTestClient.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/cloudstackTestClient.py b/tools/marvin/marvin/cloudstackTestClient.py
index cb63179..4bfb90b 100644
--- a/tools/marvin/marvin/cloudstackTestClient.py
+++ b/tools/marvin/marvin/cloudstackTestClient.py
@@ -24,7 +24,8 @@ import string
 import hashlib
 
 class cloudstackTestClient(object):
-    def __init__(self, mgtSvr=None, port=8096, apiKey = None, securityKey = None, asyncTimeout=3600, defaultWorkerThreads=10, logging=None):
+    def __init__(self, mgtSvr=None, port=8096, apiKey = None, securityKey = None, asyncTimeout=3600,
+                 defaultWorkerThreads=10, logging=None):
         self.connection = cloudstackConnection.cloudConnection(mgtSvr, port, apiKey, securityKey, asyncTimeout, logging)
         self.apiClient = cloudstackAPIClient.CloudStackAPIClient(self.connection)
         self.dbConnection = None
@@ -32,7 +33,6 @@ class cloudstackTestClient(object):
         self.ssh = None
         self.defaultWorkerThreads = defaultWorkerThreads
         
-        
     def dbConfigure(self, host="localhost", port=3306, user='cloud', passwd='cloud', db='cloud'):
         self.dbConnection = dbConnection.dbConnection(host, port, user, passwd, db)
     
@@ -147,7 +147,16 @@ class cloudstackTestClient(object):
         if hasattr(self, "userApiClient"):
             return self.userApiClient
         return None
-    
+
+    def synchronize(self):
+        """
+        synchronize the api from an endpoint
+        """
+        apiclient = self.getApiClient()
+        cmd = listApis.listApisCmd()
+        response = apiclient.listApis(cmd)
+
+
     '''FixME, httplib has issue if more than one thread submitted'''
     def submitCmdsAndWait(self, cmds, workers=1):
         if self.asyncJobMgr is None:

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5d67c98e/tools/marvin/marvin/codegenerator.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/codegenerator.py b/tools/marvin/marvin/codegenerator.py
index ed9248c..5d9a2df 100644
--- a/tools/marvin/marvin/codegenerator.py
+++ b/tools/marvin/marvin/codegenerator.py
@@ -16,10 +16,12 @@
 # under the License.
 
 import xml.dom.minidom
+import json
 from optparse import OptionParser
 from textwrap import dedent
 import os
 import sys
+
 class cmdParameterProperty(object):
     def __init__(self):
         self.name = None
@@ -97,6 +99,7 @@ class codeGenerator:
                 subclass += self.space + self.space + 'self.%s = None\n'%pro.name
         
         self.subclass.append(subclass)
+
     def generate(self, cmd):
        
         self.cmd = cmd
@@ -159,8 +162,7 @@ class codeGenerator:
         fp.close()
         self.code = ""
         self.subclass = []
-       
-        
+
     def finalize(self):
         '''generate an api call'''
         
@@ -215,8 +217,7 @@ class codeGenerator:
         fp.write(basecmd)
         fp.close()
         
-    
-    def constructResponse(self, response):
+    def constructResponseFromXML(self, response):
         paramProperty = cmdParameterProperty()
         paramProperty.name = getText(response.getElementsByTagName('name'))
         paramProperty.desc = getText(response.getElementsByTagName('description'))
@@ -224,7 +225,23 @@ class codeGenerator:
             '''This is a list'''
             paramProperty.name = paramProperty.name.split('(*)')[0]
             for subresponse in response.getElementsByTagName('arguments')[0].getElementsByTagName('arg'):
-                subProperty = self.constructResponse(subresponse)
+                subProperty = self.constructResponseFromXML(subresponse)
+                paramProperty.subProperties.append(subProperty)
+        return paramProperty
+
+    def constructResponseFromJSON(self, response):
+        paramProperty = cmdParameterProperty()
+        if response.has_key('name'):
+            paramProperty.name = response['name']
+        assert paramProperty.name
+
+        if response.has_key('description'):
+            paramProperty.desc = response['description']
+        if response.has_key('type') and response['type'] == 'list':
+            #Here list becomes a subproperty
+            paramProperty.name = paramProperty.name.split('(*)')[0]
+            for subresponse in response.getElementsByTagName('arguments')[0].getElementsByTagName('arg'):
+                subProperty = self.constructResponseFromXML(subresponse)
                 paramProperty.subProperties.append(subProperty)
         return paramProperty
 
@@ -269,18 +286,79 @@ class codeGenerator:
                 if response.parentNode != responseEle:
                     continue
             
-                paramProperty = self.constructResponse(response)
+                paramProperty = self.constructResponseFromXML(response)
                 csCmd.response.append(paramProperty)
             
             cmds.append(csCmd)
         return cmds
-    
-    def generateCode(self):
+
+    def loadCmdFromJSON(self, apiStream):
+        if apiStream is None:
+            raise Exception("No APIs found through discovery")
+
+        apiDict = json.loads(apiStream)
+        if not apiDict.has_key('listapisresponse'):
+            raise Exception("API discovery plugin response failed")
+        if not apiDict['listapisresponse'].has_key('count'):
+            raise Exception("Malformed api response")
+
+        apilist = apiDict['listapisresponse']['api']
+        cmds = []
+        for cmd in apilist:
+            csCmd = cloudStackCmd()
+            if cmd.has_key('name'):
+                csCmd.name = cmd['name']
+            assert csCmd.name
+
+            if cmd.has_key('description'):
+                csCmd.desc = cmd['description']
+
+            if cmd.has_key('async'):
+                csCmd.async = cmd['isasync']
+
+            for param in cmd['params']:
+                paramProperty = cmdParameterProperty()
+
+                if param.has_key('name'):
+                    paramProperty.name = param['name']
+                assert paramProperty.name
+
+                if param.has_key('required'):
+                    paramProperty.required = param.getElementsByTagName('required')
+
+                if param.has_key('description'):
+                    paramProperty.desc = param['description']
+
+                if param.has_key('type'):
+                    paramProperty.type = param['type']
+
+                csCmd.request.append(paramProperty)
+
+            for response in cmd['response']:
+                paramProperty = self.constructResponseFromJSON(response)
+                csCmd.response.append(paramProperty)
+
+            cmds.append(csCmd)
+        return cmds
+
+
+    def generateCodeFromXML(self):
         cmds = self.loadCmdFromXML()
         for cmd in cmds:
             self.generate(cmd)
         self.finalize()
 
+    def generateCodeFromJSON(self, apiJson):
+        """
+        Api Discovery plugin returns the supported APIs of a CloudStack endpoint.
+        @return: The classes in cloudstackAPI/ formed from api discovery json
+        """
+        with open(apiJson, 'r') as apiStream:
+            cmds = self.loadCmdFromJSON(apiStream)
+            for cmd in cmds:
+                self.generate(cmd)
+            self.finalize()
+
 def getText(elements):
     return elements[0].childNodes[0].nodeValue.strip()
 
@@ -315,5 +393,5 @@ if __name__ == "__main__":
             exit(2)
     
     cg = codeGenerator(folder, apiSpecFile)
-    cg.generateCode()
+    cg.generateCodeFromXML()
     

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5d67c98e/tools/marvin/marvin/marvinPlugin.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/marvinPlugin.py b/tools/marvin/marvin/marvinPlugin.py
index c52596e..518f27f 100644
--- a/tools/marvin/marvin/marvinPlugin.py
+++ b/tools/marvin/marvin/marvinPlugin.py
@@ -21,6 +21,7 @@ import logging
 import nose.core
 from marvin.cloudstackTestCase import cloudstackTestCase
 from marvin import deployDataCenter
+from marvin import apiSynchronizer
 from nose.plugins.base import Plugin
 from functools import partial
 
@@ -39,6 +40,10 @@ class MarvinPlugin(Plugin):
         self.enableOpt = "--with-marvin"
         self.logformat = logging.Formatter("%(asctime)s - %(levelname)s - %(name)s - %(message)s")
 
+        if options.sync:
+            self.do_sync(options.config)
+            return
+
         if options.debug_log:
             self.logger = logging.getLogger("NoseTestExecuteEngine")
             self.debug_stream = logging.FileHandler(options.debug_log) 
@@ -65,6 +70,13 @@ class MarvinPlugin(Plugin):
         cfg.debugLog = self.debug_stream
         
         self.testrunner = nose.core.TextTestRunner(stream=self.result_stream, descriptions=True, verbosity=2, config=config)
+
+    def do_sync(self, config):
+        """
+        Use the ApiDiscovery plugin exposed by the CloudStack mgmt server to rebuild the cloudStack API
+        """
+        apiSynchronizer.sync(config)
+
     
     def options(self, parser, env):
         """
@@ -84,6 +96,8 @@ class MarvinPlugin(Plugin):
                           help="The path to the testcase debug logs [DEBUG_LOG]")
         parser.add_option("--load", action="store_true", default=False, dest="load",
                           help="Only load the deployment configuration given")
+        parser.add_option("--sync", action="store_true", default=False, dest="sync",
+                          help="Sync the APIs from the CloudStack endpoint in marvin-config")
         
         Plugin.options(self, parser, env)
  


[40/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
maven+marvin+simulator: Changes to the lifecycle steps

integration test is now run as follows:

Build
$ mvn -Pdeveloper -Dsimulator clean install

DB:
$ mvn -Pdeveloper -pl developer -Ddeploydb
$ mvn -Pdeveloper -pl developer -Ddeploydb-simulator

Setup:
$ mvn -Pdeveloper,marvin.setup -Dmarvin.config=setup/dev/advanced.cfg -pl :cloud-marvin integration-test

Test:
$ mvn -Pdeveloper,marvin.test -Dmarvin.config=setup/dev/advanced.cfg -pl :cloud-marvin integration-test

Signed-off-by: Prasanna Santhanam <ts...@apache.org>


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

Branch: refs/heads/kvm-vnc-listen
Commit: b798c451141c32d46322aae83063eeaa9634b337
Parents: 82fd938
Author: Prasanna Santhanam <ts...@apache.org>
Authored: Tue Apr 2 13:09:36 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Tue Apr 2 19:56:33 2013 +0530

----------------------------------------------------------------------
 client/pom.xml                                     |   11 +
 client/tomcatconf/componentContext.xml.in          |  408 ++++++---------
 client/tomcatconf/simulatorComponentContext.xml.in |  361 ++++++-------
 .../agent/manager/MockStorageManagerImpl.java      |   36 +-
 .../dao/HypervisorCapabilitiesDaoImpl.java         |   15 +-
 setup/db/templates.simulator.sql                   |    4 +-
 tools/marvin/pom.xml                               |   40 ++-
 7 files changed, 396 insertions(+), 479 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b798c451/client/pom.xml
----------------------------------------------------------------------
diff --git a/client/pom.xml b/client/pom.xml
index 35588aa..05934f4 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -214,10 +214,21 @@
       <artifactId>cloud-plugin-hypervisor-simulator</artifactId>
       <version>${project.version}</version>
     </dependency>
+    <dependency>
         <groupId>org.apache.cloudstack</groupId>
         <artifactId>cloud-plugin-storage-volume-default</artifactId>
         <version>${project.version}</version>
     </dependency>
+    <dependency>
+      <groupId>org.apache.cloudstack</groupId>
+      <artifactId>cloud-plugin-syslog-alerts</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.cloudstack</groupId>
+      <artifactId>cloud-plugin-snmp-alerts</artifactId>
+      <version>${project.version}</version>
+    </dependency>
   </dependencies>
   <build>
     <defaultGoal>install</defaultGoal>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b798c451/client/tomcatconf/componentContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/componentContext.xml.in b/client/tomcatconf/componentContext.xml.in
index 584be97..0ddb428 100644
--- a/client/tomcatconf/componentContext.xml.in
+++ b/client/tomcatconf/componentContext.xml.in
@@ -1,3 +1,4 @@
+
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements. See the NOTICE file
@@ -30,277 +31,192 @@
                       http://www.springframework.org/schema/context
                       http://www.springframework.org/schema/context/spring-context-3.0.xsd">                     
 
-
   <!--
-      Compose a CloudStack deployment with selected components here
+    OSS deployment component configuration
   -->
   <bean id="databaseUpgradeChecker" class="com.cloud.upgrade.DatabaseUpgradeChecker" />
-  <bean id="encryptionSecretKeyChecker" class="com.cloud.utils.crypt.EncryptionSecretKeyChecker" />
-
-  <bean id="managementServerImpl" class ="com.cloud.server.ManagementServerImpl" />
-  <bean id="configurationServerImpl" class="com.cloud.server.ConfigurationServerImpl" />
-
-  <bean id="clusterManagerImpl" class="com.cloud.cluster.ClusterManagerImpl" />
-  <bean id="clusteredAgentManagerImpl" class="com.cloud.agent.manager.ClusteredAgentManagerImpl" />
-  <bean id="clusteredVirtualMachineManagerImpl" class="com.cloud.vm.ClusteredVirtualMachineManagerImpl" />
-  <bean id="highAvailabilityManagerExtImpl" class="com.cloud.ha.HighAvailabilityManagerExtImpl" />
-  <bean id="userVmManagerImpl" class="com.cloud.vm.UserVmManagerImpl" />
-  <bean id="consoleProxyManagerImpl" class="com.cloud.consoleproxy.ConsoleProxyManagerImpl" />
-  <bean id="securityGroupManagerImpl2" class="com.cloud.network.security.SecurityGroupManagerImpl2" />
-  <bean id="premiumSecondaryStorageManagerImpl" class="com.cloud.secstorage.PremiumSecondaryStorageManagerImpl" />
-  <bean id="userVmDaoImpl" class="com.cloud.vm.dao.UserVmDaoImpl" />
-  <bean id="ipv6AddressManagerImpl" class="com.cloud.network.Ipv6AddressManagerImpl" />
-
-  <bean id="apiRateLimitServiceImpl" class="org.apache.cloudstack.ratelimit.ApiRateLimitServiceImpl"/>
-  <bean id="BaremetalManager" class="com.cloud.baremetal.manager.BaremetalManagerImpl"/>
-  <bean id="BaremetalDhcpManager" class="com.cloud.baremetal.networkservice.BaremetalDhcpManagerImpl"/>
-  <bean id="BaremetalKickStartPxeService" class="com.cloud.baremetal.networkservice.BaremetalKickStartServiceImpl"/>
-  <bean id="BaremetalPingPxeService" class="com.cloud.baremetal.networkservice.BareMetalPingServiceImpl" />
-  <bean id="BaremetalPxeManager" class="com.cloud.baremetal.networkservice.BaremetalPxeManagerImpl" />
-  <bean id="UcsManager" class="com.cloud.ucs.manager.UcsManagerImpl" />
-  <bean id="UcsBladeDao" class="com.cloud.ucs.database.UcsBladeDaoImpl" />
-  <bean id="UcsManagerDao" class="com.cloud.ucs.database.UcsManagerDaoImpl" />
-
-
-  <!--
-      Network Elements
-  -->
-  <bean id="Ovs" class="com.cloud.network.element.OvsElement">
-    <property name="name" value="Ovs"/>
-  </bean>
-  <bean id="BareMetalDhcp" class="com.cloud.baremetal.networkservice.BaremetalDhcpElement">
-      <property name="name" value="BareMetalDhcp"/>
-  </bean>
-  <bean id="BareMetalPxe" class="com.cloud.baremetal.networkservice.BaremetalPxeElement">
-      <property name="name" value="BareMetalPxe"/>
-  </bean>
-  <bean id="BareMetalUserdata" class="com.cloud.baremetal.networkservice.BaremetalUserdataElement">
-      <property name="name" value="BareMetalUserdata"/>
-  </bean>
-  <bean id="SecurityGroupProvider" class="com.cloud.network.element.SecurityGroupElement">
-    <property name="name" value="SecurityGroupProvider"/>
-  </bean>
-  <bean id="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement">
-    <property name="name" value="VirtualRouter"/>
-  </bean>
-  <bean id="VpcVirtualRouter" class="com.cloud.network.element.VpcVirtualRouterElement">
-    <property name="name" value="VpcVirtualRouter"/>
-  </bean>
-  <!--
-  <bean id="NiciraNvp" class="com.cloud.network.element.NiciraNvpElement">
-    <property name="name" value="NiciraNvp"/>
-  </bean>
-  -->
+  <bean id="configurationDaoImpl" class="com.cloud.configuration.dao.ConfigurationDaoImpl" />
   
-<!--
-  <bean id="BigSwitchVnsElementService" class="com.cloud.network.element.BigSwitchVnsElement">
-    <property name="name" value="BigSwitchVnsElementService"/>
-  </bean>
--->
-
   <!--
-     Adapters
+    Managers & pluggable adapters configuration under OSS deployment
   -->
-  <bean id="FirstFitRouting" class="com.cloud.agent.manager.allocator.impl.FirstFitRoutingAllocator">
-    <property name="name" value="FirstFitRouting"/>
+  <bean id="accountManagerImpl" class="com.cloud.user.AccountManagerImpl" >
+    <property name="UserAuthenticators">
+      <list>
+          <ref bean="MD5UserAuthenticator"/>
+          <ref bean="LDAPUserAuthenticator"/>
+      </list>
+    </property>
+    <property name="SecurityCheckers">
+      <list>
+          <ref bean="domainChecker"/>
+      </list>
+    </property>
   </bean>
   
-  <bean id="hypervisorTemplateAdapter" class="com.cloud.template.HypervisorTemplateAdapter">
-    <property name="name" value="HypervisorAdapter"/>
-  </bean>
-
-   <bean id="bareMetalTemplateAdapter" class="com.cloud.baremetal.BareMetalTemplateAdapter">
-    <property name="name" value="BareMetalAdapter"/>
-  </bean>
-
-  <!--
-    Storage pool allocators
-  -->
-
-  <bean id="LocalStoragePoolAllocator" class="org.apache.cloudstack.storage.allocator.LocalStoragePoolAllocator">
-    <property name="name" value="LocalStorage"/>
-  </bean>
-  <!--
-  <bean id="FirstFitStoragePoolAllocator" class="org.apache.cloudstack.storage.allocator.FirstFitStoragePoolAllocator">
-    <property name="name" value="Storage"/>
-  </bean>
-  -->
-
-  <bean id="UserConcentratedAllocator" class="com.cloud.agent.manager.allocator.impl.UserConcentratedAllocator">
-    <property name="name" value="User First"/>
-  </bean>
-
-  <bean id="ConsoleProxyAllocator" class="com.cloud.consoleproxy.ConsoleProxyBalanceAllocator">
-    <property name="name" value="Balance"/>
-  </bean>
-
-  <bean id="StaticRoleBasedAPIAccessChecker" class="org.apache.cloudstack.acl.StaticRoleBasedAPIAccessChecker"/>
-
-  <bean id="ExteralIpAddressAllocator" class="com.cloud.network.ExteralIpAddressAllocator">
-    <property name="name" value="Basic"/>
-  </bean>
-
-  <bean id="HypervisorTemplateAdapter" class="com.cloud.template.HypervisorTemplateAdapter">
-    <property name="name" value="HypervisorAdapter"/>
-  </bean>
-
-  <bean id="BareMetalTemplateAdapter" class="com.cloud.baremetal.manager.BareMetalTemplateAdapter" >
-    <property name="name" value="BareMetalTemplateAdapter"/>
-  </bean>
-
-  <!--
-    Authenticators
-  -->
-  <bean id="MD5UserAuthenticator" class="com.cloud.server.auth.MD5UserAuthenticator">
-    <property name="name" value="MD5"/>
-  </bean>
-
-  <bean id="LDAPUserAuthenticator" class="com.cloud.server.auth.LDAPUserAuthenticator">
-    <property name="name" value="LDAP"/>
-  </bean>
-
-  <!--
-    Investigators
-  -->
-  <bean id="CheckOnAgentInvestigator" class="com.cloud.ha.CheckOnAgentInvestigator">
-    <property name="name" value="SimpleInvestigator"/>
-  </bean>
-
-  <bean id="XenServerInvestigator" class="com.cloud.ha.XenServerInvestigator">
-    <property name="name" value="XenServerInvestigator"/>
-  </bean>
-
-  <bean id="UserVmDomRInvestigator" class="com.cloud.ha.UserVmDomRInvestigator">
-    <property name="name" value="PingInvestigator"/>
-  </bean>
-
-  <bean id="ManagementIPSystemVMInvestigator" class="com.cloud.ha.ManagementIPSystemVMInvestigator">
-    <property name="name" value="ManagementIPSysVMInvestigator"/>
-  </bean>
-
-  <!--
-    Fencers
-  -->
-  <bean id="XenServerFencer" class="com.cloud.ha.XenServerFencer">
-    <property name="name" value="XenServerFenceBuilder"/>
-  </bean>
-  <bean id="KVMFencer" class="com.cloud.ha.KVMFencer">
-    <property name="name" value="KVMFenceBuilder"/>
-  </bean>
-  <bean id="OvmFencer" class="com.cloud.ovm.hypervisor.OvmFencer">
-    <property name="name" value="OvmFenceBuilder"/>
-  </bean>
-
-  <bean id="XcpServerDiscoverer" class="com.cloud.hypervisor.xen.discoverer.XcpServerDiscoverer">
-    <property name="name" value="XCP Agent"/>
-  </bean>
-
-  <bean id="SecondaryStorageDiscoverer" class="com.cloud.storage.secondary.SecondaryStorageDiscoverer">
-    <property name="name" value="SecondaryStorage"/>
-  </bean>
-
-  <bean id="KvmServerDiscoverer" class="com.cloud.hypervisor.kvm.discoverer.KvmServerDiscoverer">
-    <property name="name" value="KVM Agent"/>
-  </bean>
-
-  <bean id="BareMetalDiscoverer" class="com.cloud.baremetal.manager.BareMetalDiscoverer">
-    <property name="name" value="Bare Metal Agent"/>
-  </bean>
-
-  <bean id="HypervServerDiscoverer" class="com.cloud.hypervisor.hyperv.HypervServerDiscoverer">
-    <property name="name" value="SCVMMServer"/>
-  </bean>
-
-  <bean id="OvmDiscoverer" class="com.cloud.ovm.hypervisor.OvmDiscoverer">
-    <property name="name" value="Ovm Discover"/>
+  <bean id="managementServerImpl" class ="com.cloud.server.ManagementServerImpl">
+    <property name="UserAuthenticators">
+      <list>
+          <ref bean="MD5UserAuthenticator"/>
+          <ref bean="LDAPUserAuthenticator"/>
+      </list>
+    </property>
+    <property name="HostAllocators">
+      <list>
+          <ref bean="FirstFitRouting"/>
+      </list>
+    </property>
+  </bean>
+
+  <bean id="storageManagerImpl" class="com.cloud.storage.StorageManagerImpl">
+    <property name="StoragePoolAllocators">
+      <list>
+          <ref bean="LocalStoragePoolAllocator"/>
+          <ref bean="clusterScopeStoragePoolAllocator"/>
+          <ref bean="zoneWideStoragePoolAllocator"/>
+          <ref bean="garbageCollectingStoragePoolAllocator"/>
+      </list>
+    </property>
   </bean>
 
   <bean id="FirstFitPlanner" class="com.cloud.deploy.FirstFitPlanner">
     <property name="name" value="First Fit"/>
-  </bean>
-
-  <bean id="UserDispersingPlanner" class="com.cloud.deploy.UserDispersingPlanner">
-    <property name="name" value="UserDispersing"/>
+    <property name="StoragePoolAllocators">
+      <list>
+          <ref bean="LocalStoragePoolAllocator"/>
+          <ref bean="clusterScopeStoragePoolAllocator"/>
+          <ref bean="zoneWideStoragePoolAllocator"/>
+          <ref bean="garbageCollectingStoragePoolAllocator"/>
+      </list>
+    </property>
+    <property name="HostAllocators">
+      <list>
+          <ref bean="FirstFitRouting"/>
+      </list>
+    </property>
   </bean>
   
-  <bean id="UserConcentratedPodPlanner" class="com.cloud.deploy.UserConcentratedPodPlanner">
-    <property name="name" value="UserConcentratedPod"/>
-  </bean>
-
-  <bean id="BareMetalPlanner" class="com.cloud.baremetal.manager.BareMetalPlanner">
-    <property name="name" value="BareMetal Fit"/>
-  </bean>
-
-  <bean id="BaremetalPlannerSelector" class="com.cloud.baremetal.manager.BaremetalPlannerSelector">
-    <property name="name" value="BaremetalPlannerSelector"/>
-  </bean>
-
-  <bean id="HypervisorPlannerSelector" class="com.cloud.deploy.HypervisorVmPlannerSelector">
-    <property name="name" value="HypervisorPlannerSelector"/>
-  </bean>
-
+  <bean id="resourceManagerImpl" class="com.cloud.resource.ResourceManagerImpl" >
+    <property name="PodAllocators">
+      <list>
+          <ref bean="UserConcentratedAllocator"/>
+      </list>
+    </property>
+    <property name="Discoverers">
+      <list>
+          <ref bean="XcpServerDiscoverer"/>
+          <ref bean="SecondaryStorageDiscoverer"/>
+          <ref bean="KvmServerDiscoverer"/>
+          <ref bean="LxcServerDiscoverer"/>
 
   <!--
-    Network Gurus
+          <ref bean="BareMetalDiscoverer"/>
   -->
-  <bean id="StorageNetworkGuru" class="com.cloud.network.guru.StorageNetworkGuru">
-    <property name="name" value="StorageNetworkGuru"/>
-  </bean>
-  <bean id="ExternalGuestNetworkGuru" class="com.cloud.network.guru.ExternalGuestNetworkGuru">
-    <property name="name" value="ExternalGuestNetworkGuru"/>
-  </bean>
-  <bean id="PublicNetworkGuru" class="com.cloud.network.guru.PublicNetworkGuru">
-    <property name="name" value="PublicNetworkGuru"/>
-  </bean>
-  <bean id="PodBasedNetworkGuru" class="com.cloud.network.guru.PodBasedNetworkGuru">
-    <property name="name" value="PodBasedNetworkGuru"/>
-  </bean>
-  <bean id="ControlNetworkGuru" class="com.cloud.network.guru.ControlNetworkGuru">
-    <property name="name" value="ControlNetworkGuru"/>
-  </bean>
-  <bean id="DirectNetworkGuru" class="com.cloud.network.guru.DirectNetworkGuru">
-    <property name="name" value="DirectNetworkGuru"/>
-  </bean>
-  <bean id="DirectPodBasedNetworkGuru" class="com.cloud.network.guru.DirectPodBasedNetworkGuru">
-    <property name="name" value="DirectPodBasedNetworkGuru"/>
-  </bean>
-  <bean id="OvsGuestNetworkGuru" class="com.cloud.network.guru.OvsGuestNetworkGuru">
-    <property name="name" value="OvsGuestNetworkGuru"/>
-  </bean>
-  <bean id="PrivateNetworkGuru" class="com.cloud.network.guru.PrivateNetworkGuru">
-    <property name="name" value="PrivateNetworkGuru"/>
-  </bean>
-  <bean id="NiciraNvpGuestNetworkGuru" class="com.cloud.network.guru.NiciraNvpGuestNetworkGuru">
-    <property name="name" value="NiciraNvpGuestNetworkGuru"/>
-  </bean>
-  
+
+          <ref bean="OvmDiscoverer"/>
+       </list>
+    </property>
+  </bean>
+
+  <bean id="highAvailabilityManagerExtImpl" class="com.cloud.ha.HighAvailabilityManagerExtImpl" >
+    <property name="Investigators">
+      <list>
+          <ref bean="CheckOnAgentInvestigator"/>
+          <ref bean="XenServerInvestigator"/>
+          <ref bean="UserVmDomRInvestigator"/>
+          <ref bean="ManagementIPSystemVMInvestigator"/>
+      </list>
+    </property>
+    <property name="FenceBuilders">
+      <list>
+          <ref bean="XenServerFencer"/>
+          <ref bean="KVMFencer"/>
+          <ref bean="OvmFencer"/>
+      </list>
+    </property>
+  </bean>
+
+  <bean id="clusteredVirtualMachineManagerImpl" class="com.cloud.vm.ClusteredVirtualMachineManagerImpl" >
+    <property name="HostAllocators">
+      <list>
+          <ref bean="FirstFitRouting"/>
+      </list>
+    </property>
+    <property name="Planners">
+      <list>
+          <ref bean="FirstFitPlanner" />
+          <ref bean="UserDispersingPlanner" />
+          <ref bean="UserConcentratedPodPlanner" />
+
 <!--
-  <bean id="BigSwitchVnsGuestNetworkGuru" class=".BigSwitchVnsGuestNetworkGuru">
-    <property name="name" value="com.cloud.network.guru.BigSwitchVnsGuestNetworkGuru"/>
-  </bean>
+          <ref bean="BareMetalPlanner" />
 -->
 
-  <!--
-   Hypervisor Gurus
-  -->
-  <bean id="XenServerGuru" class="com.cloud.hypervisor.XenServerGuru">
-    <property name="name" value="XenServerGuru"/>
+      </list>
+    </property>
   </bean>
   
-  <bean id="KVMGuru" class="com.cloud.hypervisor.KVMGuru">
-    <property name="name" value="KVMGuru"/>
-  </bean>
-
-  <bean id="HypervGuru" class="com.cloud.hypervisor.guru.HypervGuru">
-    <property name="name" value="HypervGuru"/>
+  <bean id="networkManagerImpl" class="com.cloud.network.NetworkManagerImpl" >
+    <property name="NetworkGurus">
+      <list>
+          <ref bean="StorageNetworkGuru"/>
+          <ref bean="ExternalGuestNetworkGuru"/>
+          <ref bean="PublicNetworkGuru"/>
+          <ref bean="PodBasedNetworkGuru"/>
+          <ref bean="DirectPodBasedNetworkGuru"/>
+          <ref bean="ControlNetworkGuru"/>
+          <ref bean="DirectNetworkGuru"/>
+          <ref bean="OvsGuestNetworkGuru"/>
+          <ref bean="PrivateNetworkGuru"/>
+      </list>
+    </property>
+    <property name="NetworkElements">
+      <list>
+          <ref bean="VirtualRouter"/>
+          <ref bean="Ovs"/>
+          <ref bean="SecurityGroupProvider"/>
+          <ref bean="VpcVirtualRouter"/>
+<!--
+          <ref bean="BareMetalDhcp"/>
+          <ref bean="BareMetalPxe"/>
+          <ref bean="BareMetalUserdata"/>
+-->
+      </list>
+    </property>
+    <property name="IpDeployers">
+      <list>
+          <ref bean="elasticLoadBalancerElement"/>
+          <ref bean="VirtualRouter"/>
+          <ref bean="VpcVirtualRouter"/>
+      </list>
+    </property>
+    <property name="DhcpProviders">
+      <list>
+          <ref bean="VirtualRouter"/>
+          <ref bean="VpcVirtualRouter"/>
+<!--
+          <ref bean="BareMetalDhcp"/>
+-->
+      </list>
+    </property>
   </bean>
 
-  <bean id="OvmGuru" class="com.cloud.ovm.hypervisor.OvmGuru">
-    <property name="name" value="OvmGuru"/>
+  <bean id="networkModelImpl" class="com.cloud.network.NetworkModelImpl">
+    <property name="NetworkElements">
+      <list>
+          <ref bean="VirtualRouter"/>
+          <ref bean="Ovs"/>
+          <ref bean="SecurityGroupProvider"/>
+          <ref bean="VpcVirtualRouter"/>
+<!--
+          <ref bean="BareMetalDhcp"/>
+          <ref bean="BareMetalPxe"/>
+          <ref bean="BareMetalUserdata"/>
+-->
+      </list>
+    </property>
   </bean>
 
-  <bean id="BaremetalGuru" class="com.cloud.baremetal.manager.BareMetalGuru">
-    <property name="name" value="BaremetalGuru"/>
-  </bean>
+  <bean id="GlobalLoadBalancingRulesServiceImpl" class ="org.apache.cloudstack.region.gslb.GlobalLoadBalancingRulesServiceImpl" />
 
 </beans>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b798c451/client/tomcatconf/simulatorComponentContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/simulatorComponentContext.xml.in b/client/tomcatconf/simulatorComponentContext.xml.in
index d501ca1..1cb9f6f 100644
--- a/client/tomcatconf/simulatorComponentContext.xml.in
+++ b/client/tomcatconf/simulatorComponentContext.xml.in
@@ -1,3 +1,4 @@
+
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements. See the NOTICE file
@@ -30,241 +31,205 @@
                       http://www.springframework.org/schema/context
                       http://www.springframework.org/schema/context/spring-context-3.0.xsd">
 
-
   <!--
-      Compose a CloudStack deployment with selected components here
+    OSS deployment component configuration
   -->
   <bean id="databaseUpgradeChecker" class="com.cloud.upgrade.DatabaseUpgradeChecker" />
-  <bean id="encryptionSecretKeyChecker" class="com.cloud.utils.crypt.EncryptionSecretKeyChecker" />
-  <bean id="configurationServerImpl" class="com.cloud.server.ConfigurationServerImpl" />
+  <bean id="configurationDaoImpl" class="com.cloud.configuration.dao.ConfigurationDaoImpl" />
+
+  <!-- simulator components -->
+  <bean id="SimulatorSecondaryDiscoverer" class="com.cloud.resource.SimulatorSecondaryDiscoverer">
+    <property name="name" value="SecondaryStorage"/>
+  </bean>
+  <bean id="SimulatorDiscoverer" class="com.cloud.resource.SimulatorDiscoverer">
+    <property name="name" value="Simulator Agent"/>
+  </bean>
+  <bean id="SimulatorGuru" class="com.cloud.simulator.SimulatorGuru">
+    <property name="name" value="Simulator Guru"/>
+  </bean>
 
-  <bean id="managementServerImpl" class ="com.cloud.server.ManagementServerImpl" >
+  <!--
+    Managers & pluggable adapters configuration under OSS deployment
+  -->
+  <bean id="accountManagerImpl" class="com.cloud.user.AccountManagerImpl" >
     <property name="UserAuthenticators">
       <list>
         <ref bean="MD5UserAuthenticator"/>
         <ref bean="LDAPUserAuthenticator"/>
       </list>
     </property>
+    <property name="SecurityCheckers">
+      <list>
+        <ref bean="domainChecker"/>
+      </list>
+    </property>
   </bean>
 
-  <bean id ="AccountManagerImpl" class="com.cloud.user.AccountManagerImpl">
+  <bean id="managementServerImpl" class ="com.cloud.server.ManagementServerImpl">
     <property name="UserAuthenticators">
       <list>
         <ref bean="MD5UserAuthenticator"/>
         <ref bean="LDAPUserAuthenticator"/>
       </list>
     </property>
+    <property name="HostAllocators">
+      <list>
+        <ref bean="FirstFitRouting"/>
+      </list>
+    </property>
   </bean>
 
-  <bean id="clusterManagerImpl" class="com.cloud.cluster.ClusterManagerImpl" />
-  <bean id="clusteredAgentManagerImpl" class="com.cloud.agent.manager.ClusteredAgentManagerImpl" />
-  <bean id="clusteredVirtualMachineManagerImpl" class="com.cloud.vm.ClusteredVirtualMachineManagerImpl" />
-  <bean id="highAvailabilityManagerExtImpl" class="com.cloud.ha.HighAvailabilityManagerExtImpl" />
-  <bean id="userVmManagerImpl" class="com.cloud.vm.UserVmManagerImpl" />
-  <bean id="consoleProxyManagerImpl" class="com.cloud.consoleproxy.ConsoleProxyManagerImpl" />
-  <bean id="securityGroupManagerImpl2" class="com.cloud.network.security.SecurityGroupManagerImpl2" />
-  <bean id="premiumSecondaryStorageManagerImpl" class="com.cloud.secstorage.PremiumSecondaryStorageManagerImpl" />
-  <bean id="userVmDaoImpl" class="com.cloud.vm.dao.UserVmDaoImpl" />
-  <bean id="ipv6AddressManagerImpl" class="com.cloud.network.Ipv6AddressManagerImpl" />
-
-  <bean id="apiRateLimitServiceImpl" class="org.apache.cloudstack.ratelimit.ApiRateLimitServiceImpl"/>
-
-  <!--
-      Network Elements
-  -->
-  <bean id="Ovs" class="com.cloud.network.element.OvsElement">
-    <property name="name" value="Ovs"/>
-  </bean>
-  <bean id="SecurityGroupProvider" class="com.cloud.network.element.SecurityGroupElement">
-    <property name="name" value="SecurityGroupProvider"/>
-  </bean>
-  <bean id="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement">
-    <property name="name" value="VirtualRouter"/>
-  </bean>
-  <bean id="VpcVirtualRouter" class="com.cloud.network.element.VpcVirtualRouterElement">
-    <property name="name" value="VpcVirtualRouter"/>
-  </bean>
-
-  <!--
-     Adapters
-  -->
-  <bean id="FirstFitRouting" class="com.cloud.agent.manager.allocator.impl.FirstFitRoutingAllocator">
-    <property name="name" value="FirstFitRouting"/>
-  </bean>
-
-  <bean id="hypervisorTemplateAdapter" class="com.cloud.template.HypervisorTemplateAdapter">
-    <property name="name" value="HypervisorAdapter"/>
-  </bean>
-
-  <!--
-    Storage pool allocators
-  -->
-
-  <bean id="LocalStoragePoolAllocator" class="org.apache.cloudstack.storage.allocator.LocalStoragePoolAllocator">
-    <property name="name" value="LocalStorage"/>
-  </bean>
-
-  <bean id="UserConcentratedAllocator" class="com.cloud.agent.manager.allocator.impl.UserConcentratedAllocator">
-    <property name="name" value="User First"/>
-  </bean>
-
-  <bean id="ConsoleProxyAllocator" class="com.cloud.consoleproxy.ConsoleProxyBalanceAllocator">
-    <property name="name" value="Balance"/>
-  </bean>
-
-  <bean id="StaticRoleBasedAPIAccessChecker" class="org.apache.cloudstack.acl.StaticRoleBasedAPIAccessChecker"/>
-
-  <bean id="ExteralIpAddressAllocator" class="com.cloud.network.ExteralIpAddressAllocator">
-    <property name="name" value="Basic"/>
-  </bean>
-
-  <bean id="HypervisorTemplateAdapter" class="com.cloud.template.HypervisorTemplateAdapter">
-    <property name="name" value="HypervisorAdapter"/>
-  </bean>
-
-  <!--
-    Authenticators
-  -->
-  <bean id="MD5UserAuthenticator" class="com.cloud.server.auth.MD5UserAuthenticator">
-    <property name="name" value="MD5"/>
-  </bean>
-
-  <bean id="LDAPUserAuthenticator" class="com.cloud.server.auth.LDAPUserAuthenticator">
-    <property name="name" value="LDAP"/>
-  </bean>
-
-  <!--
-    Investigators
-  -->
-  <bean id="CheckOnAgentInvestigator" class="com.cloud.ha.CheckOnAgentInvestigator">
-    <property name="name" value="SimpleInvestigator"/>
-  </bean>
-
-  <bean id="XenServerInvestigator" class="com.cloud.ha.XenServerInvestigator">
-    <property name="name" value="XenServerInvestigator"/>
-  </bean>
-
-  <bean id="UserVmDomRInvestigator" class="com.cloud.ha.UserVmDomRInvestigator">
-    <property name="name" value="PingInvestigator"/>
-  </bean>
-
-  <bean id="ManagementIPSystemVMInvestigator" class="com.cloud.ha.ManagementIPSystemVMInvestigator">
-    <property name="name" value="ManagementIPSysVMInvestigator"/>
-  </bean>
-
-  <!--
-    Fencers
-  -->
-  <bean id="XenServerFencer" class="com.cloud.ha.XenServerFencer">
-    <property name="name" value="XenServerFenceBuilder"/>
-  </bean>
-  <bean id="KVMFencer" class="com.cloud.ha.KVMFencer">
-    <property name="name" value="KVMFenceBuilder"/>
-  </bean>
-  <bean id="OvmFencer" class="com.cloud.ovm.hypervisor.OvmFencer">
-    <property name="name" value="OvmFenceBuilder"/>
-  </bean>
-
-  <bean id="XcpServerDiscoverer" class="com.cloud.hypervisor.xen.discoverer.XcpServerDiscoverer">
-    <property name="name" value="XCP Agent"/>
-  </bean>
-
-  <bean id="SimulatorSecondaryStorageDiscoverer" class="com.cloud.resource.SimulatorSecondaryDiscoverer">
-    <property name="name" value="SecondaryStorage"/>
-  </bean>
-
-  <bean id="SecondaryStorageDiscoverer" class="com.cloud.storage.secondary.SecondaryStorageDiscoverer">
-    <property name="name" value="SecondaryStorage"/>
-  </bean>
-
-  <bean id="KvmServerDiscoverer" class="com.cloud.hypervisor.kvm.discoverer.KvmServerDiscoverer">
-    <property name="name" value="KVM Agent"/>
-  </bean>
-
-  <bean id="SimulatorDiscoverer" class="com.cloud.resource.SimulatorDiscoverer">
-    <property name="name" value="Simulator Agent"/>
-  </bean>
-
-  <bean id="HypervServerDiscoverer" class="com.cloud.hypervisor.hyperv.HypervServerDiscoverer">
-    <property name="name" value="SCVMMServer"/>
-  </bean>
-
-  <bean id="OvmDiscoverer" class="com.cloud.ovm.hypervisor.OvmDiscoverer">
-    <property name="name" value="Ovm Discover"/>
+  <bean id="storageManagerImpl" class="com.cloud.storage.StorageManagerImpl">
+    <property name="StoragePoolAllocators">
+      <list>
+        <ref bean="LocalStoragePoolAllocator"/>
+        <ref bean="clusterScopeStoragePoolAllocator"/>
+        <ref bean="zoneWideStoragePoolAllocator"/>
+        <ref bean="garbageCollectingStoragePoolAllocator"/>
+      </list>
+    </property>
   </bean>
 
   <bean id="FirstFitPlanner" class="com.cloud.deploy.FirstFitPlanner">
     <property name="name" value="First Fit"/>
+    <property name="StoragePoolAllocators">
+      <list>
+        <ref bean="LocalStoragePoolAllocator"/>
+        <ref bean="clusterScopeStoragePoolAllocator"/>
+        <ref bean="zoneWideStoragePoolAllocator"/>
+        <ref bean="garbageCollectingStoragePoolAllocator"/>
+      </list>
+    </property>
+    <property name="HostAllocators">
+      <list>
+        <ref bean="FirstFitRouting"/>
+      </list>
+    </property>
   </bean>
 
-  <bean id="UserDispersingPlanner" class="com.cloud.deploy.UserDispersingPlanner">
-    <property name="name" value="UserDispersing"/>
-  </bean>
-
-  <bean id="UserConcentratedPodPlanner" class="com.cloud.deploy.UserConcentratedPodPlanner">
-    <property name="name" value="UserConcentratedPod"/>
-  </bean>
-
-  <bean id="HypervisorPlannerSelector" class="com.cloud.deploy.HypervisorVmPlannerSelector">
-    <property name="name" value="HypervisorPlannerSelector"/>
+  <bean id="resourceManagerImpl" class="com.cloud.resource.ResourceManagerImpl" >
+    <property name="PodAllocators">
+      <list>
+        <ref bean="UserConcentratedAllocator"/>
+      </list>
+    </property>
+    <property name="Discoverers">
+      <list>
+        <ref bean="SimulatorDiscoverer"/>
+        <ref bean="XcpServerDiscoverer"/>
+        <ref bean="SimulatorSecondaryDiscoverer"/>
+        <ref bean="SecondaryStorageDiscoverer"/>
+        <ref bean="KvmServerDiscoverer"/>
+        <ref bean="LxcServerDiscoverer"/>
+
+        <!--
+                <ref bean="BareMetalDiscoverer"/>
+        -->
+
+        <ref bean="OvmDiscoverer"/>
+      </list>
+    </property>
   </bean>
 
-
-  <!--
-    Network Gurus
-  -->
-  <bean id="StorageNetworkGuru" class="com.cloud.network.guru.StorageNetworkGuru">
-    <property name="name" value="StorageNetworkGuru"/>
-  </bean>
-  <bean id="ExternalGuestNetworkGuru" class="com.cloud.network.guru.ExternalGuestNetworkGuru">
-    <property name="name" value="ExternalGuestNetworkGuru"/>
-  </bean>
-  <bean id="PublicNetworkGuru" class="com.cloud.network.guru.PublicNetworkGuru">
-    <property name="name" value="PublicNetworkGuru"/>
-  </bean>
-  <bean id="PodBasedNetworkGuru" class="com.cloud.network.guru.PodBasedNetworkGuru">
-    <property name="name" value="PodBasedNetworkGuru"/>
-  </bean>
-  <bean id="ControlNetworkGuru" class="com.cloud.network.guru.ControlNetworkGuru">
-    <property name="name" value="ControlNetworkGuru"/>
-  </bean>
-  <bean id="DirectNetworkGuru" class="com.cloud.network.guru.DirectNetworkGuru">
-    <property name="name" value="DirectNetworkGuru"/>
-  </bean>
-  <bean id="DirectPodBasedNetworkGuru" class="com.cloud.network.guru.DirectPodBasedNetworkGuru">
-    <property name="name" value="DirectPodBasedNetworkGuru"/>
-  </bean>
-  <bean id="OvsGuestNetworkGuru" class="com.cloud.network.guru.OvsGuestNetworkGuru">
-    <property name="name" value="OvsGuestNetworkGuru"/>
-  </bean>
-  <bean id="PrivateNetworkGuru" class="com.cloud.network.guru.PrivateNetworkGuru">
-    <property name="name" value="PrivateNetworkGuru"/>
+  <bean id="highAvailabilityManagerExtImpl" class="com.cloud.ha.HighAvailabilityManagerExtImpl" >
+    <property name="Investigators">
+      <list>
+        <ref bean="CheckOnAgentInvestigator"/>
+        <ref bean="XenServerInvestigator"/>
+        <ref bean="UserVmDomRInvestigator"/>
+        <ref bean="ManagementIPSystemVMInvestigator"/>
+      </list>
+    </property>
+    <property name="FenceBuilders">
+      <list>
+        <ref bean="XenServerFencer"/>
+        <ref bean="KVMFencer"/>
+        <ref bean="OvmFencer"/>
+      </list>
+    </property>
   </bean>
 
-  <!--
-   Hypervisor Gurus
-  -->
-  <bean id="XenServerGuru" class="com.cloud.hypervisor.XenServerGuru">
-    <property name="name" value="XenServerGuru"/>
-  </bean>
+  <bean id="clusteredVirtualMachineManagerImpl" class="com.cloud.vm.ClusteredVirtualMachineManagerImpl" >
+    <property name="HostAllocators">
+      <list>
+        <ref bean="FirstFitRouting"/>
+      </list>
+    </property>
+    <property name="Planners">
+      <list>
+        <ref bean="FirstFitPlanner" />
+        <ref bean="UserDispersingPlanner" />
+        <ref bean="UserConcentratedPodPlanner" />
 
-  <bean id="KVMGuru" class="com.cloud.hypervisor.KVMGuru">
-    <property name="name" value="KVMGuru"/>
-  </bean>
+        <!--
+                  <ref bean="BareMetalPlanner" />
+        -->
 
-  <bean id="HypervGuru" class="com.cloud.hypervisor.guru.HypervGuru">
-    <property name="name" value="HypervGuru"/>
+      </list>
+    </property>
   </bean>
 
-  <bean id="OvmGuru" class="com.cloud.ovm.hypervisor.OvmGuru">
-    <property name="name" value="OvmGuru"/>
+  <bean id="networkManagerImpl" class="com.cloud.network.NetworkManagerImpl" >
+    <property name="NetworkGurus">
+      <list>
+        <ref bean="StorageNetworkGuru"/>
+        <ref bean="ExternalGuestNetworkGuru"/>
+        <ref bean="PublicNetworkGuru"/>
+        <ref bean="PodBasedNetworkGuru"/>
+        <ref bean="DirectPodBasedNetworkGuru"/>
+        <ref bean="ControlNetworkGuru"/>
+        <ref bean="DirectNetworkGuru"/>
+        <ref bean="OvsGuestNetworkGuru"/>
+        <ref bean="PrivateNetworkGuru"/>
+      </list>
+    </property>
+    <property name="NetworkElements">
+      <list>
+        <ref bean="VirtualRouter"/>
+        <ref bean="Ovs"/>
+        <ref bean="SecurityGroupProvider"/>
+        <ref bean="VpcVirtualRouter"/>
+        <!--
+                  <ref bean="BareMetalDhcp"/>
+                  <ref bean="BareMetalPxe"/>
+                  <ref bean="BareMetalUserdata"/>
+        -->
+      </list>
+    </property>
+    <property name="IpDeployers">
+      <list>
+        <ref bean="elasticLoadBalancerElement"/>
+        <ref bean="VirtualRouter"/>
+        <ref bean="VpcVirtualRouter"/>
+      </list>
+    </property>
+    <property name="DhcpProviders">
+      <list>
+        <ref bean="VirtualRouter"/>
+        <ref bean="VpcVirtualRouter"/>
+        <!--
+                  <ref bean="BareMetalDhcp"/>
+        -->
+      </list>
+    </property>
   </bean>
 
-  <bean id="SimulatorGuru" class="com.cloud.simulator.SimulatorGuru">
-    <property name="name" value="SimulatorGuru"/>
+  <bean id="networkModelImpl" class="com.cloud.network.NetworkModelImpl">
+    <property name="NetworkElements">
+      <list>
+        <ref bean="VirtualRouter"/>
+        <ref bean="Ovs"/>
+        <ref bean="SecurityGroupProvider"/>
+        <ref bean="VpcVirtualRouter"/>
+        <!--
+                  <ref bean="BareMetalDhcp"/>
+                  <ref bean="BareMetalPxe"/>
+                  <ref bean="BareMetalUserdata"/>
+        -->
+      </list>
+    </property>
   </bean>
 
-  <bean id="ClassicalPrimaryDataStoreProvider" class="org.apache.cloudstack.storage.datastore.provider.CloudStackPrimaryDataStoreProviderImpl">
-  </bean>
+  <bean id="GlobalLoadBalancingRulesServiceImpl" class ="org.apache.cloudstack.region.gslb.GlobalLoadBalancingRulesServiceImpl" />
 
 </beans>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b798c451/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java
index 859acc8..a50dff6 100644
--- a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java
+++ b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java
@@ -16,23 +16,6 @@
 // under the License.
 package com.cloud.agent.manager;
 
-import java.io.File;
-import java.math.BigInteger;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import javax.ejb.Local;
-import javax.inject.Inject;
-import javax.naming.ConfigurationException;
-
-import org.apache.log4j.Logger;
-
 import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.AttachIsoCommand;
 import com.cloud.agent.api.AttachVolumeAnswer;
@@ -97,8 +80,23 @@ import com.cloud.utils.db.Transaction;
 import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.vm.DiskProfile;
 import com.cloud.vm.VirtualMachine.State;
+import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
+import javax.ejb.Local;
+import javax.inject.Inject;
+import javax.naming.ConfigurationException;
+import java.io.File;
+import java.math.BigInteger;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
 @Component
 @Local(value = { MockStorageManager.class })
 public class MockStorageManagerImpl extends ManagerBase implements MockStorageManager {
@@ -954,7 +952,7 @@ public class MockStorageManagerImpl extends ManagerBase implements MockStorageMa
             long defaultTemplateSize = 2 * 1024 * 1024 * 1024L;
             MockVolumeVO template = new MockVolumeVO();
             template.setName("simulator-domR");
-            template.setPath(storage.getMountPoint() + "template/tmpl/1/10/" + UUID.randomUUID().toString());
+            template.setPath(storage.getMountPoint() + "template/tmpl/1/100/" + UUID.randomUUID().toString());
             template.setPoolId(storage.getId());
             template.setSize(defaultTemplateSize);
             template.setType(MockVolumeType.TEMPLATE);
@@ -975,7 +973,7 @@ public class MockStorageManagerImpl extends ManagerBase implements MockStorageMa
 
             template = new MockVolumeVO();
             template.setName("simulator-Centos");
-            template.setPath(storage.getMountPoint() + "template/tmpl/1/11/" + UUID.randomUUID().toString());
+            template.setPath(storage.getMountPoint() + "template/tmpl/1/111/" + UUID.randomUUID().toString());
             template.setPoolId(storage.getId());
             template.setSize(defaultTemplateSize);
             template.setType(MockVolumeType.TEMPLATE);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b798c451/server/src/com/cloud/hypervisor/dao/HypervisorCapabilitiesDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/hypervisor/dao/HypervisorCapabilitiesDaoImpl.java b/server/src/com/cloud/hypervisor/dao/HypervisorCapabilitiesDaoImpl.java
index 5421a89..759803e 100644
--- a/server/src/com/cloud/hypervisor/dao/HypervisorCapabilitiesDaoImpl.java
+++ b/server/src/com/cloud/hypervisor/dao/HypervisorCapabilitiesDaoImpl.java
@@ -16,19 +16,16 @@
 // under the License.
 package com.cloud.hypervisor.dao;
 
-import java.util.List;
-
-import javax.ejb.Local;
-
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.hypervisor.HypervisorCapabilitiesVO;
 import com.cloud.utils.db.GenericDaoBase;
-import com.cloud.utils.db.GenericSearchBuilder;
 import com.cloud.utils.db.SearchBuilder;
 import com.cloud.utils.db.SearchCriteria;
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
+
+import javax.ejb.Local;
+import java.util.List;
 
 @Component
 @Local(value=HypervisorCapabilitiesDao.class)
@@ -79,6 +76,8 @@ public class HypervisorCapabilitiesDaoImpl extends GenericDaoBase<HypervisorCapa
     public Long getMaxGuestsLimit(HypervisorType hypervisorType, String hypervisorVersion){
         Long defaultLimit = new Long(50);
         HypervisorCapabilitiesVO result = getCapabilities(hypervisorType, hypervisorVersion);
+        if (result == null)
+            return defaultLimit;
         Long limit = result.getMaxGuestsLimit();
         if (limit == null)
             return defaultLimit;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b798c451/setup/db/templates.simulator.sql
----------------------------------------------------------------------
diff --git a/setup/db/templates.simulator.sql b/setup/db/templates.simulator.sql
index a804450..bd7ce59 100755
--- a/setup/db/templates.simulator.sql
+++ b/setup/db/templates.simulator.sql
@@ -17,6 +17,6 @@
 
 
 INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type, image_data_store_id)
-    VALUES (10, UUID(), 'simulator-domR', 'SystemVM Template (simulator)', 0, now(), 'SYSTEM', 0, 64, 1, 'http://nfs1.lab.vmops.com/templates/routing/debian/latest/systemvm.vhd.bz2', '', 0, 'SystemVM Template (simulator)', 'VHD', 15, 0, 1, 'Simulator', 1);
+    VALUES (100, UUID(), 'simulator-domR', 'SystemVM Template (simulator)', 0, now(), 'SYSTEM', 0, 64, 1, 'http://download.cloud.com/templates/acton/acton-systemvm-02062012.vhd.bz2', '', 0, 'SystemVM Template (simulator)', 'VHD', 15, 0, 1, 'Simulator', 1);
 INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text,  format, guest_os_id, featured, cross_zones, hypervisor_type, image_data_store_id)
-    VALUES (11, UUID(), 'simulator-Centos', 'CentOS 5.3(64-bit) no GUI (Simulator)', 1, now(), 'BUILTIN', 0, 64, 1, 'http://nfs1.lab.vmops.com/templates/centos53-x86_64/latest/f59f18fb-ae94-4f97-afd2-f84755767aca.vhd.bz2', '', 0, 'CentOS 5.3(64-bit) no GUI (Simulator)', 'VHD', 12, 1, 1, 'Simulator', 1);
+    VALUES (111, UUID(), 'simulator-Centos', 'CentOS 5.3(64-bit) no GUI (Simulator)', 1, now(), 'BUILTIN', 0, 64, 1, 'http://download.cloud.com/templates/builtin/f59f18fb-ae94-4f97-afd2-f84755767aca.vhd.bz2', '', 0, 'CentOS 5.3(64-bit) no GUI (Simulator)', 'VHD', 12, 1, 1, 'Simulator', 1);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b798c451/tools/marvin/pom.xml
----------------------------------------------------------------------
diff --git a/tools/marvin/pom.xml b/tools/marvin/pom.xml
index a5cbd31..ce6ce38 100644
--- a/tools/marvin/pom.xml
+++ b/tools/marvin/pom.xml
@@ -86,7 +86,7 @@
   <!-- Custom profiles for sync and integration tests-->
   <profiles>
     <profile>
-      <id>sync</id>
+      <id>marvin.sync</id>
       <activation>
         <property>
           <name>endpoint</name>
@@ -154,7 +154,10 @@
       </build>
     </profile>
     <profile>
-      <id>marvin</id>
+      <id>marvin.setup</id>
+      <properties>
+        <marvin.config>${user.dir}/setup/dev/advanced.cfg</marvin.config>
+     </properties>
       <activation>
         <property>
           <name>marvin.config</name>
@@ -179,7 +182,7 @@
                   <arguments>
                     <argument>deployAndRun.py</argument>
                     <argument>-c</argument>
-                    <argument>${user.dir}/${marvin.config}</argument>
+                    <argument>${marvin.config}</argument>
                     <argument>-t</argument>
                     <argument>/tmp/t.log</argument>
                     <argument>-r</argument>
@@ -189,6 +192,30 @@
                   </arguments>
                 </configuration>
               </execution>
+              </executions>
+            </plugin>
+        </plugins>
+      </build>
+    </profile>
+    <profile>
+      <id>marvin.test</id>
+      <properties>
+        <marvin.config>${user.dir}/setup/dev/advanced.cfg</marvin.config>
+        <tag>simulator</tag>
+        <test>test/integration/smoke</test>
+      </properties>
+      <activation>
+        <property>
+          <name>marvin.config</name>
+        </property>
+      </activation>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.codehaus.mojo</groupId>
+            <artifactId>exec-maven-plugin</artifactId>
+            <version>1.2.1</version>
+            <executions>
               <execution>
                 <id>integration-test</id>
                 <phase>integration-test</phase>
@@ -201,11 +228,12 @@
                   <arguments>
                     <argument>--with-marvin</argument>
                     <argument>--marvin-config</argument>
-                    <argument>${user.dir}/${marvin.config}</argument>
+                    <argument>${marvin.config}</argument>
                     <argument>--load</argument>
                     <argument>-a</argument>
-                    <argument>tags=simulator</argument>
-                    <argument>${basedir}/../../test/integration/smoke/test_vm_life_cycle.py</argument>
+                    <argument>tags=${tag}</argument>
+                    <argument>${user.dir}/${test}</argument>
+                    <argument>-v</argument>
                   </arguments>
                 </configuration>
               </execution>


[02/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
CLOUDSTACK-1818: add a missing file that is missed in previous patch


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

Branch: refs/heads/kvm-vnc-listen
Commit: 95011d6bf365dcc9335fb6edf37fe43c10371f10
Parents: 8bb0990
Author: Kelven Yang <ke...@gmail.com>
Authored: Tue Mar 26 18:47:05 2013 -0700
Committer: Kelven Yang <ke...@gmail.com>
Committed: Fri Mar 29 11:12:36 2013 -0700

----------------------------------------------------------------------
 .../com/cloud/upgrade/databaseCreatorContext.xml   |   52 +++++++++++++++
 1 files changed, 52 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/95011d6b/server/resources/com/cloud/upgrade/databaseCreatorContext.xml
----------------------------------------------------------------------
diff --git a/server/resources/com/cloud/upgrade/databaseCreatorContext.xml b/server/resources/com/cloud/upgrade/databaseCreatorContext.xml
new file mode 100644
index 0000000..d2ed26f
--- /dev/null
+++ b/server/resources/com/cloud/upgrade/databaseCreatorContext.xml
@@ -0,0 +1,52 @@
+<!--
+  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
+  regarding copyright ownership. The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License. You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied. See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+  xmlns:context="http://www.springframework.org/schema/context"
+  xmlns:tx="http://www.springframework.org/schema/tx" 
+  xmlns:aop="http://www.springframework.org/schema/aop"
+  xsi:schemaLocation="http://www.springframework.org/schema/beans
+                      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+                      http://www.springframework.org/schema/tx 
+                      http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
+                      http://www.springframework.org/schema/aop
+                      http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
+                      http://www.springframework.org/schema/context
+                      http://www.springframework.org/schema/context/spring-context-3.0.xsd">                     
+
+  <context:annotation-config />
+
+  <!--
+    @DB support
+  -->
+  <bean id="componentContext" class="com.cloud.utils.component.ComponentContext" />
+  <bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" />
+  <bean id="instantiatePostProcessor" class="com.cloud.utils.component.ComponentInstantiationPostProcessor">
+    <property name="Interceptors">
+        <list>
+            <ref bean="transactionContextBuilder" />
+        </list>
+    </property>
+  </bean>
+
+  <bean id="versionDaoImpl" class="com.cloud.upgrade.dao.VersionDaoImpl" />
+  <bean id="databaseUpgradeChecker" class="com.cloud.upgrade.DatabaseUpgradeChecker" />
+  <bean id="premiumDatabaseUpgradeChecker" class="com.cloud.upgrade.PremiumDatabaseUpgradeChecker" />
+
+</beans>


[24/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
CLOUDSTACK-1158: Wrap qemu-img into it's own util
Signed-off-by: Edison Su <su...@gmail.com>


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

Branch: refs/heads/kvm-vnc-listen
Commit: ea0daeaee3f0c2d29821674a836e655fa844fb07
Parents: aa79ccf
Author: Wido den Hollander <wi...@widodh.nl>
Authored: Mon Apr 1 16:37:18 2013 -0700
Committer: Edison Su <su...@gmail.com>
Committed: Mon Apr 1 16:37:58 2013 -0700

----------------------------------------------------------------------
 plugins/hypervisors/kvm/pom.xml                    |   10 +
 .../kvm/resource/LibvirtComputingResource.java     |   30 +-
 .../kvm/resource/LibvirtDomainXMLParser.java       |    1 +
 .../hypervisor/kvm/storage/KVMPhysicalDisk.java    |   14 +-
 .../hypervisor/kvm/storage/KVMStoragePool.java     |    2 +-
 .../kvm/storage/KVMStoragePoolManager.java         |   13 +-
 .../kvm/storage/LibvirtStorageAdaptor.java         |  187 +++++----
 .../hypervisor/kvm/storage/LibvirtStoragePool.java |    2 +-
 .../hypervisor/kvm/storage/StorageAdaptor.java     |    2 +-
 .../org/apache/cloudstack/utils/qemu/QemuImg.java  |  352 +++++++++++++++
 .../cloudstack/utils/qemu/QemuImgException.java    |   25 +
 .../apache/cloudstack/utils/qemu/QemuImgFile.java  |   72 +++
 .../cloudstack/utils/qemu/QemuImgFileTest.java     |   62 +++
 .../apache/cloudstack/utils/qemu/QemuImgTest.java  |  289 ++++++++++++
 utils/src/com/cloud/utils/script/Script.java       |   21 +-
 15 files changed, 949 insertions(+), 133 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ea0daeae/plugins/hypervisors/kvm/pom.xml
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/pom.xml b/plugins/hypervisors/kvm/pom.xml
index 013a58d..3a1ba3a 100644
--- a/plugins/hypervisors/kvm/pom.xml
+++ b/plugins/hypervisors/kvm/pom.xml
@@ -67,6 +67,16 @@
             </execution>
           </executions>
         </plugin>
+        <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <version>2.14</version>
+        <configuration>
+          <excludes>
+            <exclude>**/Qemu*.java</exclude>
+          </excludes>
+        </configuration>
+      </plugin>
     </plugins>
   </build>
 </project>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ea0daeae/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index d30e8f8..526107f 100755
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -57,6 +57,10 @@ import javax.ejb.Local;
 import javax.naming.ConfigurationException;
 
 import org.apache.log4j.Logger;
+import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
+import org.apache.cloudstack.utils.qemu.QemuImg;
+import org.apache.cloudstack.utils.qemu.QemuImgFile;
+import org.apache.cloudstack.utils.qemu.QemuImgException;
 import org.libvirt.Connect;
 import org.libvirt.Domain;
 import org.libvirt.DomainInfo;
@@ -193,7 +197,6 @@ import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.SerialDef;
 import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.VirtioSerialDef;
 import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.TermPolicy;
 import com.cloud.hypervisor.kvm.storage.KVMPhysicalDisk;
-import com.cloud.hypervisor.kvm.storage.KVMPhysicalDisk.PhysicalDiskFormat;
 import com.cloud.hypervisor.kvm.storage.KVMStoragePool;
 import com.cloud.hypervisor.kvm.storage.KVMStoragePoolManager;
 import com.cloud.network.Networks.BroadcastDomainType;
@@ -1418,12 +1421,12 @@ ServerResource {
         StoragePoolType poolType = pool.getType();
         PhysicalDiskFormat volFormat = vol.getFormat();
          
-        if(pool.getType() == StoragePoolType.CLVM && volFormat == KVMPhysicalDisk.PhysicalDiskFormat.RAW) {
+        if(pool.getType() == StoragePoolType.CLVM && volFormat == PhysicalDiskFormat.RAW) {
             return "CLVM";
         } else if ((poolType == StoragePoolType.NetworkFilesystem
                   || poolType == StoragePoolType.SharedMountPoint
                   || poolType == StoragePoolType.Filesystem)
-                  && volFormat == KVMPhysicalDisk.PhysicalDiskFormat.QCOW2 ) {
+                  && volFormat == PhysicalDiskFormat.QCOW2 ) {
             return "QCOW2";
         }
         return null;
@@ -2230,14 +2233,25 @@ ServerResource {
                 }
             } else {
                 s_logger.debug("Converting RBD disk " + disk.getPath() + " into template " + cmd.getUniqueName());
-                Script.runSimpleBashScript("qemu-img convert"
-                        + " -f raw -O qcow2 "
-                        + KVMPhysicalDisk.RBDStringBuilder(primary.getSourceHost(),
+
+                QemuImgFile srcFile = new QemuImgFile(KVMPhysicalDisk.RBDStringBuilder(primary.getSourceHost(),
                                 primary.getSourcePort(),
                                 primary.getAuthUserName(),
                                 primary.getAuthSecret(),
-                                disk.getPath())
-                                + " " + tmpltPath + "/" + cmd.getUniqueName() + ".qcow2");
+                                disk.getPath()));
+                srcFile.setFormat(PhysicalDiskFormat.RAW);
+
+                QemuImgFile destFile = new QemuImgFile(tmpltPath + "/" + cmd.getUniqueName() + ".qcow2");
+                destFile.setFormat(PhysicalDiskFormat.QCOW2);
+
+                QemuImg q = new QemuImg();
+                try {
+                    q.convert(srcFile, destFile);
+                } catch (QemuImgException e) {
+                    s_logger.error("Failed to create new template while converting "
+                                    + srcFile.getFileName() + " to " + destFile.getFileName() + " the error was: " + e.getMessage());
+                }
+
                 File templateProp = new File(tmpltPath + "/template.properties");
                 if (!templateProp.exists()) {
                     templateProp.createNewFile();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ea0daeae/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java
index 61a75ba..403ed37 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java
@@ -25,6 +25,7 @@ import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 
+import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
 import org.apache.log4j.Logger;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ea0daeae/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMPhysicalDisk.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMPhysicalDisk.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMPhysicalDisk.java
index f359713..7f088fa 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMPhysicalDisk.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMPhysicalDisk.java
@@ -15,25 +15,13 @@
 // specific language governing permissions and limitations
 // under the License.
 package com.cloud.hypervisor.kvm.storage;
+import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
 
 public class KVMPhysicalDisk {
     private String path;
     private String name;
     private KVMStoragePool pool;
 
-    public static enum PhysicalDiskFormat {
-        RAW("raw"), QCOW2("qcow2"), TAR("tar"), DIR("dir");
-        String format;
-
-        private PhysicalDiskFormat(String format) {
-            this.format = format;
-        }
-
-        public String toString() {
-            return this.format;
-        }
-    }
-
     public static String RBDStringBuilder(String monHost, int monPort,
                             String authUserName, String authSecret, String image) {
         String rbdOpts;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ea0daeae/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePool.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePool.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePool.java
index d32a6fd..a1721e1 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePool.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePool.java
@@ -18,7 +18,7 @@ package com.cloud.hypervisor.kvm.storage;
 
 import java.util.List;
 
-import com.cloud.hypervisor.kvm.storage.KVMPhysicalDisk.PhysicalDiskFormat;
+import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
 import com.cloud.storage.Storage.StoragePoolType;
 
 public interface KVMStoragePool {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ea0daeae/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java
index f6db3f1..f5719ba 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java
@@ -23,10 +23,11 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.HashMap;
 import java.util.UUID;
 
+import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
+
 import com.cloud.hypervisor.kvm.resource.KVMHABase;
 import com.cloud.hypervisor.kvm.resource.KVMHABase.PoolType;
 import com.cloud.hypervisor.kvm.resource.KVMHAMonitor;
-import com.cloud.hypervisor.kvm.storage.KVMPhysicalDisk.PhysicalDiskFormat;
 import com.cloud.storage.Storage.StoragePoolType;
 import com.cloud.storage.StorageLayer;
 import com.cloud.utils.exception.CloudRuntimeException;
@@ -134,18 +135,18 @@ public class KVMStoragePoolManager {
         // LibvirtStorageAdaptor-specific statement
         if (destPool.getType() == StoragePoolType.RBD) {
             return adaptor.createDiskFromTemplate(template, name,
-                    KVMPhysicalDisk.PhysicalDiskFormat.RAW, template.getSize(), destPool);
+                    PhysicalDiskFormat.RAW, template.getSize(), destPool);
         } else if (destPool.getType() == StoragePoolType.CLVM) {
             return adaptor.createDiskFromTemplate(template, name,
-                                       KVMPhysicalDisk.PhysicalDiskFormat.RAW, template.getSize(),
+                                       PhysicalDiskFormat.RAW, template.getSize(),
                                        destPool);
-        } else if (template.getFormat() == KVMPhysicalDisk.PhysicalDiskFormat.DIR) {
+        } else if (template.getFormat() == PhysicalDiskFormat.DIR) {
             return adaptor.createDiskFromTemplate(template, name,
-                    KVMPhysicalDisk.PhysicalDiskFormat.DIR,
+                    PhysicalDiskFormat.DIR,
                     template.getSize(), destPool);
         } else {
             return adaptor.createDiskFromTemplate(template, name,
-                    KVMPhysicalDisk.PhysicalDiskFormat.QCOW2,
+                    PhysicalDiskFormat.QCOW2,
             template.getSize(), destPool);
         }
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ea0daeae/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
index cee2aae..8f58719 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
@@ -22,8 +22,14 @@ import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
+import java.util.Map;
+import java.util.HashMap;
 import org.apache.log4j.Logger;
 import org.apache.commons.codec.binary.Base64;
+import org.apache.cloudstack.utils.qemu.QemuImg;
+import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
+import org.apache.cloudstack.utils.qemu.QemuImgFile;
+import org.apache.cloudstack.utils.qemu.QemuImgException;
 import org.libvirt.Connect;
 import org.libvirt.LibvirtException;
 import org.libvirt.Secret;
@@ -43,7 +49,6 @@ import com.cloud.hypervisor.kvm.resource.LibvirtStoragePoolDef.poolType;
 import com.cloud.hypervisor.kvm.resource.LibvirtStoragePoolDef.authType;
 import com.cloud.hypervisor.kvm.resource.LibvirtStorageVolumeDef.volFormat;
 import com.cloud.hypervisor.kvm.resource.LibvirtStorageVolumeXMLParser;
-import com.cloud.hypervisor.kvm.storage.KVMPhysicalDisk.PhysicalDiskFormat;
 import com.cloud.exception.InternalErrorException;
 import com.cloud.storage.Storage.StoragePoolType;
 import com.cloud.storage.StorageLayer;
@@ -399,11 +404,11 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
                     disk.setFormat(pool.getDefaultFormat());
                 }
             } else if (pool.getType() == StoragePoolType.RBD) {
-                disk.setFormat(KVMPhysicalDisk.PhysicalDiskFormat.RAW);
+                disk.setFormat(PhysicalDiskFormat.RAW);
             } else if (voldef.getFormat() == LibvirtStorageVolumeDef.volFormat.QCOW2) {
-                disk.setFormat(KVMPhysicalDisk.PhysicalDiskFormat.QCOW2);
+                disk.setFormat(PhysicalDiskFormat.QCOW2);
             } else if (voldef.getFormat() == LibvirtStorageVolumeDef.volFormat.RAW) {
-                disk.setFormat(KVMPhysicalDisk.PhysicalDiskFormat.RAW);
+                disk.setFormat(PhysicalDiskFormat.RAW);
             }
             return disk;
         } catch (LibvirtException e) {
@@ -647,57 +652,57 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
 
             We then create a KVMPhysicalDisk object that we can return
         */
-
-        if (destPool.getType() != StoragePoolType.RBD) {
-            disk = destPool.createPhysicalDisk(newUuid, format, template.getVirtualSize());
-
-            if (template.getFormat() == PhysicalDiskFormat.TAR) {
-                Script.runSimpleBashScript("tar -x -f " + template.getPath() + " -C " + disk.getPath());
-            } else if (template.getFormat() == PhysicalDiskFormat.DIR) {
-                Script.runSimpleBashScript("mkdir -p " + disk.getPath());
-                Script.runSimpleBashScript("chmod 755 " + disk.getPath());
-                Script.runSimpleBashScript("cp -p -r " + template.getPath() + "/* " + disk.getPath());
-            } else if (format == PhysicalDiskFormat.QCOW2) {
-                Script.runSimpleBashScript("qemu-img create -f "
-                        + template.getFormat() + " -b  " + template.getPath() + " "
-                        + disk.getPath());
-            } else if (format == PhysicalDiskFormat.RAW) {
-                Script.runSimpleBashScript("qemu-img convert -f "
-                                        + template.getFormat() + " -O raw " + template.getPath()
-                                        + " " + disk.getPath());
-            }
-        } else {
-            disk = new KVMPhysicalDisk(destPool.getSourceDir() + "/" + newUuid, newUuid, destPool);
-            disk.setFormat(format);
-            disk.setSize(template.getVirtualSize());
-            disk.setVirtualSize(disk.getSize());
-
-            if (srcPool.getType() != StoragePoolType.RBD) {
-                Script.runSimpleBashScript("qemu-img convert"
-                        + " -f " + template.getFormat()
-                        + " -O " + format
-                        + " " + template.getPath()
-                        + " " + KVMPhysicalDisk.RBDStringBuilder(destPool.getSourceHost(),
-                                                destPool.getSourcePort(),
-                                                destPool.getAuthUserName(),
-                                                destPool.getAuthSecret(),
-                                                disk.getPath()));
+        try {
+            if (destPool.getType() != StoragePoolType.RBD) {
+                disk = destPool.createPhysicalDisk(newUuid, format, template.getVirtualSize());
+                if (template.getFormat() == PhysicalDiskFormat.TAR) {
+                    Script.runSimpleBashScript("tar -x -f " + template.getPath() + " -C " + disk.getPath());
+                } else if (template.getFormat() == PhysicalDiskFormat.DIR) {
+                    Script.runSimpleBashScript("mkdir -p " + disk.getPath());
+                    Script.runSimpleBashScript("chmod 755 " + disk.getPath());
+                    Script.runSimpleBashScript("cp -p -r " + template.getPath() + "/* " + disk.getPath());
+                } else if (format == PhysicalDiskFormat.QCOW2) {
+                    QemuImgFile backingFile = new QemuImgFile(template.getPath(), template.getFormat());
+                    QemuImgFile destFile = new QemuImgFile(disk.getPath());
+                    QemuImg qemu = new QemuImg();
+                    qemu.create(destFile, backingFile);
+                } else if (format == PhysicalDiskFormat.RAW) {
+                    QemuImgFile sourceFile = new QemuImgFile(template.getPath(), template.getFormat());
+                    QemuImgFile destFile = new QemuImgFile(disk.getPath(), PhysicalDiskFormat.RAW);
+                    QemuImg qemu = new QemuImg();
+                    qemu.convert(sourceFile, destFile);
+                }
             } else {
-                template.setFormat(PhysicalDiskFormat.RAW);
-                Script.runSimpleBashScript("qemu-img convert"
-                        + " -f " + template.getFormat()
-                        + " -O " + format
-                        + " " + KVMPhysicalDisk.RBDStringBuilder(srcPool.getSourceHost(),
-                                                srcPool.getSourcePort(),
-                                                srcPool.getAuthUserName(),
-                                                srcPool.getAuthSecret(),
-                                                template.getPath())
-                        + " " + KVMPhysicalDisk.RBDStringBuilder(destPool.getSourceHost(),
-                                                destPool.getSourcePort(),
-                                                destPool.getAuthUserName(),
-                                                destPool.getAuthSecret(),
-                                                disk.getPath()));
+                disk = new KVMPhysicalDisk(destPool.getSourceDir() + "/" + newUuid, newUuid, destPool);
+                disk.setFormat(format);
+                disk.setSize(template.getVirtualSize());
+                disk.setVirtualSize(disk.getSize());
+
+                QemuImg qemu = new QemuImg();
+                QemuImgFile srcFile;
+                QemuImgFile destFile = new QemuImgFile(KVMPhysicalDisk.RBDStringBuilder(destPool.getSourceHost(),
+                        destPool.getSourcePort(),
+                        destPool.getAuthUserName(),
+                        destPool.getAuthSecret(),
+                        disk.getPath()));
+                destFile.setFormat(format);
+
+                if (srcPool.getType() != StoragePoolType.RBD) {
+                    srcFile = new QemuImgFile(template.getPath(), template.getFormat());
+                } else {
+                    template.setFormat(PhysicalDiskFormat.RAW);
+                    srcFile = new QemuImgFile(KVMPhysicalDisk.RBDStringBuilder(srcPool.getSourceHost(),
+                            srcPool.getSourcePort(),
+                            srcPool.getAuthUserName(),
+                            srcPool.getAuthSecret(),
+                            template.getPath()));
+                    srcFile.setFormat(template.getFormat());
+                }
+                qemu.convert(srcFile, destFile);
             }
+        } catch (QemuImgException e) {
+            s_logger.error("Failed to create " + disk.getPath() +
+                    " due to a failed executing of qemu-img: " + e.getMessage());
         }
         return disk;
     }
@@ -759,49 +764,65 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
         PhysicalDiskFormat sourceFormat = disk.getFormat();
         PhysicalDiskFormat destFormat = newDisk.getFormat();
 
+        QemuImg qemu = new QemuImg();
+        QemuImgFile srcFile = null;
+        QemuImgFile destFile = null;
+
         if ((srcPool.getType() != StoragePoolType.RBD) && (destPool.getType() != StoragePoolType.RBD)) {
             if (sourceFormat == PhysicalDiskFormat.TAR) {
                 Script.runSimpleBashScript("tar -x -f " + sourcePath + " -C " + destPath);
-
             } else if (sourceFormat == PhysicalDiskFormat.DIR) {
                 Script.runSimpleBashScript("mkdir -p " + destPath);
                 Script.runSimpleBashScript("chmod 755 " + destPath);
                 Script.runSimpleBashScript("cp -p -r " + sourcePath + "/* " + destPath);
-
-            } else if (sourceFormat.equals(destFormat) &&
-                Script.runSimpleBashScript("qemu-img info " + sourcePath + "|grep backing") == null) {
-                Script.runSimpleBashScript("cp -f " + sourcePath + " " + destPath);
-
             } else {
-                Script.runSimpleBashScript("qemu-img convert -f " + sourceFormat
-                    + " -O " + destFormat
-                    + " " + sourcePath
-                    + " " + destPath);
+                srcFile = new QemuImgFile(sourcePath, sourceFormat);
+                try {
+                    Map<String, String> info = qemu.info(srcFile);
+                    String backingFile = info.get(new String("backing_file"));
+                    if (sourceFormat.equals(destFormat) && backingFile == null) {
+                        Script.runSimpleBashScript("cp -f " + sourcePath + " " + destPath);
+                    } else {
+                        destFile = new QemuImgFile(destPath, destFormat);
+                    }
+                } catch (QemuImgException e) {
+                    s_logger.error("Failed to fetch the information of file "
+                            + srcFile.getFileName() + " the error was: " + e.getMessage());
+                }
             }
         } else if ((srcPool.getType() != StoragePoolType.RBD) && (destPool.getType() == StoragePoolType.RBD))  {
-            Script.runSimpleBashScript("qemu-img convert -f " + sourceFormat
-                    + " -O " + destFormat
-                    + " " + sourcePath
-                    + " " + KVMPhysicalDisk.RBDStringBuilder(destPool.getSourceHost(),
-                                                destPool.getSourcePort(),
-                                                destPool.getAuthUserName(),
-                                                destPool.getAuthSecret(),
-                                                destPath));
+            srcFile = new QemuImgFile(sourcePath, sourceFormat);
+            destFile = new QemuImgFile(KVMPhysicalDisk.RBDStringBuilder(destPool.getSourceHost(),
+                    destPool.getSourcePort(),
+                    destPool.getAuthUserName(),
+                    destPool.getAuthSecret(),
+                    destPath));
+            destFile.setFormat(destFormat);
         } else {
-            Script.runSimpleBashScript("qemu-img convert -f " + sourceFormat
-                    + " -O " + destFormat
-                    + " " + KVMPhysicalDisk.RBDStringBuilder(srcPool.getSourceHost(),
-                                                srcPool.getSourcePort(),
-                                                srcPool.getAuthUserName(),
-                                                srcPool.getAuthSecret(),
-                                                sourcePath)
-                    + " " + KVMPhysicalDisk.RBDStringBuilder(destPool.getSourceHost(),
-                                                destPool.getSourcePort(),
-                                                destPool.getAuthUserName(),
-                                                destPool.getAuthSecret(),
-                                                destPath));
+            srcFile = new QemuImgFile(KVMPhysicalDisk.RBDStringBuilder(srcPool.getSourceHost(),
+                    srcPool.getSourcePort(),
+                    srcPool.getAuthUserName(),
+                    srcPool.getAuthSecret(),
+                    sourcePath));
+            srcFile.setFormat(sourceFormat);
+            destFile = new QemuImgFile(KVMPhysicalDisk.RBDStringBuilder(destPool.getSourceHost(),
+                    destPool.getSourcePort(),
+                    destPool.getAuthUserName(),
+                    destPool.getAuthSecret(),
+                    destPath));
+            destFile.setFormat(destFormat);
+        }
+
+        if (srcFile != null && destFile != null) {
+            try {
+                qemu.convert(srcFile, destFile);
+            } catch (QemuImgException e) {
+                s_logger.error("Failed to convert " + srcFile.getFileName() + " to "
+                        + destFile.getFileName() + " the error was: " + e.getMessage());
+            }
         }
 
+
         return newDisk;
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ea0daeae/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java
index 1396097..2ce5175 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java
@@ -18,9 +18,9 @@ package com.cloud.hypervisor.kvm.storage;
 
 import java.util.List;
 
+import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
 import org.libvirt.StoragePool;
 
-import com.cloud.hypervisor.kvm.storage.KVMPhysicalDisk.PhysicalDiskFormat;
 import com.cloud.storage.Storage.StoragePoolType;
 
 public class LibvirtStoragePool implements KVMStoragePool {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ea0daeae/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/StorageAdaptor.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/StorageAdaptor.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/StorageAdaptor.java
index 79c3b92..dd75677 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/StorageAdaptor.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/StorageAdaptor.java
@@ -18,7 +18,7 @@ package com.cloud.hypervisor.kvm.storage;
 
 import java.util.List;
 
-import com.cloud.hypervisor.kvm.storage.KVMPhysicalDisk.PhysicalDiskFormat;
+import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
 import com.cloud.storage.Storage.StoragePoolType;
 
 public interface StorageAdaptor {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ea0daeae/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/qemu/QemuImg.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/qemu/QemuImg.java b/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/qemu/QemuImg.java
new file mode 100644
index 0000000..4ed8593
--- /dev/null
+++ b/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/qemu/QemuImg.java
@@ -0,0 +1,352 @@
+// 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
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// the License.  You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.utils.qemu;
+
+import org.apache.cloudstack.utils.qemu.QemuImgFile;
+import org.apache.cloudstack.utils.qemu.QemuImgException;
+
+import com.cloud.utils.script.Script;
+import com.cloud.utils.script.OutputInterpreter;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+
+public class QemuImg {
+
+    /* The qemu-img binary. We expect this to be in $PATH */
+    public String _qemuImgPath = "qemu-img";
+
+    /* Shouldn't we have KVMPhysicalDisk and LibvirtVMDef read this? */
+    public static enum PhysicalDiskFormat {
+        RAW("raw"), QCOW2("qcow2"), VMDK("vmdk"), FILE("file"), RBD("rbd"), SHEEPDOG("sheepdog"), HTTP("http"), HTTPS("https"), TAR("tar"), DIR("dir");
+        String format;
+
+        private PhysicalDiskFormat(String format) {
+            this.format = format;
+        }
+
+        public String toString() {
+            return this.format;
+        }
+    }
+
+    public QemuImg() {
+
+    }
+
+    /**
+     * Create a QemuImg object
+     *
+     *
+     * @param qemuImgPath
+     *            A alternative path to the qemu-img binary
+     * @return void
+     */
+    public QemuImg(String qemuImgPath) {
+        this._qemuImgPath = qemuImgPath;
+    }
+
+    /* These are all methods supported by the qemu-img tool */
+
+    /* Perform a consistency check on the disk image */
+    public void check(QemuImgFile file) {
+
+    }
+
+    /**
+     * Create a new image
+     *
+     * This method calls 'qemu-img create'
+     * 
+     * @param file
+     *            The file to create
+     * @param backingFile
+     *            A backing file if used (for example with qcow2)
+     * @param options
+     *            Options for the create. Takes a Map<String, String> with key value
+     *            pairs which are passed on to qemu-img without validation.
+     * @return void
+     */
+    public void create(QemuImgFile file, QemuImgFile backingFile, Map<String, String> options) throws QemuImgException {
+        Script s = new Script(_qemuImgPath);
+        s.add("create");
+
+        if (options != null && !options.isEmpty()) {
+            s.add("-o");
+            String optionsStr = "";
+            for (Map.Entry<String, String> option : options.entrySet()) {
+                optionsStr += option.getKey() + "=" + option.getValue() + ",";
+            }
+            s.add(optionsStr);
+        }
+
+        /*
+            -b for a backing file does not show up in the docs, but it works.
+            Shouldn't this be -o backing_file=filename instead?
+        */
+        s.add("-f");
+        if (backingFile != null) {
+            s.add(backingFile.getFormat().toString());
+            s.add("-b");
+            s.add(backingFile.getFileName());
+        } else {
+            s.add(file.getFormat().toString());
+        }
+
+        s.add(file.getFileName());
+
+        if (backingFile == null) {
+            s.add(Long.toString(file.getSize()));
+        }
+        String result = s.execute();
+        if (result != null) {
+            throw new QemuImgException(result);
+        }
+    }
+
+    /**
+     * Create a new image
+     *
+     * This method calls 'qemu-img create'
+     *
+     * @param file
+     *            The file to create
+     * @return void
+     */
+    public void create(QemuImgFile file) throws QemuImgException {
+        this.create(file, null, null);
+    }
+
+    /**
+     * Create a new image
+     *
+     * This method calls 'qemu-img create'
+     *
+     * @param file
+     *            The file to create
+     * @param backingFile
+     *            A backing file if used (for example with qcow2)
+     * @return void
+     */
+    public void create(QemuImgFile file, QemuImgFile backingFile) throws QemuImgException {
+        this.create(file, backingFile, null);
+    }
+
+    /**
+     * Create a new image
+     *
+     * This method calls 'qemu-img create'
+     *
+     * @param file
+     *            The file to create
+     * @param options
+     *            Options for the create. Takes a Map<String, String> with key value
+     *            pairs which are passed on to qemu-img without validation.
+     * @return void
+     */
+    public void create(QemuImgFile file, Map<String, String> options) throws QemuImgException {
+        this.create(file, null, options);
+    }
+
+    /**
+     * Convert a image from source to destination
+     *
+     * This method calls 'qemu-img convert' and takes two objects
+     * as an argument.
+     * 
+     *
+     * @param srcFile
+     *            The source file
+     * @param destFile
+     *            The destination file
+     * @param options
+     *            Options for the convert. Takes a Map<String, String> with key value
+     *            pairs which are passed on to qemu-img without validation.
+     * @return void
+     */
+    public void convert(QemuImgFile srcFile, QemuImgFile destFile, Map<String, String> options) throws QemuImgException {
+        Script s = new Script(_qemuImgPath);
+        s.add("convert");
+        s.add("-f");
+        s.add(srcFile.getFormat().toString());
+        s.add("-O");
+        s.add(destFile.getFormat().toString());
+
+        if (options != null && !options.isEmpty()) {
+            s.add("-o");
+            String optionsStr = "";
+            for (Map.Entry<String, String> option : options.entrySet()) {
+                optionsStr += option.getKey() + "=" + option.getValue() + ",";
+            }
+            s.add(optionsStr);
+        }
+
+        s.add(srcFile.getFileName());
+        s.add(destFile.getFileName());
+
+        String result = s.execute();
+        if (result != null) {
+            throw new QemuImgException(result);
+        }
+    }
+
+    /**
+     * Convert a image from source to destination
+     *
+     * This method calls 'qemu-img convert' and takes two objects
+     * as an argument.
+     *
+     *
+     * @param srcFile
+     *            The source file
+     * @param destFile
+     *            The destination file
+     * @return void
+     */
+    public void convert(QemuImgFile srcFile, QemuImgFile destFile) throws QemuImgException {
+        this.convert(srcFile, destFile, null);
+    }
+
+    /**
+     * Commit the changes recorded in the file in its base image.
+     *
+     * This method calls 'qemu-img commit' and takes one object as
+     * an argument
+     *
+     * @param file
+     *            The file of which changes have to be committed
+     * @return void
+     */
+    public void commit(QemuImgFile file) throws QemuImgException {
+
+    }
+
+    /**
+     * Execute qemu-img info for the given file
+     *
+     * Qemu-img returns human readable output, but this method does it's best
+     * to turn that into machine readeable data.
+     *
+     * Spaces in keys are replaced by underscores (_).
+     * Sizes (virtual_size and disk_size) are returned in bytes
+     * Paths (image and backing_file) are the absolute path to the file
+     *
+     * @param file
+     *            A QemuImgFile object containing the file to get the information from
+     * @return A HashMap with String key-value information as returned by 'qemu-img info'
+     */
+    public Map<String, String> info(QemuImgFile file) throws QemuImgException {
+        Script s = new Script(_qemuImgPath);
+        s.add("info");
+        s.add(file.getFileName());
+        OutputInterpreter.AllLinesParser parser = new OutputInterpreter.AllLinesParser();
+        String result = s.execute(parser);
+        if (result != null) {
+            throw new QemuImgException(result);
+        }
+
+        HashMap<String,String> info = new HashMap<String,String>();
+        String[] outputBuffer = parser.getLines().trim().split("\n");
+        for (int i = 0; i < outputBuffer.length; i++) {
+            String[] lineBuffer = outputBuffer[i].split(":", 2);
+            if (lineBuffer.length == 2) {
+                String key = lineBuffer[0].trim().replace(" ", "_");
+                String value = null;
+
+                if (key.equals("virtual_size")) {
+                    value = lineBuffer[1].trim().replaceAll("^.*\\(([0-9]+).*$", "$1");
+                } else {
+                    value = lineBuffer[1].trim();
+                }
+
+                info.put(key, value);
+            }
+        }
+        return info;
+    }
+
+    /* List, apply, create or delete snapshots in image */
+    public void snapshot() throws QemuImgException {
+
+    }
+
+    /* Changes the backing file of an image */
+    public void rebase() throws QemuImgException {
+
+    }
+
+    /**
+     * Resize an image
+     *
+     * This method simple calls 'qemu-img resize'.
+     * A negative size value will get prefixed with - and a positive with +
+     *
+     * Sizes are in bytes and will be passed on that way
+     *
+     * @param file
+     *            The file to resize
+     * @param size
+     *            The new size
+     * @param delta
+     *            Flag if the new size is a delta
+     */
+    public void resize(QemuImgFile file, long size, boolean delta) throws QemuImgException {
+        String newSize = null;
+
+        if (size == 0) {
+            throw new QemuImgException("size should never be exactly zero");
+        }
+
+        if (delta) {
+            if (size > 0) {
+                newSize = "+" + Long.toString(size);
+            } else {
+                newSize = Long.toString(size);
+            }
+        } else {
+            if (size <= 0) {
+                throw new QemuImgException("size should not be negative if 'delta' is false!");
+            }
+            newSize = Long.toString(size);
+        }
+
+        Script s = new Script(_qemuImgPath);
+        s.add("resize");
+        s.add(file.getFileName());
+        s.add(newSize);
+        s.execute();
+    }
+
+    /**
+     * Resize an image
+     *
+     * This method simple calls 'qemu-img resize'.
+     * A negative size value will get prefixed with - and a positive with +
+     *
+     * Sizes are in bytes and will be passed on that way
+     *
+     * @param file
+     *            The file to resize
+     * @param size
+     *            The new size
+     */
+    public void resize(QemuImgFile file, long size) throws QemuImgException {
+        this.resize(file, size, false);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ea0daeae/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/qemu/QemuImgException.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/qemu/QemuImgException.java b/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/qemu/QemuImgException.java
new file mode 100644
index 0000000..082ebe4
--- /dev/null
+++ b/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/qemu/QemuImgException.java
@@ -0,0 +1,25 @@
+// 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
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// the License.  You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.utils.qemu;
+
+public class QemuImgException extends Exception {
+
+    public QemuImgException(String message) {
+        super(message);
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ea0daeae/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/qemu/QemuImgFile.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/qemu/QemuImgFile.java b/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/qemu/QemuImgFile.java
new file mode 100644
index 0000000..90d925d
--- /dev/null
+++ b/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/qemu/QemuImgFile.java
@@ -0,0 +1,72 @@
+// 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
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// the License.  You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.utils.qemu;
+
+import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
+
+public class QemuImgFile {
+
+    private long size = 0;
+    private String fileName;
+    private PhysicalDiskFormat format = PhysicalDiskFormat.RAW;
+
+    public QemuImgFile(String fileName) {
+        this.fileName = fileName;
+    }
+
+    public QemuImgFile(String fileName, long size) {
+        this.fileName = fileName;
+        this.size = size;
+    }
+
+    public QemuImgFile(String fileName, long size, PhysicalDiskFormat format) {
+        this.fileName = fileName;
+        this.size = size;
+        this.format = format;
+    }
+
+    public QemuImgFile(String fileName, PhysicalDiskFormat format) {
+        this.fileName = fileName;
+        this.size = size;
+        this.format = format;
+    }
+
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
+    }
+
+    public void setSize(long size) {
+        this.size = size;
+    }
+
+    public void setFormat(PhysicalDiskFormat format) {
+        this.format = format;
+    }
+
+    public String getFileName() {
+        return this.fileName;
+    }
+
+    public long getSize() {
+        return this.size;
+    }
+
+    public PhysicalDiskFormat getFormat() {
+        return this.format;
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ea0daeae/plugins/hypervisors/kvm/test/org/apache/cloudstack/utils/qemu/QemuImgFileTest.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/test/org/apache/cloudstack/utils/qemu/QemuImgFileTest.java b/plugins/hypervisors/kvm/test/org/apache/cloudstack/utils/qemu/QemuImgFileTest.java
new file mode 100644
index 0000000..9fe057f
--- /dev/null
+++ b/plugins/hypervisors/kvm/test/org/apache/cloudstack/utils/qemu/QemuImgFileTest.java
@@ -0,0 +1,62 @@
+// 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
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// the License.  You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.utils.qemu;
+
+import org.junit.Ignore;
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+import org.apache.cloudstack.utils.qemu.QemuImgFile;
+import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
+
+@Ignore
+public class QemuImgFileTest {
+    @Test
+    public void testFileNameAtContructor() {
+        String filename = "/tmp/test-image.qcow2";
+        QemuImgFile file = new QemuImgFile(filename);
+        assertEquals(file.getFileName(), filename);
+    }
+
+    @Test
+    public void testFileNameAndSizeAtContructor() {
+        long size = 1024;
+        String filename = "/tmp/test-image.qcow2";
+        QemuImgFile file = new QemuImgFile(filename, size);
+        assertEquals(file.getFileName(), filename);
+        assertEquals(file.getSize(), size);
+    }
+
+    @Test
+    public void testFileNameAndSizeAndFormatAtContructor() {
+        PhysicalDiskFormat format = PhysicalDiskFormat.RAW;
+        long size = 1024;
+        String filename = "/tmp/test-image.qcow2";
+        QemuImgFile file = new QemuImgFile(filename, size, format);
+        assertEquals(file.getFileName(), filename);
+        assertEquals(file.getSize(), size);
+        assertEquals(file.getFormat(), format);
+    }
+
+    @Test
+    public void testFileNameAndFormatAtContructor() {
+        PhysicalDiskFormat format = PhysicalDiskFormat.RAW;
+        String filename = "/tmp/test-image.qcow2";
+        QemuImgFile file = new QemuImgFile(filename, format);
+        assertEquals(file.getFileName(), filename);
+        assertEquals(file.getFormat(), format);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ea0daeae/plugins/hypervisors/kvm/test/org/apache/cloudstack/utils/qemu/QemuImgTest.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/test/org/apache/cloudstack/utils/qemu/QemuImgTest.java b/plugins/hypervisors/kvm/test/org/apache/cloudstack/utils/qemu/QemuImgTest.java
new file mode 100644
index 0000000..9c6ac8b
--- /dev/null
+++ b/plugins/hypervisors/kvm/test/org/apache/cloudstack/utils/qemu/QemuImgTest.java
@@ -0,0 +1,289 @@
+// 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
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// the License.  You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.utils.qemu;
+
+import org.junit.Ignore;
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+import org.apache.cloudstack.utils.qemu.QemuImgFile;
+import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.UUID;
+import java.io.File;
+
+@Ignore
+public class QemuImgTest {
+
+    @Test
+    public void testCreateAndInfo() throws QemuImgException {
+        String filename = "/tmp/" + UUID.randomUUID() + ".qcow2";
+
+        /* 10TB virtual_size */
+        long size = 10995116277760l;
+        QemuImgFile file = new QemuImgFile(filename, size, PhysicalDiskFormat.QCOW2);
+
+        QemuImg qemu = new QemuImg();
+        qemu.create(file);
+        Map<String, String> info = qemu.info(file);
+
+        if (info == null) {
+            fail("We didn't get any information back from qemu-img");
+        }
+
+        Long infoSize = Long.parseLong(info.get(new String("virtual_size")));
+        assertEquals(Long.valueOf(size), Long.valueOf(infoSize));
+
+        String infoPath = info.get(new String("image"));
+        assertEquals(filename, infoPath);
+
+        File f = new File(filename);
+        f.delete();
+
+    }
+
+    @Test
+    public void testCreateAndInfoWithOptions() throws QemuImgException {
+        String filename = "/tmp/" + UUID.randomUUID() + ".qcow2";
+
+        /* 10TB virtual_size */
+        long size = 10995116277760l;
+        QemuImgFile file = new QemuImgFile(filename, size, PhysicalDiskFormat.QCOW2);
+        String clusterSize = "131072";
+        Map<String, String> options = new HashMap<String, String>();
+
+        options.put("cluster_size", clusterSize);
+
+        QemuImg qemu = new QemuImg();
+        qemu.create(file, options);
+        Map<String, String> info = qemu.info(file);
+
+        Long infoSize = Long.parseLong(info.get(new String("virtual_size")));
+        assertEquals(Long.valueOf(size), Long.valueOf(infoSize));
+
+        String infoPath = info.get(new String("image"));
+        assertEquals(filename, infoPath);
+
+        String infoClusterSize = info.get(new String("cluster_size"));
+        assertEquals(clusterSize, infoClusterSize);
+
+        File f = new File(filename);
+        f.delete();
+
+    }
+
+    @Test
+    public void testCreateAndResize() throws QemuImgException {
+        String filename = "/tmp/" + UUID.randomUUID() + ".qcow2";
+
+        long startSize = 20480;
+        long endSize = 40960;
+        QemuImgFile file = new QemuImgFile(filename, startSize, PhysicalDiskFormat.QCOW2);
+
+        try {
+            QemuImg qemu = new QemuImg();
+            qemu.create(file);
+            qemu.resize(file, endSize);
+            Map<String, String> info = qemu.info(file);
+
+            if (info == null) {
+                fail("We didn't get any information back from qemu-img");
+            }
+
+            Long infoSize = Long.parseLong(info.get(new String("virtual_size")));
+            assertEquals(Long.valueOf(endSize), Long.valueOf(infoSize));
+        } catch (QemuImgException e) {
+            fail(e.getMessage());
+        }
+
+        File f = new File(filename);
+        f.delete();
+
+    }
+
+    @Test
+    public void testCreateAndResizeDeltaPositive() throws QemuImgException {
+        String filename = "/tmp/" + UUID.randomUUID() + ".qcow2";
+
+        long startSize = 20480;
+        long increment = 20480;
+        QemuImgFile file = new QemuImgFile(filename, startSize, PhysicalDiskFormat.RAW);
+
+        try {
+            QemuImg qemu = new QemuImg();
+            qemu.create(file);
+            qemu.resize(file, increment, true);
+            Map<String, String> info = qemu.info(file);
+
+            if (info == null) {
+                fail("We didn't get any information back from qemu-img");
+            }
+
+            Long infoSize = Long.parseLong(info.get(new String("virtual_size")));
+            assertEquals(Long.valueOf(startSize + increment), Long.valueOf(infoSize));
+        } catch (QemuImgException e) {
+            fail(e.getMessage());
+        }
+
+        File f = new File(filename);
+        f.delete();
+    }
+
+    @Test
+    public void testCreateAndResizeDeltaNegative() throws QemuImgException {
+        String filename = "/tmp/" + UUID.randomUUID() + ".qcow2";
+
+        long startSize = 81920;
+        long increment = -40960;
+        QemuImgFile file = new QemuImgFile(filename, startSize, PhysicalDiskFormat.RAW);
+
+        try {
+            QemuImg qemu = new QemuImg();
+            qemu.create(file);
+            qemu.resize(file, increment, true);
+            Map<String, String> info = qemu.info(file);
+
+            if (info == null) {
+                fail("We didn't get any information back from qemu-img");
+            }
+
+            Long infoSize = Long.parseLong(info.get(new String("virtual_size")));
+            assertEquals(Long.valueOf(startSize + increment), Long.valueOf(infoSize));
+        } catch (QemuImgException e) {
+            fail(e.getMessage());
+        }
+
+        File f = new File(filename);
+        f.delete();
+    }
+
+    @Test(expected = QemuImgException.class)
+    public void testCreateAndResizeFail() throws QemuImgException  {
+        String filename = "/tmp/" + UUID.randomUUID() + ".qcow2";
+
+        long startSize = 20480;
+
+        /* Negative new size, expect failure */
+        long endSize = -1;
+        QemuImgFile file = new QemuImgFile(filename, startSize, PhysicalDiskFormat.QCOW2);
+
+        QemuImg qemu = new QemuImg();
+        try {
+            qemu.create(file);
+            qemu.resize(file, endSize);
+        } finally {
+            File f = new File(filename);
+            f.delete();
+        }
+    }
+
+    @Test(expected = QemuImgException.class)
+    public void testCreateAndResizeZero() throws QemuImgException {
+        String filename = "/tmp/" + UUID.randomUUID() + ".qcow2";
+
+        long startSize = 20480;
+        QemuImgFile file = new QemuImgFile(filename, 20480, PhysicalDiskFormat.QCOW2);
+
+        QemuImg qemu = new QemuImg();
+        qemu.create(file);
+        qemu.resize(file, 0);
+
+        File f = new File(filename);
+        f.delete();
+
+    }
+
+    @Test
+    public void testCreateWithBackingFile() throws QemuImgException {
+        String firstFileName = "/tmp/" + UUID.randomUUID() + ".qcow2";
+        String secondFileName = "/tmp/" + UUID.randomUUID() + ".qcow2";
+
+        QemuImgFile firstFile = new QemuImgFile(firstFileName, 20480, PhysicalDiskFormat.QCOW2);
+        QemuImgFile secondFile = new QemuImgFile(secondFileName, PhysicalDiskFormat.QCOW2);
+
+        QemuImg qemu = new QemuImg();
+        qemu.create(firstFile);
+        qemu.create(secondFile, firstFile);
+
+        Map<String, String> info = qemu.info(secondFile);
+        if (info == null) {
+            fail("We didn't get any information back from qemu-img");
+        }
+
+        String backingFile = info.get(new String("backing_file"));
+        if (backingFile == null) {
+            fail("The second file does not have a property backing_file! Create failed?");
+        }
+    }
+
+    @Test
+    public void testConvertBasic() throws QemuImgException {
+        long srcSize = 20480;
+        String srcFileName = "/tmp/" + UUID.randomUUID() + ".qcow2";
+        String destFileName = "/tmp/" + UUID.randomUUID() + ".qcow2";
+
+        QemuImgFile srcFile = new QemuImgFile(srcFileName, srcSize);
+        QemuImgFile destFile = new QemuImgFile(destFileName);
+
+        QemuImg qemu = new QemuImg();
+        qemu.create(srcFile);
+        qemu.convert(srcFile, destFile);
+        Map<String, String> info = qemu.info(destFile);
+        if (info == null) {
+            fail("We didn't get any information back from qemu-img");
+        }
+
+        File sf = new File(srcFileName);
+        sf.delete();
+
+        File df = new File(destFileName);
+        df.delete();
+
+    }
+
+    @Test
+    public void testConvertAdvanced() throws QemuImgException {
+        long srcSize = 4019200;
+        String srcFileName = "/tmp/" + UUID.randomUUID() + ".qcow2";
+        String destFileName = "/tmp/" + UUID.randomUUID() + ".qcow2";
+        PhysicalDiskFormat srcFormat = PhysicalDiskFormat.RAW;
+        PhysicalDiskFormat destFormat = PhysicalDiskFormat.QCOW2;
+
+        QemuImgFile srcFile = new QemuImgFile(srcFileName, srcSize, srcFormat);
+        QemuImgFile destFile = new QemuImgFile(destFileName, destFormat);
+
+        QemuImg qemu = new QemuImg();
+        qemu.create(srcFile);
+        qemu.convert(srcFile, destFile);
+
+        Map<String, String> info = qemu.info(destFile);
+
+        PhysicalDiskFormat infoFormat = PhysicalDiskFormat.valueOf(info.get(new String("file_format")).toUpperCase());
+        assertEquals(destFormat, infoFormat);
+
+        Long infoSize = Long.parseLong(info.get(new String("virtual_size")));
+        assertEquals(Long.valueOf(srcSize), Long.valueOf(infoSize));
+
+        File sf = new File(srcFileName);
+        sf.delete();
+
+        File df = new File(destFileName);
+        df.delete();
+
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ea0daeae/utils/src/com/cloud/utils/script/Script.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/script/Script.java b/utils/src/com/cloud/utils/script/Script.java
index cb25844..3632bf5 100755
--- a/utils/src/com/cloud/utils/script/Script.java
+++ b/utils/src/com/cloud/utils/script/Script.java
@@ -460,20 +460,7 @@ public class Script implements Callable<String> {
     }
 
     public static String runSimpleBashScript(String command) {
-
-        Script s = new Script("/bin/bash");
-        s.add("-c");
-        s.add(command);
-
-        OutputInterpreter.OneLineParser parser = new OutputInterpreter.OneLineParser();
-        if (s.execute(parser) != null)
-            return null;
-
-        String result = parser.getLine();
-        if (result == null || result.trim().isEmpty())
-            return null;
-        else
-            return result.trim();
+        return Script.runSimpleBashScript(command, 0);
     }
     
     public static String runSimpleBashScript(String command, int timeout) {
@@ -493,10 +480,4 @@ public class Script implements Callable<String> {
             return result.trim();
     }
 
-    public static void main(String[] args) {
-        String path = findScript(".", "try.sh");
-        Script script = new Script(path, 5000, s_logger);
-        script.execute();
-        System.exit(1);
-    }
 }


[35/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
marvin: argparse enhancement and unit-test-xml-reporting dependency removed

1. deployAndRun will use the more modern argparse module
2. improving logging within the remoteSSHClient, moving to debug and
default logging to INFO
3. removing dependance on the xmlrunner. use nose --with-xunit instead

Signed-off-by: Prasanna Santhanam <ts...@apache.org>


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

Branch: refs/heads/kvm-vnc-listen
Commit: 3075d0cf569d8adeacb74dd77b7d9f3bd6707101
Parents: 7ee602b
Author: Prasanna Santhanam <ts...@apache.org>
Authored: Wed Mar 13 11:49:08 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Tue Apr 2 18:31:29 2013 +0530

----------------------------------------------------------------------
 tools/marvin/marvin/TestCaseExecuteEngine.py       |   13 +----
 tools/marvin/marvin/deployAndRun.py                |   40 ++++++---------
 tools/marvin/marvin/remoteSSHClient.py             |    9 ++--
 .../sandbox/demo/simulator/simulator_setup.py      |    2 +-
 tools/marvin/marvin/testSetupSuccess.py            |    2 +-
 tools/marvin/pom.xml                               |   39 +++++++++++++-
 tools/marvin/setup.py                              |    5 +-
 7 files changed, 64 insertions(+), 46 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3075d0cf/tools/marvin/marvin/TestCaseExecuteEngine.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/TestCaseExecuteEngine.py b/tools/marvin/marvin/TestCaseExecuteEngine.py
index 3c34c7e..5743868 100644
--- a/tools/marvin/marvin/TestCaseExecuteEngine.py
+++ b/tools/marvin/marvin/TestCaseExecuteEngine.py
@@ -16,7 +16,6 @@
 # under the License.
 
 import unittest
-import xmlrunner
 import os
 import sys
 import logging
@@ -27,7 +26,7 @@ def testCaseLogger(message, logger=None):
         logger.debug(message)
 
 class TestCaseExecuteEngine(object):
-    def __init__(self, testclient, config, testcaseLogFile=None, testResultLogFile=None, format="text", xmlDir="xml-reports"):
+    def __init__(self, testclient, config, testcaseLogFile=None, testResultLogFile=None):
         """
         Initialize the testcase execution engine, just the basics here
         @var testcaseLogFile: client log file
@@ -38,7 +37,6 @@ class TestCaseExecuteEngine(object):
         self.logformat = logging.Formatter("%(asctime)s - %(levelname)s - %(name)s - %(message)s")
         self.loader = unittest.loader.TestLoader()
         self.suite = None
-        self.format = format
 
         if testcaseLogFile is not None:
             self.logfile = testcaseLogFile
@@ -56,9 +54,7 @@ class TestCaseExecuteEngine(object):
             self.testResultLogFile = fp
         else:
             self.testResultLogFile = sys.stdout
-        if self.format == "xml"  and (xmlDir is not None):
-            self.xmlDir = xmlDir
-            
+
     def loadTestsFromDir(self, testDirectory):
         """ Load the test suites from a package with multiple test files """
         self.suite = self.loader.discover(testDirectory)
@@ -92,7 +88,4 @@ class TestCaseExecuteEngine(object):
 
     def run(self):
         if self.suite:
-            if self.format == "text":
-                unittest.TextTestRunner(stream=self.testResultLogFile, verbosity=2).run(self.suite)
-            elif self.format == "xml":
-                xmlrunner.XMLTestRunner(output=self.xmlDir).run(self.suite)
+            unittest.TextTestRunner(stream=self.testResultLogFile, verbosity=2).run(self.suite)

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3075d0cf/tools/marvin/marvin/deployAndRun.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/deployAndRun.py b/tools/marvin/marvin/deployAndRun.py
index e7b005c..c83065a 100644
--- a/tools/marvin/marvin/deployAndRun.py
+++ b/tools/marvin/marvin/deployAndRun.py
@@ -17,22 +17,22 @@
 
 import deployDataCenter
 import TestCaseExecuteEngine
-from optparse import OptionParser
-import os
-
+from argparse import ArgumentParser
 if __name__ == "__main__":
 
-    parser = OptionParser() #TODO: deprecate and use the argparse module
-  
-    parser.add_option("-c", "--config", action="store", default="./datacenterCfg", dest="config", help="the path where the json config file generated, by default is ./datacenterCfg")
-    parser.add_option("-d", "--directory", dest="testCaseFolder", help="the test case directory")
-    parser.add_option("-r", "--result", dest="result", help="test result log file")
-    parser.add_option("-t", "--client", dest="testcaselog", help="test case log file")
-    parser.add_option("-l", "--load", dest="load", action="store_true", help="only load config, do not deploy, it will only run testcase")
-    parser.add_option("-f", "--file", dest="module", help="run tests in the given file")
-    parser.add_option("-x", "--xml", dest="xmlrunner", help="use the xml runner to generate xml reports and path to store xml files")
-    (options, args) = parser.parse_args()
-    
+    parser = ArgumentParser()
+
+    parser.add_argument("-d", "--directory", dest="testCaseFolder", help="the test case directory")
+    parser.add_argument("-f", "--file", dest="module", help="run tests in the given file")
+    parser.add_argument("-r", "--result", dest="result", help="test result log file", default='/tmp/t.log')
+    parser.add_argument("-t", "--client", dest="testcaselog", help="test case log file", default='/tmp/r.log')
+    parser.add_argument("-c", "--config", action="store", default="./datacenterCfg", dest="config",
+        help="the path where the json config file generated, by default is ./datacenterCfg")
+    parser.add_argument("-l", "--load", dest="load", action="store_true",
+        help="only load config, do not deploy, it will only run testcase")
+
+    options = parser.parse_args()
+
     testResultLogFile = None
     if options.result is not None:
         testResultLogFile = options.result
@@ -46,12 +46,6 @@ if __name__ == "__main__":
     else:
         deploy.deploy()
         
-    fmt = "text"
-    xmlDir = None
-    if options.xmlrunner is not None:
-        xmlDir = options.xmlrunner
-        fmt = "xml"
-    
     if options.testCaseFolder is None:
         if options.module is None:
             parser.print_usage()
@@ -61,15 +55,13 @@ if __name__ == "__main__":
             TestCaseExecuteEngine.TestCaseExecuteEngine(deploy.testClient,
                                                         deploy.getCfg(),
                                                         testCaseLogFile,
-                                                        testResultLogFile, fmt,
-                                                        xmlDir)
+                                                        testResultLogFile)
             engine.loadTestsFromFile(options.module)
             engine.run()
     else:
        engine = TestCaseExecuteEngine.TestCaseExecuteEngine(deploy.testClient,
                                                             deploy.getCfg(),
                                                             testCaseLogFile,
-                                                            testResultLogFile,
-                                                            fmt, xmlDir)
+                                                            testResultLogFile)
        engine.loadTestsFromDir(options.testCaseFolder)
        engine.run()

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3075d0cf/tools/marvin/marvin/remoteSSHClient.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/remoteSSHClient.py b/tools/marvin/marvin/remoteSSHClient.py
index 95a9ada..4fb2f0d 100644
--- a/tools/marvin/marvin/remoteSSHClient.py
+++ b/tools/marvin/marvin/remoteSSHClient.py
@@ -23,7 +23,7 @@ import logging
 from contextlib import closing
 
 class remoteSSHClient(object):
-    def __init__(self, host, port, user, passwd, retries = 10):
+    def __init__(self, host, port, user, passwd, retries = 10, log_lvl=logging.INFO):
         self.host = host
         self.port = port
         self.user = user
@@ -32,14 +32,14 @@ class remoteSSHClient(object):
         self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
         self.logger = logging.getLogger('sshClient')
         ch = logging.StreamHandler()
-        ch.setLevel(logging.DEBUG)
+        ch.setLevel(log_lvl)
         self.logger.addHandler(ch)
 
         retry_count = retries
         while True:
             try:
                 self.ssh.connect(str(host),int(port), user, passwd)
-                self.logger.debug("connecting to server %s with user %s passwd %s"%(str(host), user, passwd))
+                self.logger.debug("SSH connect: %s@%s with passwd %s"%(user, str(host), passwd))
             except paramiko.SSHException, sshex:
                 if retry_count == 0:
                     raise cloudstackException.InvalidParameterException(repr(sshex))
@@ -52,7 +52,6 @@ class remoteSSHClient(object):
         
     def execute(self, command):
         stdin, stdout, stderr = self.ssh.exec_command(command)
-        self.logger.debug("sending command %s to host %s"%(command, str(self.host)))
         output = stdout.readlines()
         errors = stderr.readlines()
         results = []
@@ -64,7 +63,7 @@ class remoteSSHClient(object):
         else:
             for strOut in output:
                 results.append(strOut.rstrip())
-        self.logger.debug("command %s returned %s"%(command, results))
+        self.logger.debug("{Cmd: %s via Host: %s} {returns: %s}"%(command, str(self.host), results))
         return results
     
     def scp(self, srcFile, destPath):

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3075d0cf/tools/marvin/marvin/sandbox/demo/simulator/simulator_setup.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/sandbox/demo/simulator/simulator_setup.py b/tools/marvin/marvin/sandbox/demo/simulator/simulator_setup.py
index 0d34140..e4ec9b7 100644
--- a/tools/marvin/marvin/sandbox/demo/simulator/simulator_setup.py
+++ b/tools/marvin/marvin/sandbox/demo/simulator/simulator_setup.py
@@ -41,7 +41,6 @@ def describeResources(config):
     z.name = 'Sandbox-%s'%(config.get('environment', 'hypervisor'))
     z.networktype = 'Advanced'
     z.guestcidraddress = '10.1.1.0/24'
-    z.vlan = config.get('cloudstack', 'zone.vlan')
     
     vpcprovider = provider()
     vpcprovider.name = 'VpcVirtualRouter'
@@ -50,6 +49,7 @@ def describeResources(config):
     pn.name = "Sandbox-pnet"
     pn.traffictypes = [traffictype("Guest"), traffictype("Management"), traffictype("Public")]
     pn.providers.append(vpcprovider)
+    pn.vlan = config.get('cloudstack', 'zone.vlan')
     
     z.physical_networks.append(pn)
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3075d0cf/tools/marvin/marvin/testSetupSuccess.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/testSetupSuccess.py b/tools/marvin/marvin/testSetupSuccess.py
index 8a0034c..319fd21 100644
--- a/tools/marvin/marvin/testSetupSuccess.py
+++ b/tools/marvin/marvin/testSetupSuccess.py
@@ -75,7 +75,7 @@ class TestSetupSuccess(cloudstackTestCase):
                 retry = retry - 1
                 delay(60) #wait a minute for retry
             self.assertNotEqual(retry, 0, "builtIn templates not ready in zone %s"%z.name)
-            
+
     @classmethod
     def tearDownClass(cls):
         pass

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3075d0cf/tools/marvin/pom.xml
----------------------------------------------------------------------
diff --git a/tools/marvin/pom.xml b/tools/marvin/pom.xml
index a3bd546..194d784 100644
--- a/tools/marvin/pom.xml
+++ b/tools/marvin/pom.xml
@@ -65,8 +65,8 @@
             </configuration>
           </execution>
           <execution>
-            <id>package</id>
-            <phase>package</phase>
+            <id>install</id>
+            <phase>install</phase>
             <goals>
               <goal>exec</goal>
             </goals>
@@ -117,7 +117,42 @@
                 <goals>
                   <goal>exec</goal>
                 </goals>
+                <configuration>
+                  <workingDirectory>${basedir}/marvin</workingDirectory>
+                  <executable>/usr/local/bin/nosetests</executable>
+                  <arguments>
+                    <argument>--with-marvin</argument>
+                    <argument>--marvin-config</argument>
+                    <argument>${user.dir}/${marvin.config}</argument>
+                    <argument>--load</argument>
+                    <argument>-a</argument>
+                    <argument>tags=simulator</argument>
+                    <argument>${basedir}/../../test/integration/smoke/test_vm_life_cycle.py</argument>
+                  </arguments>
+                </configuration>
               </execution>
+              <!--execution>
+                <id>pre-integration-test</id>
+                <phase>pre-integration-test</phase>
+                <goals>
+                  <goal>exec</goal>
+                </goals>
+                <configuration>
+                  <workingDirectory>${basedir}/marvin</workingDirectory>
+                  <executable>python</executable>
+                  <arguments>
+                    <argument>deployAndRun.py</argument>
+                    <argument>-c</argument>
+                    <argument>${user.dir}/${marvin.config}</argument>
+                    <argument>-t</argument>
+                    <argument>/tmp/t.log</argument>
+                    <argument>-r</argument>
+                    <argument>/tmp/r.log</argument>
+                    <argument>-f</argument>
+                    <argument>${basedir}/marvin/testSetupSuccess.py</argument>
+                  </arguments>
+                </configuration>
+              </execution-->
             </executions>
           </plugin>
         </plugins>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3075d0cf/tools/marvin/setup.py
----------------------------------------------------------------------
diff --git a/tools/marvin/setup.py b/tools/marvin/setup.py
index fea53d0..f8198d7 100644
--- a/tools/marvin/setup.py
+++ b/tools/marvin/setup.py
@@ -37,7 +37,6 @@ setup(name="Marvin",
       install_requires=[
           "mysql-connector-python",
           "paramiko",
-          "nose",
-          "unittest-xml-reporting>1.2"
-      ],         
+          "nose"
+      ],
      )


[27/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
CLOUDSTACK-1887:removing the host option from the scope field for primary storage


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

Branch: refs/heads/kvm-vnc-listen
Commit: 8d34b5809d459eac90eea1f01cc5b20dedb39f11
Parents: df6b97c
Author: Pranav Saxena <pr...@citrix.com>
Authored: Tue Apr 2 14:55:29 2013 +0530
Committer: Pranav Saxena <pr...@citrix.com>
Committed: Tue Apr 2 14:55:29 2013 +0530

----------------------------------------------------------------------
 ui/scripts/zoneWizard.js |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8d34b580/ui/scripts/zoneWizard.js
----------------------------------------------------------------------
diff --git a/ui/scripts/zoneWizard.js b/ui/scripts/zoneWizard.js
index 76fd5e9..8add9bb 100755
--- a/ui/scripts/zoneWizard.js
+++ b/ui/scripts/zoneWizard.js
@@ -1204,7 +1204,7 @@
              if(selectedHypervisorObj.hypervisortype != "KVM"){
                        var scope=[];
                        scope.push({ id: 'cluster', description: _l('label.cluster') });
-                       scope.push({ id: 'host', description: _l('label.host') });
+                       //scope.push({ id: 'host', description: _l('label.host') });
                        args.response.success({data: scope});
                     }
 
@@ -1212,7 +1212,7 @@
                        var scope=[];
                        scope.push({ id: 'zone', description: _l('label.zone.wide') });
                        scope.push({ id: 'cluster', description: _l('label.cluster') });
-                       scope.push({ id: 'host', description: _l('label.host') });
+                      // scope.push({ id: 'host', description: _l('label.host') });
                        args.response.success({data: scope});
                     }
 


[12/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
debian: Copy management server configuration from old location

Signed-off-by: Wido den Hollander <wi...@42on.com>


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

Branch: refs/heads/kvm-vnc-listen
Commit: 44a0facd38159d53365a6444f4e025684add29b9
Parents: 35e5b8e
Author: Wido den Hollander <wi...@42on.com>
Authored: Sun Mar 31 14:14:52 2013 +0200
Committer: Wido den Hollander <wi...@42on.com>
Committed: Sun Mar 31 14:16:31 2013 +0200

----------------------------------------------------------------------
 debian/cloudstack-management.postinst |   16 +++++++++++++++-
 1 files changed, 15 insertions(+), 1 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/44a0facd/debian/cloudstack-management.postinst
----------------------------------------------------------------------
diff --git a/debian/cloudstack-management.postinst b/debian/cloudstack-management.postinst
index 4e9b046..293810a 100644
--- a/debian/cloudstack-management.postinst
+++ b/debian/cloudstack-management.postinst
@@ -20,7 +20,7 @@ if [ "$1" = configure ]; then
     if ! getent passwd cloud >/dev/null; then
         adduser --quiet --system --group --no-create-home --home /var/lib/cloudstack/management cloud
     else
-        usermod -m -d /var/lib/cloudstack/management cloud
+        usermod -m -d /var/lib/cloudstack/management cloud || true
     fi
 
     for i in /var/cache/cloudstack/management \
@@ -36,6 +36,20 @@ if [ "$1" = configure ]; then
         chgrp cloud $i
     done
 
+    OLDCONFDIR="/etc/cloud/management"
+    NEWCONFDIR="/etc/cloudstack/management"
+    CONFFILES="db.properties db-enc.properties cloud.keystore key"
+
+    # Copy old configuration so the admin doesn't have to do that
+    # Only do so when we are installing for the first time
+    if [ -z "$2" ]; then
+        for FILE in $CONFFILES; do
+            if [ -f "$OLDCONFDIR/${FILE}" ]; then
+                cp -a $OLDCONFDIR/$FILE $NEWCONFDIR/$FILE
+            fi
+        done
+    fi
+
     chmod 0640 /etc/cloudstack/management/db.properties
     chgrp cloud /etc/cloudstack/management/db.properties
 fi


[07/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
CLOUDSTACK-1818: make DababaseCreator ready to invoke DatabaseUpgradeChecker, adjust Component startup sequence for integrity checkers
Signed-off-by: Chip Childers <ch...@gmail.com>


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

Branch: refs/heads/kvm-vnc-listen
Commit: 85971b51948e33435957e653f39f9aac82824452
Parents: 3ab744d
Author: Kelven Yang <ke...@gmail.com>
Authored: Wed Mar 27 13:08:03 2013 +0000
Committer: Kelven Yang <ke...@gmail.com>
Committed: Fri Mar 29 11:12:36 2013 -0700

----------------------------------------------------------------------
 client/tomcatconf/applicationContext.xml.in        |    2 +-
 server/pom.xml                                     |    8 +++++
 server/src/com/cloud/upgrade/DatabaseCreator.java  |    7 ++++
 .../cloud/utils/component/ComponentContext.java    |   24 +++++++-------
 4 files changed, 28 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/85971b51/client/tomcatconf/applicationContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/applicationContext.xml.in b/client/tomcatconf/applicationContext.xml.in
index 6bab4fd..17725f0 100644
--- a/client/tomcatconf/applicationContext.xml.in
+++ b/client/tomcatconf/applicationContext.xml.in
@@ -35,6 +35,7 @@
   <!--
     @DB support
   -->
+  <bean id="componentContext" class="com.cloud.utils.component.ComponentContext" />
   <bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" />
   <bean id="actionEventInterceptor" class="com.cloud.event.ActionEventInterceptor" />
 
@@ -688,7 +689,6 @@
   <bean id="apiServlet" class="com.cloud.api.ApiServlet" />
   <bean id="cloudOrchestrator" class="org.apache.cloudstack.platform.orchestration.CloudOrchestrator" />
   <bean id="clusterRestService" class="org.apache.cloudstack.engine.rest.service.api.ClusterRestService" />
-  <bean id="componentContext" class="com.cloud.utils.component.ComponentContext" />
   <bean id="consoleProxyServlet" class="com.cloud.servlet.ConsoleProxyServlet" />
   <bean id="dataCenterResourceManagerImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceManagerImpl" />
   <bean id="dataDisk" class="org.apache.cloudstack.engine.subsystem.api.storage.type.DataDisk" />

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/85971b51/server/pom.xml
----------------------------------------------------------------------
diff --git a/server/pom.xml b/server/pom.xml
index b39f731..1bc0f69 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -103,6 +103,14 @@
     <defaultGoal>install</defaultGoal>
     <sourceDirectory>src</sourceDirectory>
     <testSourceDirectory>test</testSourceDirectory>
+    <resources>
+      <resource>
+        <directory>resources</directory>
+        <includes>
+          <include>**/*.xml</include>
+        </includes>
+      </resource>
+    </resources>    
     <testResources>
       <testResource>
         <directory>test/resources</directory>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/85971b51/server/src/com/cloud/upgrade/DatabaseCreator.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/upgrade/DatabaseCreator.java b/server/src/com/cloud/upgrade/DatabaseCreator.java
index 9841fae..9b1be6b 100755
--- a/server/src/com/cloud/upgrade/DatabaseCreator.java
+++ b/server/src/com/cloud/upgrade/DatabaseCreator.java
@@ -27,6 +27,8 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
 
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
 import com.cloud.utils.PropertiesUtil;
 
 import com.cloud.utils.component.ComponentContext;
@@ -117,6 +119,11 @@ public class DatabaseCreator {
     }
 
     public static void main(String[] args) {
+    	
+    	ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(
+    	        new String[] {"/com/cloud/upgrade/databaseCreatorContext.xml"});
+    	appContext.getBean(ComponentContext.class);
+    	
         String dbPropsFile = "";
         List<String> sqlFiles = new ArrayList<String>();
         List<String> upgradeClasses = new ArrayList<String>();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/85971b51/utils/src/com/cloud/utils/component/ComponentContext.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/component/ComponentContext.java b/utils/src/com/cloud/utils/component/ComponentContext.java
index d11d354..796d4ec 100644
--- a/utils/src/com/cloud/utils/component/ComponentContext.java
+++ b/utils/src/com/cloud/utils/component/ComponentContext.java
@@ -81,6 +81,18 @@ public class ComponentContext implements ApplicationContextAware {
     	for(Map.Entry<String, ComponentLifecycle> entry : lifecyleComponents.entrySet()) {
     		classifiedComponents[entry.getValue().getRunLevel()].put(entry.getKey(), entry.getValue());
     	}
+
+        // Run the SystemIntegrityCheckers first
+        Map<String, SystemIntegrityChecker> integrityCheckers = getApplicationContext().getBeansOfType(SystemIntegrityChecker.class);
+        for (Entry<String,SystemIntegrityChecker> entry : integrityCheckers.entrySet() ){
+            s_logger.info ("Running SystemIntegrityChecker " + entry.getKey());
+            try {
+            	entry.getValue().check();
+            } catch(Throwable e) {
+            	s_logger.error("System integrity check failed. Refuse to startup");
+            	System.exit(1);
+            }
+        }
     	
     	// configuration phase
         Map<String, String> avoidMap = new HashMap<String, String>();
@@ -105,18 +117,6 @@ public class ComponentContext implements ApplicationContextAware {
                 avoidMap.put(implClassName, implClassName);
     		}
     	}
-    	
-        // Run the SystemIntegrityCheckers first
-        Map<String, SystemIntegrityChecker> integrityCheckers = getApplicationContext().getBeansOfType(SystemIntegrityChecker.class);
-        for (Entry<String,SystemIntegrityChecker> entry : integrityCheckers.entrySet() ){
-            s_logger.info ("Running SystemIntegrityChecker " + entry.getKey());
-            try {
-            	entry.getValue().check();
-            } catch(Throwable e) {
-            	s_logger.error("System integrity check failed. Refuse to startup");
-            	System.exit(1);
-            }
-        }
  
     	// starting phase
     	avoidMap.clear();


[47/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
CLOUDSTACK-1734: Make SHA1 default password encoding mechanism

Description:

	Making SHA256SALT the default encoding algorithm to encode
	passwords when creating/updating users.

	Introducing a new configurable list to allow admins to
	separately configure the order of preference for encoding
	and authentication schemes.

	Since passwords are now sent by clients as clear text,
	fixing the Plain text authenticator to check against the
	password passed in rather than its md5 digest.


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

Branch: refs/heads/kvm-vnc-listen
Commit: 2dbdc46337be375940441ac4b41f95f25bbbf21d
Parents: 58c962e
Author: Vijayendra Bhamidipati <vi...@citrix.com>
Authored: Tue Apr 2 11:07:41 2013 -0700
Committer: Min Chen <mi...@citrix.com>
Committed: Tue Apr 2 17:40:50 2013 -0700

----------------------------------------------------------------------
 .../command/admin/account/CreateAccountCmd.java    |    2 +-
 .../api/command/admin/user/CreateUserCmd.java      |    2 +-
 .../api/command/admin/user/UpdateUserCmd.java      |    2 +-
 client/tomcatconf/applicationContext.xml.in        |   54 +++++++++++++++
 client/tomcatconf/componentContext.xml.in          |   28 --------
 client/tomcatconf/nonossComponentContext.xml.in    |   28 --------
 developer/developer-prefill.sql                    |    2 +-
 .../cloud/server/auth/LDAPUserAuthenticator.java   |    5 +-
 .../cloud/server/auth/MD5UserAuthenticator.java    |    4 +
 .../server/auth/PlainTextUserAuthenticator.java    |   32 ++-------
 .../server/auth/SHA256SaltedUserAuthenticator.java |    3 +
 .../src/com/cloud/server/ManagementServerImpl.java |   15 +++-
 server/src/com/cloud/user/AccountManagerImpl.java  |   15 +++-
 13 files changed, 99 insertions(+), 93 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2dbdc463/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java
index 89673ea..95d0d07 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java
@@ -63,7 +63,7 @@ public class CreateAccountCmd extends BaseCmd {
     @Parameter(name=ApiConstants.LASTNAME, type=CommandType.STRING, required=true, description="lastname")
     private String lastName;
 
-    @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required=true, description="Hashed password (Default is MD5). If you wish to use any other hashing algorithm, you would need to write a custom authentication adapter See Docs section.")
+    @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required=true, description="Clear text password (Default hashed to SHA256SALT). If you wish to use any other hashing algorithm, you would need to write a custom authentication adapter See Docs section.")
     private String password;
 
     @Parameter(name=ApiConstants.TIMEZONE, type=CommandType.STRING, description="Specifies a timezone for this command. For more information on the timezone parameter, see Time Zone Format.")

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2dbdc463/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java
index fb29e1a..7b3f230 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java
@@ -56,7 +56,7 @@ public class CreateUserCmd extends BaseCmd {
     @Parameter(name=ApiConstants.LASTNAME, type=CommandType.STRING, required=true, description="lastname")
     private String lastname;
 
-    @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required=true, description="Hashed password (Default is MD5). If you wish to use any other hashing algorithm, you would need to write a custom authentication adapter See Docs section.")
+    @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required=true, description="Clear text password (Default hashed to SHA256SALT). If you wish to use any other hashing algorithm, you would need to write a custom authentication adapter See Docs section.")
     private String password;
 
     @Parameter(name=ApiConstants.TIMEZONE, type=CommandType.STRING, description="Specifies a timezone for this command. For more information on the timezone parameter, see Time Zone Format.")

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2dbdc463/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java
index 1f31662..5ea2dbd 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java
@@ -59,7 +59,7 @@ public class UpdateUserCmd extends BaseCmd {
     @Parameter(name=ApiConstants.LASTNAME, type=CommandType.STRING, description="last name")
     private String lastname;
 
-    @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, description="Hashed password (default is MD5). If you wish to use any other hasing algorithm, you would need to write a custom authentication adapter")
+    @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, description="Clear text password (default hashed to SHA256SALT). If you wish to use any other hasing algorithm, you would need to write a custom authentication adapter")
     private String password;
 
     @Parameter(name=ApiConstants.SECRET_KEY, type=CommandType.STRING, description="The secret key for the user. Must be specified with userApiKey")

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2dbdc463/client/tomcatconf/applicationContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/applicationContext.xml.in b/client/tomcatconf/applicationContext.xml.in
index 636eac2..d3699b9 100644
--- a/client/tomcatconf/applicationContext.xml.in
+++ b/client/tomcatconf/applicationContext.xml.in
@@ -379,6 +379,60 @@
   <bean id="LDAPUserAuthenticator" class="com.cloud.server.auth.LDAPUserAuthenticator">
     <property name="name" value="LDAP"/>
   </bean>
+  <bean id="SHA256SaltedUserAuthenticator" class="com.cloud.server.auth.SHA256SaltedUserAuthenticator">
+    <property name="name" value="SHA256SALT"/>
+  </bean>
+  <bean id="PlainTextUserAuthenticator" class="com.cloud.server.auth.PlainTextUserAuthenticator">
+    <property name="name" value="PLAINTEXT"/>
+  </bean>
+
+  <bean id="accountManagerImpl" class="com.cloud.user.AccountManagerImpl" >
+    <property name="UserAuthenticators">
+      <list>
+          <ref bean="SHA256SaltedUserAuthenticator"/>
+          <ref bean="MD5UserAuthenticator"/>
+          <ref bean="LDAPUserAuthenticator"/>
+          <ref bean="PlainTextUserAuthenticator"/>
+      </list>
+    </property>
+    <property name="UserPasswordEncoders">
+      <list>
+          <ref bean="SHA256SaltedUserAuthenticator"/>
+          <ref bean="MD5UserAuthenticator"/>
+          <ref bean="LDAPUserAuthenticator"/>
+          <ref bean="PlainTextUserAuthenticator"/>
+      </list>
+    </property>
+    <property name="SecurityCheckers">
+      <list>
+          <ref bean="domainChecker"/>
+      </list>
+    </property>
+  </bean>
+
+  <bean id="managementServerImpl" class ="com.cloud.server.ManagementServerImpl">
+    <property name="UserAuthenticators">
+      <list>
+          <ref bean="SHA256SaltedUserAuthenticator"/>
+          <ref bean="MD5UserAuthenticator"/>
+          <ref bean="LDAPUserAuthenticator"/>
+          <ref bean="PlainTextUserAuthenticator"/>
+      </list>
+    </property>
+    <property name="UserPasswordEncoders">
+      <list>
+          <ref bean="SHA256SaltedUserAuthenticator"/>
+          <ref bean="MD5UserAuthenticator"/>
+          <ref bean="LDAPUserAuthenticator"/>
+          <ref bean="PlainTextUserAuthenticator"/>
+      </list>
+    </property>
+    <property name="HostAllocators">
+      <list>
+          <ref bean="FirstFitRouting"/>
+      </list>
+    </property>
+  </bean>
 
   <!--
       Network Elements

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2dbdc463/client/tomcatconf/componentContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/componentContext.xml.in b/client/tomcatconf/componentContext.xml.in
index 0ddb428..18d21c0 100644
--- a/client/tomcatconf/componentContext.xml.in
+++ b/client/tomcatconf/componentContext.xml.in
@@ -40,34 +40,6 @@
   <!--
     Managers & pluggable adapters configuration under OSS deployment
   -->
-  <bean id="accountManagerImpl" class="com.cloud.user.AccountManagerImpl" >
-    <property name="UserAuthenticators">
-      <list>
-          <ref bean="MD5UserAuthenticator"/>
-          <ref bean="LDAPUserAuthenticator"/>
-      </list>
-    </property>
-    <property name="SecurityCheckers">
-      <list>
-          <ref bean="domainChecker"/>
-      </list>
-    </property>
-  </bean>
-  
-  <bean id="managementServerImpl" class ="com.cloud.server.ManagementServerImpl">
-    <property name="UserAuthenticators">
-      <list>
-          <ref bean="MD5UserAuthenticator"/>
-          <ref bean="LDAPUserAuthenticator"/>
-      </list>
-    </property>
-    <property name="HostAllocators">
-      <list>
-          <ref bean="FirstFitRouting"/>
-      </list>
-    </property>
-  </bean>
-
   <bean id="storageManagerImpl" class="com.cloud.storage.StorageManagerImpl">
     <property name="StoragePoolAllocators">
       <list>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2dbdc463/client/tomcatconf/nonossComponentContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/nonossComponentContext.xml.in b/client/tomcatconf/nonossComponentContext.xml.in
index 0b02eb6..11472ad 100644
--- a/client/tomcatconf/nonossComponentContext.xml.in
+++ b/client/tomcatconf/nonossComponentContext.xml.in
@@ -131,34 +131,6 @@
   <!-- 
     Managers & pluggable adapters configuration under non-OSS deployment
   -->
-  <bean id="accountManagerImpl" class="com.cloud.user.AccountManagerImpl" >
-    <property name="UserAuthenticators">
-      <list>
-          <ref bean="MD5UserAuthenticator"/>
-          <ref bean="LDAPUserAuthenticator"/>
-      </list>
-    </property>
-    <property name="SecurityCheckers">
-      <list>
-          <ref bean="domainChecker"/>
-      </list>
-    </property>
-  </bean>
-  
-  <bean id="managementServerImpl" class ="com.cloud.server.ManagementServerImpl">
-    <property name="UserAuthenticators">
-      <list>
-          <ref bean="MD5UserAuthenticator"/>
-          <ref bean="LDAPUserAuthenticator"/>
-      </list>
-    </property>
-    <property name="HostAllocators">
-      <list>
-          <ref bean="FirstFitRouting"/>
-      </list>
-    </property>
-  </bean>
-
   <bean id="storageManagerImpl" class="com.cloud.storage.StorageManagerImpl">
     <property name="StoragePoolAllocators">
       <list>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2dbdc463/developer/developer-prefill.sql
----------------------------------------------------------------------
diff --git a/developer/developer-prefill.sql b/developer/developer-prefill.sql
index 6300d35..e4f90ca 100644
--- a/developer/developer-prefill.sql
+++ b/developer/developer-prefill.sql
@@ -36,7 +36,7 @@ INSERT INTO `cloud`.`user` (id, uuid, username, password, account_id, firstname,
 -- Add system user with encrypted password=password
 INSERT INTO `cloud`.`user` (id, uuid, username, password, account_id, firstname,
             lastname, email, state, created) VALUES (2, UUID(), 'admin', '5f4dcc3b5aa765d61d8327deb882cf99',
-            '2', 'Admin', 'User', 'admin@mailprovider.com', 'enabled', NOW());
+            '2', 'Admin', 'User', 'admin@mailprovider.com', 'disabled', NOW());
 
 -- Add configurations
 INSERT INTO `cloud`.`configuration` (category, instance, component, name, value)

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2dbdc463/plugins/user-authenticators/ldap/src/com/cloud/server/auth/LDAPUserAuthenticator.java
----------------------------------------------------------------------
diff --git a/plugins/user-authenticators/ldap/src/com/cloud/server/auth/LDAPUserAuthenticator.java b/plugins/user-authenticators/ldap/src/com/cloud/server/auth/LDAPUserAuthenticator.java
index 61eebe5..d928a5b 100644
--- a/plugins/user-authenticators/ldap/src/com/cloud/server/auth/LDAPUserAuthenticator.java
+++ b/plugins/user-authenticators/ldap/src/com/cloud/server/auth/LDAPUserAuthenticator.java
@@ -151,7 +151,10 @@ public class LDAPUserAuthenticator extends DefaultUserAuthenticator {
     @Override
     public boolean configure(String name, Map<String, Object> params)
             throws ConfigurationException {
-        super.configure(name, params);
+        if (name == null) {
+            name = "LDAP";
+        }
+	super.configure(name, params);
         return true;
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2dbdc463/plugins/user-authenticators/md5/src/com/cloud/server/auth/MD5UserAuthenticator.java
----------------------------------------------------------------------
diff --git a/plugins/user-authenticators/md5/src/com/cloud/server/auth/MD5UserAuthenticator.java b/plugins/user-authenticators/md5/src/com/cloud/server/auth/MD5UserAuthenticator.java
index 026125e..e5b169f 100644
--- a/plugins/user-authenticators/md5/src/com/cloud/server/auth/MD5UserAuthenticator.java
+++ b/plugins/user-authenticators/md5/src/com/cloud/server/auth/MD5UserAuthenticator.java
@@ -59,8 +59,12 @@ public class MD5UserAuthenticator extends DefaultUserAuthenticator {
 		return true;
 	}
 
+	@Override
 	public boolean configure(String name, Map<String, Object> params)
 			throws ConfigurationException {
+	        if(name == null) {
+                     name = "MD5";
+                }
 		super.configure(name, params);
 		return true;
 	}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2dbdc463/plugins/user-authenticators/plain-text/src/com/cloud/server/auth/PlainTextUserAuthenticator.java
----------------------------------------------------------------------
diff --git a/plugins/user-authenticators/plain-text/src/com/cloud/server/auth/PlainTextUserAuthenticator.java b/plugins/user-authenticators/plain-text/src/com/cloud/server/auth/PlainTextUserAuthenticator.java
index 52e7cb3..f102275 100644
--- a/plugins/user-authenticators/plain-text/src/com/cloud/server/auth/PlainTextUserAuthenticator.java
+++ b/plugins/user-authenticators/plain-text/src/com/cloud/server/auth/PlainTextUserAuthenticator.java
@@ -28,7 +28,6 @@ import org.apache.log4j.Logger;
 
 import com.cloud.user.UserAccount;
 import com.cloud.user.dao.UserAccountDao;
-
 import com.cloud.utils.exception.CloudRuntimeException;
 
 
@@ -43,45 +42,26 @@ public class PlainTextUserAuthenticator extends DefaultUserAuthenticator {
 		if (s_logger.isDebugEnabled()) {
             s_logger.debug("Retrieving user: " + username);
         }
+
         UserAccount user = _userAccountDao.getUserAccount(username, domainId);
         if (user == null) {
             s_logger.debug("Unable to find user with " + username + " in domain " + domainId);
             return false;
         }
         
-       
-        MessageDigest md5;
-        try {
-            md5 = MessageDigest.getInstance("MD5");
-        } catch (NoSuchAlgorithmException e) {
-            throw new CloudRuntimeException("Error", e);
-        }
-        md5.reset();
-        BigInteger pwInt = new BigInteger(1, md5.digest(password.getBytes()));
-
-        // make sure our MD5 hash value is 32 digits long...
-        StringBuffer sb = new StringBuffer();
-        String pwStr = pwInt.toString(16);
-        int padding = 32 - pwStr.length();
-        for (int i = 0; i < padding; i++) {
-            sb.append('0');
-        }
-        sb.append(pwStr);
-        
-        
-        // Will: The MD5Authenticator is now a straight pass-through comparison of the
-        // the passwords because we will not assume that the password passed in has
-        // already been MD5 hashed.  I am keeping the above code in case this requirement changes
-        // or people need examples of how to MD5 hash passwords in java.
-        if (!user.getPassword().equals(sb.toString())) {
+        if (!user.getPassword().equals(password)) {
             s_logger.debug("Password does not match");
             return false;
         }
 		return true;
 	}
 
+    @Override
 	public boolean configure(String name, Map<String, Object> params)
 			throws ConfigurationException {
+        if (name == null) {
+            name = "PLAINTEXT";
+        }
 		super.configure(name, params);
 		return true;
 	}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2dbdc463/plugins/user-authenticators/sha256salted/src/com/cloud/server/auth/SHA256SaltedUserAuthenticator.java
----------------------------------------------------------------------
diff --git a/plugins/user-authenticators/sha256salted/src/com/cloud/server/auth/SHA256SaltedUserAuthenticator.java b/plugins/user-authenticators/sha256salted/src/com/cloud/server/auth/SHA256SaltedUserAuthenticator.java
index 1b29f69..da93927 100644
--- a/plugins/user-authenticators/sha256salted/src/com/cloud/server/auth/SHA256SaltedUserAuthenticator.java
+++ b/plugins/user-authenticators/sha256salted/src/com/cloud/server/auth/SHA256SaltedUserAuthenticator.java
@@ -44,6 +44,9 @@ public class SHA256SaltedUserAuthenticator extends DefaultUserAuthenticator {
     @Override
     public boolean configure(String name, Map<String, Object> params)
             throws ConfigurationException {
+        if (name == null) {
+            name = "SHA256SALT";
+        }
         super.configure(name, params);
         return true;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2dbdc463/server/src/com/cloud/server/ManagementServerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java
index d0904e1..af77ba5 100755
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@ -457,7 +457,8 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
 
     private Map<String, Boolean> _availableIdsMap;
 
-    List<UserAuthenticator> _userAuthenticators;
+    private List<UserAuthenticator> _userAuthenticators;
+    private List<UserAuthenticator> _userPasswordEncoders;
 
     @Inject ClusterManager _clusterMgr;
     private String _hashKey = null;
@@ -473,7 +474,15 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
     public void setUserAuthenticators(List<UserAuthenticator> authenticators) {
     	_userAuthenticators = authenticators;
     }
-    
+
+    public List<UserAuthenticator> getUserPasswordEncoders() {
+        return _userPasswordEncoders;
+    }
+
+    public void setUserPasswordEncoders(List<UserAuthenticator> encoders) {
+        _userPasswordEncoders = encoders;
+    }
+
     public List<HostAllocator> getHostAllocators() {
 		return _hostAllocators;
 	}
@@ -3342,7 +3351,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
             // This means its a new account, set the password using the
             // authenticator
 
-            for (UserAuthenticator  authenticator: _userAuthenticators) {
+            for (UserAuthenticator authenticator: _userPasswordEncoders) {
                 encodedPassword = authenticator.encode(password);
                 if (encodedPassword != null) {
                     break;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2dbdc463/server/src/com/cloud/user/AccountManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java
index 40db4ed..52ca79d 100755
--- a/server/src/com/cloud/user/AccountManagerImpl.java
+++ b/server/src/com/cloud/user/AccountManagerImpl.java
@@ -222,6 +222,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
     @Inject VolumeManager volumeMgr;
 
     private List<UserAuthenticator> _userAuthenticators;
+    List<UserAuthenticator> _userPasswordEncoders;
 
     private final ScheduledExecutorService _executor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("AccountChecker"));
 
@@ -241,7 +242,15 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
     public void setUserAuthenticators(List<UserAuthenticator> authenticators) {
     	_userAuthenticators = authenticators;
     }
-    
+
+    public List<UserAuthenticator> getUserPasswordEncoders() {
+        return _userPasswordEncoders;
+    }
+
+    public void setUserPasswordEncoders(List<UserAuthenticator> encoders) {
+        _userPasswordEncoders = encoders;
+    }
+
     public List<SecurityChecker> getSecurityCheckers() {
 		return _securityCheckers;
 	}
@@ -947,7 +956,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
 
         if (password != null) {
             String encodedPassword = null;
-            for (Iterator<UserAuthenticator> en = _userAuthenticators.iterator(); en.hasNext();) {
+            for (Iterator<UserAuthenticator> en = _userPasswordEncoders.iterator(); en.hasNext();) {
                 UserAuthenticator authenticator = en.next();
                 encodedPassword = authenticator.encode(password);
                 if (encodedPassword != null) {
@@ -1733,7 +1742,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
         }
 
         String encodedPassword = null;
-        for (UserAuthenticator  authenticator : _userAuthenticators) {
+        for (UserAuthenticator  authenticator : _userPasswordEncoders) {
             encodedPassword = authenticator.encode(password);
             if (encodedPassword != null) {
                 break;


[48/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
CLOUDSTACK-1900 : Save a default db.properties during upgrade, and make sure
we only pull the old configs once.

Signed-off-by: Marcus Sorensen <ma...@betterservers.com> 1364966964 -0600


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

Branch: refs/heads/kvm-vnc-listen
Commit: 04a511a1a828a829962681525780f80935a161f9
Parents: 2dbdc46
Author: Marcus Sorensen <ma...@betterservers.com>
Authored: Tue Apr 2 23:29:24 2013 -0600
Committer: Marcus Sorensen <ma...@betterservers.com>
Committed: Tue Apr 2 23:29:24 2013 -0600

----------------------------------------------------------------------
 packaging/centos63/cloud.spec |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/04a511a1/packaging/centos63/cloud.spec
----------------------------------------------------------------------
diff --git a/packaging/centos63/cloud.spec b/packaging/centos63/cloud.spec
index 7d6e638..5baf58f 100644
--- a/packaging/centos63/cloud.spec
+++ b/packaging/centos63/cloud.spec
@@ -363,9 +363,12 @@ if getent passwd cloud | grep -q /var/lib/cloud; then
 fi
 
 # if saved configs from upgrade exist, copy them over
-if [ -d "%{_sysconfdir}/cloud.rpmsave/management" ]; then
+if [ -f "%{_sysconfdir}/cloud.rpmsave/management/db.properties" ]; then
+    mv %{_sysconfdir}/%{name}/management/db.properties %{_sysconfdir}/%{name}/management/db.properties.rpmnew
     cp -p %{_sysconfdir}/cloud.rpmsave/management/db.properties %{_sysconfdir}/%{name}/management
     cp -p %{_sysconfdir}/cloud.rpmsave/management/key %{_sysconfdir}/%{name}/management
+    # make sure we only do this on the first install of this RPM, don't want to overwrite on a reinstall
+    mv %{_sysconfdir}/cloud.rpmsave/management/db.properties %{_sysconfdir}/cloud.rpmsave/management/db.properties.rpmsave
 fi
 
 # Choose server.xml and tomcat.conf links based on old config, if exists
@@ -407,6 +410,8 @@ fi
 if [ -f "%{_sysconfdir}/cloud.rpmsave/agent/agent.properties" ]; then
     mv %{_sysconfdir}/%{name}/agent/agent.properties  %{_sysconfdir}/%{name}/agent/agent.properties.rpmnew
     cp -p %{_sysconfdir}/cloud.rpmsave/agent/agent.properties %{_sysconfdir}/%{name}/agent
+    # make sure we only do this on the first install of this RPM, don't want to overwrite on a reinstall
+    mv %{_sysconfdir}/cloud.rpmsave/agent/agent.properties %{_sysconfdir}/cloud.rpmsave/agent/agent.properties.rpmsave
 fi
 
 #%post awsapi


[28/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
fix CLOUDSTACK-1698


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

Branch: refs/heads/kvm-vnc-listen
Commit: dedec164e8cce17b861d517fe8e29bb99902e113
Parents: 8d34b58
Author: Mice Xia <mi...@tcloudcomputing.com>
Authored: Tue Apr 2 16:19:24 2013 +0800
Committer: Mice Xia <mi...@tcloudcomputing.com>
Committed: Tue Apr 2 17:36:51 2013 +0800

----------------------------------------------------------------------
 .../src/com/cloud/storage/VolumeManagerImpl.java   |   18 +++++++++++++++
 1 files changed, 18 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/dedec164/server/src/com/cloud/storage/VolumeManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/VolumeManagerImpl.java b/server/src/com/cloud/storage/VolumeManagerImpl.java
index ff0235f..1e8edaf 100644
--- a/server/src/com/cloud/storage/VolumeManagerImpl.java
+++ b/server/src/com/cloud/storage/VolumeManagerImpl.java
@@ -169,6 +169,8 @@ import com.cloud.vm.dao.DomainRouterDao;
 import com.cloud.vm.dao.SecondaryStorageVmDao;
 import com.cloud.vm.dao.UserVmDao;
 import com.cloud.vm.dao.VMInstanceDao;
+import com.cloud.vm.snapshot.VMSnapshotVO;
+import com.cloud.vm.snapshot.dao.VMSnapshotDao;
 
 @Component
 public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
@@ -289,6 +291,8 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
     @Inject
     protected ResourceTagDao _resourceTagDao;
     @Inject
+    protected VMSnapshotDao _vmSnapshotDao;
+    @Inject
     protected List<StoragePoolAllocator> _storagePoolAllocators;
     @Inject
     ConfigurationDao _configDao;
@@ -1669,6 +1673,13 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
             }
         }
 
+        // if target VM has associated VM snapshots
+        List<VMSnapshotVO> vmSnapshots = _vmSnapshotDao.findByVm(vmId);
+        if(vmSnapshots.size() > 0){
+            throw new InvalidParameterValueException(
+                    "Unable to attach volume, please specify a VM that does not have VM snapshots");           
+        }
+        
         // permission check
         _accountMgr.checkAccess(caller, null, true, volume, vm);
 
@@ -1826,6 +1837,13 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
                     "Please specify a VM that is either running or stopped.");
         }
 
+        // Check if the VM has VM snapshots
+        List<VMSnapshotVO> vmSnapshots = _vmSnapshotDao.findByVm(vmId);
+        if(vmSnapshots.size() > 0){
+            throw new InvalidParameterValueException(
+                    "Unable to detach volume, the specified volume is attached to a VM that has VM snapshots.");           
+        }
+
         AsyncJobExecutor asyncExecutor = BaseAsyncJobExecutor
                 .getCurrentExecutor();
         if (asyncExecutor != null) {


[30/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
CLOUDSTACK-1887:removing the host option from the scope field for primary storage


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

Branch: refs/heads/kvm-vnc-listen
Commit: 3d8afb0cfbcf20f4644fb58171f6c587c60f50ba
Parents: 4edef1f
Author: Pranav Saxena <pr...@citrix.com>
Authored: Tue Apr 2 16:21:25 2013 +0530
Committer: Pranav Saxena <pr...@citrix.com>
Committed: Tue Apr 2 16:21:25 2013 +0530

----------------------------------------------------------------------
 ui/scripts/system.js |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3d8afb0c/ui/scripts/system.js
----------------------------------------------------------------------
diff --git a/ui/scripts/system.js b/ui/scripts/system.js
index 98570d2..2fdf5f9 100644
--- a/ui/scripts/system.js
+++ b/ui/scripts/system.js
@@ -9316,8 +9316,8 @@
                     select: function(args) {
                       var scope = [
                         { id: 'zone', description: _l('label.zone.wide') },
-                        { id: 'cluster', description: _l('label.cluster') },
-                        { id: 'host', description: _l('label.host') }
+                        { id: 'cluster', description: _l('label.cluster') }
+                       // { id: 'host', description: _l('label.host') }
                       ];
 
                       args.response.success({


[50/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to 3890860

Posted by wi...@apache.org.
kvm: During migrate change the VNC listen address

Commit 7240204a507cce8143c248e6aa635da6dad60ed0 re-added the functionality that
the VNC on KVM hypervisors would listen on the private IP address of the hypervisor.

This broke migrations since Qemu on the target hypervisor would try to bind to the
IP address of the old hypervisor.

The migrate method from libvirt supports passing down a different XML for running
the instance of the target hypervisor.

A modification in libvirt-java was required for this. Without this modification
in libvirt-java this code won't compile.

The assumption is that libvirt-java 0.50.0 will have the required fixes.


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

Branch: refs/heads/kvm-vnc-listen
Commit: 3890860576a69117dfa9c2c7569b7ba5a8cadda2
Parents: 8bb28fd
Author: Wido den Hollander <wi...@widodh.nl>
Authored: Mon Feb 4 12:29:41 2013 +0100
Committer: Wido den Hollander <wi...@widodh.nl>
Committed: Wed Apr 3 12:31:26 2013 +0200

----------------------------------------------------------------------
 .../kvm/resource/LibvirtComputingResource.java     |   20 +++++++++++++-
 1 files changed, 18 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/38908605/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index 526107f..e253cb5 100755
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -2630,18 +2630,34 @@ ServerResource {
         Connect dconn = null;
         Domain destDomain = null;
         Connect conn = null;
+        String xmlDesc = null;
         try {
             conn = LibvirtConnection.getConnectionByVmName(cmd.getVmName());
             ifaces = getInterfaces(conn, vmName);
             dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName
                     .getBytes()));
+            /*
+                We replace the private IP address with the address of the destination host.
+                This is because the VNC listens on the private IP address of the hypervisor,
+                but that address is ofcourse different on the target host.
+
+                MigrateCommand.getDestinationIp() returns the private IP address of the target
+                hypervisor. So it's safe to use.
+
+                The Domain.migrate method from libvirt supports passing a different XML
+                description for the instance to be used on the target host.
+
+                This is supported by libvirt-java from version 0.50.0
+            */
+            xmlDesc = dm.getXMLDesc(0).replace(_privateIp, cmd.getDestinationIp());
+
             dconn = new Connect("qemu+tcp://" + cmd.getDestinationIp()
                     + "/system");
             /*
              * Hard code lm flags: VIR_MIGRATE_LIVE(1<<0) and
              * VIR_MIGRATE_PERSIST_DEST(1<<3)
              */
-            destDomain = dm.migrate(dconn, (1 << 0) | (1 << 3), vmName, "tcp:"
+            destDomain = dm.migrate(dconn, (1 << 0) | (1 << 3), xmlDesc, vmName, "tcp:"
                     + cmd.getDestinationIp(), _migrateSpeed);
         } catch (LibvirtException e) {
             s_logger.debug("Can't migrate domain: " + e.getMessage());
@@ -3168,7 +3184,7 @@ ServerResource {
         ConsoleDef console = new ConsoleDef("pty", null, null, (short) 0);
         devices.addDevice(console);
 
-        GraphicDef grap = new GraphicDef("vnc", (short) 0, true, null, null,
+        GraphicDef grap = new GraphicDef("vnc", (short) 0, true, vmTO.getVncAddr(), null,
                 null);
         devices.addDevice(grap);