You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by mc...@apache.org on 2013/11/01 01:21:12 UTC

[01/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Updated Branches:
  refs/heads/rbac 21dc2bef2 -> 2ef4d5200


forgot about rat

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

Branch: refs/heads/rbac
Commit: 30aea0b308ecad27a1c9b9bea5d906fb7ec9ca46
Parents: 4c6add8
Author: Daan Hoogland <da...@onecht.net>
Authored: Tue Oct 29 14:35:45 2013 +0100
Committer: Daan Hoogland <da...@onecht.net>
Committed: Tue Oct 29 14:35:45 2013 +0100

----------------------------------------------------------------------
 tools/eclipse/ApacheCloudStack.xml | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/30aea0b3/tools/eclipse/ApacheCloudStack.xml
----------------------------------------------------------------------
diff --git a/tools/eclipse/ApacheCloudStack.xml b/tools/eclipse/ApacheCloudStack.xml
index e69e034..5a0a01d 100644
--- a/tools/eclipse/ApacheCloudStack.xml
+++ b/tools/eclipse/ApacheCloudStack.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+ 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.
+-->
 <profiles version="12">
 <profile kind="CodeFormatterProfile" name="ApacheCloudStack" version="12">
 <setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>


[29/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
Detail view: Adjust tab panel colors

-Remove border/BG from individual group, for better visual flow

-Remove button appearance from actions

-Misc. small positioning tweaks


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

Branch: refs/heads/rbac
Commit: 9d5ea575372e15942f35d02158ade809376ae5fc
Parents: e0c0282
Author: Brian Federle <br...@citrix.com>
Authored: Tue Oct 29 15:59:10 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Tue Oct 29 15:59:57 2013 -0700

----------------------------------------------------------------------
 ui/css/cloudstack3.css | 40 ++++++++++++++++++++--------------------
 1 file changed, 20 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9d5ea575/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index 7185c85..f58bb8c 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -1724,14 +1724,9 @@ div.list-view td.state.off span {
 .detail-group table {
   width: 96%;
   font-size: 12px;
-  /*+border-radius:5px;*/
-  -moz-border-radius: 5px;
-  -webkit-border-radius: 5px;
-  -khtml-border-radius: 5px;
-  border-radius: 5px;
-  border-bottom: none;
-  background: #F4F4F4;
-  margin-top: 11px;
+  border-bottom: 1px solid #DFDFDF;
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f7f7f7', endColorstr='#eaeaea',GradientType=0 );
+  margin-top: 10px;
 }
 
 .detail-group table tr,
@@ -1741,6 +1736,10 @@ div.list-view td.state.off span {
   cursor: default;
 }
 
+.detail-group table tr.odd {
+  background: none;
+}
+
 .details.group-multiple table {
   border: none;
   border-top: none;
@@ -1757,7 +1756,8 @@ div.list-view td.state.off span {
 
 .detail-group .main-groups table td.name {
   width: 113px;
-  color: #6393F1;
+  color: #6D6D6D;
+  font-weight: bold;
   padding: 14px 12px 13px 13px;
   border: none;
   text-indent: 0;
@@ -1976,7 +1976,7 @@ div.detail-group td.view-all a {
   font-size: 13px;
   display: block;
   text-decoration: none;
-  color: #145A98;
+  color: #0373B7;
   /*+text-shadow:0px 1px 2px #FFFFFF;*/
   -moz-text-shadow: 0px 1px 2px #FFFFFF;
   -webkit-text-shadow: 0px 1px 2px #FFFFFF;
@@ -1991,10 +1991,10 @@ div.detail-group td.view-all:hover a {
 }
 
 div.detail-group td.view-all a span {
-  /*+placement:shift -4px 7px;*/
+  /*+placement:shift -4px -1px;*/
   position: relative;
   left: -4px;
-  top: 7px;
+  top: -1px;
 }
 
 div.detail-group td.view-all:hover a span {
@@ -2042,6 +2042,8 @@ div.details .main-groups label.error {
   display: block;
   float: left;
   height: 28px;
+  margin-left: 0;
+  text-align: left;
 }
 
 /*** Actions*/
@@ -2098,7 +2100,6 @@ div.detail-group.actions td {
 }
 
 .detail-group table td.detail-actions {
-  width: 59%;
   height: 26px;
 }
 
@@ -2140,10 +2141,6 @@ div.detail-group.actions td {
 }
 
 .detail-group table td.detail-actions div.buttons {
-  /*+placement:shift 6px 0px;*/
-  position: relative;
-  left: 6px;
-  top: 0px;
 }
 
 .detail-group table td.detail-actions a {
@@ -2152,7 +2149,6 @@ div.detail-group.actions td {
   text-indent: -9999px;
   width: 30px;
   height: 25px;
-  background: url(../images/sprites.png) -417px -11px;
   margin: 0;
 }
 
@@ -2181,7 +2177,6 @@ div.detail-group.actions td {
 .detail-group table td.detail-actions div.action.single a {
   width: 31px;
   height: 26px;
-  background: url(../images/buttons.png);
   background-position: -414px -625px;
 }
 
@@ -2418,6 +2413,11 @@ div.detail-group.actions td {
   width: 230px;
   position: relative;
   float: left;
+  /*+box-shadow:inset -1px 4px 7px #DDDDDD;*/
+  -moz-box-shadow: inset -1px 4px 7px #DDDDDD;
+  -webkit-box-shadow: inset -1px 4px 7px #DDDDDD;
+  -o-box-shadow: inset -1px 4px 7px #DDDDDD;
+  box-shadow: inset -1px 4px 7px #DDDDDD;
   background: #EDE8E8;
   background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjYlIiBzdG9wLWNvbG9yPSIjZWRlOGU4IiBzdG9wLW9wYWNpdHk9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9InVybCgjZ3JhZC11Y2dnLWdlbmVyYXRlZCkiIC8+Cjwvc3ZnPg==);
   background: -moz-linear-gradient(top, #ffffff 0%, #ede8e8 6%);
@@ -8578,7 +8578,7 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
   -o-text-shadow: 0px 1px 1px #FFFFFF;
   text-shadow: 0px 1px 1px #FFFFFF;
   text-indent: 11px;
-  padding: 12px 0 0;
+  padding: 0px 0 12px;
   /*+box-shadow:0px 0px 1px #FFFFFF;*/
   -moz-box-shadow: 0px 0px 1px #FFFFFF;
   -webkit-box-shadow: 0px 0px 1px #FFFFFF;


[31/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
Multi-edit: Fix wrapping on table headers


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

Branch: refs/heads/rbac
Commit: 088ba84e8484fc4be579e20d0424a127f5835acf
Parents: 3f2a14b
Author: Brian Federle <br...@citrix.com>
Authored: Tue Oct 29 16:08:38 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Tue Oct 29 16:08:38 2013 -0700

----------------------------------------------------------------------
 ui/css/cloudstack3.css | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/088ba84e/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index e0859cd..a75027a 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -7535,6 +7535,9 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
 
 .multi-edit table th {
   min-width: 88px;
+  white-space: nowrap;
+  text-align: center;
+  text-indent: 0;
 }
 
 .detail-group .multi-edit table td {


[49/50] [abbrv] Merge branch 'master' into rbac.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/api/src/com/cloud/event/EventTypes.java
----------------------------------------------------------------------
diff --cc api/src/com/cloud/event/EventTypes.java
index 076a7c5,d9f80eb..0406c3e
--- a/api/src/com/cloud/event/EventTypes.java
+++ b/api/src/com/cloud/event/EventTypes.java
@@@ -442,20 -446,12 +446,23 @@@ public class EventTypes 
      public static final String EVENT_DEDICATE_RESOURCE_RELEASE = "DEDICATE.RESOURCE.RELEASE";
  
      public static final String EVENT_CLEANUP_VM_RESERVATION = "VM.RESERVATION.CLEANUP";
 -
 +    
      public static final String EVENT_UCS_ASSOCIATED_PROFILE = "UCS.ASSOCIATEPROFILE";
  
 +    public static final String EVENT_ACL_ROLE_CREATE = "ACLROLE.CREATE";
 +    public static final String EVENT_ACL_ROLE_DELETE = "ACLROLE.DELETE";
 +    public static final String EVENT_ACL_ROLE_GRANT = "ACLROLE.GRANT";
 +    public static final String EVENT_ACL_ROLE_REVOKE = "ACLROLE.REVOKE";
 +    
 +    public static final String EVENT_ACL_GROUP_UPDATE = "ACLGROUP.UPDATE";
 +    public static final String EVENT_ACL_GROUP_CREATE = "ACLGROUP.CREATE";
 +    public static final String EVENT_ACL_GROUP_DELETE = "ACLGROUP.DELETE";
 +    public static final String EVENT_ACL_GROUP_GRANT = "ACLGROUP.GRANT";
 +    public static final String EVENT_ACL_GROUP_REVOKE = "ACLGROUP.REVOKE";
 +
+     // Object store migration
+     public static final String EVENT_MIGRATE_PREPARE_SECONDARY_STORAGE = "MIGRATE.PREPARE.SS";
+ 
      static {
  
          // TODO: need a way to force author adding event types to declare the entity details as well, with out braking

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/api/src/org/apache/cloudstack/api/APICommand.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/APICommand.java
index 621b347,7c9e6fe..008bd1e
--- a/api/src/org/apache/cloudstack/api/APICommand.java
+++ b/api/src/org/apache/cloudstack/api/APICommand.java
@@@ -22,7 -22,7 +22,8 @@@ import java.lang.annotation.Retention
  import java.lang.annotation.RetentionPolicy;
  import java.lang.annotation.Target;
  
+ import org.apache.cloudstack.acl.RoleType;
 +import org.apache.cloudstack.api.ResponseObject.ResponseView;
  
  @Retention(RetentionPolicy.RUNTIME)
  @Target({ TYPE })
@@@ -38,6 -38,6 +39,8 @@@ public @interface APICommand 
      boolean includeInApiDoc() default true;
  
      String since() default "";
 +    
 +    ResponseView responseView() default ResponseView.Admin;
+ 
+     RoleType[] authorized() default {};
  }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/api/src/org/apache/cloudstack/api/ApiCommandJobType.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/api/src/org/apache/cloudstack/api/ApiConstants.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/ApiConstants.java
index 78200e5,e56fdbc..32c2c5e
--- a/api/src/org/apache/cloudstack/api/ApiConstants.java
+++ b/api/src/org/apache/cloudstack/api/ApiConstants.java
@@@ -518,18 -521,10 +521,23 @@@ public class ApiConstants 
      public static final String ROUTING = "isrouting";
      public static final String MAX_CONNECTIONS = "maxconnections";
      public static final String SERVICE_STATE = "servicestate";
 +    public static final String ACL_ACCOUNT_IDS = "accountids";
 +    public static final String ACL_PARENT_ROLE_ID = "parentroleid";
 +    public static final String ACL_PARENT_ROLE_NAME = "parentrolename";
 +    public static final String ACL_ROLES = "roles";
 +    public static final String ACL_ROLE_IDS = "roleids";
 +    public static final String ACL_APIS = "apis";
 +    public static final String ACL_GROUPS = "groups";
 +    public static final String ACL_PERMISSIONS = "permission";
 +    public static final String ENTITY_TYPE = "entitytype";
 +    public static final String ENTITY_ID = "entityid";
 +    public static final String ACCESS_TYPE = "accesstype";
 +
+     public static final String RESOURCE_DETAILS = "resourcedetails";
+     public static final String EXPUNGE = "expunge";
+     public static final String FOR_DISPLAY = "fordisplay";
+ 
++
      public enum HostDetails {
          all, capacity, events, stats, min;
      }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/api/src/org/apache/cloudstack/api/BaseCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/api/src/org/apache/cloudstack/query/QueryService.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/client/pom.xml
----------------------------------------------------------------------
diff --cc client/pom.xml
index 99a3c3e,3e08a9a..8cbdaff
--- a/client/pom.xml
+++ b/client/pom.xml
@@@ -470,15 -454,9 +459,15 @@@
                  </copy>
                  <copy overwrite="true" todir="${basedir}/target/conf">
                    <fileset dir="${basedir}/tomcatconf">
-                     <exclude name="*.in" />
+                     <exclude name="*.in"/>
                    </fileset>
                  </copy>
 +                <copy overwrite="true" todir="${basedir}/../utils/conf/">
 +                  <fileset dir="${basedir}/tomcatconf">
 +                    <include name="commands.properties.in" />
 +                  </fileset>
 +                  <globmapper from="*.in" to="*" />
 +                </copy>
                </target>
              </configuration>
            </execution>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/client/tomcatconf/commands.properties.in
----------------------------------------------------------------------
diff --cc client/tomcatconf/commands.properties.in
index 9bb0ea2,b106b9f..428042a
--- a/client/tomcatconf/commands.properties.in
+++ b/client/tomcatconf/commands.properties.in
@@@ -678,20 -680,4 +680,23 @@@ addLdapConfiguration=
  deleteLdapConfiguration=3
  listLdapUsers=3
  ldapCreateAccount=3
+ importLdapUsers=3
 +
 +### Acl commands
 +createAclRole=7
 +deleteAclRole=7
 +listAclRoles=7
 +grantPermissionToAclRole=7
 +revokePermissionFromAclRole=7
 +createAclGroup=7
 +deleteAclGroup=7
 +listAclGroups=7
 +addAclRoleToAclGroup=7
 +removeAclRoleFromAclGroup=7
 +addAccountToAclGroup=7
 +removeAccountFromAclGroup=7
 +grantPermissionToAclGroup=7
 +revokePermissionFromAclGroup=7
 +
++
++

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/core/resources/META-INF/cloudstack/core/spring-core-registry-core-context.xml
----------------------------------------------------------------------
diff --cc core/resources/META-INF/cloudstack/core/spring-core-registry-core-context.xml
index 0000000,a8b2e29..c2467b1
mode 000000,100644..100644
--- a/core/resources/META-INF/cloudstack/core/spring-core-registry-core-context.xml
+++ b/core/resources/META-INF/cloudstack/core/spring-core-registry-core-context.xml
@@@ -1,0 -1,273 +1,273 @@@
+ <!--
+   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: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/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"
+                       >
+ 
+     <bean id="userAuthenticatorsRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="orderConfigKey" value="user.authenticators.order" />
+         <property name="excludeKey" value="user.authenticators.exclude" />
+         <property name="orderConfigDefault" value="SHA256SALT,MD5,LDAP,PLAINTEXT" />
+     </bean>
+ 
+     <bean id="userPasswordEncodersRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="orderConfigKey" value="user.password.encoders.order" />
+         <property name="excludeKey" value="user.password.encoders.exclude" />
+         <property name="orderConfigDefault" value="SHA256SALT,MD5,LDAP,PLAINTEXT" />
+     </bean>
+ 
+     <bean id="securityCheckersRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="orderConfigKey" value="security.checkers.order" />
+         <property name="excludeKey" value="security.checkers.exclude" />
+         <property name="orderConfigDefault"
 -            value="AffinityGroupAccessChecker,DomainChecker" />
++            value="roleBasedEntityAccessChecker,AffinityGroupAccessChecker,DomainChecker" />
+     </bean>
+ 
+     <bean id="resourceDiscoverersRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey" value="resource.discoverers.exclude" />
+         <property name="excludeDefault" value="dummyHostDiscoverer" />
+     </bean>
+ 
+     <bean id="haInvestigatorsRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="orderConfigKey" value="ha.investigators.order" />
+         <property name="orderConfigDefault"
+             value="SimpleInvestigator,XenServerInvestigator,PingInvestigator,ManagementIPSysVMInvestigator,KVMInvestigator" />
+         <property name="excludeKey" value="ha.investigators.exclude" />
+     </bean>
+ 
+     <bean id="haFenceBuildersRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey" value="ha.fence.builders.exclude" />
+         <property name="excludeDefault" value="RecreatableFencer" />
+     </bean>
+ 
+     <bean id="deploymentPlannersRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="orderConfigKey" value="deployment.planners.order" />
+         <property name="orderConfigDefault"
+             value="FirstFitPlanner,UserDispersingPlanner,UserConcentratedPodPlanner,ImplicitDedicationPlanner,BareMetalPlanner" />
+         <property name="excludeKey" value="deployment.planners.exclude" />
+     </bean>
+ 
+     <bean id="podAllocatorsRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey" value="pod.allocators.exclude" />
+     </bean>
+ 
+     <bean id="hostAllocatorsRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey" value="host.allocators.exclude" />
+         <property name="excludeDefault"
+             value="RandomAllocator,TestingAllocator,FirstFitAllocator,RecreateHostAllocator" />
+     </bean>
+ 
+     <bean id="storagePoolAllocatorsRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="orderConfigKey" value="storage.pool.allocators.order" />
+         <property name="orderConfigDefault"
+             value="LocalStorage,ClusterScopeStoragePoolAllocator,ZoneWideStoragePoolAllocator" />
+         <property name="excludeKey" value="storage.pool.allocators.exclude" />
+         <property name="excludeDefault" value="GCStorage" />
+     </bean>
+ 
+     <bean id="secondaryStorageVmAllocatorsRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey"
+             value="secondary.storage.vm.allocators.exclude" />
+     </bean>
+ 
+     <bean id="consoleProxyAllocatorsRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey" value="console.proxy.allocator.exclude" />
+     </bean>
+ 
+     <bean id="templateAdapterRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey" value="template.adapter.exclude" />
+     </bean>
+ 
+     <bean id="ipDeployersRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey" value="ip.deployers.exclude" />
+         <property name="excludeDefault" value="MidoNetElement" />
+         <property name="preRegistered">
+             <list>
+                 <ref bean="VpcVirtualRouter" />
+             </list>
+         </property>
+     </bean>
+ 
+     <bean id="dhcpProvidersRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey" value="dhcp.providers.exclude" />
+         <property name="excludeDefault" value="MidoNetElement" />
+         <property name="preRegistered">
+             <list>
+                 <ref bean="VpcVirtualRouter" />
+             </list>
+         </property>
+     </bean>
+ 
+     <bean id="networkGurusRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey" value="network.gurus.exclude" />
+     </bean>
+ 
+     <bean id="networkElementsRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey" value="network.elements.registry.exclude" />
+         <property name="excludeDefault" value="ElasticLoadBalancerElement" />
+         <property name="preRegistered">
+             <list>
+                 <ref bean="VpcVirtualRouter" />
+                 <ref bean="InternalLbVm" />
+             </list>
+         </property>
+     </bean>
+ 
+     <bean id="firewallServiceProvidersRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey" value="firewall.service.provider.exclude" />
+         <property name="preRegistered">
+             <list>
+                 <ref bean="VpcVirtualRouter" />
+             </list>
+         </property>
+     </bean>
+ 
+     <bean id="loadBalancingServiceProvidersRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey" value="load.balancing.service.provider.exclude" />
+         <property name="preRegistered">
+             <list>
+                 <ref bean="VpcVirtualRouter" />
+                 <ref bean="InternalLbVm" />
+             </list>
+         </property>
+     </bean>
+ 
+     <bean id="portForwardingServiceProvidersRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey" value="port.forwarding.service.provider.exclude" />
+         <property name="preRegistered">
+             <list>
+                 <ref bean="VpcVirtualRouter" />
+             </list>
+         </property>
+     </bean>
+ 
+     <bean id="staticNatServiceProvidersRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey" value="static.nat.service.provider.exclude" />
+         <property name="preRegistered">
+             <list>
+                 <ref bean="VpcVirtualRouter" />
+             </list>
+         </property>
+     </bean>
+ 
+     <bean id="networkACLServiceProvidersRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey" value="network.acl.service.provider.exclude" />
+         <property name="preRegistered">
+             <list>
+                 <ref bean="VpcVirtualRouter" />
+             </list>
+         </property>
+     </bean>
+ 
+     <bean id="site2SiteVpnServiceProvidersRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey" value="site2site.vpn.service.provider.exclude" />
+         <property name="preRegistered">
+             <list>
+                 <ref bean="VpcVirtualRouter" />
+             </list>
+         </property>
+     </bean>
+ 
+     <bean id="affinityProcessorsRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="orderConfigKey" value="affinity.processors.order" />
+         <property name="orderConfigDefault"
+             value="HostAntiAffinityProcessor,ExplicitDedicationProcessor" />
+         <property name="excludeKey" value="affinity.processors.exclude" />
+     </bean>
+ 
+     <bean class="org.apache.cloudstack.spring.lifecycle.registry.DumpRegistry" >
+         <property name="registries" value="#{registryRegistry.registered}" />
+     </bean>
+     
+     <bean id="registryRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+     </bean>
+ 
+     <bean id="apiCheckersRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey" value="api.checkers.exclude" />
+     </bean>
+ 
+     <bean id="apiCommandsRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey" value="api.commands.exclude" />
+     </bean>
+ 
+     <bean id="hypervisorGurusRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey" value="hypervisor.gurus.exclude" />
+     </bean>
+     
+     <bean id="vpcProvidersRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey" value="vpc.providers.exclude" />
+         <property name="preRegistered">
+             <list>
+                 <ref bean="VpcVirtualRouter" />
+             </list>
+         </property>
+     </bean>
+ 
+     <bean id="snapshotStrategiesRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey" value="snapshot.strategies.exclude" />
+     </bean>
+ 
+     <bean id="vmSnapshotStrategiesRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey" value="vmSnapshot.strategies.exclude" />
+     </bean>
+ 
+     <bean id="dataMotionStrategiesRegistry"
+         class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
+         <property name="excludeKey" value="data.motion.strategies.exclude" />
+     </bean>
+     
+ </beans>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/engine/schema/resources/META-INF/cloudstack/core/spring-engine-schema-core-daos-context.xml
----------------------------------------------------------------------
diff --cc engine/schema/resources/META-INF/cloudstack/core/spring-engine-schema-core-daos-context.xml
index 0000000,e811cce..24da230
mode 000000,100644..100644
--- a/engine/schema/resources/META-INF/cloudstack/core/spring-engine-schema-core-daos-context.xml
+++ b/engine/schema/resources/META-INF/cloudstack/core/spring-engine-schema-core-daos-context.xml
@@@ -1,0 -1,323 +1,332 @@@
+ <!--
+   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: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/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"
+                       >
+ 
+   <!--
+     DAO with customized configuration
+   -->
+   <bean id="serviceOfferingDaoImpl" class="com.cloud.service.dao.ServiceOfferingDaoImpl">
+     <property name="configParams">
+       <map>
+         <entry key="cache.size" value="50" />
+         <entry key="cache.time.to.live" value="600" />
+       </map>
+     </property>  
+   </bean>
+ 
+   <bean id="diskOfferingDaoImpl" class="com.cloud.storage.dao.DiskOfferingDaoImpl">
+     <property name="configParams">
+       <map>
+         <entry key="cache.size" value="50" />
+         <entry key="cache.time.to.live" value="600" />
+       </map>
+     </property>  
+   </bean>
+ 
+   <bean id="dataCenterDaoImpl" class="com.cloud.dc.dao.DataCenterDaoImpl">
+     <property name="configParams">
+       <map>
+         <entry key="cache.size" value="50" />
+         <entry key="cache.time.to.live" value="600" />
+       </map>
+     </property>  
+   </bean>
+ 
+   <bean id="hostPodDaoImpl" class="com.cloud.dc.dao.HostPodDaoImpl">
+     <property name="configParams">
+       <map>
+         <entry key="cache.size" value="50" />
+         <entry key="cache.time.to.live" value="600" />
+       </map>
+     </property>  
+   </bean>
+ 
+   <bean id="vlanDaoImpl" class="com.cloud.dc.dao.VlanDaoImpl">
+     <property name="configParams">
+       <map>
+         <entry key="cache.size" value="30" />
+         <entry key="cache.time.to.live" value="3600" />
+       </map>
+     </property>  
+   </bean>
+ 
+   <bean id="userDaoImpl" class="com.cloud.user.dao.UserDaoImpl">
+     <property name="configParams">
+       <map>
+         <entry key="cache.size" value="5000" />
+         <entry key="cache.time.to.live" value="300" />
+       </map>
+     </property>  
+   </bean>
+ 
+   <bean id="VMTemplateDaoImpl" class="com.cloud.storage.dao.VMTemplateDaoImpl">
+     <property name="configParams">
+       <map>
+         <entry key="cache.size" value="100" />
+         <entry key="cache.time.to.live" value="600" />
+       </map>
+     </property>  
+   </bean>
+ 
+   <bean id="hypervisorCapabilitiesDaoImpl" class="com.cloud.hypervisor.dao.HypervisorCapabilitiesDaoImpl">
+     <property name="configParams">
+       <map>
+         <entry key="cache.size" value="100" />
+         <entry key="cache.time.to.live" value="600" />
+       </map>
+     </property>  
+   </bean>
+   <bean id="dedicatedResourceDaoImpl" class="com.cloud.dc.dao.DedicatedResourceDaoImpl">
+     <property name="configParams">
+       <map>
+         <entry key="cache.size" value="30" />
+         <entry key="cache.time.to.live" value="3600" />
+       </map>
+     </property>
+   </bean>
+   
+   <!--
+     DAOs with default configuration
+   -->
+   <bean id="accountDaoImpl" class="com.cloud.user.dao.AccountDaoImpl" />
+   <bean id="accountDetailsDaoImpl" class="com.cloud.user.AccountDetailsDaoImpl" />
+   <bean id="accountJoinDaoImpl" class="com.cloud.api.query.dao.AccountJoinDaoImpl" />
+   <bean id="accountGuestVlanMapDaoImpl" class="com.cloud.network.dao.AccountGuestVlanMapDaoImpl" />
+   <bean id="accountVlanMapDaoImpl" class="com.cloud.dc.dao.AccountVlanMapDaoImpl" />
+   <bean id="alertDaoImpl" class="com.cloud.alert.dao.AlertDaoImpl" />
+   <bean id="asyncJobJoinDaoImpl" class="com.cloud.api.query.dao.AsyncJobJoinDaoImpl" />
+   <bean id="autoScalePolicyConditionMapDaoImpl" class="com.cloud.network.as.dao.AutoScalePolicyConditionMapDaoImpl" />
+   <bean id="autoScalePolicyDaoImpl" class="com.cloud.network.as.dao.AutoScalePolicyDaoImpl" />
+   <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="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" />
+   <bean id="counterDaoImpl" class="com.cloud.network.as.dao.CounterDaoImpl" />
+   <bean id="dataCenterIpAddressDaoImpl" class="com.cloud.dc.dao.DataCenterIpAddressDaoImpl" />
+   <bean id="dataCenterJoinDaoImpl" class="com.cloud.api.query.dao.DataCenterJoinDaoImpl" />
+   <bean id="dataCenterLinkLocalIpAddressDaoImpl" class="com.cloud.dc.dao.DataCenterLinkLocalIpAddressDaoImpl" />
+   <bean id="dataCenterVnetDaoImpl" class="com.cloud.dc.dao.DataCenterVnetDaoImpl" />
+   <bean id="dataCenterDetailsDaoImpl" class="com.cloud.dc.dao.DataCenterDetailsDaoImpl" />
+   <bean id="engineDcDetailsDaoImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.db.dao.DcDetailsDaoImpl" />
+   <bean id="diskOfferingJoinDaoImpl" class="com.cloud.api.query.dao.DiskOfferingJoinDaoImpl" />
+   <bean id="domainDaoImpl" class="com.cloud.domain.dao.DomainDaoImpl" />
+   <bean id="domainRouterDaoImpl" class="com.cloud.vm.dao.DomainRouterDaoImpl" />
+   <bean id="domainRouterJoinDaoImpl" class="com.cloud.api.query.dao.DomainRouterJoinDaoImpl" />
+   <bean id="engineClusterDaoImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.db.dao.EngineClusterDaoImpl" />
+   <bean id="engineDataCenterDaoImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.db.dao.EngineDataCenterDaoImpl" />
+   <bean id="engineHostDaoImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.db.dao.EngineHostDaoImpl" />
+   <bean id="engineHostPodDaoImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.db.dao.EngineHostPodDaoImpl" />
+   <bean id="eventDaoImpl" class="com.cloud.event.dao.EventDaoImpl" />
+   <bean id="eventJoinDaoImpl" class="com.cloud.event.dao.EventJoinDaoImpl" />
+   <bean id="externalFirewallDeviceDaoImpl" class="com.cloud.network.dao.ExternalFirewallDeviceDaoImpl" />
+   <bean id="externalLoadBalancerDeviceDaoImpl" class="com.cloud.network.dao.ExternalLoadBalancerDeviceDaoImpl" />
+   <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="guestOSHypervisorDaoImpl" class="com.cloud.storage.dao.GuestOSHypervisorDaoImpl" />
+   <bean id="highAvailabilityDaoImpl" class="com.cloud.ha.dao.HighAvailabilityDaoImpl" />
+   <bean id="hostDaoImpl" class="com.cloud.host.dao.HostDaoImpl" />
+   <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" />
+   <bean id="hostTransferMapDaoImpl" class="com.cloud.cluster.agentlb.dao.HostTransferMapDaoImpl" />
+   <bean id="iPAddressDaoImpl" class="com.cloud.network.dao.IPAddressDaoImpl" />
+   <bean id="identityDaoImpl" class="com.cloud.uuididentity.dao.IdentityDaoImpl" />
+   <bean id="imageStoreDaoImpl" class="org.apache.cloudstack.storage.image.db.ImageStoreDaoImpl" />
+   <bean id="imageStoreDetailsDaoImpl" class="org.apache.cloudstack.storage.image.db.ImageStoreDetailsDaoImpl" /> 
+   <bean id="imageStoreJoinDaoImpl" class="com.cloud.api.query.dao.ImageStoreJoinDaoImpl" />   
+   <bean id="snapshotDataStoreDaoImpl" class="org.apache.cloudstack.storage.image.db.SnapshotDataStoreDaoImpl" /> 
+   <bean id="templateDataStoreDaoImpl" class="org.apache.cloudstack.storage.image.db.TemplateDataStoreDaoImpl" /> 
+   <bean id="templateJoinDaoImpl" class="com.cloud.api.query.dao.TemplateJoinDaoImpl" />
+   <bean id="volumeDataStoreDaoImpl" class="org.apache.cloudstack.storage.image.db.VolumeDataStoreDaoImpl" />   
+   <bean id="inlineLoadBalancerNicMapDaoImpl" class="com.cloud.network.dao.InlineLoadBalancerNicMapDaoImpl" />
+   <bean id="instanceGroupDaoImpl" class="com.cloud.vm.dao.InstanceGroupDaoImpl" />
+   <bean id="instanceGroupJoinDaoImpl" class="com.cloud.api.query.dao.InstanceGroupJoinDaoImpl" />
+   <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="networkAccountDaoImpl" class="com.cloud.network.dao.NetworkAccountDaoImpl" />
+   <bean id="networkACLDaoImpl" class="com.cloud.network.vpc.dao.NetworkACLDaoImpl" />
+   <bean id="networkACLItemDaoImpl" class="com.cloud.network.vpc.dao.NetworkACLItemDaoImpl" />
+   <bean id="networkDaoImpl" class="com.cloud.network.dao.NetworkDaoImpl" />
+   <bean id="networkDomainDaoImpl" class="com.cloud.network.dao.NetworkDomainDaoImpl" />
+   <bean id="networkExternalFirewallDaoImpl" class="com.cloud.network.dao.NetworkExternalFirewallDaoImpl" />
+   <bean id="networkExternalLoadBalancerDaoImpl" class="com.cloud.network.dao.NetworkExternalLoadBalancerDaoImpl" />
+   <bean id="networkOfferingDaoImpl" class="com.cloud.offerings.dao.NetworkOfferingDaoImpl" />
+   <bean id="networkOfferingServiceMapDaoImpl" class="com.cloud.offerings.dao.NetworkOfferingServiceMapDaoImpl" />
+   <bean id="networkOpDaoImpl" class="com.cloud.network.dao.NetworkOpDaoImpl" />
+   <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="nicDetailsDaoImpl" class="com.cloud.vm.dao.NicDetailsDaoImpl" />
+   <bean id="nicSecondaryIpDaoImpl" class="com.cloud.vm.dao.NicSecondaryIpDaoImpl" />
+   <bean id="nicIpAliasDaoImpl" class="com.cloud.vm.dao.NicIpAliasDaoImpl" />
+   <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" />
+   <bean id="physicalNetworkDaoImpl" class="com.cloud.network.dao.PhysicalNetworkDaoImpl" />
+   <bean id="physicalNetworkIsolationMethodDaoImpl" class="com.cloud.network.dao.PhysicalNetworkIsolationMethodDaoImpl" />
+   <bean id="physicalNetworkServiceProviderDaoImpl" class="com.cloud.network.dao.PhysicalNetworkServiceProviderDaoImpl" />
+   <bean id="physicalNetworkTagDaoImpl" class="com.cloud.network.dao.PhysicalNetworkTagDaoImpl" />
+   <bean id="physicalNetworkTrafficTypeDaoImpl" class="com.cloud.network.dao.PhysicalNetworkTrafficTypeDaoImpl" />
+   <bean id="podVlanDaoImpl" class="com.cloud.dc.dao.PodVlanDaoImpl" />
+   <bean id="podVlanMapDaoImpl" class="com.cloud.dc.dao.PodVlanMapDaoImpl" />
+   <bean id="PortableIpDaoImpl" class="org.apache.cloudstack.region.PortableIpDaoImpl" />
+   <bean id="PortableIpRangeDaoImpl" class="org.apache.cloudstack.region.PortableIpRangeDaoImpl" />
+   <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.volume.db.PrimaryDataStoreDetailsDaoImpl" />
+   <bean id="privateIpDaoImpl" class="com.cloud.network.vpc.dao.PrivateIpDaoImpl" />
+   <bean id="projectAccountDaoImpl" class="com.cloud.projects.dao.ProjectAccountDaoImpl" />
+   <bean id="projectAccountJoinDaoImpl" class="com.cloud.api.query.dao.ProjectAccountJoinDaoImpl" />
+   <bean id="projectDaoImpl" class="com.cloud.projects.dao.ProjectDaoImpl" />
+   <bean id="projectInvitationDaoImpl" class="com.cloud.projects.dao.ProjectInvitationDaoImpl" />
+   <bean id="projectInvitationJoinDaoImpl" class="com.cloud.api.query.dao.ProjectInvitationJoinDaoImpl" />
+   <bean id="projectJoinDaoImpl" class="com.cloud.api.query.dao.ProjectJoinDaoImpl" />
+   <bean id="regionDaoImpl" class="org.apache.cloudstack.region.dao.RegionDaoImpl" />
+   <bean id="remoteAccessVpnDaoImpl" class="com.cloud.network.dao.RemoteAccessVpnDaoImpl" />
+   <bean id="resourceCountDaoImpl" class="com.cloud.configuration.dao.ResourceCountDaoImpl" />
+   <bean id="resourceLimitDaoImpl" class="com.cloud.configuration.dao.ResourceLimitDaoImpl" />
+   <bean id="resourceTagJoinDaoImpl" class="com.cloud.api.query.dao.ResourceTagJoinDaoImpl" />
+   <bean id="resourceTagsDaoImpl" class="com.cloud.tags.dao.ResourceTagsDaoImpl" />
+   <bean id="routerNetworkDaoImpl" class="com.cloud.network.dao.RouterNetworkDaoImpl" />
+   <bean id="sSHKeyPairDaoImpl" class="com.cloud.user.dao.SSHKeyPairDaoImpl" />
+   <bean id="secondaryStorageVmDaoImpl" class="com.cloud.vm.dao.SecondaryStorageVmDaoImpl" />
+   <bean id="securityGroupDaoImpl" class="com.cloud.network.security.dao.SecurityGroupDaoImpl" />
+   <bean id="securityGroupJoinDaoImpl" class="com.cloud.api.query.dao.SecurityGroupJoinDaoImpl" />
+   <bean id="securityGroupRuleDaoImpl" class="com.cloud.network.security.dao.SecurityGroupRuleDaoImpl" />
+   <bean id="securityGroupRulesDaoImpl" class="com.cloud.network.security.dao.SecurityGroupRulesDaoImpl" />
+   <bean id="securityGroupVMMapDaoImpl" class="com.cloud.network.security.dao.SecurityGroupVMMapDaoImpl" />
+   <bean id="securityGroupWorkDaoImpl" class="com.cloud.network.security.dao.SecurityGroupWorkDaoImpl" />
+   <bean id="serviceOfferingJoinDaoImpl" class="com.cloud.api.query.dao.ServiceOfferingJoinDaoImpl" />
+   <bean id="site2SiteCustomerGatewayDaoImpl" class="com.cloud.network.dao.Site2SiteCustomerGatewayDaoImpl" />
+   <bean id="site2SiteVpnConnectionDaoImpl" class="com.cloud.network.dao.Site2SiteVpnConnectionDaoImpl" />
+   <bean id="site2SiteVpnGatewayDaoImpl" class="com.cloud.network.dao.Site2SiteVpnGatewayDaoImpl" />
+   <bean id="snapshotDaoImpl" class="com.cloud.storage.dao.SnapshotDaoImpl" />
+   <bean id="snapshotPolicyDaoImpl" class="com.cloud.storage.dao.SnapshotPolicyDaoImpl" />
+   <bean id="snapshotScheduleDaoImpl" class="com.cloud.storage.dao.SnapshotScheduleDaoImpl" />
+   <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="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" />
+   <bean id="storagePoolWorkDaoImpl" class="com.cloud.storage.dao.StoragePoolWorkDaoImpl" />
+   <bean id="templatePrimaryDataStoreDaoImpl" class="org.apache.cloudstack.storage.volume.db.TemplatePrimaryDataStoreDaoImpl" />
+   <bean id="uploadDaoImpl" class="com.cloud.storage.dao.UploadDaoImpl" />
+   <bean id="usageDaoImpl" class="com.cloud.usage.dao.UsageDaoImpl" />
+   <bean id="usageEventDaoImpl" class="com.cloud.event.dao.UsageEventDaoImpl" />
+   <bean id="usageIPAddressDaoImpl" class="com.cloud.usage.dao.UsageIPAddressDaoImpl" />
+   <bean id="usageJobDaoImpl" class="com.cloud.usage.dao.UsageJobDaoImpl" />
+   <bean id="usageLoadBalancerPolicyDaoImpl" class="com.cloud.usage.dao.UsageLoadBalancerPolicyDaoImpl" />
+   <bean id="usageNetworkDaoImpl" class="com.cloud.usage.dao.UsageNetworkDaoImpl" />
+   <bean id="usageNetworkOfferingDaoImpl" class="com.cloud.usage.dao.UsageNetworkOfferingDaoImpl" />
+   <bean id="usagePortForwardingRuleDaoImpl" class="com.cloud.usage.dao.UsagePortForwardingRuleDaoImpl" />
+   <bean id="usageSecurityGroupDaoImpl" class="com.cloud.usage.dao.UsageSecurityGroupDaoImpl" />
+   <bean id="usageStorageDaoImpl" class="com.cloud.usage.dao.UsageStorageDaoImpl" />
+   <bean id="usageVMInstanceDaoImpl" class="com.cloud.usage.dao.UsageVMInstanceDaoImpl" />
+   <bean id="usageVPNUserDaoImpl" class="com.cloud.usage.dao.UsageVPNUserDaoImpl" />
+   <bean id="usageVolumeDaoImpl" class="com.cloud.usage.dao.UsageVolumeDaoImpl" />
+   <bean id="usageVmDiskDaoImpl" class="com.cloud.usage.dao.UsageVmDiskDaoImpl" />
+   <bean id="userAccountDaoImpl" class="com.cloud.user.dao.UserAccountDaoImpl" />
+   <bean id="userAccountJoinDaoImpl" class="com.cloud.api.query.dao.UserAccountJoinDaoImpl" />
+   <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="userVmDiskStatsDaoImpl" class="com.cloud.user.dao.VmDiskStatisticsDaoImpl" />
+   <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" />
+   <bean id="vMEntityDaoImpl" class="org.apache.cloudstack.engine.cloud.entity.api.db.dao.VMEntityDaoImpl" />
+   <bean id="vMInstanceDaoImpl" class="com.cloud.vm.dao.VMInstanceDaoImpl" />
+   <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="vMSnapshotDetailsDaoImpl" class="com.cloud.vm.snapshot.dao.VMSnapshotDetailsDaoImpl" />
+   <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" />
+   <bean id="vMTemplateZoneDaoImpl" class="com.cloud.storage.dao.VMTemplateZoneDaoImpl" />
+   <bean id="virtualRouterProviderDaoImpl" class="com.cloud.network.dao.VirtualRouterProviderDaoImpl" />
+   <bean id="vmRulesetLogDaoImpl" class="com.cloud.network.security.dao.VmRulesetLogDaoImpl" />
+   <bean id="volumeDaoImpl" class="com.cloud.storage.dao.VolumeDaoImpl" />
+   <bean id="volumeDetailsDaoImpl" class="com.cloud.storage.dao.VolumeDetailsDaoImpl" />
+   <bean id="volumeHostDaoImpl" class="com.cloud.storage.dao.VolumeHostDaoImpl" />
+   <bean id="volumeJoinDaoImpl" class="com.cloud.api.query.dao.VolumeJoinDaoImpl" />
+   <bean id="volumeReservationDaoImpl" class="org.apache.cloudstack.engine.cloud.entity.api.db.dao.VolumeReservationDaoImpl" />
+   <bean id="vpcDaoImpl" class="com.cloud.network.vpc.dao.VpcDaoImpl" />
+   <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="applicationLbRuleDaoImpl" class="org.apache.cloudstack.lb.dao.ApplicationLoadBalancerRuleDaoImpl" />
+   <bean id="networkOfferingDetailsDaoImpl" class="com.cloud.offerings.dao.NetworkOfferingDetailsDaoImpl" />
+   <bean id="serviceOfferingDetailsDaoImpl" class="com.cloud.service.dao.ServiceOfferingDetailsDaoImpl"/>
+   <bean id="networkDetailsDaoImpl" class="com.cloud.network.dao.NetworkDetailsDaoImpl" />
+   <bean id="AffinityGroupDaoImpl" class="org.apache.cloudstack.affinity.dao.AffinityGroupDaoImpl" />
+   <bean id="AffinityGroupVMMapDaoImpl" class="org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDaoImpl" />
+   <bean id="AffinityGroupDomainMapDaoImpl" class="org.apache.cloudstack.affinity.dao.AffinityGroupDomainMapDaoImpl" />
+   <bean id="FirewallRuleDetailsDaoImpl" class="org.apache.cloudstack.resourcedetail.dao.FirewallRuleDetailsDaoImpl" />
 -  
++  <bean id="AclGroupDaoImpl" class="org.apache.cloudstack.acl.dao.AclGroupDaoImpl"/>
++  <bean id="AclGroupJoinDaoImpl" class="com.cloud.api.query.dao.AclGroupJoinDaoImpl"/>      
++  <bean id="AclRoleDaoImpl" class="org.apache.cloudstack.acl.dao.AclRoleDaoImpl"/>  
++  <bean id="AclRoleJoinDaoImpl" class="com.cloud.api.query.dao.AclRoleJoinDaoImpl"/>    
++  <bean id="AclGroupAccountMapDaoImpl" class="org.apache.cloudstack.acl.dao.AclGroupAccountMapDaoImpl"/>
++  <bean id="AclGroupRoleMapDaoImpl" class="org.apache.cloudstack.acl.dao.AclGroupRoleMapDaoImpl"/> 
++  <bean id="AclApiPermissionDaoImpl" class="org.apache.cloudstack.acl.dao.AclApiPermissionDaoImpl"/>
++  <bean id="AclEntityPermissionDaoImpl" class="org.apache.cloudstack.acl.dao.AclEntityPermissionDaoImpl"/>  
++  <bean id="AclRolePermissionDaoImpl" class="org.apache.cloudstack.acl.dao.AclRolePermissionDaoImpl"/>  
++    
+   <bean id="databaseIntegrityChecker" class="com.cloud.upgrade.DatabaseIntegrityChecker" />
+ 
+ </beans>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/engine/schema/src/com/cloud/upgrade/dao/Upgrade421to430.java
----------------------------------------------------------------------
diff --cc engine/schema/src/com/cloud/upgrade/dao/Upgrade421to430.java
index 0000000,5647289..791297c
mode 000000,100644..100644
--- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade421to430.java
+++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade421to430.java
@@@ -1,0 -1,70 +1,200 @@@
+ // 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.upgrade.dao;
+ 
+ import java.io.File;
+ import java.sql.Connection;
++import java.sql.PreparedStatement;
++import java.sql.ResultSet;
++import java.sql.SQLException;
++import java.util.Map;
+ 
+ import org.apache.log4j.Logger;
+ 
++import org.apache.cloudstack.acl.RoleType;
++
++import com.cloud.utils.PropertiesUtil;
+ import com.cloud.utils.exception.CloudRuntimeException;
+ import com.cloud.utils.script.Script;
+ 
+ public class Upgrade421to430 implements DbUpgrade {
+     final static Logger s_logger = Logger.getLogger(Upgrade421to430.class);
+ 
+     @Override
+     public String[] getUpgradableVersionRange() {
+         return new String[] {"4.2.1", "4.3.0"};
+     }
+ 
+     @Override
+     public String getUpgradedVersion() {
+         return "4.3.0";
+     }
+ 
+     @Override
+     public boolean supportsRollingUpgrade() {
+         return false;
+     }
+ 
+     @Override
+     public File[] getPrepareScripts() {
+         String script = Script.findScript("", "db/schema-421to430.sql");
+         if (script == null) {
+             throw new CloudRuntimeException("Unable to find db/schema-421to430.sql");
+         }
+ 
+         return new File[] { new File(script) };
+     }
+ 
+     @Override
+     public void performDataMigration(Connection conn) {
++        populateACLGroupAccountMap(conn);
++        populateACLGroupRoleMap(conn);
++        populateACLRoleBasedAPIPermission(conn);
++    }
++
++    // populate acl_group_account_map table for existing accounts
++    private void populateACLGroupAccountMap(Connection conn) {
++        PreparedStatement acctInsert = null;
++        PreparedStatement acctQuery = null;
++        ResultSet rs = null;
++
++        s_logger.debug("Populating acl_group_account_map table for existing accounts...");
++        try {
++            acctInsert = conn
++                    .prepareStatement("INSERT INTO `cloud`.`acl_group_account_map` (group_id, account_id, created) values(?, ?, Now())");
++            acctQuery = conn
++                    .prepareStatement("select id, type from `cloud`.`account` where removed is null");
++            rs = acctQuery.executeQuery();
++
++            while (rs.next()) {
++                Long acct_id = rs.getLong("id");
++                short type = rs.getShort("type");
++
++                // insert entry in acl_group_account_map table
++                acctInsert.setLong(1, type + 1);
++                acctInsert.setLong(2, acct_id);
++                acctInsert.executeUpdate();
++            }
++        } catch (SQLException e) {
++            String msg = "Unable to populate acl_group_account_map for existing accounts." + e.getMessage();
++            s_logger.error(msg);
++            throw new CloudRuntimeException(msg, e);
++        } finally {
++            try {
++                if (rs != null) {
++                    rs.close();
++                }
++
++                if (acctInsert != null) {
++                    acctInsert.close();
++                }
++                if (acctQuery != null) {
++                    acctQuery.close();
++                }
++            } catch (SQLException e) {
++            }
++        }
++        s_logger.debug("Completed populate acl_group_account_map for existing accounts.");
++    }
++
++    // populate acl_group_role_map table for existing accounts
++    private void populateACLGroupRoleMap(Connection conn) {
++        PreparedStatement sqlInsert = null;
++        ResultSet rs = null;
++
++        s_logger.debug("Populating acl_group_role_map table for default groups and roles...");
++        try {
++            sqlInsert = conn
++                    .prepareStatement("INSERT INTO `cloud`.`acl_group_role_map` (group_id, role_id, created) values(?, ?, Now())");
++            for (int i = 1; i < 6; i++) {
++                // insert entry in acl_group_role_map table, 1 to 1 mapping for default group and role
++                sqlInsert.setLong(1, i);
++                sqlInsert.setLong(2, i);
++                sqlInsert.executeUpdate();
++            }
++        } catch (SQLException e) {
++            String msg = "Unable to populate acl_group_role_map for default groups and roles." + e.getMessage();
++            s_logger.error(msg);
++            throw new CloudRuntimeException(msg, e);
++        } finally {
++            try {
++                if (rs != null) {
++                    rs.close();
++                }
++
++                if (sqlInsert != null) {
++                    sqlInsert.close();
++                }
++            } catch (SQLException e) {
++            }
++        }
++        s_logger.debug("Completed populate acl_group_role_map for existing accounts.");
++    }
++
++    private void populateACLRoleBasedAPIPermission(Connection conn) {
++        // read the commands.properties.in and populate the table
++        PreparedStatement apiInsert = null;
++
++        s_logger.debug("Populating acl_api_permission table for existing commands...");
++        try {
++            apiInsert = conn.prepareStatement("INSERT INTO `cloud`.`acl_api_permission` (role_id, api, created) values(?, ?, Now())");
++
++            Map<String, String> commandMap = PropertiesUtil.processConfigFile(new String[] { "commands.properties" });
++            for (Map.Entry<String, String> entry : commandMap.entrySet()) {
++                String apiName = entry.getKey();
++                String roleMask = entry.getValue();
++                try {
++                    short cmdPermissions = Short.parseShort(roleMask);
++                    for (RoleType roleType : RoleType.values()) {
++                        if ((cmdPermissions & roleType.getValue()) != 0) {
++                            // insert entry into api_permission for this role
++                            apiInsert.setLong(1, roleType.ordinal() + 1);
++                            apiInsert.setString(2, apiName);
++                            apiInsert.executeUpdate();
++                        }
++                    }
++                } catch (NumberFormatException nfe) {
++                    s_logger.info("Malformed key=value pair for entry: " + entry.toString());
++                }
++            }
++        } catch (SQLException e) {
++            String msg = "Unable to populate acl_api_permission for existing commands." + e.getMessage();
++            s_logger.error(msg);
++            throw new CloudRuntimeException(msg, e);
++        } finally {
++            try {
++                if (apiInsert != null) {
++                    apiInsert.close();
++                }
++            } catch (SQLException e) {
++            }
++        }
++        s_logger.debug("Completed populate acl_api_permission for existing commands.");
+     }
+ 
+     @Override
+     public File[] getCleanupScripts() {
+         String script = Script.findScript("", "db/schema-421to430-cleanup.sql");
+         if (script == null) {
+             throw new CloudRuntimeException("Unable to find db/schema-421to430-cleanup.sql");
+         }
+ 
+         return new File[] { new File(script) };
+     }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/plugins/pom.xml
----------------------------------------------------------------------
diff --cc plugins/pom.xml
index a218bde,ca41dff..adc850b
--- a/plugins/pom.xml
+++ b/plugins/pom.xml
@@@ -27,6 -27,6 +27,7 @@@
      <module>api/rate-limit</module>
      <module>api/discovery</module>
      <module>acl/static-role-based</module>
++    <module>acl/role-based-access-checkers</module>
      <module>affinity-group-processors/host-anti-affinity</module>
      <module>affinity-group-processors/explicit-dedication</module>
      <module>deployment-planners/user-concentrated-pod</module>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
----------------------------------------------------------------------
diff --cc server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
index 0000000,5e37908..9553340
mode 000000,100644..100644
--- a/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
+++ b/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
@@@ -1,0 -1,226 +1,228 @@@
+ <!--
+   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: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/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"
+                       >
+ 
+     <bean id="accountManagerImpl" class="com.cloud.user.AccountManagerImpl">
+         <property name="userAuthenticators"
+             value="#{userAuthenticatorsRegistry.registered}" />
+         <property name="userPasswordEncoders"
+             value="#{userPasswordEncodersRegistry.registered}" />
+         <property name="securityCheckers" value="#{securityCheckersRegistry.registered}" />
+     </bean>
+ 
+     <bean id="managementServerImpl" class="com.cloud.server.ManagementServerImpl">
+         <property name="lockMasterListener" ref="lockMasterListener" />
+         <property name="userAuthenticators"
+             value="#{userAuthenticatorsRegistry.registered}" />
+         <property name="userPasswordEncoders"
+             value="#{userPasswordEncodersRegistry.registered}" />
+         <property name="hostAllocators" value="#{hostAllocatorsRegistry.registered}" />
+         <property name="affinityGroupProcessors"
+             value="#{affinityProcessorsRegistry.registered}" />
+         <property name="planners"
+             value="#{deploymentPlannersRegistry.registered}" />
+         <property name="storagePoolAllocators"
+             value="#{storagePoolAllocatorsRegistry.registered}" />
+     </bean>
+ 
+     <bean id="storageManagerImpl" class="com.cloud.storage.StorageManagerImpl" />
+ 
+     <bean id="resourceManagerImpl" class="com.cloud.resource.ResourceManagerImpl">
+         <property name="discoverers"
+             value="#{resourceDiscoverersRegistry.registered}" />
+     </bean>
+ 
+     <bean id="highAvailabilityManagerExtImpl" class="com.cloud.ha.HighAvailabilityManagerExtImpl">
+         <property name="investigators" value="#{haInvestigatorsRegistry.registered}" />
+         <property name="fenceBuilders" value="#{haFenceBuildersRegistry.registered}" />
+     </bean>
+ 
+     <bean id="ipAddressManagerImpl" class="com.cloud.network.IpAddressManagerImpl">
+     </bean>
+ 
+     <bean id="networkModelImpl" class="com.cloud.network.NetworkModelImpl">
+         <property name="networkElements" value="#{networkElementsRegistry.registered}" />
+     </bean>
+ 
+     <bean id="configurationServerImpl" class="com.cloud.server.ConfigurationServerImpl" />
+ 
+     <bean id="userVmManagerImpl" class="com.cloud.vm.UserVmManagerImpl" />
+ 
+     <bean id="consoleProxyManagerImpl" class="com.cloud.consoleproxy.ConsoleProxyManagerImpl">
+         <property name="consoleProxyAllocators"
+             value="#{consoleProxyAllocatorsRegistry.registered}" />
+     </bean>
+ 
+     <bean id="securityGroupManagerImpl2" class="com.cloud.network.security.SecurityGroupManagerImpl2" />
+ 
+     <bean id="premiumSecondaryStorageManagerImpl"
+         class="com.cloud.secstorage.PremiumSecondaryStorageManagerImpl">
+         <property name="secondaryStorageVmAllocators"
+             value="#{secondaryStorageVmAllocatorsRegistry.registered}" />
+     </bean>
+ 
+     <bean id="ipv6AddressManagerImpl" class="com.cloud.network.Ipv6AddressManagerImpl" />
+ 
+ 
+     <bean id="alertManagerImpl" class="com.cloud.alert.AlertManagerImpl" />
+ 
+     <bean id="autoScaleManagerImpl" class="com.cloud.network.as.AutoScaleManagerImpl" />
+ 
+     <bean id="capacityManagerImpl" class="com.cloud.capacity.CapacityManagerImpl" />
+ 
+     <bean id="configurationManagerImpl" class="com.cloud.configuration.ConfigurationManagerImpl" >  
+         <property name="secChecker" value="#{securityCheckersRegistry.registered}" />
+     </bean>
+ 
+     <bean id="externalDeviceUsageManagerImpl" class="com.cloud.network.ExternalDeviceUsageManagerImpl" />
+ 
+     <bean id="externalNetworkDeviceManagerImpl" class="com.cloud.network.ExternalNetworkDeviceManagerImpl" />
+ 
+     <bean id="firewallManagerImpl" class="com.cloud.network.firewall.FirewallManagerImpl" >
+         <property name="firewallElements" value="#{firewallServiceProvidersRegistry.registered}" />
+         <property name="networkAclElements" value="#{networkACLServiceProvidersRegistry.registered}" />
+         <property name="pfElements" value="#{portForwardingServiceProvidersRegistry.registered}" />
+         <property name="staticNatElements" value="#{staticNatServiceProvidersRegistry.registered}" />
+     </bean>
+ 
+     <bean id="hypervisorGuruManagerImpl" class="com.cloud.hypervisor.HypervisorGuruManagerImpl" >
+         <property name="hvGuruList" value="#{hypervisorGurusRegistry.registered}" />
+     </bean>
+ 
+     <bean id="identityServiceImpl" class="com.cloud.uuididentity.IdentityServiceImpl" />
+ 
+     <bean id="keystoreManagerImpl" class="com.cloud.keystore.KeystoreManagerImpl" />
+ 
+     <bean id="loadBalancingRulesManagerImpl" class="com.cloud.network.lb.LoadBalancingRulesManagerImpl" >
+         <property name="lbProviders" value="#{loadBalancingServiceProvidersRegistry.registered}" />
+     </bean>
+ 
+     <bean id="networkACLManagerImpl" class="com.cloud.network.vpc.NetworkACLManagerImpl" >
+         <property name="networkAclElements" value="#{networkACLServiceProvidersRegistry.registered}" />
+     </bean>
+ 
+     <bean id="networkACLServiceImpl" class="com.cloud.network.vpc.NetworkACLServiceImpl" />
+ 
+     <bean id="networkServiceImpl" class="com.cloud.network.NetworkServiceImpl" >
+         <property name="networkGurus" value="#{networkGurusRegistry.registered}" />
+     </bean>
+ 
+     <bean id="networkUsageManagerImpl" class="com.cloud.network.NetworkUsageManagerImpl" />
+ 
+     <bean id="oCFS2ManagerImpl" class="com.cloud.storage.OCFS2ManagerImpl" />
+ 
+     <bean id="projectManagerImpl" class="com.cloud.projects.ProjectManagerImpl" />
+ 
+     <bean id="queryManagerImpl" class="com.cloud.api.query.QueryManagerImpl" />
+ 
+     <bean id="regionManagerImpl" class="org.apache.cloudstack.region.RegionManagerImpl" />
+ 
+     <bean id="regionServiceImpl" class="org.apache.cloudstack.region.RegionServiceImpl" />
+ 
+     <bean id="remoteAccessVpnManagerImpl" class="com.cloud.network.vpn.RemoteAccessVpnManagerImpl" />
+ 
+     <bean id="resourceLimitManagerImpl" class="com.cloud.resourcelimit.ResourceLimitManagerImpl" />
+ 
+     <bean id="rulesManagerImpl" class="com.cloud.network.rules.RulesManagerImpl" />
+ 
+     <bean id="site2SiteVpnManagerImpl" class="com.cloud.network.vpn.Site2SiteVpnManagerImpl" >
+         <property name="s2sProviders" value="#{site2SiteVpnServiceProvidersRegistry.registered}" />
+     </bean>
+ 
+     <bean id="snapshotManagerImpl" class="com.cloud.storage.snapshot.SnapshotManagerImpl" />
+ 
+     <bean id="snapshotSchedulerImpl" class="com.cloud.storage.snapshot.SnapshotSchedulerImpl" />
+     <bean id="storageNetworkManagerImpl" class="com.cloud.network.StorageNetworkManagerImpl" />
+     <bean id="taggedResourceManagerImpl" class="com.cloud.tags.TaggedResourceManagerImpl" />
+     <bean id="resourceMetaDataManagerImpl" class="com.cloud.metadata.ResourceMetaDataManagerImpl" />
+ 
+     <bean id="templateManagerImpl" class="com.cloud.template.TemplateManagerImpl">
+         <property name="templateAdapters" value="#{templateAdapterRegistry.registered}" />
+     </bean>
+ 
+     <bean id="uploadMonitorImpl" class="com.cloud.storage.upload.UploadMonitorImpl" />
+     <bean id="usageServiceImpl" class="com.cloud.usage.UsageServiceImpl" />
+     <bean id="virtualNetworkApplianceManagerImpl"
+         class="com.cloud.network.router.VirtualNetworkApplianceManagerImpl" />
+     <bean id="vpcManagerImpl" class="com.cloud.network.vpc.VpcManagerImpl" >
+         <property name="vpcElements" value="#{vpcProvidersRegistry.registered}"></property>
+     </bean>
+     <bean id="vpcVirtualNetworkApplianceManagerImpl"
+         class="com.cloud.network.router.VpcVirtualNetworkApplianceManagerImpl" />
+ 
+ 
+     <bean id="ApiAsyncJobDispatcher" class="com.cloud.api.ApiAsyncJobDispatcher">
+         <property name="name" value="ApiAsyncJobDispatcher" />
+     </bean>
+ 
+ 
+     <bean id="statsCollector" class="com.cloud.server.StatsCollector" />
+ 
+     <bean id="storagePoolAutomationImpl" class="com.cloud.storage.StoragePoolAutomationImpl" />
+ 
+     <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="volumeApiServiceImpl" class="com.cloud.storage.VolumeApiServiceImpl">
+         <property name="storagePoolAllocators"
+             value="#{storagePoolAllocatorsRegistry.registered}" />
+     </bean>
+     
+     <bean id="ApplicationLoadBalancerService" class="org.apache.cloudstack.network.lb.ApplicationLoadBalancerManagerImpl" />
+ 
+     <bean id="vMSnapshotManagerImpl" class="com.cloud.vm.snapshot.VMSnapshotManagerImpl" />
+ 
+     <bean id="AffinityGroupServiceImpl"
+         class="org.apache.cloudstack.affinity.AffinityGroupServiceImpl">
+         <property name="affinityGroupProcessors"
+             value="#{affinityProcessorsRegistry.registered}" />
+     </bean>
+ 
+     <bean id="DeploymentPlanningManager" class="com.cloud.deploy.DeploymentPlanningManagerImpl">
+         <property name="planners"
+             value="#{deploymentPlannersRegistry.registered}" />
+         <property name="affinityGroupProcessors"
+             value="#{affinityProcessorsRegistry.registered}" />
+         <property name="storagePoolAllocators"
+             value="#{storagePoolAllocatorsRegistry.registered}" />
+         <property name="hostAllocators" value="#{hostAllocatorsRegistry.registered}" />
+     </bean>
+ 
+     <bean id="AffinityGroupJoinDaoImpl" class="com.cloud.api.query.dao.AffinityGroupJoinDaoImpl" />
+ 
+     <bean id="PlannerHostReservationDaoImpl" class="com.cloud.deploy.dao.PlannerHostReservationDaoImpl" />
+ 
+     <bean id="GlobalLoadBalancingRulesServiceImpl"
+         class="org.apache.cloudstack.region.gslb.GlobalLoadBalancingRulesServiceImpl" />
++        
++    <bean id="AclServiceImpl" class="org.apache.cloudstack.acl.AclServiceImpl"/>         
+ 
+ </beans>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/api/ApiDBUtils.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/api/ApiDBUtils.java
index 96db8b7,d36604c..013aa57
--- a/server/src/com/cloud/api/ApiDBUtils.java
+++ b/server/src/com/cloud/api/ApiDBUtils.java
@@@ -407,11 -401,8 +410,10 @@@ public class ApiDBUtils 
      static AffinityGroupJoinDao _affinityGroupJoinDao;
      static GlobalLoadBalancingRulesService _gslbService;
      static NetworkACLDao _networkACLDao;
-     static ServiceOfferingDetailsDao _serviceOfferingDetailsDao;
      static AccountService _accountService;
 +    static AclRoleJoinDao _aclRoleJoinDao;
 +    static AclGroupJoinDao _aclGroupJoinDao;
- 
+     static ResourceMetaDataService _resourceDetailsService;
  
      @Inject
      private ManagementServer ms;
@@@ -524,12 -515,9 +526,13 @@@
      @Inject private NetworkACLDao networkACLDao;
      @Inject private ServiceOfferingDetailsDao serviceOfferingDetailsDao;
      @Inject private AccountService accountService;
 +    @Inject
-     private ConfigurationManager configMgr;
-     @Inject
 +    private AclRoleJoinDao aclRoleJoinDao;
 +    @Inject
 +    private AclGroupJoinDao aclGroupJoinDao;
+     @Inject private ConfigurationManager configMgr;
+     @Inject private DataCenterDetailsDao zoneDetailsDao;
+     @Inject private  ResourceMetaDataService resourceDetailsService;
  
      @PostConstruct
      void init() {
@@@ -639,10 -627,9 +642,10 @@@
          // Note: stats collector should already have been initialized by this time, otherwise a null instance is returned
          _statsCollector = StatsCollector.getInstance();
          _networkACLDao = networkACLDao;
-         _serviceOfferingDetailsDao = serviceOfferingDetailsDao;
          _accountService = accountService;
 +        _aclRoleJoinDao = aclRoleJoinDao;
 +        _aclGroupJoinDao = aclGroupJoinDao;
+         _resourceDetailsService = resourceDetailsService;
 -
      }
  
      // ///////////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/api/ApiResponseHelper.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/api/ApiResponseHelper.java
index be574a0,de4cc66..abb3015
--- a/server/src/com/cloud/api/ApiResponseHelper.java
+++ b/server/src/com/cloud/api/ApiResponseHelper.java
@@@ -2198,8 -2198,11 +2217,11 @@@ public class ApiResponseHelper implemen
              String broadcastUri = network.getBroadcastUri().toString();
              response.setBroadcastUri(broadcastUri);
              String vlan = "N/A";
-             if (BroadcastDomainType.Vlan.scheme().equals(BroadcastDomainType.getSchemeValue(network.getBroadcastUri()))) {
+             switch (BroadcastDomainType.getSchemeValue(network.getBroadcastUri())){
+                 case Vlan:
+                 case Vxlan:
 -                    vlan = BroadcastDomainType.getValue(network.getBroadcastUri());
 +                vlan = BroadcastDomainType.getValue(network.getBroadcastUri());
+                     break;
              }
              // return vlan information only to Root admin
              response.setVlan(vlan);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/api/ApiServer.java
----------------------------------------------------------------------


[35/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
CLOUDSTACK-4984: decrement MAX_VXLAN_VNI to be aligned with Linux kernel

Linux vxlan interface doesn't accept VNI:16777215 now.

Signed-off-by: Toshiaki Hatano <ha...@haeena.net>


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

Branch: refs/heads/rbac
Commit: 089026f6afb4de1a1f81b71d291a79d6e327a3e1
Parents: af4f78e
Author: ynojima <ma...@ynojima.net>
Authored: Mon Oct 28 21:58:22 2013 -0600
Committer: Toshiaki Hatano <ha...@haeena.net>
Committed: Thu Oct 31 00:13:54 2013 +0900

----------------------------------------------------------------------
 server/src/com/cloud/network/NetworkServiceImpl.java | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/089026f6/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 70f0d5a..7e971bd 100755
--- a/server/src/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/com/cloud/network/NetworkServiceImpl.java
@@ -196,7 +196,9 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
     private static final long MIN_GRE_KEY = 0L;
     private static final long MAX_GRE_KEY = 4294967295L; // 2^32 -1
     private static final long MIN_VXLAN_VNI = 0L;
-    private static final long MAX_VXLAN_VNI = 16777215L; // 2^24 -1
+    private static final long MAX_VXLAN_VNI = 16777214L; // 2^24 -2
+    // MAX_VXLAN_VNI should be 16777215L (2^24-1), but Linux vxlan interface doesn't accept VNI:2^24-1 now.
+    // It seems a bug.
 
     @Inject
     DataCenterDao _dcDao = null;
@@ -3781,12 +3783,12 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
         PhysicalNetworkVO pvo = _physicalNetworkDao.findById(physicalNetworkId);
         DataCenterVO dvo = _dcDao.findById(pvo.getDataCenterId());
         if (dvo.getNetworkType() == NetworkType.Basic) {
-
-            Provider provider = Network.Provider.getProvider("BaremetalDhcpProvider");
-            if (provider == null) {
+
+            Provider provider = Network.Provider.getProvider("BaremetalDhcpProvider");
+            if (provider == null) {
                 // baremetal is not loaded
                 return null;
-            }
+            }
             
             addProviderToPhysicalNetwork(physicalNetworkId, "BaremetalDhcpProvider", null, null);
             addProviderToPhysicalNetwork(physicalNetworkId, "BaremetalPxeProvider", null, null);


[11/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
Dashboard UI: update header bar colors


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

Branch: refs/heads/rbac
Commit: d833e41f5e767f58a489226a9008a4ed75a76290
Parents: cb11b0a
Author: Brian Federle <br...@citrix.com>
Authored: Tue Oct 29 11:39:48 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Tue Oct 29 11:39:48 2013 -0700

----------------------------------------------------------------------
 ui/css/cloudstack3.css | 119 +++++++++++++++++---------------------------
 1 file changed, 45 insertions(+), 74 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d833e41f/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index b853e6c..5941d1c 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -4045,12 +4045,11 @@ Dialogs*/
 .dashboard.admin .dashboard-container {
   background: #FFFFFF;
   border: 1px solid #C8C2C2;
-  /*+border-radius:6px;*/
-  -moz-border-radius: 6px;
-  -webkit-border-radius: 6px;
-  -khtml-border-radius: 6px;
-  border-radius: 6px;
-  border-radius: 6px 6px 6px 6px;
+  /*+border-radius:3px;*/
+  -moz-border-radius: 3px;
+  -webkit-border-radius: 3px;
+  -khtml-border-radius: 3px;
+  border-radius: 3px;
   padding: 0px 8px 18px 0px;
   margin: 0 0 11px;
 }
@@ -4059,69 +4058,45 @@ Dialogs*/
   width: 368px;
 }
 
-.dashboard.admin .dashboard-container.sub .button.view-all {
-  font-size: 10px;
-  float: right;
-  clear: none;
-  /*+text-shadow:0px 1px #333E49;*/
-  -moz-text-shadow: 0px 1px #333E49;
-  -webkit-text-shadow: 0px 1px #333E49;
-  -o-text-shadow: 0px 1px #333E49;
-  text-shadow: 0px 1px #333E49;
-  -moz-text-shadow: 0px 1px 0px #333E49;
-  -webkit-text-shadow: 0px 1px 0px #333E49;
-  -o-text-shadow: 0px 1px 0px #333E49;
-  padding: 3px 8px 3px 10px;
-  background: url(../images/bg-gradients.png) repeat-x 0px -411px;
-  border: 1px solid #383838;
-  /*+border-radius:6px;*/
-  -moz-border-radius: 6px;
-  -webkit-border-radius: 6px;
-  -khtml-border-radius: 6px;
-  border-radius: 6px;
-  border-radius: 6px 6px 6px 6px;
-  /*+box-shadow:0px 1px 1px #718CA5;*/
-  -moz-box-shadow: 0px 1px 1px #718CA5;
-  -webkit-box-shadow: 0px 1px 1px #718CA5;
-  -o-box-shadow: 0px 1px 1px #718CA5;
-  box-shadow: 0px 1px 1px #718CA5;
-  cursor: pointer;
-  font-weight: bold;
-}
-
-.button.fetch-latest {
-  font-size: 10px;
+.dashboard.admin .dashboard-container.sub .button.view-all,
+.dashboard.admin .dashboard-container .button.fetch-latest {
+  font-size: 13px;
   float: right;
   clear: none;
-  /*+text-shadow:0px 1px #333E49;*/
-  -moz-text-shadow: 0px 1px #333E49;
-  -webkit-text-shadow: 0px 1px #333E49;
-  -o-text-shadow: 0px 1px #333E49;
-  text-shadow: 0px 1px #333E49;
+  /*+text-shadow:none;*/
+  -moz-text-shadow: none;
+  -webkit-text-shadow: none;
+  -o-text-shadow: none;
+  text-shadow: none;
   -moz-text-shadow: 0px 1px 0px #333E49;
   -webkit-text-shadow: 0px 1px 0px #333E49;
   -o-text-shadow: 0px 1px 0px #333E49;
   padding: 3px 8px 3px 10px;
-  background: url(../images/bg-gradients.png) repeat-x 0px -411px;
+  background: #E7E7E7;
   border: 1px solid #383838;
-  /*+border-radius:6px;*/
-  -moz-border-radius: 6px;
-  -webkit-border-radius: 6px;
-  -khtml-border-radius: 6px;
-  border-radius: 6px;
-  border-radius: 6px 6px 6px 6px;
-  /*+box-shadow:0px 1px 1px #718CA5;*/
-  -moz-box-shadow: 0px 1px 1px #718CA5;
-  -webkit-box-shadow: 0px 1px 1px #718CA5;
-  -o-box-shadow: 0px 1px 1px #718CA5;
-  box-shadow: 0px 1px 1px #718CA5;
+  /*+border-radius:3px;*/
+  -moz-border-radius: 3px;
+  -webkit-border-radius: 3px;
+  -khtml-border-radius: 3px;
+  border-radius: 3px;
+  /*+box-shadow:0px 1px #CACACA;*/
+  -moz-box-shadow: 0px 1px #CACACA;
+  -webkit-box-shadow: 0px 1px #CACACA;
+  -o-box-shadow: 0px 1px #CACACA;
+  box-shadow: 0px 1px #CACACA;
   cursor: pointer;
-  font-weight: bold;
+  font-weight: 100;
+  color: #000000;
 }
 
-.button.fetch-latest:hover {
-  background-position: 0 -132px;
-  border-left: 1px solid #585D60;
+.dashboard.admin .dashboard-container.sub .button.view-all:hover,
+.dashboard.admin .dashboard-container .button.fetch-latest:hover {
+  background: #E8E8E8;
+  /*+box-shadow:inset 0px 0px 6px #636363;*/
+  -moz-box-shadow: inset 0px 0px 6px #636363;
+  -webkit-box-shadow: inset 0px 0px 6px #636363;
+  -o-box-shadow: inset 0px 0px 6px #636363;
+  box-shadow: inset 0px 0px 6px #636363;
 }
 
 .dashboard.admin .dashboard-container.sub .title {
@@ -4131,29 +4106,24 @@ Dialogs*/
 /**** Head*/
 .dashboard.admin .dashboard-container.head {
   width: 766px;
-  height: 304px;
+  height: 290px;
   margin: 9px 0 0;
   float: left;
 }
 
 .dashboard.admin .dashboard-container .top {
-  background: url(../images/bg-breadcrumb.png) repeat-x 0px -1px;
+  background: #E2E2E2;
   padding: 4px 4px 8px;
   width: 100%;
   float: left;
   margin: 0 0 9px;
   color: #FFFFFF;
-  /*+border-radius:7px 7px 0 0;*/
-  -moz-border-radius: 7px 7px 0 0;
-  -webkit-border-radius: 7px 7px 0 0;
-  -khtml-border-radius: 7px 7px 0 0;
-  border-radius: 7px 7px 0 0;
 }
 
 .dashboard.admin .dashboard-container .title {
   float: left;
-  font-size: 12px;
-  font-weight: bold;
+  font-size: 13px;
+  font-weight: 100;
   /*+text-shadow:0px 1px 1px #9A9A9A;*/
   -moz-text-shadow: 0px 1px 1px #9A9A9A;
   -webkit-text-shadow: 0px 1px 1px #9A9A9A;
@@ -4163,11 +4133,12 @@ Dialogs*/
 }
 
 .dashboard.admin .dashboard-container .title span {
-  /*+text-shadow:0px 1px 1px #050607;*/
-  -moz-text-shadow: 0px 1px 1px #050607;
-  -webkit-text-shadow: 0px 1px 1px #050607;
-  -o-text-shadow: 0px 1px 1px #050607;
-  text-shadow: 0px 1px 1px #050607;
+  color: #000000;
+  /*+text-shadow:none;*/
+  -moz-text-shadow: none;
+  -webkit-text-shadow: none;
+  -o-text-shadow: none;
+  text-shadow: none;
 }
 
 .dashboard.admin .dashboard-container.head .selects {
@@ -4195,7 +4166,7 @@ Dialogs*/
 /**** Charts / stats*/
 .dashboard.admin .zone-stats {
   width: 774px;
-  height: 297px;
+  height: 274px;
   overflow: auto;
   overflow-x: hidden;
   /*+placement:shift 0px -11px;*/


[17/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
CLOUDSTACK-4967
1) vxlan will use bridge scheme 'brvx-<vni>'. Multiple physical networks can host guest
traffic type with vxlan isolation, so long as they don't use the same VNI range.

2) Guest traffic labels can be physical interface if bridge by given name is not found.
Normally we take traffic label name, find the matching bridge, then resolve that to a
physical interface. Then we create guest bridges on that interface. Now we can just
specify the interface.


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

Branch: refs/heads/rbac
Commit: 4a9f05bda075d03c4a5a015e081c70b3d8b72267
Parents: be5a7b4
Author: Marcus Sorensen <ma...@betterservers.com>
Authored: Tue Oct 29 15:32:45 2013 -0600
Committer: Marcus Sorensen <ma...@betterservers.com>
Committed: Tue Oct 29 15:34:39 2013 -0600

----------------------------------------------------------------------
 .../kvm/resource/BridgeVifDriver.java           | 29 ++++++++++++++++----
 .../kvm/resource/LibvirtComputingResource.java  | 27 ++++++++++++++----
 scripts/vm/network/vnet/modifyvxlan.sh          | 28 +++++++++++--------
 .../com/cloud/network/NetworkServiceImpl.java   | 14 ++++++++++
 4 files changed, 76 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4a9f05bd/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java
index f945b74..84743ec 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java
@@ -110,10 +110,10 @@ public class BridgeVifDriver extends VifDriverBase {
                 || nic.getBroadcastType() == Networks.BroadcastDomainType.Vxlan) {
                 if(trafficLabel != null && !trafficLabel.isEmpty()) {
                     s_logger.debug("creating a vNet dev and bridge for guest traffic per traffic label " + trafficLabel);
-                    String brName = createVnetBr(vNetId, _pifs.get(trafficLabel), protocol);
+                    String brName = createVnetBr(vNetId, trafficLabel, protocol);
                     intf.defBridgeNet(brName, null, nic.getMac(), getGuestNicModel(guestOsType), networkRateKBps);
                 } else {
-                    String brName = createVnetBr(vNetId, _pifs.get("private"), protocol);
+                    String brName = createVnetBr(vNetId, "private", protocol);
                     intf.defBridgeNet(brName, null, nic.getMac(), getGuestNicModel(guestOsType), networkRateKBps);
                 }
             } else {
@@ -129,10 +129,10 @@ public class BridgeVifDriver extends VifDriverBase {
                     && !vNetId.equalsIgnoreCase("untagged")) {
                 if(trafficLabel != null && !trafficLabel.isEmpty()){
                     s_logger.debug("creating a vNet dev and bridge for public traffic per traffic label " + trafficLabel);
-                    String brName = createVnetBr(vNetId, _pifs.get(trafficLabel), protocol);
+                    String brName = createVnetBr(vNetId, trafficLabel, protocol);
                     intf.defBridgeNet(brName, null, nic.getMac(), getGuestNicModel(guestOsType), networkRateKBps);
                 } else {
-                    String brName = createVnetBr(vNetId, _pifs.get("public"), protocol);
+                    String brName = createVnetBr(vNetId, "public", protocol);
                     intf.defBridgeNet(brName, null, nic.getMac(), getGuestNicModel(guestOsType), networkRateKBps);
                 }
             } else {
@@ -157,9 +157,26 @@ public class BridgeVifDriver extends VifDriverBase {
         return "br" + pifName + "-"+ vnetId;
     }
 
-    private String createVnetBr(String vNetId, String nic, String protocol)
+    private String setVxnetBrName(String pifName, String vnetId) {
+        return "brvx-" + vnetId;
+    }
+
+    private String createVnetBr(String vNetId, String pifKey, String protocol)
             throws InternalErrorException {
-        String brName = setVnetBrName(nic, vNetId);
+        String nic = _pifs.get(pifKey);
+        if (nic == null) {
+            // if not found in bridge map, maybe traffic label refers to pif already?
+            File pif = new File("/sys/class/net/" + pifKey);
+            if (pif.isDirectory()){
+                nic = pifKey;
+            }
+        }
+        String brName = "";
+        if (protocol.equals(Networks.BroadcastDomainType.Vxlan.scheme())) {
+            brName = setVxnetBrName(nic, vNetId);
+        } else {
+            brName = setVnetBrName(nic, vNetId);
+        }
         createVnet(vNetId, nic, brName, protocol);
         return brName;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4a9f05bd/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 286d0f7..8d3a0e9 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
@@ -986,6 +986,18 @@ ServerResource {
             }
             _pifs.put(bridge, pif);
         }
+
+        // guest(private) creates bridges on a pif, if private bridge not found try pif direct
+        // This addresses the unnecessary requirement of someone to create an unused bridge just for traffic label
+        if (_pifs.get("private") == null) {
+            s_logger.debug("guest(private) traffic label '" + _guestBridgeName+ "' not found as bridge, looking for physical interface");
+            File dev = new File("/sys/class/net/" + _guestBridgeName);
+            if (dev.exists()) {
+                s_logger.debug("guest(private) traffic label '" + _guestBridgeName + "' found as a physical device");
+                _pifs.put("private", _guestBridgeName);
+            }
+        }
+
         s_logger.debug("done looking for pifs, no more bridges");
     }
 
@@ -1023,16 +1035,21 @@ ServerResource {
     }
 
     private String matchPifFileInDirectory(String bridgeName){
-        File f = new File("/sys/devices/virtual/net/" + bridgeName + "/brif");
+        File brif = new File("/sys/devices/virtual/net/" + bridgeName + "/brif");
 
-        if (! f.isDirectory()){
+        if (! brif.isDirectory()){
+            File pif = new File("/sys/class/net/" + bridgeName);
+            if (pif.isDirectory()) {
+                // if bridgeName already refers to a pif, return it as-is
+                return bridgeName;
+            }
             s_logger.debug("failing to get physical interface from bridge "
-                           + bridgeName + ", does " + f.getAbsolutePath()
+                           + bridgeName + ", does " + brif.getAbsolutePath()
                            + "exist?");
             return "";
         }
 
-        File[] interfaces = f.listFiles();
+        File[] interfaces = brif.listFiles();
 
         for (int i = 0; i < interfaces.length; i++) {
             String fname = interfaces[i].getName();
@@ -1046,7 +1063,7 @@ ServerResource {
 
         s_logger.debug("failing to get physical interface from bridge "
                         + bridgeName + ", did not find an eth*, bond*, vlan*, em*, or p*p* in "
-                        + f.getAbsolutePath());
+                        + brif.getAbsolutePath());
         return "";
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4a9f05bd/scripts/vm/network/vnet/modifyvxlan.sh
----------------------------------------------------------------------
diff --git a/scripts/vm/network/vnet/modifyvxlan.sh b/scripts/vm/network/vnet/modifyvxlan.sh
index a3ec71f..f7d08f1 100755
--- a/scripts/vm/network/vnet/modifyvxlan.sh
+++ b/scripts/vm/network/vnet/modifyvxlan.sh
@@ -39,18 +39,24 @@ addVxlan() {
 	
 	if [ "$brif " == " " ]
 	then
-	printf "Failed to lookup bridge interface which includes pif: $pif."
-		return 1
-	fi
-	
-	# confirm ip address of $brif
-	ip addr show $brif | grep -w inet
-	if [ $? -gt 0 ]
-	then
-		printf "Failed to find vxlan multicast source ip address on brif: $brif."
-		return 1
+		if [ -d "/sys/class/net/${pif}" ]
+		then
+			# if bridge is not found, but matches a pif, use it
+			brif=$pif
+		else
+			printf "Failed to lookup bridge interface which includes pif: $pif."
+			return 1
+		fi
+	else
+		# confirm ip address of $brif
+		ip addr show $brif | grep -w inet
+		if [ $? -gt 0 ]
+		then
+			printf "Failed to find vxlan multicast source ip address on brif: $brif."
+			return 1
+		fi
 	fi
-	
+
 	# mcast route
 	## TODO(VXLAN): Can we assume there're only one IP address which can be multicast src IP on the IF?
 	ip route get $mcastGrp | grep -w "dev $brif"

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4a9f05bd/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 cf419f3..70f0d5a 100755
--- a/server/src/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/com/cloud/network/NetworkServiceImpl.java
@@ -2694,6 +2694,20 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
             } else if (network.getIsolationMethods().contains("VXLAN")) {
                 minVnet = MIN_VXLAN_VNI;
                 maxVnet = MAX_VXLAN_VNI;
+                // fail if zone already contains VNI, need to be unique per zone.
+                // since adding a range adds each VNI to the database, need only check min/max
+                for(String vnet : VnetRange) {
+                    s_logger.debug("Looking to see if VNI " + vnet + " already exists on another network in zone " + network.getDataCenterId());
+                    List<DataCenterVnetVO> vnis = _datacneter_vnet.findVnet(network.getDataCenterId(), vnet);
+                    if (vnis != null && ! vnis.isEmpty()) {
+                        for (DataCenterVnetVO vni : vnis) {
+                            if (vni.getPhysicalNetworkId() != network.getId()) {
+                                s_logger.debug("VNI " + vnet + " already exists on another network in zone, please specify a unique range");
+                                throw new InvalidParameterValueException("VNI " + vnet + " already exists on another network in zone, please specify a unique range");
+                            }
+                        }
+                    }
+                }
             }
             String rangeMessage = " between " + minVnet + " and " + maxVnet;
             if (VnetRange.length == 1 && VnetRange[0].equals("")) {


[48/50] [abbrv] Merge branch 'master' into rbac.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/api/query/QueryManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/api/query/QueryManagerImpl.java
index 80a2227,51ee249..7ab2298
--- a/server/src/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/com/cloud/api/query/QueryManagerImpl.java
@@@ -44,7 -33,7 +43,8 @@@ import org.apache.cloudstack.affinity.A
  import org.apache.cloudstack.affinity.dao.AffinityGroupDomainMapDao;
  import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
  import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd;
+ import org.apache.cloudstack.api.ResourceDetail;
 +import org.apache.cloudstack.api.ResponseObject.ResponseView;
  import org.apache.cloudstack.api.command.admin.host.ListHostsCmd;
  import org.apache.cloudstack.api.command.admin.internallb.ListInternalLBVMsCmd;
  import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd;
@@@ -165,9 -151,10 +167,9 @@@ import com.cloud.projects.ProjectManage
  import com.cloud.projects.dao.ProjectAccountDao;
  import com.cloud.projects.dao.ProjectDao;
  import com.cloud.resource.ResourceManager;
 -import com.cloud.server.Criteria;
  import com.cloud.server.ResourceMetaDataService;
  import com.cloud.server.ResourceTag;
- import com.cloud.server.ResourceTag.TaggedResourceType;
+ import com.cloud.server.ResourceTag.ResourceObjectType;
  import com.cloud.server.TaggedResourceService;
  import com.cloud.service.ServiceOfferingVO;
  import com.cloud.service.dao.ServiceOfferingDao;
@@@ -341,19 -336,10 +351,24 @@@ public class QueryManagerImpl extends M
      AffinityGroupDomainMapDao _affinityGroupDomainMapDao;
  
      @Inject
 -    NetworkDetailsDao _networkDetailsDao;
 +    AclRoleJoinDao _aclRoleJoinDao;
 +
 +    @Inject
 +    AclRoleDao _aclRoleDao;
 +
 +    @Inject
 +    AclGroupJoinDao _aclGroupJoinDao;
 +
 +    @Inject
 +    AclGroupDao _aclGroupDao;
 +
 +    @Inject
 +    AclService _aclService;
++    
++    @Inject NetworkDetailsDao _networkDetailsDao;
+     
+     @Inject
+     ResourceTagDao _resourceTagDao;
  
      /*
       * (non-Javadoc)
@@@ -751,47 -730,82 +766,53 @@@
          Boolean isRecursive = domainIdRecursiveListProject.second();
          ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third();
  
 -        Criteria c = new Criteria("id", Boolean.TRUE, cmd.getStartIndex(), cmd.getPageSizeVal());
 -        // Criteria c = new Criteria(null, Boolean.FALSE, cmd.getStartIndex(),
 -        // cmd.getPageSizeVal()); //version without default sorting
 -        c.addCriteria(Criteria.KEYWORD, cmd.getKeyword());
 -        c.addCriteria(Criteria.ID, cmd.getId());
 -        c.addCriteria(Criteria.NAME, cmd.getName());
 -        c.addCriteria(Criteria.STATE, cmd.getState());
 -        c.addCriteria(Criteria.DATACENTERID, cmd.getZoneId());
 -        c.addCriteria(Criteria.GROUPID, cmd.getGroupId());
 -        c.addCriteria(Criteria.FOR_VIRTUAL_NETWORK, cmd.getForVirtualNetwork());
 -        c.addCriteria(Criteria.NETWORKID, cmd.getNetworkId());
 -        c.addCriteria(Criteria.TEMPLATE_ID, cmd.getTemplateId());
 -        c.addCriteria(Criteria.ISO_ID, cmd.getIsoId());
 -        c.addCriteria(Criteria.VPC_ID, cmd.getVpcId());
 -        c.addCriteria(Criteria.AFFINITY_GROUP_ID, cmd.getAffinityGroupId());
 +        Filter searchFilter = new Filter(UserVmJoinVO.class, "id", true, cmd.getStartIndex(),
 +                cmd.getPageSizeVal());
  
 -        if (domainId != null) {
 -            c.addCriteria(Criteria.DOMAINID, domainId);
 -        }
 +        // first search distinct vm id by using query criteria and pagination
 +        SearchBuilder<UserVmJoinVO> sb = _userVmJoinDao.createSearchBuilder();
 +        sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct ids
  
 -        if (HypervisorType.getType(hypervisor) != HypervisorType.None) {
 -            c.addCriteria(Criteria.HYPERVISOR, hypervisor);
 -        } else if (hypervisor != null) {
 -            throw new InvalidParameterValueException("Invalid HypervisorType " + hypervisor);
 -        }
 +        // build acl search builder condition
 +        _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts,
 +                listProjectResourcesCriteria, grantedIds, revokedIds);
  
 -        // ignore these search requests if it's not an admin
 +        Map<String, String> tags = cmd.getTags();
 +        String hypervisor = cmd.getHypervisor();
 +        Object name = cmd.getName();
 +        Object state = cmd.getState();
 +        Object zoneId = cmd.getZoneId();
 +        Object keyword = cmd.getKeyword();
 +        boolean isAdmin = false;
++        boolean isRootAdmin = false;
          if (_accountMgr.isAdmin(caller.getType())) {
 -            c.addCriteria(Criteria.PODID, cmd.getPodId());
 -            c.addCriteria(Criteria.HOSTID, cmd.getHostId());
 -            c.addCriteria(Criteria.STORAGE_ID, cmd.getStorageId());
 +            isAdmin = true;
          }
 -
 -        if (!permittedAccounts.isEmpty()) {
 -            c.addCriteria(Criteria.ACCOUNTID, permittedAccounts.toArray());
++        if (_accountMgr.isRootAdmin(caller.getId())) {
++            isRootAdmin = true;
+         }
 -        c.addCriteria(Criteria.ISADMIN, _accountMgr.isAdmin(caller.getType()));
 -
 -        return searchForUserVMsByCriteria(c, caller, domainId, isRecursive, permittedAccounts, listAll,
 -                listProjectResourcesCriteria, tags);
 -    }
 -
 -    private Pair<List<UserVmJoinVO>, Integer> searchForUserVMsByCriteria(Criteria c, Account caller, Long domainId,
 -            boolean isRecursive, List<Long> permittedAccounts, boolean listAll,
 -            ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags) {
 -        Filter searchFilter = new Filter(UserVmJoinVO.class, c.getOrderBy(), c.getAscending(), c.getOffset(),
 -                c.getLimit());
 -        boolean isRootAdmin = _accountMgr.isRootAdmin(caller.getType());
+ 
 -        // first search distinct vm id by using query criteria and pagination
 -        SearchBuilder<UserVmJoinVO> sb = _userVmJoinDao.createSearchBuilder();
 -        sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct
 -        // ids
 -        _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts,
 -                listProjectResourcesCriteria);
 +        Object groupId = cmd.getGroupId();
 +        Object networkId = cmd.getNetworkId();
 +        if (HypervisorType.getType(hypervisor) == HypervisorType.None && hypervisor != null) {
 +            // invalid hypervisor type input
 +            throw new InvalidParameterValueException("Invalid HypervisorType " + hypervisor);
 +        }
 +        Object templateId = cmd.getTemplateId();
 +        Object isoId = cmd.getIsoId();
 +        Object vpcId = cmd.getVpcId();
 +        Object affinityGroupId = cmd.getAffinityGroupId();
 +        Object pod = null;
 +        Object hostId = null;
 +        Object storageId = null;
 +        if (cmd instanceof ListVMsCmdByAdmin) {
 +            ListVMsCmdByAdmin adCmd = (ListVMsCmdByAdmin)cmd;
 +            pod = adCmd.getPodId();
 +            hostId = adCmd.getHostId();
 +            storageId = adCmd.getStorageId();
 +        }
  
 -        Object id = c.getCriteria(Criteria.ID);
 -        Object name = c.getCriteria(Criteria.NAME);
 -        Object state = c.getCriteria(Criteria.STATE);
 -        Object notState = c.getCriteria(Criteria.NOTSTATE);
 -        Object zoneId = c.getCriteria(Criteria.DATACENTERID);
 -        Object pod = c.getCriteria(Criteria.PODID);
 -        Object hostId = c.getCriteria(Criteria.HOSTID);
 -        Object hostName = c.getCriteria(Criteria.HOSTNAME);
 -        Object keyword = c.getCriteria(Criteria.KEYWORD);
 -        Object isAdmin = c.getCriteria(Criteria.ISADMIN);
 -        assert c.getCriteria(Criteria.IPADDRESS) == null : "We don't support search by ip address on VM any more.  If you see this assert, it means we have to find a different way to search by the nic table.";
 -        Object groupId = c.getCriteria(Criteria.GROUPID);
 -        Object networkId = c.getCriteria(Criteria.NETWORKID);
 -        Object hypervisor = c.getCriteria(Criteria.HYPERVISOR);
 -        Object storageId = c.getCriteria(Criteria.STORAGE_ID);
 -        Object templateId = c.getCriteria(Criteria.TEMPLATE_ID);
 -        Object isoId = c.getCriteria(Criteria.ISO_ID);
 -        Object vpcId = c.getCriteria(Criteria.VPC_ID);
 -        Object affinityGroupId = c.getCriteria(Criteria.AFFINITY_GROUP_ID);
+ 
          sb.and("displayName", sb.entity().getDisplayName(), SearchCriteria.Op.LIKE);
          sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
          sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE);
@@@ -826,7 -841,9 +847,10 @@@
              sb.and("affinityGroupId", sb.entity().getAffinityGroupId(), SearchCriteria.Op.EQ);
          }
  
 -        if(!isRootAdmin){
 +
++        if (!isRootAdmin) {
+             sb.and("displayVm", sb.entity().isDisplayVm(), SearchCriteria.Op.EQ);
+         }
  
          // populate the search criteria with the values passed in
          SearchCriteria<UserVmJoinVO> sc = sb.create();
@@@ -925,8 -945,14 +949,11 @@@
          if (storageId != null) {
              sc.setParameters("poolId", storageId);
          }
 -
 -        if (affinityGroupId != null) {
 -            sc.setParameters("affinityGroupId", affinityGroupId);
          }
  
+         if(!isRootAdmin){
+             sc.setParameters("displayVm", 1);
+         }
          // search vm details by ids
          Pair<List<UserVmJoinVO>, Integer> uniqueVmPair = _userVmJoinDao.searchAndCount(sc, searchFilter);
          Integer count = uniqueVmPair.second();
@@@ -2340,8 -2380,7 +2381,7 @@@
          isAscending = (isAscending == null ? true : isAscending);
          Filter searchFilter = new Filter(ServiceOfferingJoinVO.class, "sortKey", isAscending, cmd.getStartIndex(),
                  cmd.getPageSizeVal());
-         SearchCriteria<ServiceOfferingJoinVO> sc = _srvOfferingJoinDao.createSearchCriteria();
 -        
 +
          Account caller = CallContext.current().getCallingAccount();
          Object name = cmd.getServiceOfferingName();
          Object id = cmd.getId();
@@@ -2350,8 -2389,10 +2390,9 @@@
          Long domainId = cmd.getDomainId();
          Boolean isSystem = cmd.getIsSystem();
          String vmTypeStr = cmd.getSystemVmType();
 -        
 -        SearchCriteria<ServiceOfferingJoinVO> sc = _srvOfferingJoinDao.createSearchCriteria();
  
 -        if (caller.getType() != Account.ACCOUNT_TYPE_ADMIN && isSystem) {
++        SearchCriteria<ServiceOfferingJoinVO> sc = _srvOfferingJoinDao.createSearchCriteria();
 +        if (!_accountMgr.isRootAdmin(caller.getId()) && isSystem) {
              throw new InvalidParameterValueException("Only ROOT admins can access system's offering");
          }
  
@@@ -2376,11 -2438,20 +2438,20 @@@
              }
              // find all domain Id up to root domain for this account
              List<Long> domainIds = new ArrayList<Long>();
-             DomainVO domainRecord = _domainDao.findById(caller.getDomainId());
-             if (domainRecord == null) {
+             DomainVO domainRecord;
+             if (vmId != null) {
+                  UserVmVO vmInstance = _userVmDao.findById(vmId);
+                  domainRecord = _domainDao.findById(vmInstance.getDomainId());
+                  if ( domainRecord == null ){
+                      s_logger.error("Could not find the domainId for vmId:" + vmId);
+                      throw new CloudAuthenticationException("Could not find the domainId for vmId:" + vmId);
+                  }
+             } else {
+                  domainRecord = _domainDao.findById(caller.getDomainId());
+                  if ( domainRecord == null ){
 -                     s_logger.error("Could not find the domainId for account:" + caller.getAccountName());
 +                s_logger.error("Could not find the domainId for account:" + caller.getAccountName());
-                 throw new CloudAuthenticationException("Could not find the domainId for account:"
-                         + caller.getAccountName());
+                      throw new CloudAuthenticationException("Could not find the domainId for account:" + caller.getAccountName());
+                  }
              }
              domainIds.add(domainRecord.getId());
              while (domainRecord.getParent() != null) {
@@@ -2470,9 -2521,23 +2521,23 @@@
          String keyword = cmd.getKeyword();
          String name = cmd.getName();
          String networkType = cmd.getNetworkType();
+         Map<String, String> resourceTags = cmd.getTags();
+         
+         SearchBuilder<DataCenterJoinVO> sb = _dcJoinDao.createSearchBuilder();
+         if (resourceTags != null && !resourceTags.isEmpty()) {
+             SearchBuilder<ResourceTagVO> tagSearch = _resourceTagDao.createSearchBuilder();
+             for (int count=0; count < resourceTags.size(); count++) {
+                 tagSearch.or().op("key" + String.valueOf(count), tagSearch.entity().getKey(), SearchCriteria.Op.EQ);
+                 tagSearch.and("value" + String.valueOf(count), tagSearch.entity().getValue(), SearchCriteria.Op.EQ);
+                 tagSearch.cp();
+             }
+             tagSearch.and("resourceType", tagSearch.entity().getResourceType(), SearchCriteria.Op.EQ);
+             sb.groupBy(sb.entity().getId());
+             sb.join("tagSearch", tagSearch, sb.entity().getId(), tagSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER);
+         }
 -        
 +
          Filter searchFilter = new Filter(DataCenterJoinVO.class, null, false, cmd.getStartIndex(), cmd.getPageSizeVal());
-         SearchCriteria<DataCenterJoinVO> sc = _dcJoinDao.createSearchCriteria();
+         SearchCriteria<DataCenterJoinVO> sc = sb.create();
  
          if (networkType != null) {
              sc.addAnd("networkType", SearchCriteria.Op.EQ, networkType);
@@@ -2621,7 -2686,17 +2686,17 @@@
                  }
              }
          }
 -        
 +
+         if (resourceTags != null && !resourceTags.isEmpty()) {
+             int count = 0;
+             sc.setJoinParameters("tagSearch", "resourceType", ResourceObjectType.Zone.toString());
+             for (String key : resourceTags.keySet()) {
+                 sc.setJoinParameters("tagSearch", "key" + String.valueOf(count), key);
+                 sc.setJoinParameters("tagSearch", "value" + String.valueOf(count), resourceTags.get(key));
+                 count++;
+             }
+         }
+ 
          return _dcJoinDao.searchAndCount(sc, searchFilter);
      }
  
@@@ -2808,7 -2883,8 +2883,8 @@@
                      }
  
                      // get all child domain ID's
-                     if (_accountMgr.isAdmin(account.getType())) {
 -                    if (_accountMgr.isAdmin(account.getType()) 
++                    if (_accountMgr.isAdmin(account.getType())
+                             || (templateFilter == TemplateFilter.featured || templateFilter == TemplateFilter.community)) {
                          List<DomainVO> allChildDomains = _domainDao.findAllChildren(accountDomain.getPath(),
                                  accountDomain.getId());
                          for (DomainVO childDomain : allChildDomains) {
@@@ -3185,272 -3261,48 +3261,257 @@@
      }
  
      @Override
-     public List<ResourceDetailResponse> listResource(ListResourceDetailsCmd cmd) {
- 
+     public List<ResourceDetailResponse> listResourceDetails(ListResourceDetailsCmd cmd) {
          String key = cmd.getKey();
-         ResourceTag.TaggedResourceType resourceType = cmd.getResourceType();
-         String resourceId = cmd.getResourceId();
-         Long id = _taggedResourceMgr.getResourceId(resourceId, resourceType);
- 
-         if (resourceType == ResourceTag.TaggedResourceType.Volume) {
+         Boolean forDisplay = cmd.forDisplay();
+         ResourceTag.ResourceObjectType resourceType = cmd.getResourceType();
+         String resourceIdStr = cmd.getResourceId();
+         long resourceId = _taggedResourceMgr.getResourceId(resourceIdStr, resourceType);
 -        List<? extends ResourceDetail> detailList = new ArrayList<ResourceDetail>();        
++        List<? extends ResourceDetail> detailList = new ArrayList<ResourceDetail>();
+         ResourceDetail requestedDetail = null;
  
-             List<VolumeDetailVO> volumeDetailList;
 -        if (key == null) {
 +            if (key == null) {
-                 volumeDetailList = _volumeDetailDao.findDetails(id);
+             detailList = _resourceMetaDataMgr.getDetailsList(resourceId, resourceType, forDisplay);
 -        } else {
 +            } else {
-                 VolumeDetailVO volumeDetail = _volumeDetailDao.findDetail(id, key);
-                 volumeDetailList = new LinkedList<VolumeDetailVO>();
-                 volumeDetailList.add(volumeDetail);
+             requestedDetail = _resourceMetaDataMgr.getDetail(resourceId, resourceType, key);
+             if (forDisplay != null && requestedDetail.isDisplay() != forDisplay) {
+                 requestedDetail = null;
              }
- 
-             List<ResourceDetailResponse> volumeDetailResponseList = new ArrayList<ResourceDetailResponse>();
-             for (VolumeDetailVO volumeDetail : volumeDetailList) {
-                 ResourceDetailResponse volumeDetailResponse = new ResourceDetailResponse();
-                 volumeDetailResponse.setResourceId(id.toString());
-                 volumeDetailResponse.setName(volumeDetail.getName());
-                 volumeDetailResponse.setValue(volumeDetail.getValue());
-                 volumeDetailResponse.setResourceType(ResourceTag.TaggedResourceType.Volume.toString());
-                 volumeDetailResponse.setObjectName("volumedetail");
-                 volumeDetailResponseList.add(volumeDetailResponse);
 -        }
 -        
 +            }
 +
-             return volumeDetailResponseList;
- 
+         List<ResourceDetailResponse> responseList = new ArrayList<ResourceDetailResponse>();
+         if (requestedDetail != null) {
+             ResourceDetailResponse detailResponse = createResourceDetailsResponse(requestedDetail, resourceType);
+             responseList.add(detailResponse);
          } else {
- 
-             List<NicDetailVO> nicDetailList;
-             if (key == null) {
-                 nicDetailList = _nicDetailDao.findDetails(id);
-             } else {
-                 NicDetailVO nicDetail = _nicDetailDao.findDetail(id, key);
-                 nicDetailList = new LinkedList<NicDetailVO>();
-                 nicDetailList.add(nicDetail);
+             for (ResourceDetail detail : detailList) {
+                 ResourceDetailResponse detailResponse = createResourceDetailsResponse(detail, resourceType);
+                 responseList.add(detailResponse);
              }
- 
-             List<ResourceDetailResponse> nicDetailResponseList = new ArrayList<ResourceDetailResponse>();
-             for (NicDetailVO nicDetail : nicDetailList) {
-                 ResourceDetailResponse nicDetailResponse = new ResourceDetailResponse();
-                 // String uuid = ApiDBUtils.findN
-                 nicDetailResponse.setName(nicDetail.getName());
-                 nicDetailResponse.setValue(nicDetail.getValue());
-                 nicDetailResponse.setResourceType(ResourceTag.TaggedResourceType.Nic.toString());
-                 nicDetailResponse.setObjectName("nicdetail");
-                 nicDetailResponseList.add(nicDetailResponse);
 -        }
 -        
 +            }
 +
-             return nicDetailResponseList;
- 
+         return responseList;
 -    }
 +        }
  
+     
+     protected ResourceDetailResponse createResourceDetailsResponse(ResourceDetail requestedDetail, ResourceTag.ResourceObjectType resourceType) {
+         ResourceDetailResponse resourceDetailResponse = new ResourceDetailResponse();
+         resourceDetailResponse.setResourceId(String.valueOf(requestedDetail.getResourceId()));
+         resourceDetailResponse.setName(requestedDetail.getName());
+         resourceDetailResponse.setValue(requestedDetail.getValue());
+         resourceDetailResponse.setForDisplay(requestedDetail.isDisplay());
+         resourceDetailResponse.setResourceType(resourceType.toString().toString());
+         resourceDetailResponse.setObjectName("resourcedetail");
+         return resourceDetailResponse;
      }
  
 +    @Override
 +    public ListResponse<AclRoleResponse> listAclRoles(Long aclRoleId, String aclRoleName, Long domainId, Long startIndex, Long pageSize) {
 +        Pair<List<AclRoleJoinVO>, Integer> result = listAclRolesInternal(aclRoleId, aclRoleName, domainId, true, true, startIndex, pageSize);
 +        ListResponse<AclRoleResponse> response = new ListResponse<AclRoleResponse>();
 +
 +        List<AclRoleResponse> roleResponses = ViewResponseHelper.createAclRoleResponses(result.first());
 +        response.setResponses(roleResponses, result.second());
 +        return response;
 +    }
 +
 +    private Pair<List<AclRoleJoinVO>, Integer> listAclRolesInternal(Long aclRoleId, String aclRoleName, Long domainId, boolean isRecursive, boolean listAll, Long startIndex,
 +            Long pageSize) {
 +
 +        Account caller = CallContext.current().getCallingAccount();
 +        Boolean listForDomain = false;
 +
 +        if (aclRoleId != null) {
 +            AclRole role = _aclRoleDao.findById(aclRoleId);
 +            if (role == null) {
 +                throw new InvalidParameterValueException("Unable to find acl role by id " + aclRoleId);
 +            }
 +
 +            _accountMgr.checkAccess(caller, null, true, role);
 +        }
 +
 +        if (domainId != null) {
 +            Domain domain = _domainDao.findById(domainId);
 +            if (domain == null) {
 +                throw new InvalidParameterValueException("Domain id=" + domainId + " doesn't exist");
 +            }
 +
 +            _accountMgr.checkAccess(caller, domain);
 +
 +            if (aclRoleName != null) {
 +                AclRole role = _aclRoleDao.findByName(domainId, aclRoleName);
 +                if (role == null) {
 +                    throw new InvalidParameterValueException("Unable to find acl role by name " + aclRoleName
 +                            + " in domain " + domainId);
 +                }
 +                _accountMgr.checkAccess(caller, null, true, role);
 +            }
 +        }
 +
 +        if (aclRoleId == null) {
 +            if (_accountMgr.isAdmin(caller.getType()) && listAll && domainId == null) {
 +                listForDomain = true;
 +                isRecursive = true;
 +                if (domainId == null) {
 +                    domainId = caller.getDomainId();
 +                }
 +            } else if (_accountMgr.isAdmin(caller.getType()) && domainId != null) {
 +                listForDomain = true;
 +            }
 +        }
 +
 +        Filter searchFilter = new Filter(AclRoleJoinVO.class, "id", true, startIndex, pageSize);
 +
 +
 +        SearchBuilder<AclRoleJoinVO> sb = _aclRoleJoinDao.createSearchBuilder();
 +        sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct ids
 +
 +        sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
 +        sb.and("domainId", sb.entity().getDomainId(), SearchCriteria.Op.EQ);
 +        sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
 +
 +        if (listForDomain && isRecursive) {
 +            sb.and("path", sb.entity().getDomainPath(), SearchCriteria.Op.LIKE);
 +        }
 +
 +        SearchCriteria<AclRoleJoinVO> sc = sb.create();
 +
 +        if (aclRoleName != null) {
 +            sc.setParameters("name", aclRoleName);
 +        }
 +
 +        if (aclRoleId != null) {
 +            sc.setParameters("id", aclRoleId);
 +        }
 +
 +        if (listForDomain) {
 +            if (isRecursive) {
 +                Domain domain = _domainDao.findById(domainId);
 +                sc.setParameters("path", domain.getPath() + "%");
 +            } else {
 +                sc.setParameters("domainId", domainId);
 +            }
 +        }
 +
 +
 +        // search role details by ids
 +        Pair<List<AclRoleJoinVO>, Integer> uniqueRolePair = _aclRoleJoinDao.searchAndCount(sc, searchFilter);
 +        Integer count = uniqueRolePair.second();
 +        if (count.intValue() == 0) {
 +            // empty result
 +            return uniqueRolePair;
 +        }
 +        List<AclRoleJoinVO> uniqueRoles = uniqueRolePair.first();
 +        Long[] vrIds = new Long[uniqueRoles.size()];
 +        int i = 0;
 +        for (AclRoleJoinVO v : uniqueRoles) {
 +            vrIds[i++] = v.getId();
 +        }
 +        List<AclRoleJoinVO> vrs = _aclRoleJoinDao.searchByIds(vrIds);
 +        return new Pair<List<AclRoleJoinVO>, Integer>(vrs, count);
 +    }
 +
 +    @Override
 +    public ListResponse<AclGroupResponse> listAclGroups(Long aclGroupId, String aclGroupName, Long domainId, Long startIndex, Long pageSize) {
 +        Pair<List<AclGroupJoinVO>, Integer> result = listAclGroupsInternal(aclGroupId, aclGroupName, domainId, true, true, startIndex, pageSize);
 +        ListResponse<AclGroupResponse> response = new ListResponse<AclGroupResponse>();
 +
 +        List<AclGroupResponse> groupResponses = ViewResponseHelper.createAclGroupResponses(result.first());
 +        response.setResponses(groupResponses, result.second());
 +        return response;
 +    }
 +
 +    private Pair<List<AclGroupJoinVO>, Integer> listAclGroupsInternal(Long aclGroupId, String aclGroupName, Long domainId, boolean isRecursive, boolean listAll, Long startIndex,
 +            Long pageSize) {
 +
 +        Account caller = CallContext.current().getCallingAccount();
 +        Boolean listForDomain = false;
 +
 +        if (aclGroupId != null) {
 +            AclGroup group = _aclGroupDao.findById(aclGroupId);
 +            if (group == null) {
 +                throw new InvalidParameterValueException("Unable to find acl group by id " + aclGroupId);
 +            }
 +
 +            _accountMgr.checkAccess(caller, null, true, group);
 +        }
 +
 +        if (domainId != null) {
 +            Domain domain = _domainDao.findById(domainId);
 +            if (domain == null) {
 +                throw new InvalidParameterValueException("Domain id=" + domainId + " doesn't exist");
 +            }
 +
 +            _accountMgr.checkAccess(caller, domain);
 +
 +            if (aclGroupName != null) {
 +                AclGroup group = _aclGroupDao.findByName(domainId, aclGroupName);
 +                if (group == null) {
 +                    throw new InvalidParameterValueException("Unable to find acl group by name " + aclGroupName
 +                            + " in domain " + domainId);
 +                }
 +                _accountMgr.checkAccess(caller, null, true, group);
 +            }
 +        }
 +
 +        if (aclGroupId == null) {
 +            if (_accountMgr.isAdmin(caller.getType()) && listAll && domainId == null) {
 +                listForDomain = true;
 +                isRecursive = true;
 +                if (domainId == null) {
 +                    domainId = caller.getDomainId();
 +                }
 +            } else if (_accountMgr.isAdmin(caller.getType()) && domainId != null) {
 +                listForDomain = true;
 +            }
 +        }
 +
 +        Filter searchFilter = new Filter(AclGroupJoinVO.class, "id", true, startIndex, pageSize);
 +
 +        SearchBuilder<AclGroupJoinVO> sb = _aclGroupJoinDao.createSearchBuilder();
 +        sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct ids
 +
 +        sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
 +        sb.and("domainId", sb.entity().getDomainId(), SearchCriteria.Op.EQ);
 +        sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
 +
 +        if (listForDomain && isRecursive) {
 +            sb.and("path", sb.entity().getDomainPath(), SearchCriteria.Op.LIKE);
 +        }
 +
 +        SearchCriteria<AclGroupJoinVO> sc = sb.create();
 +
 +        if (aclGroupName != null) {
 +            sc.setParameters("name", aclGroupName);
 +        }
 +
 +        if (aclGroupId != null) {
 +            sc.setParameters("id", aclGroupId);
 +        }
 +
 +        if (listForDomain) {
 +            if (isRecursive) {
 +                Domain domain = _domainDao.findById(domainId);
 +                sc.setParameters("path", domain.getPath() + "%");
 +            } else {
 +                sc.setParameters("domainId", domainId);
 +            }
 +        }
 +
 +        // search group details by ids
 +        Pair<List<AclGroupJoinVO>, Integer> uniqueGroupPair = _aclGroupJoinDao.searchAndCount(sc, searchFilter);
 +        Integer count = uniqueGroupPair.second();
 +        if (count.intValue() == 0) {
 +            // empty result
 +            return uniqueGroupPair;
 +        }
 +        List<AclGroupJoinVO> uniqueGroups = uniqueGroupPair.first();
 +        Long[] vrIds = new Long[uniqueGroups.size()];
 +        int i = 0;
 +        for (AclGroupJoinVO v : uniqueGroups) {
 +            vrIds[i++] = v.getId();
 +        }
 +        List<AclGroupJoinVO> vrs = _aclGroupJoinDao.searchByIds(vrIds);
 +        return new Pair<List<AclGroupJoinVO>, Integer>(vrs, count);
 +    }
  }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/api/query/dao/DataCenterJoinDaoImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/api/query/dao/DataCenterJoinDaoImpl.java
index 63bf563,c06e294..b28ace0
--- a/server/src/com/cloud/api/query/dao/DataCenterJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/DataCenterJoinDaoImpl.java
@@@ -19,20 -19,20 +19,22 @@@ package com.cloud.api.query.dao
  import java.util.List;
  
  import javax.ejb.Local;
 +import javax.inject.Inject;
  
+ import org.apache.cloudstack.api.response.ResourceTagResponse;
+ import org.apache.cloudstack.api.response.ZoneResponse;
+ import org.apache.cloudstack.context.CallContext;
  import org.apache.log4j.Logger;
+ import org.springframework.stereotype.Component;
  
  import com.cloud.api.ApiDBUtils;
  import com.cloud.api.ApiResponseHelper;
  import com.cloud.api.query.vo.DataCenterJoinVO;
+ import com.cloud.api.query.vo.ResourceTagJoinVO;
  import com.cloud.dc.DataCenter;
- 
- import org.apache.cloudstack.api.response.ZoneResponse;
- import org.apache.cloudstack.context.CallContext;
- 
+ import com.cloud.server.ResourceTag.ResourceObjectType;
  import com.cloud.user.Account;
 +import com.cloud.user.AccountManager;
  import com.cloud.utils.db.GenericDaoBase;
  import com.cloud.utils.db.SearchBuilder;
  import com.cloud.utils.db.SearchCriteria;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
index 01ceb10,799690e..0094638
--- a/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
@@@ -263,7 -263,15 +266,15 @@@ public class UserVmJoinDaoImpl extends 
                  userVmResponse.addAffinityGroup(resp);
              }
          }
 -        
 +
+         // set resource details map
+         // only hypervisortoolsversion can be returned to the end user       }
+         if (userVm.getDetailName() != null && userVm.getDetailName().equalsIgnoreCase(VmDetailConstants.HYPERVISOR_TOOLS_VERSION)){
+             Map<String, String> resourceDetails = new HashMap<String, String>();
+             resourceDetails.put(userVm.getDetailName(), userVm.getDetailValue());
+             userVmResponse.setDetails(resourceDetails);
+         }
+ 
          userVmResponse.setObjectName(objectName);
          if (userVm.isDynamicallyScalable() == null) {
              userVmResponse.setDynamicallyScalable(false);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/api/query/vo/AclGroupJoinVO.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/api/query/vo/AclGroupJoinVO.java
index 0a32f4d,0000000..5d67e34
mode 100644,000000..100644
--- a/server/src/com/cloud/api/query/vo/AclGroupJoinVO.java
+++ b/server/src/com/cloud/api/query/vo/AclGroupJoinVO.java
@@@ -1,190 -1,0 +1,186 @@@
 +// 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.query.vo;
 +
 +import java.util.Date;
 +
 +import javax.persistence.Column;
 +import javax.persistence.Entity;
 +import javax.persistence.EnumType;
 +import javax.persistence.Enumerated;
 +import javax.persistence.GeneratedValue;
 +import javax.persistence.GenerationType;
 +import javax.persistence.Id;
 +import javax.persistence.Table;
 +
 +import org.apache.cloudstack.acl.SecurityChecker.AccessType;
 +
 +import com.cloud.utils.db.GenericDao;
 +
 +@Entity
 +@Table(name = ("acl_group_view"))
 +public class AclGroupJoinVO extends BaseViewVO {
 +    @Id
 +    @GeneratedValue(strategy = GenerationType.IDENTITY)
 +    @Column(name = "id")
 +    private long id;
 +
 +    @Column(name = "name")
 +    private String name;
 +
 +    @Column(name = "description")
 +    private String description;
 +
 +    @Column(name = "uuid")
 +    private String uuid;
 +
 +    @Column(name = "domain_id")
 +    private long domainId;
 +
 +    @Column(name = "domain_uuid")
 +    private String domainUuid;
 +
 +    @Column(name = "domain_name")
 +    private String domainName;
 +
 +    @Column(name = "domain_path")
 +    private String domainPath;
 +
 +    @Column(name = GenericDao.REMOVED_COLUMN)
 +    private Date removed;
 +
 +    @Column(name = GenericDao.CREATED_COLUMN)
 +    private Date created;
 +
 +    @Column(name = "role_id")
 +    private long roleId;
 +
 +    @Column(name = "role_uuid")
 +    private String roleUuid;
 +
 +    @Column(name = "role_name")
 +    private String roleName;
 +
 +    @Column(name = "account_id")
 +    private long accountId;
 +
 +    @Column(name = "account_uuid")
 +    private String accountUuid;
 +
 +    @Column(name = "account_name")
 +    private String accountName;
 +
 +    @Column(name = "entity_type")
 +    private String entityType;
 +
 +    @Column(name = "entity_id")
 +    private long entityId;
 +
 +    @Column(name = "entity_uuid")
 +    private String entityUuid;
 +
 +    @Column(name = "access_type")
 +    @Enumerated(value = EnumType.STRING)
 +    AccessType accessType;
 +
 +    public AclGroupJoinVO() {
 +    }
 +
 +    @Override
 +    public long getId() {
 +        return id;
 +    }
 +
-     @Override
-     public void setId(long id) {
-         this.id = id;
-     }
 +
 +    public String getName() {
 +        return name;
 +    }
 +
 +    public String getDescription() {
 +        return description;
 +    }
 +
 +    public String getUuid() {
 +        return uuid;
 +    }
 +
 +    public long getDomainId() {
 +        return domainId;
 +    }
 +
 +    public String getDomainUuid() {
 +        return domainUuid;
 +    }
 +
 +    public String getDomainName() {
 +        return domainName;
 +    }
 +
 +    public String getDomainPath() {
 +        return domainPath;
 +    }
 +
 +
 +    public Date getRemoved() {
 +        return removed;
 +    }
 +
 +    public Date getCreated() {
 +        return created;
 +    }
 +
 +    public long getRoleId() {
 +        return roleId;
 +    }
 +
 +    public String getRoleUuid() {
 +        return roleUuid;
 +    }
 +
 +    public String getRoleName() {
 +        return roleName;
 +    }
 +
 +    public long getAccountId() {
 +        return accountId;
 +    }
 +
 +    public String getAccountUuid() {
 +        return accountUuid;
 +    }
 +
 +    public String getAccountName() {
 +        return accountName;
 +    }
 +
 +    public String getEntityType() {
 +        return entityType;
 +    }
 +
 +    public long getEntityId() {
 +        return entityId;
 +    }
 +
 +    public String getEntityUuid() {
 +        return entityUuid;
 +    }
 +
 +    public AccessType getAccessType() {
 +        return accessType;
 +    }
 +
 +}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/api/query/vo/AclRoleJoinVO.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/api/query/vo/AclRoleJoinVO.java
index 97809ef,0000000..a18f034
mode 100644,000000..100644
--- a/server/src/com/cloud/api/query/vo/AclRoleJoinVO.java
+++ b/server/src/com/cloud/api/query/vo/AclRoleJoinVO.java
@@@ -1,121 -1,0 +1,117 @@@
 +// 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.query.vo;
 +
 +import java.util.Date;
 +
 +import javax.persistence.Column;
 +import javax.persistence.Entity;
 +import javax.persistence.GeneratedValue;
 +import javax.persistence.GenerationType;
 +import javax.persistence.Id;
 +import javax.persistence.Table;
 +
 +import com.cloud.utils.db.GenericDao;
 +
 +@Entity
 +@Table(name = ("acl_role_view"))
 +public class AclRoleJoinVO extends BaseViewVO {
 +    @Id
 +    @GeneratedValue(strategy = GenerationType.IDENTITY)
 +    @Column(name = "id")
 +    private long id;
 +
 +    @Column(name = "name")
 +    private String name;
 +
 +    @Column(name = "description")
 +    private String description;
 +
 +    @Column(name = "uuid")
 +    private String uuid;
 +
 +    @Column(name = "domain_id")
 +    private long domainId;
 +
 +    @Column(name = "domain_uuid")
 +    private String domainUuid;
 +
 +    @Column(name = "domain_name")
 +    private String domainName;
 +
 +    @Column(name = "domain_path")
 +    private String domainPath;
 +
 +    @Column(name = "api_name")
 +    private String apiName;
 +
 +    @Column(name = GenericDao.REMOVED_COLUMN)
 +    private Date removed;
 +
 +    @Column(name = GenericDao.CREATED_COLUMN)
 +    private Date created;
 +
 +    public AclRoleJoinVO() {
 +    }
 +
 +    @Override
 +    public long getId() {
 +        return id;
 +    }
 +
-     @Override
-     public void setId(long id) {
-         this.id = id;
-     }
 +
 +    public String getName() {
 +        return name;
 +    }
 +
 +    public String getDescription() {
 +        return description;
 +    }
 +
 +    public String getUuid() {
 +        return uuid;
 +    }
 +
 +    public long getDomainId() {
 +        return domainId;
 +    }
 +
 +    public String getDomainUuid() {
 +        return domainUuid;
 +    }
 +
 +    public String getDomainName() {
 +        return domainName;
 +    }
 +
 +    public String getDomainPath() {
 +        return domainPath;
 +    }
 +
 +    public String getApiName() {
 +        return apiName;
 +    }
 +
 +    public Date getRemoved() {
 +        return removed;
 +    }
 +
 +    public Date getCreated() {
 +        return created;
 +    }
 +
 +}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/api/response/ApiResponseSerializer.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/api/response/ApiResponseSerializer.java
index 37f350f,fb32e7d..9631850
--- a/server/src/com/cloud/api/response/ApiResponseSerializer.java
+++ b/server/src/com/cloud/api/response/ApiResponseSerializer.java
@@@ -16,19 -16,12 +16,18 @@@
  // under the License.
  package com.cloud.api.response;
  
 -import com.cloud.api.ApiDBUtils;
 -import com.cloud.api.ApiResponseGsonHelper;
 -import com.cloud.api.ApiServer;
 -import com.cloud.utils.encoding.URLEncoder;
 -import com.cloud.utils.exception.CloudRuntimeException;
 -import com.cloud.utils.exception.ExceptionProxyObject;
 +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.log4j.Logger;
 +
  import com.google.gson.Gson;
  import com.google.gson.annotations.SerializedName;
  


[09/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
Fix region selector popup


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

Branch: refs/heads/rbac
Commit: 896f68b927bb04057be79ab49a601faa3e991159
Parents: 8a6694b
Author: Brian Federle <br...@citrix.com>
Authored: Tue Oct 29 11:24:42 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Tue Oct 29 11:24:58 2013 -0700

----------------------------------------------------------------------
 ui/css/cloudstack3.css | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/896f68b9/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index a0cd3f8..16333e9 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -2203,7 +2203,6 @@ div.detail-group.actions td {
   width: 100%;
   height: 117px;
   background: url(../images/overlay-pattern.png) repeat 0, #1B5070 url(../images/header-gradient.png) no-repeat center;
-  z-index: 100;
   background-size: auto, cover;
   position: relative;
 }
@@ -11582,12 +11581,12 @@ div.ui-dialog div.autoscaler div.field-group div.form-container form div.form-it
   width: 318px;
   background: url(../images/bg-notifications.png) center;
   height: 372px;
-  /*+placement:shift 321px 49px;*/
+  /*+placement:shift 185px 49px;*/
   position: relative;
-  left: 321px;
+  left: 185px;
   top: 49px;
   position: absolute;
-  z-index: 1000;
+  z-index: 5500;
 }
 
 .region-selector h2 {


[14/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
CLOUDSTACK-4738: VM wizard: Add custom fields for compute offering


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

Branch: refs/heads/rbac
Commit: f0a8aa7f5e96f6ddf746bd27eb087386bccfb1a1
Parents: 3223fcf
Author: Brian Federle <br...@citrix.com>
Authored: Tue Oct 29 13:24:23 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Tue Oct 29 13:29:13 2013 -0700

----------------------------------------------------------------------
 ui/css/cloudstack3.css                 | 33 ++++++++++++++++++++++++++++-
 ui/index.jsp                           | 16 ++++++++++++++
 ui/scripts/instanceWizard.js           |  1 +
 ui/scripts/ui-custom/instanceWizard.js | 22 ++++++++++++++++++-
 4 files changed, 70 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f0a8aa7f/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index c4a5734..2da0d29 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -5910,7 +5910,7 @@ label.error {
 
 .multi-wizard.instance-wizard .section.custom-size {
   position: relative;
-  background: #FFFFFF;
+  background: #F4F4F4;
   padding: 7px;
   border-radius: 4px;
 }
@@ -5932,6 +5932,37 @@ label.error {
   font-size: 10px;
 }
 
+/*** Compute offering*/
+.instance-wizard .step.service-offering {
+}
+
+.instance-wizard .step.service-offering.custom-size .select-container {
+  height: 235px;
+}
+
+.instance-wizard .step.service-offering .custom-size {
+  display: none;
+}
+
+.instance-wizard .step.service-offering.custom-size .custom-size {
+  display: block;
+}
+
+.instance-wizard .step.service-offering .custom-size .field {
+  width: 30%;
+  float: left;
+  margin-bottom: 13px;
+}
+
+.instance-wizard .step.service-offering .custom-size .field label {
+  text-indent: 20px;
+}
+
+.instance-wizard .step.service-offering .custom-size .field input {
+  width: 88%;
+  margin-left: 26px;
+}
+
 /*** Network*/
 .multi-wizard.instance-wizard .no-network {
   background: #FFFFFF;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f0a8aa7f/ui/index.jsp
----------------------------------------------------------------------
diff --git a/ui/index.jsp b/ui/index.jsp
index 7a1cfaa..eb8ad95 100644
--- a/ui/index.jsp
+++ b/ui/index.jsp
@@ -1,3 +1,4 @@
+
 <%--
      Licensed to the Apache Software Foundation (ASF) under one
      or more contributor license agreements.  See the NOTICE file
@@ -210,6 +211,21 @@
                             <div class="content">
                                 <div class="select-container">
                                 </div>
+                                <!-- Custom size slider -->
+                                <div class="section custom-size">
+                                    <div class="field">
+                                        <label><fmt:message key="label.num.cpu.cores"/></label>
+                                        <input type="text" name="compute-cpu-cores" />
+                                    </div>
+                                    <div class="field">
+                                        <label><fmt:message key="label.cpu.mhz"/></label>
+                                        <input type="text" name="compute-cpu" />
+                                    </div>
+                                    <div class="field">
+                                        <label><fmt:message key="label.memory.mb"/></label>
+                                        <input type="text" name="compute-memory" />
+                                    </div>
+                                </div>
                             </div>
                         </div>
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f0a8aa7f/ui/scripts/instanceWizard.js
----------------------------------------------------------------------
diff --git a/ui/scripts/instanceWizard.js b/ui/scripts/instanceWizard.js
index 40832ae..484b18c 100644
--- a/ui/scripts/instanceWizard.js
+++ b/ui/scripts/instanceWizard.js
@@ -290,6 +290,7 @@
                     success: function(json) {
                         serviceOfferingObjs = json.listserviceofferingsresponse.serviceoffering;
                         args.response.success({
+                            customFlag: 'iscustomized',
                             data: {
                                 serviceOfferings: serviceOfferingObjs
                             }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f0a8aa7f/ui/scripts/ui-custom/instanceWizard.js
----------------------------------------------------------------------
diff --git a/ui/scripts/ui-custom/instanceWizard.js b/ui/scripts/ui-custom/instanceWizard.js
index a246051..4368ec4 100644
--- a/ui/scripts/ui-custom/instanceWizard.js
+++ b/ui/scripts/ui-custom/instanceWizard.js
@@ -424,7 +424,27 @@
                                         }, {
                                             'wizard-field': 'service-offering'
                                         })
-                                    );
+                                    );                                    
+
+                                    $step.find('input[type=radio]').bind('change', function() {
+                                        var $target = $(this);
+                                        var val = $target.val();
+                                        var item = $.grep(args.data.serviceOfferings, function(elem) {
+                                            return elem.id == val;
+                                        })[0];
+
+                                        if (!item) return true;
+
+                                        var custom = item[args.customFlag];
+
+                                        if (custom) {
+                                            $step.addClass('custom-size');
+                                        } else {
+                                            $step.removeClass('custom-size');
+                                        }
+
+                                        return true;
+                                    });
 
                                     originalValues(formData);
                                 }


[26/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
Adjust button colors; apply CSS gradients to buttons


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

Branch: refs/heads/rbac
Commit: 185be2141428a0f0adfdf2a9a0d9bede00f34f93
Parents: bad6c5d
Author: Brian Federle <br...@citrix.com>
Authored: Tue Oct 29 15:39:22 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Tue Oct 29 15:39:22 2013 -0700

----------------------------------------------------------------------
 ui/css/cloudstack3.css | 42 +++++++++++++++++++++++++++++++-----------
 1 file changed, 31 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/185be214/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index 362ec93..5d782b8 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -234,7 +234,7 @@ table tbody tr {
 }
 
 table tbody tr.even {
-  background: #DFE1E3;
+  background: #FFFFFF;
 }
 
 table tbody tr.odd {
@@ -2283,7 +2283,6 @@ div.detail-group.actions td {
   position: relative;
   top: 6px;
   left: 7px;
-  font-weight: 100;
 }
 
 #header div.notifications:hover {
@@ -2347,7 +2346,6 @@ div.detail-group.actions td {
   text-align: center;
   height: 12px;
   overflow: hidden;
-  font-weight: normal;
   /*+text-shadow:0px -1px 1px #464646;*/
   -moz-text-shadow: 0px -1px 1px #464646;
   -webkit-text-shadow: 0px -1px 1px #464646;
@@ -2878,7 +2876,7 @@ div.toolbar div.button.main-action,
   position: relative;
   left: 0px;
   top: 5px;
-  background: url(../images/gradients.png) 0px -98px;
+  background: #EAEAEA;
   font-size: 12px;
   font-weight: 100;
   color: #000000;
@@ -2890,8 +2888,17 @@ div.toolbar div.button.main-action,
   -o-text-shadow: 0px 1px 1px #DEE5EA;
   text-shadow: 0px 1px 1px #DEE5EA;
   padding: 5px 7px 5px 6px;
-  border-left: 1px solid #808080;
-  border-right: 1px solid #808080;
+  background: #F7F7F7;
+  background: rgb(247, 247, 247);
+  background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIxJSIgc3RvcC1jb2xvcj0iI2Y3ZjdmNyIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlYWVhZWEiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
+  background: -moz-linear-gradient(top, rgba(247,247,247,1) 1%, rgba(234,234,234,1) 100%);
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(1%,rgba(247,247,247,1)), color-stop(100%,rgba(234,234,234,1)));
+  background: -webkit-linear-gradient(top, rgba(247,247,247,1) 1%,rgba(234,234,234,1) 100%);
+  background: -o-linear-gradient(top, rgba(247,247,247,1) 1%,rgba(234,234,234,1) 100%);
+  background: -ms-linear-gradient(top, rgba(247,247,247,1) 1%,rgba(234,234,234,1) 100%);
+  background: linear-gradient(to bottom, rgba(247,247,247,1) 1%,rgba(234,234,234,1) 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f7f7f7', endColorstr='#eaeaea',GradientType=0 );
+  border: 1px solid #B7B7B7;
   float: right;
   /*+border-radius:4px;*/
   -moz-border-radius: 4px;
@@ -2907,8 +2914,12 @@ div.toolbar div.button.refresh:hover,
 div.toolbar div.button.main-action:hover,
 .toolbar div.button.header-action:hover,
 .detail-group .button.add:hover {
-  background-position: 0 -132px;
-  border-left: 1px solid #585D60;
+  background: #E5E5E5;
+  /*+box-shadow:inset 0px 0px 5px #C3C3C3;*/
+  -moz-box-shadow: inset 0px 0px 5px #C3C3C3;
+  -webkit-box-shadow: inset 0px 0px 5px #C3C3C3;
+  -o-box-shadow: inset 0px 0px 5px #C3C3C3;
+  box-shadow: inset 0px 0px 5px #C3C3C3;
 }
 
 div.toolbar div.button.main-action span.icon {
@@ -4052,8 +4063,16 @@ Dialogs*/
   -webkit-text-shadow: 0px 1px 0px #333E49;
   -o-text-shadow: 0px 1px 0px #333E49;
   padding: 3px 8px 3px 10px;
-  background: #E7E7E7;
-  border: 1px solid #383838;
+  background: rgb(234, 234, 234);
+  background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VhZWFlYSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNkNmQ2ZDYiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
+  background: -moz-linear-gradient(top, rgba(234,234,234,1) 0%, rgba(214,214,214,1) 100%);
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(234,234,234,1)), color-stop(100%,rgba(214,214,214,1)));
+  background: -webkit-linear-gradient(top, rgba(234,234,234,1) 0%,rgba(214,214,214,1) 100%);
+  background: -o-linear-gradient(top, rgba(234,234,234,1) 0%,rgba(214,214,214,1) 100%);
+  background: -ms-linear-gradient(top, rgba(234,234,234,1) 0%,rgba(214,214,214,1) 100%);
+  background: linear-gradient(to bottom, rgba(234,234,234,1) 0%,rgba(214,214,214,1) 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eaeaea', endColorstr='#d6d6d6',GradientType=0 );
+  border: 1px solid #9D9D9D;
   /*+border-radius:3px;*/
   -moz-border-radius: 3px;
   -webkit-border-radius: 3px;
@@ -4092,7 +4111,7 @@ Dialogs*/
 }
 
 .dashboard.admin .dashboard-container .top {
-  background: #E2E2E2;
+  background: #EFEFEF 0px -4px;
   padding: 4px 4px 8px;
   width: 100%;
   float: left;
@@ -9086,6 +9105,7 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
   text-shadow: 0px -1px 1px #373737;
   background: #515151;
   font-size: 15px;
+  font-weight: 100;
   color: #FFFFFF;
 }
 


[16/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
Add new infrastructure UI styling; add CSS for socket info box


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

Branch: refs/heads/rbac
Commit: be5a7b45fba4044a163deb90d5740388bf4e91d1
Parents: bed42de
Author: Brian Federle <br...@citrix.com>
Authored: Tue Oct 29 14:17:33 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Tue Oct 29 14:17:33 2013 -0700

----------------------------------------------------------------------
 ui/css/cloudstack3.css | 162 ++++++++++++++++++++++++++------------------
 1 file changed, 95 insertions(+), 67 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/be5a7b45/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index 2da0d29..71df11a 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -8557,19 +8557,18 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
   height: 258px;
   width: 762px;
   display: block;
-  background: #8DA4B9 url(../images/bg-gradients.png) repeat-x 0px -475px;
-  /*+border-radius:8px;*/
-  -moz-border-radius: 8px;
-  -webkit-border-radius: 8px;
-  -khtml-border-radius: 8px;
-  border-radius: 8px;
-  border-radius: 8px 8px 8px 8px;
+  background: #8DA4B9 repeat-x 0px -475px;
+  /*+border-radius:3px;*/
+  -moz-border-radius: 3px;
+  -webkit-border-radius: 3px;
+  -khtml-border-radius: 3px;
+  border-radius: 3px;
   /*+box-shadow:inset 0px 0px 1px #FFFFFF;*/
   -moz-box-shadow: inset 0px 0px 1px #FFFFFF;
   -webkit-box-shadow: inset 0px 0px 1px #FFFFFF;
   -o-box-shadow: inset 0px 0px 1px #FFFFFF;
   box-shadow: inset 0px 0px 1px #FFFFFF;
-  border: 1px solid #BFD4E1;
+  border: 1px solid #7D7D7D;
   position: relative;
   margin: 18px 0 0 15px;
   font-weight: bold;
@@ -8586,15 +8585,14 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
 }
 
 .system-dashboard .head {
-  color: #505F6F;
+  color: #000000;
   /*+text-shadow:0px 1px 1px #FFFFFF;*/
   -moz-text-shadow: 0px 1px 1px #FFFFFF;
   -webkit-text-shadow: 0px 1px 1px #FFFFFF;
   -o-text-shadow: 0px 1px 1px #FFFFFF;
   text-shadow: 0px 1px 1px #FFFFFF;
   text-indent: 11px;
-  padding: 12px 0 11px;
-  border-bottom: 1px solid #728EA7;
+  padding: 12px 0 0;
   /*+box-shadow:0px 0px 1px #FFFFFF;*/
   -moz-box-shadow: 0px 0px 1px #FFFFFF;
   -webkit-box-shadow: 0px 0px 1px #FFFFFF;
@@ -8605,13 +8603,11 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
 .system-dashboard .view-more,
 .system-dashboard .view-all {
   float: right;
-  padding: 5px 21px 5px 9px;
   margin: -4px 19px 0 0;
   cursor: pointer;
-  font-size: 11px;
-  font-weight: bold;
-  background: #4B5B6A url(../images/bg-gradients.png) repeat-x 0px -735px;
-  color: #FFFFFF;
+  font-size: 13px;
+  font-weight: 100;
+  background: #DADADA repeat-x 0px -735px;
   /*+border-radius:3px;*/
   -moz-border-radius: 3px;
   -webkit-border-radius: 3px;
@@ -8619,92 +8615,74 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
   border-radius: 3px;
   border-radius: 3px 3px 3px 3px;
   border: 1px solid #5A5A5A;
-  /*+box-shadow:inset 0px 0px 1px #FFFFFF;*/
-  -moz-box-shadow: inset 0px 0px 1px #FFFFFF;
-  -webkit-box-shadow: inset 0px 0px 1px #FFFFFF;
-  -o-box-shadow: inset 0px 0px 1px #FFFFFF;
-  box-shadow: inset 0px 0px 1px #FFFFFF;
-  /*+text-shadow:0px 1px 1px #000000;*/
-  -moz-text-shadow: 0px 1px 1px #000000;
-  -webkit-text-shadow: 0px 1px 1px #000000;
-  -o-text-shadow: 0px 1px 1px #000000;
-  text-shadow: 0px 1px 1px #000000;
 }
 
 .system-dashboard .view-more:hover,
 .system-dashboard .view-all:hover {
   background-position: 0px -763px;
-  /*+box-shadow:inset 0px 1px 1px #313131;*/
-  -moz-box-shadow: inset 0px 1px 1px #313131;
-  -webkit-box-shadow: inset 0px 1px 1px #313131;
-  -o-box-shadow: inset 0px 1px 1px #313131;
-  box-shadow: inset 0px 1px 1px #313131;
+  /*+box-shadow:inset 0px 1px 1px #000000;*/
+  -moz-box-shadow: inset 0px 1px 1px #000000;
+  -webkit-box-shadow: inset 0px 1px 1px #000000;
+  -o-box-shadow: inset 0px 1px 1px #000000;
+  box-shadow: inset 0px 1px 1px #000000;
+  background: #C1C1C1;
 }
 
 .system-dashboard .status_box .view-all {
-  /*+placement:shift 18px 136px;*/
+  /*+placement:shift 18px 128px;*/
   position: relative;
   left: 18px;
-  top: 136px;
+  top: 128px;
   width: 78%;
   position: absolute;
   text-align: center;
-  padding: 5px 0 8px;
+  padding: 8px 0;
 }
 
 .system-dashboard .status_box {
   font-size: 14px;
-  margin: 28px 0 0;
+  margin: 24px 0 0;
   background: transparent;
   border: none;
 }
 
 .system-dashboard .status_box li {
   height: 178px;
-  width: 180px;
+  width: 178px;
   padding: 0;
-  background: url(../images/bg-gradients.png) repeat-x 0px -1003px;
   margin: 0 0 0 8px;
-  /*+border-radius:7px;*/
-  -moz-border-radius: 7px;
-  -webkit-border-radius: 7px;
-  -khtml-border-radius: 7px;
-  border-radius: 7px;
-  border-radius: 7px 7px 7px 7px;
-  /*+box-shadow:inset 0px 1px 3px #000000;*/
-  -moz-box-shadow: inset 0px 1px 3px #000000;
-  -webkit-box-shadow: inset 0px 1px 3px #000000;
-  -o-box-shadow: inset 0px 1px 3px #000000;
-  box-shadow: inset 0px 1px 3px #000000;
+  /*+border-radius:3px;*/
+  -moz-border-radius: 3px;
+  -webkit-border-radius: 3px;
+  -khtml-border-radius: 3px;
+  border-radius: 3px;
   position: relative;
-  border: none;
+  border: 1px solid #808080;
   float: left;
 }
 
 .system-dashboard.zone .status_box li {
-  margin-bottom: 120px;
-  height: 176px;
-  background-position: 0px -1005px;
-  background-color: #35404B;
+  margin-bottom: 38px;
+  height: 170px;
+  background-color: #F4F4F4;
 }
 
 .system-dashboard.zone .status_box li .icon {
   background: url(../images/infrastructure-icons.png) no-repeat 0px 0px;
   padding: 65px 80px 5px;
-  /*+placement:shift 25px 19px;*/
+  /*+placement:shift 31px 19px;*/
   position: relative;
-  left: 25px;
+  left: 31px;
   top: 19px;
   position: absolute;
+  /*+opacity:56%;*/
+  filter: alpha(opacity=56);
+  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=56);
+  -moz-opacity: 0.56;
+  opacity: 0.56;
 }
 
 .system-dashboard .status_box li span {
-  color: #FFFFFF;
-  /*+text-shadow:0px 1px 1px #000000;*/
-  -moz-text-shadow: 0px 1px 1px #000000;
-  -webkit-text-shadow: 0px 1px 1px #000000;
-  -o-text-shadow: 0px 1px 1px #000000;
-  text-shadow: 0px 1px 1px #000000;
 }
 
 .system-dashboard .status_box li span.label {
@@ -8732,15 +8710,12 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
   position: relative;
   left: 13px;
   top: 5px;
-  /*+text-shadow:0px 1px 2px #000000;*/
-  -moz-text-shadow: 0px 1px 2px #000000;
-  -webkit-text-shadow: 0px 1px 2px #000000;
-  -o-text-shadow: 0px 1px 2px #000000;
-  text-shadow: 0px 1px 2px #000000;
+  font-weight: 100;
 }
 
 .system-dashboard.zone .status_box li span.header {
-  font-size: 13px;
+  font-size: 14px;
+  color: #4F4F4F;
 }
 
 .system-dashboard .status_box li span.status {
@@ -8878,6 +8853,59 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
   position: absolute;
 }
 
+.system-dashboard-view .socket-info {
+  width: 100%;
+  height: 134px;
+  overflow: auto;
+  float: left;
+  padding: 0;
+}
+
+.system-dashboard-view .socket-info > .title {
+  border-bottom: 1px solid #7D7D7D;
+  padding: 8px;
+  font-size: 13px;
+}
+
+.system-dashboard-view .socket-info ul {
+}
+
+.system-dashboard-view .socket-info li {
+  width: 143px;
+  padding: 13px;
+  /*+border-radius:3px;*/
+  -moz-border-radius: 3px;
+  -webkit-border-radius: 3px;
+  -khtml-border-radius: 3px;
+  border-radius: 3px;
+  margin: 7px 7px 7px 12px;
+  border: 1px solid #CCC;
+  background: #E2E2E2;
+  float: left;
+}
+
+.system-dashboard-view .socket-info li > div {
+  text-decoration: none;
+  float: left;
+}
+
+.system-dashboard-view .socket-info li .name {
+  width: 100%;
+  margin-bottom: 13px;
+}
+
+.system-dashboard-view .socket-info li .hosts,
+.system-dashboard-view .socket-info li .sockets {
+  width: 54px;
+}
+
+.system-dashboard-view .socket-info li div .title {
+  color: #424242;
+  border: none;
+  font-size: 13px;
+  padding-bottom: 3px;
+}
+
 .add-zone-resource .form-container {
   height: auto !important;
   display: inline-block;


[33/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
CLOUDSTACK-4998: fix assignvm response string


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

Branch: refs/heads/rbac
Commit: ee5a3964aa9925d5f5709c32155c117909793d19
Parents: b13cc0d
Author: Sebastien Goasguen <ru...@gmail.com>
Authored: Wed Oct 30 04:09:04 2013 -0400
Committer: Sebastien Goasguen <ru...@gmail.com>
Committed: Wed Oct 30 04:09:04 2013 -0400

----------------------------------------------------------------------
 .../org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ee5a3964/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java
index 2a60e19..6da4b6c 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java
@@ -39,7 +39,7 @@ import com.cloud.uservm.UserVm;
 public class AssignVMCmd extends BaseCmd  {
     public static final Logger s_logger = Logger.getLogger(AssignVMCmd.class.getName());
 
-    private static final String s_name = "moveuservmresponse";
+    private static final String s_name = "assignvirtualmachineresponse";
 
     /////////////////////////////////////////////////////
     //////////////// API parameters /////////////////////


[12/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
Instance wizard: lighter color on step numbers


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

Branch: refs/heads/rbac
Commit: f1683d0ad41d3182a199b71e298a49615632a4d8
Parents: d833e41
Author: Brian Federle <br...@citrix.com>
Authored: Tue Oct 29 13:02:10 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Tue Oct 29 13:02:10 2013 -0700

----------------------------------------------------------------------
 ui/css/cloudstack3.css | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f1683d0a/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index 5941d1c..c4a5734 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -5371,7 +5371,7 @@ label.error {
   left: 26px;
   font-size: 27px;
   font-weight: bold;
-  color: #000000;
+  color: #BBBBBB;
   background: transparent;
 }
 


[24/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
Breadcrumbs: Fix 'Home' link


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

Branch: refs/heads/rbac
Commit: 6e1986408ef4dbb63bd272b95bd4866bb1954f43
Parents: 1d1f585
Author: Brian Federle <br...@citrix.com>
Authored: Tue Oct 29 15:22:19 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Tue Oct 29 15:22:40 2013 -0700

----------------------------------------------------------------------
 ui/css/cloudstack3.css | 29 +++++++++++------------------
 1 file changed, 11 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6e198640/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index 67cdc54..4b5c414 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -3282,14 +3282,13 @@ div.toolbar div.filters select {
 }
 
 #breadcrumbs div.home {
-  width: 41px;
-  height: 32px;
+  width: 71px;
+  height: 23px;
   float: left;
-  background: url(../images/buttons.png) -9px -96px;
-  /*+placement:shift -1px -1px;*/
+  /*+placement:shift -1px 0px;*/
   position: relative;
   left: -1px;
-  top: -1px;
+  top: 0px;
   cursor: pointer;
   z-index: 5;
 }
@@ -3303,7 +3302,8 @@ div.toolbar div.filters select {
 }
 
 #breadcrumbs ul li,
-#breadcrumbs div.active-project {
+#breadcrumbs div.active-project,
+#breadcrumbs .home {
   height: 21px;
   float: left;
   font-size: 11px;
@@ -3318,7 +3318,8 @@ div.toolbar div.filters select {
   margin: 0 0 0 2px;
 }
 
-#breadcrumbs ul li:after {
+#breadcrumbs ul li:after,
+#breadcrumbs .home:after {
   content: ">";
   font-size: 11px;
   /*+placement:shift 7px -1px;*/
@@ -3333,7 +3334,8 @@ div.toolbar div.filters select {
 }
 
 #breadcrumbs ul li,
-#breadcrumbs div.active-project {
+#breadcrumbs div.active-project,
+#breadcrumbs .home {
   /*+placement:shift 0px 0px;*/
   position: relative;
   left: 0px;
@@ -3347,17 +3349,8 @@ div.toolbar div.filters select {
   color: #000000;
 }
 
+/*NOTE: End divs are not displayed per UI changes*/
 #breadcrumbs div.end {
-  background: url(../images/buttons.png) no-repeat -10px -130px;
-  height: 35px;
-  width: 13px;
-  float: left;
-  /*+placement:shift -13px -1px;*/
-  position: relative;
-  left: -13px;
-  top: -1px;
-  z-index: 5;
-  margin-right: 23px;
 }
 
 #breadcrumbs ul div.end {


[10/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
Project switcher: Remove hover state and custom styling -- breaks IE


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

Branch: refs/heads/rbac
Commit: cb11b0ad830aa4c9e68cbab542c01d58f95bc4e5
Parents: 896f68b
Author: Brian Federle <br...@citrix.com>
Authored: Tue Oct 29 11:30:26 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Tue Oct 29 11:30:26 2013 -0700

----------------------------------------------------------------------
 ui/css/cloudstack3.css | 54 ++++++++++++---------------------------------
 1 file changed, 14 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cb11b0ad/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index 16333e9..b853e6c 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -9053,54 +9053,28 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
 }
 
 .project-switcher label {
-  position: absolute;
   top: 29px;
   color: #FFFFFF;
   font-size: 12px;
   font-weight: bold;
+  float: left;
+  margin-right: 7px;
+  margin-top: 5px;
 }
 
 .project-switcher select {
-  width: 79%;
-  font-weight: bold;
-  font-size: 12px;
-  /*+text-shadow:0px -1px 1px #000000;*/
-  -moz-text-shadow: 0px -1px 1px #000000;
-  -webkit-text-shadow: 0px -1px 1px #000000;
-  -o-text-shadow: 0px -1px 1px #000000;
-  text-shadow: 0px -1px 1px #000000;
-  border: 1px solid #9A9A9A;
-  border-bottom: #FFFFFF;
-  /*+box-shadow:inset 0px -1px #A2A2A2;*/
-  -moz-box-shadow: inset 0px -1px #A2A2A2;
-  -webkit-box-shadow: inset 0px -1px #A2A2A2;
-  -o-box-shadow: inset 0px -1px #A2A2A2;
-  box-shadow: inset 0px -1px #A2A2A2;
-  /*+border-radius:4px;*/
-  -moz-border-radius: 4px;
-  -webkit-border-radius: 4px;
-  -khtml-border-radius: 4px;
-  border-radius: 4px;
+  width: 70%;
+  float: left;
+  margin-top: -1px;
+  border: 1px solid #393939;
+  /*+text-shadow:0px -1px 1px #373737;*/
+  -moz-text-shadow: 0px -1px 1px #373737;
+  -webkit-text-shadow: 0px -1px 1px #373737;
+  -o-text-shadow: 0px -1px 1px #373737;
+  text-shadow: 0px -1px 1px #373737;
+  background: #515151;
+  font-size: 15px;
   color: #FFFFFF;
-  margin-top: -2px;
-  margin-left: 53px;
-  background: url(../images/bg-gradients.png) 0px -867px;
-  padding: 5px;
-  height: 28px;
-}
-
-.project-switcher select:hover {
-  /*+box-shadow:inset 0px 2px 6px #3B3B3B;*/
-  -moz-box-shadow: inset 0px 2px 6px #3B3B3B;
-  -webkit-box-shadow: inset 0px 2px 6px #3B3B3B;
-  -o-box-shadow: inset 0px 2px 6px #3B3B3B;
-  box-shadow: inset 0px 2px 6px #3B3B3B;
-  cursor: pointer;
-  border-bottom: 1px solid #828282;
-}
-
-.project-switcher select option {
-  background: #7F8487;
 }
 
 /*** Select project*/


[18/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
Infra. dashboard UI fixes

-Fix totals not showing up

-Increase height of socket info area to fit more hypervisors


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

Branch: refs/heads/rbac
Commit: 7695fff17b486e5f5cbc1187ccfbe9a08bef702b
Parents: 4a9f05b
Author: Brian Federle <br...@citrix.com>
Authored: Tue Oct 29 14:55:14 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Tue Oct 29 14:55:51 2013 -0700

----------------------------------------------------------------------
 .../classes/resources/messages.properties       |  1 +
 ui/css/cloudstack3.css                          | 62 ++++++++------------
 ui/dictionary.jsp                               |  1 +
 ui/scripts/system.js                            | 42 ++++++-------
 ui/scripts/ui/core.js                           |  2 +-
 5 files changed, 45 insertions(+), 63 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7695fff1/client/WEB-INF/classes/resources/messages.properties
----------------------------------------------------------------------
diff --git a/client/WEB-INF/classes/resources/messages.properties b/client/WEB-INF/classes/resources/messages.properties
index 3210aca..dd5e65a 100644
--- a/client/WEB-INF/classes/resources/messages.properties
+++ b/client/WEB-INF/classes/resources/messages.properties
@@ -14,6 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+label.home=Home
 label.sockets=Sockets
 label.root.disk.size=Root disk size
 label.s3.nfs.server=S3 NFS Server

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7695fff1/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index 71df11a..1ae631c 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -3270,7 +3270,7 @@ div.toolbar div.filters select {
 #breadcrumbs {
   height: 29px;
   max-height: 29px;
-  background: url(../images/bg-breadcrumbs.png) repeat-x;
+  background: #FFFFFF;
   overflow: hidden;
   width: 100%;
 }
@@ -3304,17 +3304,11 @@ div.toolbar div.filters select {
 
 #breadcrumbs ul li,
 #breadcrumbs div.active-project {
-  background: url(../images/gradients.png) repeat-x -522px -10px;
   height: 21px;
   float: left;
-  font-size: 12px;
-  /*+text-shadow:0px 1px 1px #2A3640;*/
-  -moz-text-shadow: 0px 1px 1px #2A3640;
-  -webkit-text-shadow: 0px 1px 1px #2A3640;
-  -o-text-shadow: 0px 1px 1px #2A3640;
-  text-shadow: 0px 1px 1px #2A3640;
+  font-size: 11px;
   color: #FFFFFF;
-  padding: 8px 5px 0px 8px;
+  padding: 9px 5px 0px 8px;
   cursor: pointer;
   /*+placement:shift -13px 0px;*/
   position: relative;
@@ -3324,6 +3318,16 @@ div.toolbar div.filters select {
   margin: 0 0 0 2px;
 }
 
+#breadcrumbs ul li:after {
+  content: ">";
+  font-size: 11px;
+  /*+placement:shift 7px -1px;*/
+  position: relative;
+  left: 7px;
+  top: -1px;
+  color: #C4C4C4;
+}
+
 .project-view #breadcrumbs ul li {
   background: url(../images/bg-breadcrumb-project-view.png) 0px -2px;
 }
@@ -3334,31 +3338,13 @@ div.toolbar div.filters select {
   position: relative;
   left: 0px;
   top: 0px;
-  color: #CED4D9;
-  /*+text-shadow:0px 0px;*/
-  -moz-text-shadow: 0px 0px;
-  -webkit-text-shadow: 0px 0px;
-  -o-text-shadow: 0px 0px;
-  text-shadow: 0px 0px;
-  -moz-text-shadow: 0px 0px none;
-  -webkit-text-shadow: 0px 0px none;
-  -o-text-shadow: 0px 0px none;
-  -moz-text-shadow: none;
-  -webkit-text-shadow: none;
-  -o-text-shadow: none;
-  font-weight: bold;
+  color: #63A9F1;
 }
 
 #breadcrumbs ul li:hover,
 #breadcrumbs ul li.active,
 #breadcrumbs ul li.maximized {
-  color: #FFFFFF;
-  /*+text-shadow:0px 1px 1px #000000;*/
-  -moz-text-shadow: 0px 1px 1px #000000;
-  -webkit-text-shadow: 0px 1px 1px #000000;
-  -o-text-shadow: 0px 1px 1px #000000;
-  text-shadow: 0px 1px 1px #000000;
-  font-size: 12px;
+  color: #000000;
 }
 
 #breadcrumbs div.end {
@@ -3380,6 +3366,8 @@ div.toolbar div.filters select {
   left: -37px;
   top: -1px;
   margin-right: 0px;
+  /*Disabled*/
+  display: none;
 }
 
 #breadcrumbs ul li {
@@ -3390,7 +3378,6 @@ div.toolbar div.filters select {
   top: 0px;
   margin-left: -10px;
   text-indent: 13px;
-  font-weight: bold;
 }
 
 #breadcrumbs div.active-project {
@@ -8629,10 +8616,10 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
 }
 
 .system-dashboard .status_box .view-all {
-  /*+placement:shift 18px 128px;*/
+  /*+placement:shift 18px 110px;*/
   position: relative;
   left: 18px;
-  top: 128px;
+  top: 110px;
   width: 78%;
   position: absolute;
   text-align: center;
@@ -8641,7 +8628,7 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
 
 .system-dashboard .status_box {
   font-size: 14px;
-  margin: 24px 0 0;
+  margin: 10px 0 0;
   background: transparent;
   border: none;
 }
@@ -8662,8 +8649,8 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
 }
 
 .system-dashboard.zone .status_box li {
-  margin-bottom: 38px;
-  height: 170px;
+  margin-bottom: 8px;
+  height: 152px;
   background-color: #F4F4F4;
 }
 
@@ -8855,7 +8842,7 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
 
 .system-dashboard-view .socket-info {
   width: 100%;
-  height: 134px;
+  height: 239px;
   overflow: auto;
   float: left;
   padding: 0;
@@ -8871,7 +8858,7 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
 }
 
 .system-dashboard-view .socket-info li {
-  width: 143px;
+  width: 139px;
   padding: 13px;
   /*+border-radius:3px;*/
   -moz-border-radius: 3px;
@@ -8891,6 +8878,7 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
 
 .system-dashboard-view .socket-info li .name {
   width: 100%;
+  font-weight: 100;
   margin-bottom: 13px;
 }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7695fff1/ui/dictionary.jsp
----------------------------------------------------------------------
diff --git a/ui/dictionary.jsp b/ui/dictionary.jsp
index 35cba22..cb24d56 100644
--- a/ui/dictionary.jsp
+++ b/ui/dictionary.jsp
@@ -25,6 +25,7 @@ under the License.
 <% long now = System.currentTimeMillis(); %>
 <script language="javascript">
 dictionary = {
+'label.home': '<fmt:message key="label.home" />',
 'label.sockets': '<fmt:message key="label.sockets" />',
 'label.root.disk.size': '<fmt:message key="label.root.disk.size" />',
 'label.s3.nfs.path': '<fmt:message key="label.s3.nfs.path" />',

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7695fff1/ui/scripts/system.js
----------------------------------------------------------------------
diff --git a/ui/scripts/system.js b/ui/scripts/system.js
index 479883c..088cb3c 100644
--- a/ui/scripts/system.js
+++ b/ui/scripts/system.js
@@ -380,31 +380,23 @@
                         }
                     },
 
-                    socketInfo: function(args) {
-                        complete($.extend(args.data, {
-                            socketInfo: [
-                                {
-                                    name: 'XenServer',
-                                    hosts: 0,
-                                    sockets: 0
-                                },
-                                {
-                                    name: 'VMware',
-                                    hosts: 0,
-                                    sockets: 0
-                                },
-                                {
-                                    name: 'KVM',
-                                    hosts: 0,
-                                    sockets: 0
-                                },
-                                {
-                                    name: 'Hyper-V',
-                                    hosts: 0,
-                                    sockets: 0
-                                }
-                            ]
-                        }));
+                    socketInfo: function(data) {
+                        $.ajax({
+                            url: createURL('listHypervisors'),
+                            success: function(json) {
+                                var hypervisors = json.listhypervisorsresponse.hypervisor;
+
+                                complete($.extend(data, {
+                                    socketInfo: $(hypervisors).map(function(index, hypervisor) {
+                                        return {
+                                            name: hypervisor.name,
+                                            hosts: 0,
+                                            sockets: 0
+                                        };
+                                    })                                
+                                }));
+                            }
+                        });
                     }
                 };
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7695fff1/ui/scripts/ui/core.js
----------------------------------------------------------------------
diff --git a/ui/scripts/ui/core.js b/ui/scripts/ui/core.js
index 3df2b2b..2ae0b64 100644
--- a/ui/scripts/ui/core.js
+++ b/ui/scripts/ui/core.js
@@ -247,7 +247,7 @@
                     $('<div>').attr({
                         id: 'breadcrumbs'
                     })
-                    .append($('<div>').addClass('home'))
+                    .append($('<div>').addClass('home').html(_l('label.home')))
                     .append($('<div>').addClass('end'))
             )
 


[50/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
Merge branch 'master' into rbac.

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

Branch: refs/heads/rbac
Commit: 2ef4d5200ce0e53852f77f467cb58314a06e9fe3
Parents: 21dc2be 27294a3
Author: Min Chen <mi...@citrix.com>
Authored: Thu Oct 31 17:16:33 2013 -0700
Committer: Min Chen <mi...@citrix.com>
Committed: Thu Oct 31 17:16:33 2013 -0700

----------------------------------------------------------------------
 INSTALL.md                                      |   39 +-
 agent/bindir/cloudstack-agent-upgrade.in        |   63 +
 agent/bindir/libvirtqemuhook.in                 |   53 +
 agent/pom.xml                                   |    4 +
 agent/scripts/_run.sh                           |   26 -
 agent/scripts/agent.sh                          |   31 -
 agent/scripts/run.sh                            |   20 -
 agent/src/com/cloud/agent/Agent.java            |   11 +-
 agent/src/com/cloud/agent/AgentShell.java       |   65 +-
 .../cloud/agent/dao/impl/PropertiesStorage.java |   14 +-
 .../consoleproxy/ConsoleProxyResource.java      |    6 +-
 agent/test/com/cloud/agent/AgentShellTest.java  |   48 +
 .../agent/dao/impl/PropertiesStorageTest.java   |   69 +
 .../cloudstack/api-planner/module.properties    |   18 +
 .../api-planner/spring-api-planner-context.xml  |   34 +
 api/src/com/cloud/agent/api/to/DataStoreTO.java |    2 +-
 api/src/com/cloud/agent/api/to/DiskTO.java      |   36 +-
 api/src/com/cloud/agent/api/to/NfsTO.java       |    9 +-
 api/src/com/cloud/agent/api/to/S3TO.java        |   28 +-
 api/src/com/cloud/agent/api/to/SwiftTO.java     |   11 +-
 api/src/com/cloud/event/EventTypes.java         |    7 +
 .../exception/ConcurrentOperationException.java |    3 +-
 api/src/com/cloud/network/Networks.java         |    1 +
 api/src/com/cloud/network/PhysicalNetwork.java  |    3 +-
 api/src/com/cloud/network/RemoteAccessVpn.java  |    3 +-
 .../cloud/network/VirtualRouterProvider.java    |    4 +-
 .../element/RemoteAccessVPNServiceProvider.java |    5 +-
 .../element/VirtualRouterElementService.java    |    4 +-
 .../network/vpn/RemoteAccessVpnService.java     |    3 +-
 api/src/com/cloud/offering/NetworkOffering.java |    2 +
 .../cloud/server/ResourceMetaDataService.java   |   19 +-
 api/src/com/cloud/server/ResourceTag.java       |   60 +-
 .../com/cloud/server/TaggedResourceService.java |   30 +-
 api/src/com/cloud/storage/StorageService.java   |   16 +-
 api/src/com/cloud/storage/VolumeApiService.java |    2 +-
 .../storage/snapshot/SnapshotApiService.java    |    2 +
 api/src/com/cloud/user/DomainService.java       |    3 +
 api/src/com/cloud/vm/UserVmService.java         |    5 +
 api/src/com/cloud/vm/VmDetailConstants.java     |    1 +
 .../org/apache/cloudstack/api/APICommand.java   |    3 +
 .../cloudstack/api/ApiCommandJobType.java       |    1 +
 .../org/apache/cloudstack/api/ApiConstants.java |    8 +
 api/src/org/apache/cloudstack/api/BaseCmd.java  |  168 -
 .../apache/cloudstack/api/ResourceDetail.java   |   29 +
 .../admin/network/CreateNetworkOfferingCmd.java |    9 +-
 .../admin/network/UpdateNetworkOfferingCmd.java |    7 +
 .../admin/offering/UpdateDiskOfferingCmd.java   |    8 +-
 .../router/CreateVirtualRouterElementCmd.java   |   14 +-
 .../admin/storage/ListStoragePoolsCmd.java      |    3 +-
 .../PrepareSecondaryStorageForMigrationCmd.java |  109 +
 .../api/command/admin/vm/AssignVMCmd.java       |    2 +-
 .../api/command/admin/vm/ExpungeVMCmd.java      |  116 +
 .../command/user/network/UpdateNetworkCmd.java  |    4 +-
 .../user/offering/ListServiceOfferingsCmd.java  |    9 +-
 .../user/snapshot/RevertSnapshotCmd.java        |   96 +
 .../command/user/ssh/CreateSSHKeyPairCmd.java   |    6 +-
 .../api/command/user/tag/CreateTagsCmd.java     |    4 +-
 .../api/command/user/tag/DeleteTagsCmd.java     |    4 +-
 .../api/command/user/vm/DestroyVMCmd.java       |   27 +-
 .../user/volume/AddResourceDetailCmd.java       |    2 +-
 .../user/volume/ListResourceDetailsCmd.java     |   52 +-
 .../user/volume/RemoveResourceDetailCmd.java    |   17 +-
 .../command/user/volume/UpdateVolumeCmd.java    |   57 +-
 .../user/vpn/CreateRemoteAccessVpnCmd.java      |   17 +-
 .../api/command/user/zone/ListZonesByCmd.java   |   32 +-
 .../api/response/CreateSSHKeyPairResponse.java  |   41 +
 .../api/response/ResourceDetailResponse.java    |   15 +-
 .../api/response/SSHKeyPairResponse.java        |   16 -
 .../api/response/ServiceOfferingResponse.java   |   11 +-
 .../api/response/SnapshotResponse.java          |   25 +-
 .../cloudstack/api/response/UserVmResponse.java |    9 +-
 .../cloudstack/api/response/VolumeResponse.java |   26 +-
 .../cloudstack/api/response/ZoneResponse.java   |   24 +
 .../apache/cloudstack/context/CallContext.java  |   77 +-
 .../cloudstack/context/CallContextListener.java |   53 +
 .../apache/cloudstack/query/QueryService.java   |    2 +-
 awsapi/pom.xml                                  |  301 +-
 .../bridge/persist/dao/BucketPolicyDaoImpl.java |    6 +-
 .../persist/dao/CloudStackAccountDaoImpl.java   |    3 +-
 .../dao/CloudStackConfigurationDaoImpl.java     |    3 +-
 .../dao/CloudStackSvcOfferingDaoImpl.java       |    5 +-
 .../persist/dao/CloudStackUserDaoImpl.java      |    3 +-
 .../cloud/bridge/persist/dao/MHostDaoImpl.java  |    5 +-
 .../bridge/persist/dao/MHostMountDaoImpl.java   |    3 +-
 .../persist/dao/MultiPartPartsDaoImpl.java      |    9 +-
 .../persist/dao/MultiPartUploadsDaoImpl.java    |   15 +-
 .../bridge/persist/dao/MultipartLoadDao.java    |    9 +-
 .../persist/dao/MultipartMetaDaoImpl.java       |    3 +-
 .../bridge/persist/dao/OfferingDaoImpl.java     |   11 +-
 .../cloud/bridge/persist/dao/SAclDaoImpl.java   |    7 +-
 .../bridge/persist/dao/SBucketDaoImpl.java      |    5 +-
 .../cloud/bridge/persist/dao/SHostDaoImpl.java  |    5 +-
 .../cloud/bridge/persist/dao/SMetaDaoImpl.java  |    5 +-
 .../bridge/persist/dao/SObjectDaoImpl.java      |    7 +-
 .../bridge/persist/dao/SObjectItemDaoImpl.java  |    5 +-
 .../persist/dao/UserCredentialsDaoImpl.java     |    5 +-
 .../cloud/bridge/service/EC2RestServlet.java    |   13 +-
 .../com/cloud/bridge/service/S3RestServlet.java |    5 +-
 .../service/controller/s3/S3BucketAction.java   |    3 +-
 .../service/controller/s3/ServiceProvider.java  |   13 +-
 .../cloud/bridge/service/core/s3/S3Engine.java  |   23 +-
 .../classes/resources/messages.properties       |   28 +-
 .../classes/resources/messages_de_DE.properties |    4 +
 .../classes/resources/messages_es.properties    |    5 +
 .../classes/resources/messages_fr_FR.properties |    7 +
 .../classes/resources/messages_ja.properties    |    9 +-
 .../classes/resources/messages_ko_KR.properties |    7 +
 .../classes/resources/messages_pt_BR.properties |    7 +
 .../classes/resources/messages_ru_RU.properties |    7 +
 .../classes/resources/messages_zh_CN.properties |    7 +
 client/WEB-INF/web.xml                          |    6 +-
 client/pom.xml                                  |  236 +-
 .../cloudstack/webApplicationContext.xml        |   32 +
 client/tomcatconf/commands.properties.in        |   11 +-
 client/tomcatconf/log4j-cloud.xml.in            |    8 +
 client/tomcatconf/tomcat6-nonssl.conf.in        |    2 +-
 client/tomcatconf/tomcat6-ssl.conf.in           |    2 +-
 .../cloudstack/allocator/module.properties      |   18 +
 .../allocator/spring-core-allocator-context.xml |   32 +
 ...-lifecycle-allocator-context-inheritable.xml |   42 +
 .../META-INF/cloudstack/api/module.properties   |   18 +
 ...g-core-lifecycle-api-context-inheritable.xml |   53 +
 .../cloudstack/backend/module.properties        |   18 +
 .../cloudstack/bootstrap/module.properties      |   17 +
 .../spring-bootstrap-context-inheritable.xml    |   39 +
 .../bootstrap/spring-bootstrap-context.xml      |   32 +
 .../cloudstack/compute/module.properties        |   18 +
 ...re-lifecycle-compute-context-inheritable.xml |   45 +
 .../META-INF/cloudstack/core/module.properties  |   18 +
 .../cloudstack/core/spring-core-context.xml     |   36 +
 ...-core-lifecycle-core-context-inheritable.xml |   41 +
 .../core/spring-core-registry-core-context.xml  |  273 ++
 .../cloudstack/discoverer/module.properties     |   18 +
 ...lifecycle-discoverer-context-inheritable.xml |   35 +
 .../cloudstack/network/module.properties        |   18 +
 ...re-lifecycle-network-context-inheritable.xml |   94 +
 .../cloudstack/planner/module.properties        |   18 +
 ...re-lifecycle-planner-context-inheritable.xml |   41 +
 .../cloudstack/storage/module.properties        |   18 +
 ...ng-lifecycle-storage-context-inheritable.xml |   80 +
 .../cloudstack/system/module.properties         |   18 +
 .../spring-core-system-context-inheritable.xml  |   54 +
 .../system/spring-core-system-context.xml       |   50 +
 .../cloud/agent/api/AttachVolumeCommand.java    |    8 +-
 .../com/cloud/agent/api/ClusterSyncAnswer.java  |    8 +-
 .../cloud/agent/api/CreateVMSnapshotAnswer.java |   12 +-
 .../agent/api/CreateVMSnapshotCommand.java      |    4 +-
 .../cloud/agent/api/DeleteVMSnapshotAnswer.java |   12 +-
 .../agent/api/DeleteVMSnapshotCommand.java      |    3 +-
 .../src/com/cloud/agent/api/MigrateCommand.java |   11 +-
 .../agent/api/MigrateWithStorageAnswer.java     |    3 -
 .../api/MigrateWithStorageCompleteAnswer.java   |    2 -
 core/src/com/cloud/agent/api/RebootCommand.java |    1 -
 .../agent/api/RevertToVMSnapshotAnswer.java     |   14 +-
 .../agent/api/RevertToVMSnapshotCommand.java    |    3 +-
 core/src/com/cloud/agent/api/StartAnswer.java   |   11 +
 .../cloud/agent/api/StartupRoutingCommand.java  |    8 +-
 core/src/com/cloud/agent/api/StopAnswer.java    |   23 +-
 .../cloud/agent/api/VMSnapshotBaseCommand.java  |   10 +-
 .../api/routing/HealthCheckLBConfigAnswer.java  |    1 -
 .../api/routing/HealthCheckLBConfigCommand.java |    1 -
 .../api/routing/LoadBalancerConfigCommand.java  |    4 +-
 .../api/routing/RemoteAccessVpnCfgCommand.java  |   35 +-
 .../agent/api/routing/SetNetworkACLCommand.java |    2 -
 .../cloud/agent/api/storage/UploadCommand.java  |   23 +-
 .../virtualnetwork/VirtualRoutingResource.java  |   63 +-
 core/src/com/cloud/agent/transport/Request.java |   63 +-
 .../cloud/exception/UsageServerException.java   |   19 +-
 .../com/cloud/network/HAProxyConfigurator.java  |   54 +-
 .../src/com/cloud/storage/JavaStorageLayer.java |    6 +-
 .../storage/resource/StoragePoolResource.java   |    2 -
 .../storage/resource/StorageProcessor.java      |    6 +
 .../StorageSubsystemCommandHandlerBase.java     |   23 +-
 .../storage/template/FtpTemplateUploader.java   |  381 +-
 .../template/HttpTemplateDownloader.java        |  645 +--
 .../template/LocalTemplateDownloader.java       |   57 +-
 .../storage/template/RawImageProcessor.java     |    3 +-
 .../storage/template/S3TemplateDownloader.java  |   57 +-
 .../storage/template/ScpTemplateDownloader.java |    4 +-
 .../template/TemplateDownloaderBase.java        |    5 +-
 .../storage/template/TemplateUploader.java      |    3 -
 .../storage/command/AttachCommand.java          |   72 -
 .../cloudstack/storage/command/CopyCommand.java |    4 +
 .../storage/command/DownloadCommand.java        |   47 +-
 .../storage/command/ForgetObjectCmd.java        |   37 +
 .../storage/command/IntroduceObjectAnswer.java  |   33 +
 .../storage/command/IntroduceObjectCmd.java     |   38 +
 .../cloudstack/storage/to/ImageStoreTO.java     |   10 +
 .../storage/to/PrimaryDataStoreTO.java          |    1 +
 .../cloudstack/storage/to/VolumeObjectTO.java   |   12 +
 .../cloud/network/HAProxyConfiguratorTest.java  |   97 +
 .../api/agent/test/AttachVolumeAnswerTest.java  |    2 +-
 .../api/agent/test/AttachVolumeCommandTest.java |    2 +-
 .../agent/test/BackupSnapshotCommandTest.java   |    1 -
 debian/changelog                                |    2 +-
 debian/cloudstack-agent.install                 |    1 +
 debian/cloudstack-agent.postinst                |   10 +-
 debian/cloudstack-management.install            |    3 -
 debian/control                                  |    2 +-
 debian/rules                                    |   15 +-
 deps/install-non-oss.sh                         |    5 +
 developer/pom.xml                               |    1 -
 docs/README.txt                                 |  325 --
 docs/en-US/Admin_Guide.ent                      |   22 -
 docs/en-US/Admin_Guide.xml                      |   74 -
 docs/en-US/Author_Group.xml                     |   32 -
 docs/en-US/Book_Info.xml                        |   47 -
 docs/en-US/Book_Info_Release_Notes_4.xml        |   38 -
 docs/en-US/CloudStack_GSoC_Guide.ent            |   22 -
 docs/en-US/CloudStack_GSoC_Guide.xml            |   52 -
 docs/en-US/CloudStack_Nicira_NVP_Guide.ent      |   22 -
 docs/en-US/CloudStack_Nicira_NVP_Guide.xml      |   55 -
 docs/en-US/Common_Content/Legal_Notice.xml      |   15 -
 docs/en-US/Common_Content/feedback.xml          |   24 -
 docs/en-US/Developers_Guide.ent                 |   21 -
 docs/en-US/Developers_Guide.xml                 |   61 -
 docs/en-US/Installation_Guide.ent               |   22 -
 docs/en-US/Installation_Guide.xml               |   62 -
 docs/en-US/LDAP-for-user-authentication.xml     |   51 -
 docs/en-US/MidoNet_Plugin_Guide.ent             |   22 -
 docs/en-US/MidoNet_Plugin_Guide.xml             |   52 -
 docs/en-US/Preface.xml                          |   31 -
 docs/en-US/Release_Notes.ent                    |   22 -
 docs/en-US/Release_Notes.xml                    | 4582 ------------------
 docs/en-US/Revision_History.xml                 |   45 -
 docs/en-US/Revision_History_Install_Guide.xml   |   55 -
 docs/en-US/SSL-keystore-path-and-password.xml   |   28 -
 docs/en-US/VPN-user-usage-record-format.xml     |   40 -
 docs/en-US/about-clusters.xml                   |   63 -
 docs/en-US/about-hosts.xml                      |   46 -
 docs/en-US/about-password-encryption.xml        |   65 -
 docs/en-US/about-physical-networks.xml          |   42 -
 docs/en-US/about-pods.xml                       |   38 -
 docs/en-US/about-primary-storage.xml            |   38 -
 docs/en-US/about-regions.xml                    |   50 -
 docs/en-US/about-secondary-storage.xml          |   51 -
 docs/en-US/about-security-groups.xml            |   40 -
 docs/en-US/about-virtual-networks.xml           |   30 -
 docs/en-US/about-working-with-vms.xml           |   64 -
 docs/en-US/about-zones.xml                      |   74 -
 docs/en-US/accept-membership-invite.xml         |   36 -
 docs/en-US/accessing-system-vms.xml             |   66 -
 docs/en-US/accessing-vms.xml                    |   40 -
 docs/en-US/accounts-users-domains.xml           |  133 -
 docs/en-US/accounts.xml                         |   29 -
 docs/en-US/acquire-new-ip-address.xml           |   52 -
 docs/en-US/acquire-new-ip-for-vpc.xml           |   88 -
 docs/en-US/add-additional-guest-network.xml     |   65 -
 docs/en-US/add-clusters-kvm-xenserver.xml       |   53 -
 docs/en-US/add-clusters-ovm.xml                 |   43 -
 docs/en-US/add-clusters-vsphere.xml             |  178 -
 docs/en-US/add-gateway-vpc.xml                  |  227 -
 docs/en-US/add-ingress-egress-rules.xml         |  131 -
 docs/en-US/add-ip-range.xml                     |  124 -
 docs/en-US/add-iso.xml                          |  151 -
 docs/en-US/add-load-balancer-rule.xml           |  102 -
 docs/en-US/add-loadbalancer-rule-vpc.xml        |  462 --
 docs/en-US/add-members-to-projects.xml          |   35 -
 docs/en-US/add-more-clusters.xml                |   29 -
 .../add-password-management-to-templates.xml    |   42 -
 docs/en-US/add-portforward-rule-vpc.xml         |  117 -
 docs/en-US/add-primary-storage.xml              |  108 -
 docs/en-US/add-projects-members-from-ui.xml     |   37 -
 docs/en-US/add-remove-nic-ui.xml                |  152 -
 docs/en-US/add-remove-nic.xml                   |  133 -
 docs/en-US/add-secondary-storage.xml            |   48 -
 docs/en-US/add-security-group.xml               |   49 -
 docs/en-US/add-tier.xml                         |  102 -
 docs/en-US/add-vm-tier-sharednw.xml             |   62 -
 docs/en-US/add-vm-to-tier.xml                   |   53 -
 docs/en-US/add-vpc.xml                          |   80 -
 docs/en-US/added-API-commands-4-0.xml           |  164 -
 docs/en-US/added-API-commands-4-1.xml           |   73 -
 docs/en-US/added-API-commands-4.2.xml           |  554 ---
 docs/en-US/added-API-commands.xml               |  195 -
 docs/en-US/added-error-codes.xml                |  138 -
 ...ding-IP-addresses-for-the-public-network.xml |   45 -
 docs/en-US/additional-installation-options.xml  |   31 -
 docs/en-US/admin-alerts.xml                     |  128 -
 docs/en-US/admin-guide.xml                      |   92 -
 docs/en-US/adv-zone-topology-req.xml            |   25 -
 docs/en-US/advanced-zone-configuration.xml      |  385 --
 docs/en-US/advanced-zone-guest-ip-addresses.xml |   31 -
 .../advanced-zone-network-traffic-types.xml     |   34 -
 ...nced-zone-physical-network-configuration.xml |   30 -
 .../en-US/advanced-zone-public-ip-addresses.xml |   27 -
 docs/en-US/alerts.xml                           |   53 -
 docs/en-US/allocators.xml                       |   28 -
 docs/en-US/api-calls.xml                        |   33 -
 docs/en-US/api-overview.xml                     |   38 -
 docs/en-US/api-reference.xml                    |   24 -
 docs/en-US/api-throttling.xml                   |   67 -
 docs/en-US/append-displayname-vms.xml           |   84 -
 docs/en-US/asynchronous-commands-example.xml    |  106 -
 docs/en-US/asynchronous-commands.xml            |   38 -
 docs/en-US/attach-iso-to-vm.xml                 |   40 -
 docs/en-US/attaching-volume.xml                 |   61 -
 .../automatic-snapshot-creation-retention.xml   |   36 -
 docs/en-US/autoscale.xml                        |  286 --
 docs/en-US/aws-api-examples.xml                 |  145 -
 docs/en-US/aws-ec2-configuration.xml            |  109 -
 docs/en-US/aws-ec2-introduction.xml             |   53 -
 docs/en-US/aws-ec2-requirements.xml             |   36 -
 docs/en-US/aws-ec2-supported-commands.xml       |  396 --
 docs/en-US/aws-ec2-timeouts.xml                 |   51 -
 docs/en-US/aws-ec2-user-setup.xml               |  105 -
 docs/en-US/aws-interface-compatibility.xml      |   34 -
 docs/en-US/basic-adv-networking.xml             |  113 -
 docs/en-US/basic-zone-configuration.xml         |  319 --
 docs/en-US/basic-zone-guest-ip-addresses.xml    |   27 -
 docs/en-US/basic-zone-network-traffic-types.xml |   35 -
 ...asic-zone-physical-network-configuration.xml |   28 -
 docs/en-US/best-practices-for-vms.xml           |   67 -
 docs/en-US/best-practices-primary-storage.xml   |   33 -
 docs/en-US/best-practices-secondary-storage.xml |   32 -
 docs/en-US/best-practices-templates.xml         |   28 -
 docs/en-US/best-practices-virtual-router.xml    |   34 -
 docs/en-US/best-practices.xml                   |   82 -
 docs/en-US/build-deb.xml                        |  123 -
 docs/en-US/build-nonoss.xml                     |   49 -
 docs/en-US/build-rpm.xml                        |   96 -
 docs/en-US/building-devcloud.xml                |   32 -
 docs/en-US/building-documentation.xml           |   40 -
 docs/en-US/building-marvin.xml                  |   46 -
 docs/en-US/building-prerequisites.xml           |   66 -
 docs/en-US/building-translation.xml             |   75 -
 docs/en-US/building-with-maven-deploy.xml       |   39 -
 docs/en-US/building-with-maven-steps.xml        |   33 -
 docs/en-US/building-with-maven.xml              |   32 -
 docs/en-US/castor-with-cs.xml                   |   86 -
 ...nge-console-proxy-ssl-certificate-domain.xml |   49 -
 docs/en-US/change-database-config.xml           |   28 -
 docs/en-US/change-database-password.xml         |   76 -
 docs/en-US/change-host-password.xml             |   39 -
 ...change-network-offering-on-guest-network.xml |   68 -
 .../change-to-behavior-of-list-commands.xml     |  108 -
 docs/en-US/changed-API-commands-4.2.xml         | 1129 -----
 docs/en-US/changed-apicommands-4-0.xml          |  268 -
 docs/en-US/changed-apicommands-4.1.xml          |  253 -
 docs/en-US/changing-root-password.xml           |   50 -
 docs/en-US/changing-secondary-storage-ip.xml    |   44 -
 .../changing-secondary-storage-servers.xml      |   36 -
 docs/en-US/changing-service-offering-for-vm.xml |  190 -
 docs/en-US/changing-vm-name-os-group.xml        |   59 -
 .../choosing-a-deployment-architecture.xml      |   29 -
 docs/en-US/choosing-a-hypervisor.xml            |  136 -
 docs/en-US/cisco3750-hardware.xml               |   52 -
 docs/en-US/cisco3750-layer2.xml                 |   45 -
 docs/en-US/citrix-xenserver-installation.xml    |  757 ---
 docs/en-US/cloud-infrastructure-concepts.xml    |   35 -
 docs/en-US/cloud-infrastructure-overview.xml    |   79 -
 docs/en-US/cloudmonkey.xml                      |  264 -
 docs/en-US/cloudstack-api.xml                   |   31 -
 docs/en-US/cloudstack.ent                       |   22 -
 docs/en-US/cloudstack.xml                       |   80 -
 docs/en-US/cluster-add.xml                      |   31 -
 docs/en-US/compatibility-matrix.xml             |  116 -
 docs/en-US/compute-disk-service-offerings.xml   |   50 -
 docs/en-US/concepts.xml                         |   29 -
 docs/en-US/configure-acl.xml                    |  287 --
 ...configure-guest-traffic-in-advanced-zone.xml |   79 -
 docs/en-US/configure-package-repository.xml     |   69 -
 ...igure-public-traffic-in-an-advanced-zone.xml |   25 -
 docs/en-US/configure-snmp-rhel.xml              |   86 -
 docs/en-US/configure-usage-server.xml           |  104 -
 docs/en-US/configure-virtual-router.xml         |   36 -
 docs/en-US/configure-vpc.xml                    |   37 -
 docs/en-US/configure-vpn.xml                    |   53 -
 docs/en-US/configure-xenserver-dom0-memory.xml  |   29 -
 docs/en-US/configuring-projects.xml             |   32 -
 docs/en-US/console-proxy.xml                    |  140 -
 docs/en-US/convert-hyperv-vm-to-template.xml    |   69 -
 docs/en-US/create-bare-metal-template.xml       |   45 -
 docs/en-US/create-linux-template.xml            |   41 -
 docs/en-US/create-new-projects.xml              |   37 -
 docs/en-US/create-template-from-existing-vm.xml |   56 -
 docs/en-US/create-template-from-snapshot.xml    |   28 -
 docs/en-US/create-templates-overview.xml        |   37 -
 docs/en-US/create-vpn-connection-vpc.xml        |  122 -
 docs/en-US/create-vpn-customer-gateway.xml      |  191 -
 docs/en-US/create-vpn-gateway-for-vpc.xml       |   98 -
 docs/en-US/create-vr-network-offering.xml       |  108 -
 docs/en-US/create-windows-template.xml          |   40 -
 docs/en-US/creating-a-plugin.xml                |   29 -
 docs/en-US/creating-compute-offerings.xml       |   70 -
 docs/en-US/creating-disk-offerings.xml          |   48 -
 docs/en-US/creating-my-first-plugin.xml         |  216 -
 docs/en-US/creating-network-offerings.xml       |  285 --
 docs/en-US/creating-new-volumes.xml             |   84 -
 docs/en-US/creating-shared-network.xml          |  132 -
 .../en-US/creating-system-service-offerings.xml |   53 -
 docs/en-US/creating-vms.xml                     |  117 -
 docs/en-US/customizing-dns.xml                  |   44 -
 docs/en-US/database-replication.xml             |  144 -
 docs/en-US/dates-in-usage-record.xml            |   26 -
 docs/en-US/dedicated-ha-hosts.xml               |   34 -
 docs/en-US/default-account-resource-limit.xml   |   45 -
 docs/en-US/default-template.xml                 |   56 -
 docs/en-US/delete-event-alerts.xml              |   89 -
 docs/en-US/delete-reset-vpn.xml                 |  107 -
 docs/en-US/delete-templates.xml                 |   29 -
 docs/en-US/deleting-vms.xml                     |   43 -
 docs/en-US/dell62xx-hardware.xml                |   53 -
 docs/en-US/dell62xx-layer2.xml                  |   49 -
 docs/en-US/deployment-architecture-overview.xml |   57 -
 docs/en-US/detach-move-volumes.xml              |   59 -
 docs/en-US/devcloud-usage-mode.xml              |   60 -
 docs/en-US/devcloud.xml                         |   38 -
 docs/en-US/developer-getting-started.xml        |   38 -
 docs/en-US/developer-introduction.xml           |   30 -
 .../disable-enable-zones-pods-clusters.xml      |   53 -
 docs/en-US/disk-volume-usage-record-format.xml  |   38 -
 docs/en-US/dns-dhcp.xml                         |   28 -
 docs/en-US/domains.xml                          |   28 -
 docs/en-US/egress-firewall-rule.xml             |  168 -
 docs/en-US/elastic-ip.xml                       |  103 -
 docs/en-US/enable-disable-static-nat-vpc.xml    |  112 -
 docs/en-US/enable-disable-static-nat.xml        |   46 -
 docs/en-US/enable-security-groups.xml           |   32 -
 docs/en-US/enabling-api-call-expiration.xml     |   40 -
 docs/en-US/enabling-port-8096.xml               |   37 -
 docs/en-US/end-user-ui-overview.xml             |   27 -
 docs/en-US/error-handling.xml                   |   29 -
 docs/en-US/event-framework.xml                  |  110 -
 docs/en-US/event-log-queries.xml                |   36 -
 docs/en-US/event-types.xml                      |  220 -
 docs/en-US/events-log.xml                       |   35 -
 docs/en-US/events.xml                           |   36 -
 .../example-activedirectory-configuration.xml   |   43 -
 docs/en-US/example-openldap-configuration.xml   |   44 -
 .../example-response-from-listUsageRecords.xml  |   56 -
 docs/en-US/export-template.xml                  |   29 -
 .../external-firewalls-and-load-balancers.xml   |   34 -
 docs/en-US/external-fw-topology-req.xml         |   25 -
 .../external-guest-firewall-integration.xml     |  201 -
 docs/en-US/external-guest-lb-integration.xml    |  109 -
 docs/en-US/extracting-source.xml                |   36 -
 docs/en-US/feature-overview.xml                 |   81 -
 docs/en-US/feedback.xml                         |   24 -
 docs/en-US/firewall-rules.xml                   |   82 -
 docs/en-US/first_ms_node_install.xml            |   57 -
 docs/en-US/generic-firewall-provisions.xml      |   37 -
 docs/en-US/getting-release.xml                  |   40 -
 docs/en-US/global-config.xml                    |  342 --
 docs/en-US/globally-configured-limits.xml       |  100 -
 docs/en-US/gslb.xml                             |  487 --
 docs/en-US/gsoc-dharmesh.xml                    |  149 -
 docs/en-US/gsoc-imduffy15.xml                   |  395 --
 docs/en-US/gsoc-meng.xml                        |  235 -
 docs/en-US/gsoc-midsummer-dharmesh.xml          |  193 -
 docs/en-US/gsoc-midsummer-ian.xml               |  344 --
 docs/en-US/gsoc-midsummer-meng.xml              |  216 -
 docs/en-US/gsoc-midsummer-nguyen.xml            |  480 --
 docs/en-US/gsoc-midsummer-shiva.xml             |  283 --
 docs/en-US/gsoc-midsummer.xml                   |   35 -
 docs/en-US/gsoc-proposals.xml                   |   35 -
 docs/en-US/gsoc-shiva.xml                       |   70 -
 docs/en-US/gsoc-tuna.xml                        |  231 -
 docs/en-US/guest-ip-ranges.xml                  |   32 -
 docs/en-US/guest-network.xml                    |   29 -
 .../guest-nw-usage-with-traffic-sentinel.xml    |   72 -
 docs/en-US/guest-traffic.xml                    |   43 -
 docs/en-US/ha-enabled-vm.xml                    |   29 -
 docs/en-US/ha-for-hosts.xml                     |   30 -
 docs/en-US/ha-management-server.xml             |   30 -
 docs/en-US/hardware-config-eg.xml               |   29 -
 docs/en-US/hardware-firewall.xml                |   32 -
 docs/en-US/health-checks-for-lb-rules.xml       |   51 -
 docs/en-US/host-add-vsphere.xml                 |   28 -
 docs/en-US/host-add-xenserver-kvm-ovm.xml       |  157 -
 docs/en-US/host-add.xml                         |   42 -
 docs/en-US/host-allocation.xml                  |  123 -
 docs/en-US/hypervisor-host-install-agent.xml    |   79 -
 docs/en-US/hypervisor-host-install-finish.xml   |   28 -
 docs/en-US/hypervisor-host-install-firewall.xml |   59 -
 docs/en-US/hypervisor-host-install-libvirt.xml  |   57 -
 ...ervisor-host-install-network-openvswitch.xml |  116 -
 docs/en-US/hypervisor-host-install-network.xml  |  150 -
 docs/en-US/hypervisor-host-install-overview.xml |   37 -
 .../hypervisor-host-install-prepare-os.xml      |   53 -
 ...ypervisor-host-install-security-policies.xml |   70 -
 docs/en-US/hypervisor-installation.xml          |   32 -
 docs/en-US/hypervisor-kvm-install-flow.xml      |   38 -
 docs/en-US/hypervisor-kvm-requirements.xml      |   53 -
 .../hypervisor-support-for-primarystorage.xml   |  104 -
 docs/en-US/images/1000-foot-view.png            |  Bin 222230 -> 0 bytes
 docs/en-US/images/DevCloud-hostonly.png         |  Bin 39311 -> 0 bytes
 docs/en-US/images/DevCloud.png                  |  Bin 33529 -> 0 bytes
 docs/en-US/images/VMSnapshotButton.png          |  Bin 967 -> 0 bytes
 docs/en-US/images/Workloads.png                 |  Bin 39846 -> 0 bytes
 docs/en-US/images/add-account-screen.png        |  Bin 71491 -> 0 bytes
 docs/en-US/images/add-cluster.png               |  Bin 37800 -> 0 bytes
 docs/en-US/images/add-gateway.png               |  Bin 16360 -> 0 bytes
 docs/en-US/images/add-gslb.png                  |  Bin 17665 -> 0 bytes
 docs/en-US/images/add-guest-network.png         |  Bin 24669 -> 0 bytes
 docs/en-US/images/add-ip-range.png              |  Bin 16572 -> 0 bytes
 docs/en-US/images/add-ldap-configuration-ad.png |  Bin 70112 -> 0 bytes
 .../images/add-ldap-configuration-failure.png   |  Bin 84858 -> 0 bytes
 .../images/add-ldap-configuration-openldap.png  |  Bin 65270 -> 0 bytes
 docs/en-US/images/add-ldap-configuration.png    |  Bin 78542 -> 0 bytes
 docs/en-US/images/add-new-gateway-vpc.png       |  Bin 21912 -> 0 bytes
 docs/en-US/images/add-tier.png                  |  Bin 19054 -> 0 bytes
 docs/en-US/images/add-vlan-icon.png             |  Bin 860 -> 0 bytes
 docs/en-US/images/add-vm-vpc.png                |  Bin 8596 -> 0 bytes
 docs/en-US/images/add-vpc.png                   |  Bin 20392 -> 0 bytes
 docs/en-US/images/add-vpn-customer-gateway.png  |  Bin 29851 -> 0 bytes
 docs/en-US/images/addAccount-icon.png           |  Bin 605 -> 0 bytes
 docs/en-US/images/addvm-tier-sharednw.png       |  Bin 111465 -> 0 bytes
 docs/en-US/images/async-calls.png               |  Bin 126157 -> 0 bytes
 docs/en-US/images/attach-disk-icon.png          |  Bin 1092 -> 0 bytes
 docs/en-US/images/autoscale-config.png          |  Bin 39379 -> 0 bytes
 docs/en-US/images/basic-deployment.png          |  Bin 5892 -> 0 bytes
 docs/en-US/images/change-admin-password.png     |  Bin 141860 -> 0 bytes
 docs/en-US/images/change-affinity-button.png    |  Bin 7300 -> 0 bytes
 docs/en-US/images/change-password.png           |  Bin 891 -> 0 bytes
 docs/en-US/images/change-service-icon.png       |  Bin 769 -> 0 bytes
 docs/en-US/images/cluster-overview.png          |  Bin 6080 -> 0 bytes
 docs/en-US/images/clusterDefinition.png         |  Bin 52607 -> 0 bytes
 docs/en-US/images/compute-service-offerings.png |  Bin 75482 -> 0 bytes
 .../en-US/images/configuration-edit-success.png |  Bin 86909 -> 0 bytes
 docs/en-US/images/configurations-screen.png     |  Bin 85285 -> 0 bytes
 docs/en-US/images/console-icon.png              |  Bin 953 -> 0 bytes
 docs/en-US/images/create-account-post.png       |  Bin 116063 -> 0 bytes
 docs/en-US/images/create-account-request.png    |  Bin 169834 -> 0 bytes
 docs/en-US/images/create-vpn-connection.png     |  Bin 13613 -> 0 bytes
 docs/en-US/images/dedicate-resource-button.png  |  Bin 7144 -> 0 bytes
 docs/en-US/images/del-tier.png                  |  Bin 815 -> 0 bytes
 docs/en-US/images/delete-button.png             |  Bin 735 -> 0 bytes
 .../delete-ldap-configuration-failure.png       |  Bin 39952 -> 0 bytes
 docs/en-US/images/delete-ldap-configuration.png |  Bin 69084 -> 0 bytes
 docs/en-US/images/delete-ldap.png               |  Bin 27832 -> 0 bytes
 docs/en-US/images/destroy-instance.png          |  Bin 815 -> 0 bytes
 docs/en-US/images/detach-disk-icon.png          |  Bin 953 -> 0 bytes
 docs/en-US/images/dvswitch-config.png           |  Bin 41955 -> 0 bytes
 docs/en-US/images/dvswitchconfig.png            |  Bin 38642 -> 0 bytes
 docs/en-US/images/ec2-s3-configuration.png      |    0
 docs/en-US/images/edit-configuration.png        |  Bin 86589 -> 0 bytes
 docs/en-US/images/edit-icon.png                 |  Bin 940 -> 0 bytes
 docs/en-US/images/edit-traffic-type.png         |  Bin 93662 -> 0 bytes
 docs/en-US/images/egress-firewall-rule.png      |  Bin 10413 -> 0 bytes
 docs/en-US/images/eip-ns-basiczone.png          |  Bin 63227 -> 0 bytes
 docs/en-US/images/enable-disable-autoscale.png  |  Bin 913 -> 0 bytes
 docs/en-US/images/enable-disable.png            |  Bin 982 -> 0 bytes
 docs/en-US/images/gslb.png                      |  Bin 68556 -> 0 bytes
 docs/en-US/images/guest-traffic-setup.png       |  Bin 34022 -> 0 bytes
 docs/en-US/images/http-access.png               |  Bin 10214 -> 0 bytes
 docs/en-US/images/icon.svg                      |   37 -
 docs/en-US/images/infrastructure-overview.png   |  Bin 11852 -> 0 bytes
 docs/en-US/images/installation-complete.png     |  Bin 20814 -> 0 bytes
 docs/en-US/images/instances-screen.png          |  Bin 66865 -> 0 bytes
 docs/en-US/images/iso-icon.png                  |  Bin 991 -> 0 bytes
 docs/en-US/images/jenkins-pipeline.png          |  Bin 29136 -> 0 bytes
 docs/en-US/images/l3_services.png               |  Bin 30362 -> 0 bytes
 .../images/large-scale-redundant-setup.png      |  Bin 109117 -> 0 bytes
 docs/en-US/images/launchHadoopClusterApi.png    |  Bin 13427 -> 0 bytes
 docs/en-US/images/launchHadoopClusterCmd.png    |  Bin 83972 -> 0 bytes
 docs/en-US/images/ldap-account-addition.png     |  Bin 69225 -> 0 bytes
 docs/en-US/images/ldap-configuration.png        |  Bin 33360 -> 0 bytes
 docs/en-US/images/ldap-global-settings.png      |  Bin 31145 -> 0 bytes
 docs/en-US/images/ldap-list-users.png           |  Bin 85922 -> 0 bytes
 docs/en-US/images/list-domain-vms.png           |  Bin 130442 -> 0 bytes
 docs/en-US/images/list-ldap-configuration.png   |  Bin 38909 -> 0 bytes
 docs/en-US/images/list-specific-vm.png          |  Bin 86323 -> 0 bytes
 docs/en-US/images/list-virtualmachines.png      |  Bin 124665 -> 0 bytes
 docs/en-US/images/mesos-integration-arch.jpg    |    0
 docs/en-US/images/migrate-instance.png          |  Bin 837 -> 0 bytes
 .../images/multi-node-management-server.png     |  Bin 26912 -> 0 bytes
 docs/en-US/images/multi-site-deployment.png     |  Bin 68190 -> 0 bytes
 docs/en-US/images/multi-tier-app.png            |  Bin 200956 -> 0 bytes
 docs/en-US/images/network-acl.png               |  Bin 23333 -> 0 bytes
 docs/en-US/images/network-setup-zone.png        |  Bin 67410 -> 0 bytes
 docs/en-US/images/network-singlepod.png         |  Bin 18381 -> 0 bytes
 docs/en-US/images/network_service.png           |  Bin 28162 -> 0 bytes
 docs/en-US/images/networking-in-a-pod.png       |  Bin 16365 -> 0 bytes
 docs/en-US/images/networking-in-a-zone.png      |  Bin 88746 -> 0 bytes
 .../images/nic-bonding-and-multipath-io.png     |  Bin 42030 -> 0 bytes
 docs/en-US/images/nvp-add-controller.png        |  Bin 35928 -> 0 bytes
 docs/en-US/images/nvp-enable-provider.png       |  Bin 32158 -> 0 bytes
 docs/en-US/images/nvp-network-offering.png      |  Bin 104060 -> 0 bytes
 docs/en-US/images/nvp-physical-network-stt.png  |  Bin 27317 -> 0 bytes
 docs/en-US/images/nvp-vpc-offering-edit.png     |  Bin 29279 -> 0 bytes
 docs/en-US/images/odl_structure.jpg             |  Bin 116542 -> 0 bytes
 docs/en-US/images/parallel-mode.png             |  Bin 11520 -> 0 bytes
 docs/en-US/images/plugin1.jpg                   |  Bin 32999 -> 0 bytes
 docs/en-US/images/plugin2.jpg                   |  Bin 35149 -> 0 bytes
 docs/en-US/images/plugin3.jpg                   |  Bin 41983 -> 0 bytes
 docs/en-US/images/plugin4.jpg                   |  Bin 32125 -> 0 bytes
 docs/en-US/images/plugin_intro.jpg              |  Bin 22247 -> 0 bytes
 docs/en-US/images/pod-overview.png              |  Bin 6036 -> 0 bytes
 docs/en-US/images/provisioning-overview.png     |  Bin 23622 -> 0 bytes
 docs/en-US/images/region-overview.png           |  Bin 22835 -> 0 bytes
 docs/en-US/images/release-ip-icon.png           |  Bin 815 -> 0 bytes
 docs/en-US/images/remove-nic.png                |  Bin 735 -> 0 bytes
 docs/en-US/images/remove-tier.png               |  Bin 7457 -> 0 bytes
 docs/en-US/images/remove-vpc.png                |  Bin 815 -> 0 bytes
 docs/en-US/images/remove-vpn.png                |  Bin 735 -> 0 bytes
 docs/en-US/images/replace-acl-icon.png          |  Bin 982 -> 0 bytes
 docs/en-US/images/replace-acl-list.png          |  Bin 7706 -> 0 bytes
 docs/en-US/images/reset-vpn.png                 |  Bin 860 -> 0 bytes
 docs/en-US/images/resize-volume-icon.png        |  Bin 857 -> 0 bytes
 docs/en-US/images/resize-volume.png             |  Bin 11995 -> 0 bytes
 docs/en-US/images/restart-vpc.png               |  Bin 860 -> 0 bytes
 docs/en-US/images/revert-vm.png                 |  Bin 860 -> 0 bytes
 docs/en-US/images/search-button.png             |  Bin 1012 -> 0 bytes
 docs/en-US/images/select-vm-staticnat-vpc.png   |  Bin 17472 -> 0 bytes
 docs/en-US/images/separate-storage-network.png  |  Bin 44556 -> 0 bytes
 docs/en-US/images/set-default-nic.png           |  Bin 1012 -> 0 bytes
 docs/en-US/images/small-scale-deployment.png    |  Bin 50772 -> 0 bytes
 docs/en-US/images/software-license.png          |  Bin 124257 -> 0 bytes
 docs/en-US/images/start-vm-screen.png           |  Bin 65228 -> 0 bytes
 docs/en-US/images/stop-instance-icon.png        |  Bin 955 -> 0 bytes
 docs/en-US/images/suspend-icon.png              |  Bin 982 -> 0 bytes
 docs/en-US/images/sysmanager.png                |  Bin 114821 -> 0 bytes
 docs/en-US/images/traffic-label.png             |  Bin 15520 -> 0 bytes
 docs/en-US/images/traffic-type.png              |  Bin 19159 -> 0 bytes
 docs/en-US/images/vds-name.png                  |  Bin 64739 -> 0 bytes
 docs/en-US/images/view-console-button.png       |  Bin 59996 -> 0 bytes
 docs/en-US/images/view-systemvm-details.png     |  Bin 25483 -> 0 bytes
 docs/en-US/images/vm-lifecycle.png              |  Bin 20783 -> 0 bytes
 docs/en-US/images/vm-running.png                |  Bin 67708 -> 0 bytes
 docs/en-US/images/vmware-increase-ports.png     |  Bin 66143 -> 0 bytes
 docs/en-US/images/vmware-iscsi-datastore.png    |  Bin 54352 -> 0 bytes
 docs/en-US/images/vmware-iscsi-general.png      |  Bin 15723 -> 0 bytes
 .../vmware-iscsi-initiator-properties.png       |  Bin 45592 -> 0 bytes
 docs/en-US/images/vmware-iscsi-initiator.png    |  Bin 105201 -> 0 bytes
 docs/en-US/images/vmware-iscsi-target-add.png   |  Bin 18509 -> 0 bytes
 .../images/vmware-mgt-network-properties.png    |  Bin 42767 -> 0 bytes
 docs/en-US/images/vmware-nexus-add-cluster.png  |  Bin 37083 -> 0 bytes
 docs/en-US/images/vmware-nexus-port-profile.png |  Bin 118083 -> 0 bytes
 docs/en-US/images/vmware-physical-network.png   |  Bin 136848 -> 0 bytes
 docs/en-US/images/vmware-vswitch-properties.png |  Bin 32376 -> 0 bytes
 docs/en-US/images/vpc-lb.png                    |  Bin 181811 -> 0 bytes
 docs/en-US/images/vpc-setting.png               |  Bin 5636 -> 0 bytes
 docs/en-US/images/vpn-icon.png                  |  Bin 1012 -> 0 bytes
 docs/en-US/images/vsphere-client.png            |  Bin 81246 -> 0 bytes
 docs/en-US/images/whirrDependency.png           |  Bin 10794 -> 0 bytes
 docs/en-US/images/whirrOutput.png               |  Bin 61831 -> 0 bytes
 docs/en-US/images/zone-overview.png             |  Bin 11852 -> 0 bytes
 docs/en-US/import-ami.xml                       |  114 -
 .../increase-management-server-max-memory.xml   |   35 -
 docs/en-US/incremental-snapshots-backup.xml     |   51 -
 ...etup-of-external-firewalls-loadbalancers.xml |   38 -
 docs/en-US/initialize-and-test.xml              |   77 -
 docs/en-US/install-usage-server.xml             |   61 -
 docs/en-US/installation-complete.xml            |   39 -
 docs/en-US/installation-steps-overview.xml      |   67 -
 docs/en-US/installation.xml                     |   32 -
 docs/en-US/installation_steps_overview.xml      |   84 -
 docs/en-US/installing-publican.xml              |   46 -
 docs/en-US/inter-vlan-routing.xml               |  107 -
 docs/en-US/introduction.xml                     |   30 -
 docs/en-US/ip-forwarding-firewalling.xml        |   35 -
 docs/en-US/ip-load-balancing.xml                |   34 -
 docs/en-US/ip-vlan-tenant.xml                   |  212 -
 docs/en-US/ipaddress-usage-record-format.xml    |   42 -
 docs/en-US/ipv6-support.xml                     |  191 -
 docs/en-US/isolated-networks.xml                |   41 -
 docs/en-US/job-status.xml                       |   34 -
 docs/en-US/kvm-topology-req.xml                 |   24 -
 docs/en-US/large_scale_redundant_setup.xml      |   42 -
 docs/en-US/layer2-switch.xml                    |   41 -
 .../lb-policy-pfwd-rule-usage-record-format.xml |   40 -
 docs/en-US/libcloud-examples.xml                |   75 -
 docs/en-US/limit-accounts-domains.xml           |  371 --
 docs/en-US/linux-installation.xml               |   86 -
 docs/en-US/load-balancer-rules.xml              |   41 -
 docs/en-US/log-in-root-admin.xml                |   46 -
 docs/en-US/log-in.xml                           |   48 -
 docs/en-US/long-running-job-events.xml          |   41 -
 docs/en-US/lxc-install.xml                      |  110 -
 docs/en-US/lxc-topology-req.xml                 |   24 -
 docs/en-US/maintain-hypervisors-on-hosts.xml    |   29 -
 .../maintenance-mode-for-primary-storage.xml    |   28 -
 docs/en-US/making-api-request.xml               |   54 -
 docs/en-US/manage-cloud.xml                     |   33 -
 docs/en-US/management-server-install-client.xml |   53 -
 .../management-server-install-complete.xml      |   39 -
 .../management-server-install-db-external.xml   |  145 -
 .../management-server-install-db-local.xml      |  167 -
 docs/en-US/management-server-install-db.xml     |   34 -
 docs/en-US/management-server-install-flow.xml   |   42 -
 .../management-server-install-multi-node.xml    |   69 -
 .../management-server-install-nfs-shares.xml    |   40 -
 .../management-server-install-overview.xml      |   48 -
 .../management-server-install-prepare-os.xml    |   54 -
 .../management-server-install-systemvm.xml      |   76 -
 docs/en-US/management-server-lb.xml             |   66 -
 docs/en-US/management-server-overview.xml       |   76 -
 docs/en-US/manual-live-migration.xml            |   56 -
 docs/en-US/marvin.xml                           |   33 -
 docs/en-US/max-result-page-returned.xml         |   38 -
 ...migrate-datadisk-volume-new-storage-pool.xml |   78 -
 ...te-vm-rootvolume-volume-new-storage-pool.xml |   47 -
 docs/en-US/minimum-system-requirements.xml      |   74 -
 docs/en-US/modify-delete-service-offerings.xml  |   29 -
 docs/en-US/multi_node_management_server.xml     |   36 -
 docs/en-US/multi_node_overview.xml              |   43 -
 docs/en-US/multi_site_deployment.xml            |   50 -
 docs/en-US/multiple-ip-nic.xml                  |   95 -
 docs/en-US/multiple-ip-range.xml                |   42 -
 docs/en-US/multiple-system-vm-vmware.xml        |   28 -
 .../network-offering-usage-record-format.xml    |   43 -
 docs/en-US/network-offerings.xml                |   87 -
 docs/en-US/network-rate.xml                     |  144 -
 docs/en-US/network-service-providers.xml        |  151 -
 docs/en-US/network-setup.xml                    |   35 -
 docs/en-US/network-usage-record-format.xml      |   40 -
 docs/en-US/networking-in-a-pod.xml              |   46 -
 docs/en-US/networking-in-a-zone.xml             |   38 -
 docs/en-US/networking-overview.xml              |   34 -
 docs/en-US/networking_overview.xml              |   36 -
 docs/en-US/networks-for-users-overview.xml      |   35 -
 docs/en-US/networks.xml                         |   58 -
 docs/en-US/nfs-shares-on-management-server.xml  |  117 -
 docs/en-US/nfs-shares-on-separate-server.xml    |   52 -
 docs/en-US/non-contiguous-vlan.xml              |   67 -
 docs/en-US/offerings.xml                        |   30 -
 .../ongoing-config-of-external-firewalls-lb.xml |   46 -
 ...ver-provisioning-service-offering-limits.xml |  161 -
 docs/en-US/ovm-install.xml                      |   29 -
 docs/en-US/ovm-requirements.xml                 |   28 -
 docs/en-US/password-storage-engine.xml          |   74 -
 docs/en-US/per-domain-limits.xml                |   40 -
 docs/en-US/performance-monitoring.xml           |   29 -
 docs/en-US/persistent-network.xml               |  100 -
 .../physical-network-configuration-settings.xml |   37 -
 docs/en-US/plugin-development.xml               |   28 -
 docs/en-US/plugin-midonet-about.xml             |   27 -
 docs/en-US/plugin-midonet-features.xml          |   57 -
 docs/en-US/plugin-midonet-introduction.xml      |   26 -
 docs/en-US/plugin-midonet-preparations.xml      |   90 -
 docs/en-US/plugin-midonet-provider.xml          |   39 -
 docs/en-US/plugin-midonet-revisions.xml         |   45 -
 docs/en-US/plugin-midonet-ui.xml                |   65 -
 docs/en-US/plugin-midonet-usage.xml             |   29 -
 docs/en-US/plugin-niciranvp-about.xml           |   28 -
 .../en-US/plugin-niciranvp-devicemanagement.xml |   35 -
 docs/en-US/plugin-niciranvp-features.xml        |   84 -
 docs/en-US/plugin-niciranvp-introduction.xml    |   29 -
 .../en-US/plugin-niciranvp-networkofferings.xml |  131 -
 docs/en-US/plugin-niciranvp-physicalnet.xml     |   37 -
 docs/en-US/plugin-niciranvp-preparations.xml    |   37 -
 docs/en-US/plugin-niciranvp-provider.xml        |   36 -
 docs/en-US/plugin-niciranvp-revisions.xml       |   59 -
 docs/en-US/plugin-niciranvp-tables.xml          |  106 -
 docs/en-US/plugin-niciranvp-troubleshooting.xml |   28 -
 docs/en-US/plugin-niciranvp-ui.xml              |   26 -
 docs/en-US/plugin-niciranvp-usage.xml           |   33 -
 docs/en-US/plugin-niciranvp-uuidreferences.xml  |   30 -
 docs/en-US/plugin-niciranvp-vpc.xml             |   30 -
 docs/en-US/plugin-niciranvp-vpcfeatures.xml     |   28 -
 .../plugin-niciranvp-vpcnetworkoffering.xml     |   81 -
 docs/en-US/plugin-niciranvp-vpcoffering.xml     |   38 -
 docs/en-US/pod-add.xml                          |   43 -
 docs/en-US/port-forwarding.xml                  |   51 -
 docs/en-US/portable-ip.xml                      |  145 -
 docs/en-US/prepare-linux-template.xml           |  190 -
 docs/en-US/prepare-system-vm-template.xml       |   79 -
 docs/en-US/primary-storage-add.xml              |  163 -
 .../primary-storage-outage-and-data-loss.xml    |   28 -
 docs/en-US/primary-storage.xml                  |   34 -
 docs/en-US/private-public-template.xml          |   30 -
 docs/en-US/projects-overview.xml                |   31 -
 docs/en-US/projects.xml                         |   35 -
 docs/en-US/provisioning-auth-api.xml            |   29 -
 docs/en-US/provisioning-steps-overview.xml      |   45 -
 docs/en-US/provisioning-steps.xml               |   36 -
 docs/en-US/pvlan.xml                            |  247 -
 docs/en-US/re-install-hosts.xml                 |   26 -
 docs/en-US/region-add.xml                       |  151 -
 docs/en-US/release-ip-address.xml               |   43 -
 docs/en-US/release-ip-for-vpc.xml               |   95 -
 docs/en-US/remove-member-from-project.xml       |   44 -
 docs/en-US/remove-tier.xml                      |   57 -
 docs/en-US/remove-vpc.xml                       |   69 -
 docs/en-US/removed-API-commands.xml             |   32 -
 docs/en-US/removed-api-4.2.xml                  |  144 -
 docs/en-US/removing-hosts.xml                   |   30 -
 docs/en-US/removing-vsphere-hosts.xml           |   28 -
 docs/en-US/removing-xenserver-kvm-hosts.xml     |   33 -
 docs/en-US/requirements-templates.xml           |   31 -
 docs/en-US/reserved-ip-addresses-non-csvms.xml  |  166 -
 docs/en-US/reset-ssh-key-dev.xml                |   27 -
 docs/en-US/reset-volume-on-reboot.xml           |   32 -
 docs/en-US/resizing-volumes.xml                 |   98 -
 docs/en-US/response-formats.xml                 |   58 -
 docs/en-US/responses.xml                        |   30 -
 docs/en-US/roles.xml                            |   35 -
 docs/en-US/root-admin-ui-overview.xml           |   28 -
 ...ime-allocation-virtual-network-resources.xml |   31 -
 .../runtime-behavior-of-primary-storage.xml     |   31 -
 docs/en-US/runtime-internal-comm-req.xml        |   39 -
 ...duled-maintenance-maintenance-mode-hosts.xml |   30 -
 docs/en-US/search-base.xml                      |   51 -
 docs/en-US/secondary-storage-add.xml            |   87 -
 .../secondary-storage-outage-and-data-loss.xml  |   29 -
 docs/en-US/secondary-storage-vm.xml             |   33 -
 docs/en-US/secondary-storage.xml                |   30 -
 docs/en-US/security-groups-advanced-zones.xml   |   52 -
 docs/en-US/security-groups.xml                  |   32 -
 docs/en-US/security-req.xml                     |   24 -
 .../send-projects-membership-invitation.xml     |   42 -
 docs/en-US/separate_storage_network.xml         |   24 -
 docs/en-US/service-offerings.xml                |   31 -
 docs/en-US/set-database-buffer-pool-size.xml    |   36 -
 .../set-global-project-resource-limits.xml      |   82 -
 .../set-monitor-total-vm-limits-per-host.xml    |   29 -
 docs/en-US/set-per-project-resource-limits.xml  |   55 -
 docs/en-US/set-projects-creator-permissions.xml |   62 -
 docs/en-US/set-resource-limits-for-projects.xml |   32 -
 docs/en-US/set-up-invitations.xml               |   96 -
 docs/en-US/set-up-network-for-users.xml         |   30 -
 docs/en-US/set-usage-limit.xml                  |   29 -
 docs/en-US/set-zone-vlan-run-vm-max.xml         |   65 -
 docs/en-US/shared-networks.xml                  |   52 -
 docs/en-US/signing-api-calls-python.xml         |  101 -
 docs/en-US/signing-api-requests.xml             |   63 -
 docs/en-US/site-to-site-vpn.xml                 |   70 -
 docs/en-US/small_scale_deployment.xml           |   37 -
 docs/en-US/snapshot-performance-vmware.xml      |   39 -
 docs/en-US/snapshot-restore.xml                 |   28 -
 docs/en-US/snapshot-throttling.xml              |   45 -
 docs/en-US/source-build.xml                     |   49 -
 docs/en-US/source-prereqs.xml                   |   45 -
 docs/en-US/source.xml                           |   38 -
 docs/en-US/ssl.xml                              |   29 -
 docs/en-US/standard-events.xml                  |   40 -
 docs/en-US/static-nat.xml                       |   28 -
 .../sticky-session-policies-for-lb-rules.xml    |   41 -
 docs/en-US/stop-restart-management-server.xml   |   34 -
 docs/en-US/stopped-vm.xml                       |   35 -
 docs/en-US/stopping-and-starting-vms.xml        |   29 -
 docs/en-US/storage-nw-topology-req.xml          |   28 -
 docs/en-US/storage-overview.xml                 |   27 -
 docs/en-US/storage-plugins.xml                  |  144 -
 docs/en-US/storage-setup.xml                    |  192 -
 docs/en-US/storage-tags.xml                     |   29 -
 docs/en-US/storage.xml                          |   31 -
 docs/en-US/suspend-project.xml                  |   52 -
 docs/en-US/sys-offering-sysvm.xml               |   75 -
 docs/en-US/sys-reliability-and-ha.xml           |   34 -
 .../en-US/sysprep-for-windows-server-2003R2.xml |   57 -
 docs/en-US/sysprep-windows-server-2008R2.xml    |   71 -
 docs/en-US/system-reserved-ip-addresses.xml     |   41 -
 docs/en-US/system-service-offerings.xml         |   30 -
 docs/en-US/system-vm-template.xml               |   37 -
 docs/en-US/tagging-resources.xml                |   69 -
 ...emplate-iso-snapshot-usage-record-format.xml |   42 -
 docs/en-US/templates.xml                        |   29 -
 docs/en-US/third-party-ui-plugin.xml            |  364 --
 docs/en-US/time-zones.xml                       |  137 -
 docs/en-US/tools.xml                            |   31 -
 docs/en-US/topology-req.xml                     |   32 -
 docs/en-US/translating-documentation.xml        |   38 -
 docs/en-US/troubleshooting-alerts.xml           |   57 -
 docs/en-US/troubleshooting-lb-rules-fails.xml   |   39 -
 ...ubleshooting-recover-lost-virtual-router.xml |   46 -
 .../troubleshooting-unable-to-deploy-vms.xml    |   39 -
 .../troubleshooting-unable-to-power-on-vm.xml   |   45 -
 ...troubleshooting-working-with-server-logs.xml |   41 -
 docs/en-US/troubleshooting.xml                  |   35 -
 ...oublesht-dataloss-on-exp-primary-storage.xml |   45 -
 ...oublesht-mtn-mode-not-working-on-vCenter.xml |   43 -
 docs/en-US/tuning.xml                           |   33 -
 docs/en-US/ui.xml                               |   29 -
 docs/en-US/update-iso-vm.xml                    |   47 -
 ...ade-virtual-router-with-service-offering.xml |   36 -
 docs/en-US/upload-existing-volume-to-vm.xml     |  111 -
 docs/en-US/upload-template.xml                  |   67 -
 docs/en-US/usage-record-format.xml              |   35 -
 docs/en-US/usage-types.xml                      |  109 -
 docs/en-US/use-project-view.xml                 |   38 -
 docs/en-US/user-data-and-meta-data.xml          |   45 -
 docs/en-US/user-services-overview.xml           |   72 -
 docs/en-US/using-multiple-guest-networks.xml    |   33 -
 docs/en-US/using-netscaler-load-balancers.xml   |   90 -
 docs/en-US/using-sshkeys.xml                    |  112 -
 .../en-US/using-swift-for-secondary-storage.xml |   29 -
 docs/en-US/using-vpn-with-mac.xml               |   41 -
 docs/en-US/using-vpn-with-windows.xml           |   42 -
 docs/en-US/vcenter-maintenance-mode.xml         |   41 -
 docs/en-US/verifying-source.xml                 |   82 -
 .../virtual-machine-usage-record-format.xml     |   45 -
 docs/en-US/virtual-machines.xml                 |   42 -
 docs/en-US/virtual-router.xml                   |   32 -
 docs/en-US/vlan-allocation-eg.xml               |   71 -
 docs/en-US/vlan-assign-isolated-nw.xml          |   66 -
 docs/en-US/vlan-provisioning.xml                |   46 -
 docs/en-US/vm-lifecycle.xml                     |   43 -
 docs/en-US/vm-snapshots.xml                     |  148 -
 docs/en-US/vm-storage-migration.xml             |   48 -
 docs/en-US/vmware-cluster-config-dvswitch.xml   |  283 --
 docs/en-US/vmware-install.xml                   |  928 ----
 docs/en-US/vmware-requirements.xml              |   80 -
 docs/en-US/vmware-topology-req.xml              |   38 -
 docs/en-US/vmx-settings-dev.xml                 |   40 -
 docs/en-US/vnmc-cisco.xml                       |  400 --
 .../volume-deletion-garbage-collection.xml      |   44 -
 docs/en-US/volume-status.xml                    |   36 -
 docs/en-US/vpc.xml                              |  189 -
 docs/en-US/vpn.xml                              |   62 -
 docs/en-US/whatis.xml                           |   41 -
 docs/en-US/whats-in-this-adminguide.xml         |   28 -
 docs/en-US/whats-new.xml                        |   55 -
 docs/en-US/who-should-read-installation.xml     |   28 -
 docs/en-US/windows-installation.xml             |   29 -
 docs/en-US/work-with-usage.xml                  |   38 -
 docs/en-US/working-with-documentation.xml       |   32 -
 docs/en-US/working-with-hosts.xml               |   39 -
 docs/en-US/working-with-iso.xml                 |   33 -
 docs/en-US/working-with-snapshots.xml           |   37 -
 docs/en-US/working-with-system-vm.xml           |   40 -
 docs/en-US/working-with-templates.xml           |   45 -
 docs/en-US/working-with-usage-data.xml          |   35 -
 docs/en-US/working-with-volumes.xml             |   53 -
 docs/en-US/writing-new-documentation.xml        |  100 -
 docs/en-US/xenserver-maintenance-mode.xml       |   51 -
 docs/en-US/xenserver-topology-req.xml           |   24 -
 docs/en-US/zone-add.xml                         |   48 -
 docs/pot/Admin_Guide.pot                        |   40 -
 docs/pot/Author_Group.pot                       |   35 -
 docs/pot/Book_Info.pot                          |   45 -
 docs/pot/Book_Info_Release_Notes_4-0.pot        |   45 -
 docs/pot/CloudStack_Nicira_NVP_Guide.pot        |   40 -
 docs/pot/Common_Content/Legal_Notice.pot        |   50 -
 docs/pot/Developers_Guide.pot                   |   40 -
 docs/pot/Installation_Guide.pot                 |   40 -
 docs/pot/LDAPserver-for-user-authentication.pot |   60 -
 docs/pot/Preface.pot                            |   30 -
 docs/pot/Release_Notes.pot                      | 4478 -----------------
 docs/pot/Revision_History.pot                   |   45 -
 docs/pot/Revision_History_Install_Guide.pot     |   65 -
 docs/pot/SSL-keystore-path-and-password.pot     |   35 -
 docs/pot/VPN-user-usage-record-format.pot       |   80 -
 docs/pot/about-clusters.pot                     |   60 -
 docs/pot/about-hosts.pot                        |  100 -
 docs/pot/about-password-encryption.pot          |   85 -
 docs/pot/about-physical-networks.pot            |   70 -
 docs/pot/about-pods.pot                         |   50 -
 docs/pot/about-primary-storage.pot              |   60 -
 docs/pot/about-secondary-storage.pot            |   60 -
 docs/pot/about-security-groups.pot              |   60 -
 docs/pot/about-virtual-networks.pot             |   35 -
 docs/pot/about-working-with-vms.pot             |   75 -
 docs/pot/about-zones.pot                        |  100 -
 docs/pot/accept-membership-invite.pot           |   65 -
 docs/pot/accessing-vms.pot                      |   75 -
 docs/pot/accounts-users-domains.pot             |  100 -
 docs/pot/accounts.pot                           |   30 -
 docs/pot/acquire-new-ip-address.pot             |   60 -
 docs/pot/acquire-new-ip-for-vpc.pot             |  115 -
 docs/pot/add-additional-guest-network.pot       |   80 -
 docs/pot/add-clusters-kvm-xenserver.pot         |   75 -
 docs/pot/add-clusters-ovm.pot                   |   85 -
 docs/pot/add-clusters-vsphere.pot               |  125 -
 docs/pot/add-gateway-vpc.pot                    |  145 -
 docs/pot/add-ingress-egress-rules.pot           |  125 -
 docs/pot/add-iso.pot                            |  215 -
 docs/pot/add-load-balancer-rule.pot             |  110 -
 docs/pot/add-loadbalancer-rule-vpc.pot          |  180 -
 docs/pot/add-members-to-projects.pot            |   45 -
 docs/pot/add-more-clusters.pot                  |   35 -
 .../add-password-management-to-templates.pot    |   50 -
 docs/pot/add-portforward-rule-vpc.pot           |  155 -
 docs/pot/add-primary-storage.pot                |  145 -
 docs/pot/add-projects-members-from-ui.pot       |   65 -
 docs/pot/add-secondary-storage.pot              |   60 -
 docs/pot/add-security-group.pot                 |   75 -
 docs/pot/add-tier.pot                           |  125 -
 docs/pot/add-vm-to-tier.pot                     |   75 -
 docs/pot/add-vpc.pot                            |   85 -
 docs/pot/added-API-commands-4-0.pot             |  259 -
 docs/pot/added-API-commands.pot                 |  375 --
 docs/pot/added-error-codes.pot                  |  330 --
 ...ding-IP-addresses-for-the-public-network.pot |   85 -
 docs/pot/additional-installation-options.pot    |   35 -
 docs/pot/admin-alerts.pot                       |   60 -
 docs/pot/admin-guide.pot                        |   30 -
 docs/pot/adv-zone-topology-req.pot              |   35 -
 docs/pot/advanced-zone-configuration.pot        |  345 --
 docs/pot/advanced-zone-guest-ip-addresses.pot   |   35 -
 .../pot/advanced-zone-network-traffic-types.pot |   60 -
 ...nced-zone-physical-network-configuration.pot |   35 -
 docs/pot/advanced-zone-public-ip-addresses.pot  |   35 -
 docs/pot/alerts.pot                             |  165 -
 docs/pot/allocators.pot                         |   35 -
 docs/pot/api-calls.pot                          |   30 -
 docs/pot/api-overview.pot                       |   50 -
 docs/pot/api-reference.pot                      |   40 -
 docs/pot/asynchronous-commands-example.pot      |  166 -
 docs/pot/asynchronous-commands.pot              |   55 -
 docs/pot/attach-iso-to-vm.pot                   |   55 -
 docs/pot/attaching-volume.pot                   |   65 -
 .../automatic-snapshot-creation-retention.pot   |   45 -
 docs/pot/autoscale.pot                          |  270 --
 docs/pot/aws-api-examples.pot                   |  166 -
 docs/pot/aws-ec2-configuration.pot              |  153 -
 docs/pot/aws-ec2-introduction.pot               |   65 -
 docs/pot/aws-ec2-requirements.pot               |   45 -
 docs/pot/aws-ec2-supported-commands.pot         |  665 ---
 docs/pot/aws-ec2-timeouts.pot                   |   80 -
 docs/pot/aws-ec2-user-setup.pot                 |  141 -
 docs/pot/aws-interface-compatibility.pot        |   30 -
 docs/pot/basic-adv-networking.pot               |  195 -
 docs/pot/basic-zone-configuration.pot           |  360 --
 docs/pot/basic-zone-guest-ip-addresses.pot      |   35 -
 docs/pot/basic-zone-network-traffic-types.pot   |   65 -
 ...asic-zone-physical-network-configuration.pot |   35 -
 docs/pot/best-practices-for-vms.pot             |   35 -
 docs/pot/best-practices-primary-storage.pot     |   40 -
 docs/pot/best-practices-secondary-storage.pot   |   45 -
 docs/pot/best-practices-templates.pot           |   35 -
 docs/pot/best-practices-virtual-router.pot      |   40 -
 docs/pot/build-deb.pot                          |  175 -
 docs/pot/build-rpm.pot                          |  111 -
 docs/pot/building-devcloud.pot                  |   50 -
 docs/pot/building-marvin.pot                    |   91 -
 docs/pot/building-prerequisites.pot             |  116 -
 docs/pot/building-with-maven-deploy.pot         |   65 -
 docs/pot/building-with-maven-steps.pot          |   55 -
 docs/pot/building-with-maven.pot                |   30 -
 docs/pot/castor-with-cs.pot                     |  123 -
 ...nge-console-proxy-ssl-certificate-domain.pot |  120 -
 docs/pot/change-database-config.pot             |   35 -
 docs/pot/change-database-password.pot           |  126 -
 docs/pot/change-host-password.pot               |   75 -
 ...change-network-offering-on-guest-network.pot |   75 -
 .../pot/change-to-behavior-of-list-commands.pot |  170 -
 docs/pot/changed-apicommands-4-0.pot            |  575 ---
 docs/pot/changing-root-password.pot             |   80 -
 docs/pot/changing-secondary-storage-ip.pot      |   62 -
 docs/pot/changing-secondary-storage-servers.pot |   60 -
 docs/pot/changing-service-offering-for-vm.pot   |   70 -
 docs/pot/changing-vm-name-os-group.pot          |   90 -
 docs/pot/choosing-a-deployment-architecture.pot |   35 -
 docs/pot/cisco3750-hardware.pot                 |   76 -
 docs/pot/cisco3750-layer2.pot                   |   66 -
 docs/pot/citrix-xenserver-installation.pot      | 1195 -----
 docs/pot/cloud-infrastructure-concepts.pot      |   30 -
 docs/pot/cloud-infrastructure-overview.pot      |   75 -
 docs/pot/cloudstack-api.pot                     |   50 -
 docs/pot/cloudstack.pot                         |   40 -
 docs/pot/cluster-add.pot                        |   35 -
 docs/pot/compatibility-matrix.pot               |  115 -
 docs/pot/compute-disk-service-offerings.pot     |   95 -
 docs/pot/concepts.pot                           |   30 -
 docs/pot/configure-acl.pot                      |  165 -
 ...configure-guest-traffic-in-advanced-zone.pot |   95 -
 docs/pot/configure-package-repository.pot       |  131 -
 ...igure-public-traffic-in-an-advanced-zone.pot |   35 -
 docs/pot/configure-snmp-rhel.pot                |  143 -
 docs/pot/configure-usage-server.pot             |  230 -
 docs/pot/configure-virtual-router.pot           |   60 -
 docs/pot/configure-vpc.pot                      |   30 -
 docs/pot/configure-vpn.pot                      |  105 -
 docs/pot/configure-xenserver-dom0-memory.pot    |   35 -
 docs/pot/configuring-projects.pot               |   35 -
 docs/pot/console-proxy.pot                      |   70 -
 docs/pot/convert-hyperv-vm-to-template.pot      |  170 -
 docs/pot/create-bare-metal-template.pot         |  110 -
 docs/pot/create-new-projects.pot                |   70 -
 docs/pot/create-template-from-existing-vm.pot   |  105 -
 docs/pot/create-template-from-snapshot.pot      |   35 -
 docs/pot/create-templates-overview.pot          |   60 -
 docs/pot/create-vpn-connection-vpc.pot          |  160 -
 docs/pot/create-vpn-customer-gateway.pot        |  180 -
 docs/pot/create-vpn-gateway-for-vpc.pot         |  130 -
 docs/pot/create-vr-network-offering.pot         |  140 -
 docs/pot/create-windows-template.pot            |   75 -
 docs/pot/creating-compute-offerings.pot         |  125 -
 docs/pot/creating-disk-offerings.pot            |   95 -
 docs/pot/creating-network-offerings.pot         |  225 -
 docs/pot/creating-new-volumes.pot               |   80 -
 docs/pot/creating-system-service-offerings.pot  |  130 -
 docs/pot/creating-vms.pot                       |   95 -
 docs/pot/customizing-dns.pot                    |   85 -
 docs/pot/database-replication.pot               |  254 -
 docs/pot/dates-in-usage-record.pot              |   50 -
 docs/pot/dedicated-ha-hosts.pot                 |   55 -
 docs/pot/default-account-resource-limit.pot     |   60 -
 docs/pot/default-template.pot                   |   79 -
 docs/pot/delete-reset-vpn.pot                   |  130 -
 docs/pot/delete-templates.pot                   |   40 -
 docs/pot/deleting-vms.pot                       |   60 -
 docs/pot/dell62xx-hardware.pot                  |   82 -
 docs/pot/dell62xx-layer2.pot                    |   75 -
 docs/pot/deployment-architecture-overview.pot   |   45 -
 docs/pot/detach-move-volumes.pot                |   65 -
 docs/pot/devcloud-usage-mode.pot                |   75 -
 docs/pot/devcloud.pot                           |   55 -
 docs/pot/developer-getting-started.pot          |   60 -
 docs/pot/developer-introduction.pot             |   30 -
 docs/pot/disable-enable-zones-pods-clusters.pot |   85 -
 docs/pot/disk-volume-usage-record-format.pot    |  105 -
 docs/pot/dns-dhcp.pot                           |   35 -
 docs/pot/domains.pot                            |   35 -
 docs/pot/enable-disable-static-nat-vpc.pot      |  135 -
 docs/pot/enable-disable-static-nat.pot          |   75 -
 docs/pot/enable-security-groups.pot             |   35 -
 docs/pot/enabling-api-call-expiration.pot       |   70 -
 docs/pot/enabling-port-8096.pot                 |   55 -
 docs/pot/end-user-ui-overview.pot               |   35 -
 docs/pot/error-handling.pot                     |   40 -
 docs/pot/event-log-queries.pot                  |   65 -
 docs/pot/event-types.pot                        |  575 ---
 docs/pot/events-log.pot                         |   35 -
 docs/pot/events.pot                             |   30 -
 .../pot/example-LDAP-configuration-commands.pot |   82 -
 .../example-response-from-listUsageRecords.pot  |   64 -
 docs/pot/export-template.pot                    |   35 -
 .../external-firewalls-and-load-balancers.pot   |   35 -
 docs/pot/external-fw-topology-req.pot           |   35 -
 .../pot/external-guest-firewall-integration.pot |  251 -
 docs/pot/external-guest-lb-integration.pot      |  155 -
 docs/pot/extracting-source.pot                  |   50 -
 docs/pot/feature-overview.pot                   |  100 -
 docs/pot/firewall-rules.pot                     |  105 -
 docs/pot/first_ms_node_install.pot              |   64 -
 docs/pot/generic-firewall-provisions.pot        |   50 -
 docs/pot/getting-release.pot                    |   60 -
 docs/pot/global-config.pot                      |   70 -
 docs/pot/globally-configured-limits.pot         |  175 -
 docs/pot/guest-ip-ranges.pot                    |   35 -
 docs/pot/guest-network.pot                      |   40 -
 .../guest-nw-usage-with-traffic-sentinel.pot    |   90 -
 docs/pot/guest-traffic.pot                      |   50 -
 docs/pot/ha-enabled-vm.pot                      |   40 -
 docs/pot/ha-for-hosts.pot                       |   40 -
 docs/pot/ha-management-server.pot               |   45 -
 docs/pot/hardware-config-eg.pot                 |   35 -
 docs/pot/hardware-firewall.pot                  |   35 -
 docs/pot/host-add-vsphere.pot                   |   35 -
 docs/pot/host-add-xenserver-kvm-ovm.pot         |  210 -
 docs/pot/host-add.pot                           |   60 -
 docs/pot/host-allocation.pot                    |   50 -
 docs/pot/hypervisor-host-install-agent.pot      |   65 -
 docs/pot/hypervisor-host-install-finish.pot     |   35 -
 docs/pot/hypervisor-host-install-firewall.pot   |  160 -
 docs/pot/hypervisor-host-install-libvirt.pot    |  140 -
 ...ervisor-host-install-network-openvswitch.pot |  263 -
 docs/pot/hypervisor-host-install-network.pot    |  313 --
 docs/pot/hypervisor-host-install-overview.pot   |   70 -
 docs/pot/hypervisor-host-install-prepare-os.pot |  105 -
 ...ypervisor-host-install-security-policies.pot |  145 -
 docs/pot/hypervisor-installation.pot            |   30 -
 docs/pot/hypervisor-kvm-install-flow.pot        |   30 -
 docs/pot/hypervisor-kvm-requirements.pot        |  115 -
 .../hypervisor-support-for-primarystorage.pot   |  155 -
 docs/pot/import-ami.pot                         |  270 --
 .../increase-management-server-max-memory.pot   |   70 -
 docs/pot/incremental-snapshots-backup.pot       |   70 -
 ...etup-of-external-firewalls-loadbalancers.pot |   65 -
 docs/pot/initialize-and-test.pot                |  100 -
 docs/pot/install-usage-server.pot               |  106 -
 docs/pot/installation-complete.pot              |   50 -
 docs/pot/installation-steps-overview.pot        |  110 -
 docs/pot/installation.pot                       |   30 -
 docs/pot/installation_steps_overview.pot        |  135 -
 docs/pot/inter-vlan-routing.pot                 |  120 -
 docs/pot/introduction.pot                       |   30 -
 docs/pot/ip-forwarding-firewalling.pot          |   45 -
 docs/pot/ip-load-balancing.pot                  |   55 -
 docs/pot/ipaddress-usage-record-format.pot      |   95 -
 docs/pot/isolated-networks.pot                  |   50 -
 docs/pot/job-status.pot                         |   50 -
 docs/pot/kvm-topology-req.pot                   |   35 -
 docs/pot/large_scale_redundant_setup.pot        |   70 -
 docs/pot/layer2-switch.pot                      |   55 -
 .../lb-policy-pfwd-rule-usage-record-format.pot |   80 -
 docs/pot/linux-installation.pot                 |  101 -
 docs/pot/load-balancer-rules.pot                |   40 -
 docs/pot/log-in-root-admin.pot                  |   85 -
 docs/pot/log-in.pot                             |   90 -
 docs/pot/long-running-job-events.pot            |   65 -
 docs/pot/maintain-hypervisors-on-hosts.pot      |   45 -
 .../maintenance-mode-for-primary-storage.pot    |   35 -
 docs/pot/making-api-request.pot                 |  105 -
 docs/pot/manage-cloud.pot                       |   30 -
 docs/pot/management-server-install-client.pot   |   95 -
 docs/pot/management-server-install-complete.pot |   50 -
 .../management-server-install-db-external.pot   |  219 -
 docs/pot/management-server-install-db-local.pot |  198 -
 docs/pot/management-server-install-db.pot       |   40 -
 docs/pot/management-server-install-flow.pot     |   30 -
 .../management-server-install-multi-node.pot    |  110 -
 .../management-server-install-nfs-shares.pot    |   70 -
 docs/pot/management-server-install-overview.pot |   95 -
 .../management-server-install-prepare-os.pot    |  105 -
 docs/pot/management-server-install-systemvm.pot |  111 -
 docs/pot/management-server-lb.pot               |  105 -
 docs/pot/management-server-overview.pot         |   85 -
 docs/pot/manual-live-migration.pot              |   95 -
 docs/pot/marvin.pot                             |   45 -
 docs/pot/max-result-page-returned.pot           |   60 -
 ...migrate-datadisk-volume-new-storage-pool.pot |   55 -
 ...te-vm-rootvolume-volume-new-storage-pool.pot |   65 -
 docs/pot/minimum-system-requirements.pot        |  150 -
 docs/pot/modify-delete-service-offerings.pot    |   40 -
 docs/pot/multi_node_management_server.pot       |   55 -
 docs/pot/multi_node_overview.pot                |   75 -
 docs/pot/multi_site_deployment.pot              |   65 -
 docs/pot/multiple-system-vm-vmware.pot          |   35 -
 .../network-offering-usage-record-format.pot    |   90 -
 docs/pot/network-offerings.pot                  |  115 -
 docs/pot/network-rate.pot                       |  195 -
 docs/pot/network-service-providers.pot          |   60 -
 docs/pot/network-setup.pot                      |   35 -
 docs/pot/network-usage-record-format.pot        |   85 -
 docs/pot/networking-in-a-pod.pot                |   60 -
 docs/pot/networking-in-a-zone.pot               |   45 -
 docs/pot/networking-overview.pot                |   50 -
 docs/pot/networking_overview.pot                |   50 -
 docs/pot/networks-for-users-overview.pot        |   60 -
 docs/pot/networks.pot                           |   35 -
 docs/pot/nfs-shares-on-management-server.pot    |  240 -
 docs/pot/nfs-shares-on-separate-server.pot      |  108 -
 docs/pot/offerings.pot                          |   35 -
 .../ongoing-config-of-external-firewalls-lb.pot |   55 -
 ...ver-provisioning-service-offering-limits.pot |   50 -
 docs/pot/ovm-install.pot                        |   35 -
 docs/pot/ovm-requirements.pot                   |   35 -
 docs/pot/per-domain-limits.pot                  |   60 -
 docs/pot/performance-monitoring.pot             |   35 -
 .../physical-network-configuration-settings.pot |   70 -
 docs/pot/plugin-niciranvp-about.pot             |   30 -
 docs/pot/plugin-niciranvp-devicemanagement.pot  |   85 -
 docs/pot/plugin-niciranvp-features.pot          |   55 -
 docs/pot/plugin-niciranvp-guide.pot             |   30 -
 docs/pot/plugin-niciranvp-introduction.pot      |   35 -
 docs/pot/plugin-niciranvp-preparations.pot      |   75 -
 docs/pot/plugin-niciranvp-provider.pot          |   65 -
 docs/pot/plugin-niciranvp-revisions.pot         |   45 -
 docs/pot/plugin-niciranvp-tables.pot            |   90 -
 docs/pot/plugin-niciranvp-troubleshooting.pot   |   30 -
 docs/pot/plugin-niciranvp-ui.pot                |   35 -
 docs/pot/plugin-niciranvp-usage.pot             |   30 -
 docs/pot/plugin-niciranvp-uuidreferences.pot    |   50 -
 docs/pot/pod-add.pot                            |   85 -
 docs/pot/port-forwarding.pot                    |  115 -
 docs/pot/prepare-system-vm-template.pot         |  116 -
 docs/pot/primary-storage-add.pot                |  190 -
 .../primary-storage-outage-and-data-loss.pot    |   35 -
 docs/pot/primary-storage.pot                    |   40 -
 docs/pot/private-public-template.pot            |   45 -
 docs/pot/projects-overview.pot                  |   50 -
 docs/pot/projects.pot                           |   30 -
 docs/pot/provisioning-auth-api.pot              |   40 -
 docs/pot/provisioning-steps-overview.pot        |   85 -
 docs/pot/provisioning-steps.pot                 |   35 -
 docs/pot/query-filter.pot                       |  115 -
 docs/pot/re-install-hosts.pot                   |   35 -
 docs/pot/release-ip-address.pot                 |   60 -
 docs/pot/release-ip-for-vpc.pot                 |  115 -
 docs/pot/remove-member-from-project.pot         |   75 -
 docs/pot/remove-tier.pot                        |   75 -
 docs/pot/remove-vpc.pot                         |   75 -
 docs/pot/removed-API-commands.pot               |   40 -
 docs/pot/removing-hosts.pot                     |   35 -
 docs/pot/removing-vsphere-hosts.pot             |   35 -
 docs/pot/removing-xenserver-kvm-hosts.pot       |   60 -
 docs/pot/requirements-templates.pot             |   40 -
 docs/pot/resizing-volumes.pot                   |   70 -
 docs/pot/response-formats.pot                   |   79 -
 docs/pot/responses.pot                          |   30 -
 docs/pot/roles.pot                              |   50 -
 docs/pot/root-admin-ui-overview.pot             |   35 -
 ...ime-allocation-virtual-network-resources.pot |   35 -
 .../pot/runtime-behavior-of-primary-storage.pot |   45 -
 docs/pot/runtime-internal-comm-req.pot          |   45 -
 ...duled-maintenance-maintenance-mode-hosts.pot |   35 -
 docs/pot/search-base.pot                        |   65 -
 docs/pot/search-user-bind-dn.pot                |   65 -
 docs/pot/secondary-storage-add.pot              |   95 -
 .../secondary-storage-outage-and-data-loss.pot  |   40 -
 docs/pot/secondary-storage-vm.pot               |   50 -
 docs/pot/secondary-storage.pot                  |   40 -
 docs/pot/security-groups.pot                    |   30 -
 docs/pot/security-req.pot                       |   35 -
 .../pot/send-projects-membership-invitation.pot |   85 -
 docs/pot/separate_storage_network.pot           |   35 -
 docs/pot/service-offerings.pot                  |   50 -
 docs/pot/set-database-buffer-pool-size.pot      |   70 -
 docs/pot/set-global-project-resource-limits.pot |  110 -
 .../set-monitor-total-vm-limits-per-host.pot    |   35 -
 docs/pot/set-per-project-resource-limits.pot    |   75 -
 docs/pot/set-projects-creator-permissions.pot   |   75 -
 docs/pot/set-resource-limits-for-projects.pot   |   35 -
 docs/pot/set-up-invitations.pot                 |  160 -
 docs/pot/set-up-network-for-users.pot           |   30 -
 docs/pot/set-usage-limit.pot                    |   60 -
 docs/pot/set-zone-vlan-run-vm-max.pot           |  115 -
 docs/pot/shared-networks.pot                    |   60 -
 docs/pot/signing-api-requests.pot               |  140 -
 docs/pot/site-to-site-vpn.pot                   |   85 -
 docs/pot/small_scale_deployment.pot             |   55 -
 docs/pot/snapshot-restore.pot                   |   35 -
 docs/pot/source-build.pot                       |   85 -
 docs/pot/source-prereqs.pot                     |   60 -
 docs/pot/source.pot                             |   45 -
 docs/pot/ssl.pot                                |   40 -
 docs/pot/standard-events.pot                    |   65 -
 docs/pot/static-nat.pot                         |   35 -
 .../sticky-session-policies-for-lb-rules.pot    |   45 -
 docs/pot/stop-restart-management-server.pot     |   65 -
 docs/pot/stopped-vm.pot                         |   60 -
 docs/pot/stopping-and-starting-vms.pot          |   35 -
 docs/pot/storage-nw-topology-req.pot            |   35 -
 docs/pot/storage-overview.pot                   |   40 -
 docs/pot/storage-tags.pot                       |   40 -
 docs/pot/storage.pot                            |   30 -
 docs/pot/suspend-project.pot                    |   80 -
 docs/pot/sys-offering-sysvm.pot                 |  130 -
 docs/pot/sys-reliability-and-ha.pot             |   30 -
 docs/pot/sysprep-for-windows-server-2003R2.pot  |  160 -
 docs/pot/sysprep-windows-server-2008R2.pot      |  147 -
 docs/pot/system-reserved-ip-addresses.pot       |   95 -
 docs/pot/system-service-offerings.pot           |   40 -
 docs/pot/system-vm-template.pot                 |   70 -
 docs/pot/tagging-resources.pot                  |  140 -
 ...emplate-iso-snapshot-usage-record-format.pot |   95 -
 docs/pot/templates.pot                          |   30 -
 docs/pot/time-zones.pot                         |  330 --
 docs/pot/tools.pot                              |   30 -
 docs/pot/topology-req.pot                       |   30 -
 docs/pot/troubleshooting-alerts.pot             |   68 -
 docs/pot/troubleshooting-lb-rules-fails.pot     |   60 -
 ...ubleshooting-recover-lost-virtual-router.pot |   85 -
 .../troubleshooting-unable-to-deploy-vms.pot    |   60 -
 .../troubleshooting-unable-to-power-on-vm.pot   |   80 -
 ...troubleshooting-working-with-server-logs.pot |   76 -
 docs/pot/troubleshooting.pot                    |   30 -
 ...oublesht-dataloss-on-exp-primary-storage.pot |   80 -
 ...oublesht-mtn-mode-not-working-on-vCenter.pot |   70 -
 docs/pot/tuning.pot                             |   35 -
 docs/pot/ui.pot                                 |   30 -
 ...ade-virtual-router-with-service-offering.pot |   50 -
 docs/pot/upload-existing-volume-to-vm.pot       |  150 -
 docs/pot/upload-template.pot                    |  130 -
 docs/pot/usage-record-format.pot                |   30 -
 docs/pot/usage-types.pot                        |  245 -
 docs/pot/use-project-view.pot                   |   60 -
 docs/pot/user-data-and-meta-data.pot            |  100 -
 docs/pot/user-services-overview.pot             |   70 -
 docs/pot/using-multiple-guest-networks.pot      |   50 -
 docs/pot/using-netscaler-load-balancers.pot     |  110 -
 docs/pot/using-sshkeys.pot                      |  238 -
 docs/pot/using-swift-for-secondary-storage.pot  |   40 -
 docs/pot/using-vpn-with-mac.pot                 |   35 -
 docs/pot/using-vpn-with-windows.pot             |   95 -
 docs/pot/vcenter-maintenance-mode.pot           |   80 -
 docs/pot/verifying-source.pot                   |  115 -
 .../pot/virtual-machine-usage-record-format.pot |  110 -
 docs/pot/virtual-machines.pot                   |   30 -
 docs/pot/virtual-router.pot                     |   40 -
 docs/pot/vlan-allocation-eg.pot                 |  130 -
 docs/pot/vlan-provisioning.pot                  |   45 -
 docs/pot/vm-lifecycle.pot                       |   75 -
 docs/pot/vm-storage-migration.pot               |   50 -
 docs/pot/vmware-install.pot                     |  618 ---
 docs/pot/vmware-requirements.pot                |  210 -
 docs/pot/vmware-topology-req.pot                |   45 -
 docs/pot/volume-deletion-garbage-collection.pot |   60 -
 docs/pot/volume-status.pot                      |   40 -
 docs/pot/vpc.pot                                |  240 -
 docs/pot/vpn.pot                                |   50 -
 docs/pot/whatis.pot                             |   50 -
 docs/pot/whats-in-this-adminguide.pot           |   35 -
 docs/pot/whats-new.pot                          |   45 -
 docs/pot/who-should-read-installation.pot       |   35 -
 docs/pot/windows-installation.pot               |   35 -
 docs/pot/work-with-usage.pot                    |   45 -
 docs/pot/working-with-hosts.pot                 |   40 -
 docs/pot/working-with-iso.pot                   |   50 -
 docs/pot/working-with-snapshots.pot             |   55 -
 docs/pot/working-with-system-vm.pot             |   35 -
 docs/pot/working-with-templates.pot             |   45 -
 docs/pot/working-with-usage-data.pot            |   45 -
 docs/pot/working-with-volumes.pot               |   45 -
 docs/pot/xenserver-maintenance-mode.pot         |   85 -
 docs/pot/xenserver-topology-req.pot             |   35 -
 docs/pot/zone-add.pot                           |  155 -
 docs/publican-adminguide.cfg                    |   30 -
 docs/publican-all.cfg                           |   28 -
 docs/publican-cloudstack/LICENSE                |  202 -
 docs/publican-cloudstack/NOTICE                 |    5 -
 docs/publican-cloudstack/defaults.cfg           |   21 -
 docs/publican-cloudstack/en-US/Feedback.xml     |   44 -
 docs/publican-cloudstack/en-US/Legal_Notice.xml |   67 -
 .../publican-cloudstack/en-US/css/overrides.css |   74 -
 docs/publican-cloudstack/en-US/images/1.png     |  Bin 1365 -> 0 bytes
 docs/publican-cloudstack/en-US/images/10.png    |  Bin 1705 -> 0 bytes
 docs/publican-cloudstack/en-US/images/11.png    |  Bin 1379 -> 0 bytes
 docs/publican-cloudstack/en-US/images/12.png    |  Bin 1721 -> 0 bytes
 docs/publican-cloudstack/en-US/images/13.png    |  Bin 1810 -> 0 bytes
 docs/publican-cloudstack/en-US/images/14.png    |  Bin 1597 -> 0 bytes
 docs/publican-cloudstack/en-US/images/15.png    |  Bin 1689 -> 0 bytes
 docs/publican-cloudstack/en-US/images/16.png    |  Bin 1817 -> 0 bytes
 docs/publican-cloudstack/en-US/images/17.png    |  Bin 1688 -> 0 bytes
 docs/publican-cloudstack/en-US/images/18.png    |  Bin 1832 -> 0 bytes
 docs/publican-cloudstack/en-US/images/19.png    |  Bin 1823 -> 0 bytes
 docs/publican-cloudstack/en-US/images/2.png     |  Bin 1608 -> 0 bytes
 docs/publican-cloudstack/en-US/images/20.png    |  Bin 1937 -> 0 bytes
 docs/publican-cloudstack/en-US/images/21.png    |  Bin 1723 -> 0 bytes
 docs/publican-cloudstack/en-US/images/22.png    |  Bin 1620 -> 0 bytes
 docs/publican-cloudstack/en-US/images/23.png    |  Bin 2007 -> 0 bytes
 docs/publican-cloudstack/en-US/images/24.png    |  Bin 1774 -> 0 bytes
 docs/publican-cloudstack/en-US/images/25.png    |  Bin 1937 -> 0 bytes
 docs/publican-cloudstack/en-US/images/26.png    |  Bin 1975 -> 0 bytes
 docs/publican-cloudstack/en-US/images/27.png    |  Bin 1873 -> 0 bytes
 docs/publican-cloudstack/en-US/images/28.png    |  Bin 2055 -> 0 bytes
 docs/publican-cloudstack/en-US/images/29.png    |  Bin 2033 -> 0 bytes
 docs/publican-cloudstack/en-US/images/3.png     |  Bin 1677 -> 0 bytes
 docs/publican-cloudstack/en-US/images/4.png     |  Bin 1457 -> 0 bytes
 docs/publican-cloudstack/en-US/images/5.png     |  Bin 1597 -> 0 bytes
 docs/publican-cloudstack/en-US/images/6.png     |  Bin 1691 -> 0 bytes
 docs/publican-cloudstack/en-US/images/7.png     |  Bin 1567 -> 0 bytes
 docs/publican-cloudstack/en-US/images/8.png     |  Bin 1711 -> 0 bytes
 docs/publican-cloudstack/en-US/images/9.png     |  Bin 1696 -> 0 bytes
 docs/publican-cloudstack/en-US/images/dot.png   |  Bin 173 -> 0 bytes
 docs/publican-cloudstack/en-US/images/dot2.png  |  Bin 342 -> 0 bytes
 docs/publican-cloudstack/en-US/images/h1-bg.png |  Bin 565 -> 0 bytes
 .../en-US/images/image_left.png                 |  Bin 4044 -> 0 bytes
 .../en-US/images/image_right.png                |  Bin 2260 -> 0 bytes
 .../en-US/images/important.png                  |  Bin 2318 -> 0 bytes
 docs/publican-cloudstack/en-US/images/note.png  |  Bin 2086 -> 0 bytes
 .../en-US/images/stock-go-back.png              |  Bin 790 -> 0 bytes
 .../en-US/images/stock-go-forward.png           |  Bin 860 -> 0 bytes
 .../en-US/images/stock-go-up.png                |  Bin 753 -> 0 bytes
 .../en-US/images/stock-home.png                 |  Bin 819 -> 0 bytes
 .../en-US/images/title_logo.png                 |  Bin 585 -> 0 bytes
 .../en-US/images/title_logo.svg                 |  370 --
 .../en-US/images/warning.png                    |  Bin 1941 -> 0 bytes
 .../en-US/images/watermark-draft.png            |  Bin 25365 -> 0 bytes
 docs/publican-cloudstack/gen_rpm.sh             |   22 -
 docs/publican-cloudstack/overrides.cfg          |   20 -
 .../publican-cloudstack.spec                    |   69 -
 docs/publican-cloudstack/publican.cfg           |   24 -
 docs/publican-devguide.cfg                      |   29 -
 docs/publican-gsoc-2013.cfg                     |   27 -
 docs/publican-installation.cfg                  |   30 -
 docs/publican-plugin-midonet.cfg                |   28 -
 docs/publican-plugin-niciranvp.cfg              |   28 -
 docs/publican-release-notes.cfg                 |   27 -
 docs/qig/en-US/Author_Group.xml                 |   32 -
 docs/qig/en-US/Book_Info.xml                    |   52 -
 docs/qig/en-US/Chapter.xml                      |   53 -
 docs/qig/en-US/Environment.xml                  |  258 -
 docs/qig/en-US/Management.xml                   |   99 -
 docs/qig/en-US/Overview.xml                     |   93 -
 docs/qig/en-US/Preface.xml                      |   33 -
 docs/qig/en-US/Revision_History.xml             |   42 -
 docs/qig/en-US/config.xml                       |  177 -
 docs/qig/en-US/kvm.xml                          |  142 -
 docs/qig/en-US/qig.ent                          |   22 -
 docs/qig/en-US/qig.xml                          |   36 -
 docs/qig/publican.cfg                           |   22 -
 docs/runbook/en-US/Author_Group.xml             |   32 -
 docs/runbook/en-US/Book_Info.xml                |   52 -
 docs/runbook/en-US/Chapter.xml                  |   53 -
 docs/runbook/en-US/Environment.xml              |  235 -
 docs/runbook/en-US/Management.xml               |  127 -
 docs/runbook/en-US/Overview.xml                 |  100 -
 docs/runbook/en-US/Preface.xml                  |   33 -
 docs/runbook/en-US/Revision_History.xml         |   42 -
 docs/runbook/en-US/Runbook.ent                  |   22 -
 docs/runbook/en-US/Runbook.xml                  |   37 -
 docs/runbook/en-US/config.xml                   |  177 -
 docs/runbook/en-US/kvm.xml                      |  103 -
 docs/runbook/publican.cfg                       |   22 -
 docs/runbook/zh-CN/Author_Group.po              |   37 -
 docs/runbook/zh-CN/Book_Info.po                 |   54 -
 docs/runbook/zh-CN/Chapter.po                   |   65 -
 docs/runbook/zh-CN/Environment.po               |  494 --
 docs/runbook/zh-CN/Management.po                |  235 -
 docs/runbook/zh-CN/Overview.po                  |  130 -
 docs/runbook/zh-CN/Preface.po                   |   34 -
 docs/runbook/zh-CN/Revision_History.po          |   39 -
 docs/runbook/zh-CN/Runbook.po                   |   27 -
 docs/runbook/zh-CN/config.po                    |  280 --
 docs/runbook/zh-CN/kvm.po                       |  145 -
 docs/settx.sh                                   |   23 -
 .../core/spring-engine-api-core-context.xml     |   44 +
 .../api/storage/DataMotionStrategy.java         |    4 +-
 .../api/storage/DataStoreLifeCycle.java         |    2 +
 .../subsystem/api/storage/DataStoreManager.java |    3 +
 .../subsystem/api/storage/EndPointSelector.java |    2 +
 .../api/storage/SnapshotDataFactory.java        |    4 +
 .../subsystem/api/storage/SnapshotInfo.java     |    2 +
 .../subsystem/api/storage/SnapshotService.java  |    2 +-
 .../subsystem/api/storage/SnapshotStrategy.java |   13 +-
 .../api/storage/StorageStrategyFactory.java     |   39 +
 .../subsystem/api/storage/StrategyPriority.java |   25 +
 .../api/storage/TemplateDataFactory.java        |    6 +
 .../subsystem/api/storage/TemplateService.java  |    6 +-
 .../api/storage/VMSnapshotStrategy.java         |   28 +
 .../api/storage/VolumeDataFactory.java          |    4 +
 ...pring-engine-components-api-core-context.xml |   30 +
 .../configuration/ConfigurationManager.java     |    2 +-
 .../cloudstack/context/ServerContexts.java      |   67 -
 ...spring-engine-orchestration-core-context.xml |   71 +
 .../com/cloud/agent/manager/AgentAttache.java   |   20 +-
 .../cloud/agent/manager/AgentManagerImpl.java   |   70 +-
 .../agent/manager/ClusteredAgentAttache.java    |    8 +-
 .../manager/ClusteredAgentManagerImpl.java      |  142 +-
 .../manager/ClusteredDirectAgentAttache.java    |    4 +-
 .../agent/manager/ConnectedAgentAttache.java    |    6 +-
 .../cloud/agent/manager/DirectAgentAttache.java |   23 +-
 .../com/cloud/agent/manager/DummyAttache.java   |    4 +-
 .../ClusterBasedAgentLoadBalancerPlanner.java   |   22 +-
 .../com/cloud/vm/VirtualMachineManagerImpl.java |  482 +-
 .../cloud/entity/api/VMEntityManagerImpl.java   |   10 +-
 .../entity/api/db/dao/DcDetailsDaoImpl.java     |    4 +-
 .../entity/api/db/dao/EngineClusterDaoImpl.java |   12 +-
 .../api/db/dao/EngineDataCenterDaoImpl.java     |    6 +-
 .../entity/api/db/dao/EngineHostDaoImpl.java    |   18 +-
 .../entity/api/db/dao/EngineHostPodDaoImpl.java |    8 +-
 .../entity/api/db/dao/HostDetailsDaoImpl.java   |    4 +-
 .../entity/api/db/dao/HostTagsDaoImpl.java      |    4 +-
 .../orchestration/NetworkOrchestrator.java      |  935 ++--
 .../orchestration/VolumeOrchestrator.java       |  154 +-
 .../test/resource/provisioningContext.xml       |    4 +-
 .../spring-engine-schema-core-daos-context.xml  |  332 ++
 ...ng-engine-schema-system-checkers-context.xml |   34 +
 .../src/com/cloud/alert/dao/AlertDaoImpl.java   |    4 +-
 .../com/cloud/capacity/dao/CapacityDaoImpl.java |   35 +-
 .../certificate/dao/CertificateDaoImpl.java     |    5 +-
 .../agentlb/dao/HostTransferMapDaoImpl.java     |    2 +-
 .../configuration/dao/ResourceCountDaoImpl.java |    4 +-
 .../src/com/cloud/dc/ClusterDetailsDaoImpl.java |    6 +-
 .../src/com/cloud/dc/DataCenterDetailVO.java    |   82 +
 engine/schema/src/com/cloud/dc/DcDetailVO.java  |   73 -
 .../src/com/cloud/dc/dao/ClusterDaoImpl.java    |   14 +-
 .../com/cloud/dc/dao/ClusterVSMMapDaoImpl.java  |    6 +-
 .../src/com/cloud/dc/dao/DataCenterDaoImpl.java |   20 +-
 .../com/cloud/dc/dao/DataCenterDetailsDao.java  |   25 +
 .../cloud/dc/dao/DataCenterDetailsDaoImpl.java  |   49 +
 .../dc/dao/DataCenterIpAddressDaoImpl.java      |   10 +-
 .../DataCenterLinkLocalIpAddressDaoImpl.java    |    9 +-
 .../src/com/cloud/dc/dao/DataCenterVnetDao.java |    3 +-
 .../com/cloud/dc/dao/DataCenterVnetDaoImpl.java |   12 +-
 .../src/com/cloud/dc/dao/DcDetailsDao.java      |   32 -
 .../src/com/cloud/dc/dao/DcDetailsDaoImpl.java  |  110 -
 .../src/com/cloud/dc/dao/HostPodDaoImpl.java    |    8 +-
 .../src/com/cloud/dc/dao/PodVlanDaoImpl.java    |    8 +-
 .../dc/dao/StorageNetworkIpAddressDaoImpl.java  |   15 +-
 .../dc/dao/StorageNetworkIpRangeDaoImpl.java    |   21 +-
 .../src/com/cloud/dc/dao/VlanDaoImpl.java       |    4 +-
 .../src/com/cloud/domain/dao/DomainDaoImpl.java |   10 +-
 .../src/com/cloud/event/dao/EventDaoImpl.java   |    4 +-
 .../com/cloud/event/dao/UsageEventDaoImpl.java  |   12 +-
 .../src/com/cloud/host/dao/HostDaoImpl.java     |  287 +-
 .../com/cloud/host/dao/HostDetailsDaoImpl.java  |    4 +-
 .../src/com/cloud/host/dao/HostTagsDaoImpl.java |    4 +-
 .../src/com/cloud/keystore/KeystoreDaoImpl.java |    4 +-
 .../network/dao/AccountGuestVlanMapDaoImpl.java |    2 +-
 .../dao/ExternalFirewallDeviceDaoImpl.java      |    2 +-
 .../dao/ExternalLoadBalancerDeviceDaoImpl.java  |    2 +-
 .../network/dao/FirewallRulesCidrsDaoImpl.java  |    4 +-
 .../cloud/network/dao/FirewallRulesDaoImpl.java |   19 +-
 .../com/cloud/network/dao/IPAddressDaoImpl.java |   10 +-
 .../com/cloud/network/dao/NetworkDaoImpl.java   |   20 +-
 .../com/cloud/network/dao/NetworkDetailVO.java  |   80 +
 .../cloud/network/dao/NetworkDetailsDao.java    |   25 +
 .../network/dao/NetworkDetailsDaoImpl.java      |   34 +
 .../cloud/network/dao/NetworkDomainDaoImpl.java |    2 +-
 .../dao/NetworkExternalFirewallDaoImpl.java     |    2 +-
 .../dao/NetworkExternalLoadBalancerDaoImpl.java |    2 +-
 .../com/cloud/network/dao/NetworkOpDaoImpl.java |    2 +-
 .../network/dao/NetworkServiceMapDaoImpl.java   |    4 +-
 .../network/dao/PhysicalNetworkDaoImpl.java     |    2 +-
 .../PhysicalNetworkIsolationMethodDaoImpl.java  |    2 +-
 .../PhysicalNetworkServiceProviderDaoImpl.java  |    2 +-
 .../network/dao/PhysicalNetworkTagDaoImpl.java  |    2 +-
 .../dao/PhysicalNetworkTrafficTypeDaoImpl.java  |   12 +-
 .../cloud/network/dao/PortProfileDaoImpl.java   |    6 +-
 .../cloud/network/dao/RemoteAccessVpnDao.java   |    3 +-
 .../network/dao/RemoteAccessVpnDaoImpl.java     |    9 +
 .../cloud/network/dao/RemoteAccessVpnVO.java    |   15 +-
 .../cloud/network/dao/RouterNetworkDaoImpl.java |    2 +-
 .../network/dao/UserIpv6AddressDaoImpl.java     |    2 +-
 .../network/dao/VirtualRouterProviderDao.java   |   10 +-
 .../dao/VirtualRouterProviderDaoImpl.java       |   12 +-
 .../element/VirtualRouterProviderVO.java        |    8 +-
 .../security/dao/SecurityGroupDaoImpl.java      |   12 +-
 .../security/dao/SecurityGroupVMMapDaoImpl.java |    2 +-
 .../security/dao/SecurityGroupWorkDaoImpl.java  |    8 +-
 .../security/dao/VmRulesetLogDaoImpl.java       |    8 +-
 .../network/vpc/dao/NetworkACLDaoImpl.java      |    3 +-
 .../network/vpc/dao/NetworkACLItemDaoImpl.java  |    2 +-
 .../cloud/network/vpc/dao/PrivateIpDaoImpl.java |    6 +-
 .../network/vpc/dao/StaticRouteDaoImpl.java     |   10 +-
 .../src/com/cloud/network/vpc/dao/VpcDao.java   |    4 +-
 .../com/cloud/network/vpc/dao/VpcDaoImpl.java   |   24 +-
 .../network/vpc/dao/VpcGatewayDaoImpl.java      |    2 +-
 .../network/vpc/dao/VpcOfferingDaoImpl.java     |    6 +-
 .../vpc/dao/VpcOfferingServiceMapDaoImpl.java   |    2 +-
 .../network/vpc/dao/VpcServiceMapDaoImpl.java   |    4 +-
 .../com/cloud/offerings/NetworkOfferingVO.java  |   12 +
 .../offerings/dao/NetworkOfferingDaoImpl.java   |   10 +-
 .../dao/NetworkOfferingServiceMapDaoImpl.java   |    4 +-
 .../projects/dao/ProjectAccountDaoImpl.java     |    4 +-
 .../com/cloud/projects/dao/ProjectDaoImpl.java  |    8 +-
 .../cloud/service/ServiceOfferingDetailsVO.java |   30 +-
 .../service/dao/ServiceOfferingDaoImpl.java     |   17 +-
 .../service/dao/ServiceOfferingDetailsDao.java  |    8 +-
 .../dao/ServiceOfferingDetailsDaoImpl.java      |   72 +-
 .../com/cloud/storage/VMTemplateDetailVO.java   |   40 +-
 .../cloud/storage/VMTemplateStoragePoolVO.java  |    2 +-
 .../src/com/cloud/storage/VolumeDetailVO.java   |   40 +-
 .../schema/src/com/cloud/storage/VolumeVO.java  |   11 +-
 .../storage/dao/LaunchPermissionDaoImpl.java    |    6 +-
 .../com/cloud/storage/dao/SnapshotDaoImpl.java  |   18 +-
 .../storage/dao/StoragePoolDetailsDaoImpl.java  |   63 +-
 .../storage/dao/StoragePoolHostDaoImpl.java     |   10 +-
 .../storage/dao/StoragePoolWorkDaoImpl.java     |    6 +-
 .../com/cloud/storage/dao/VMTemplateDao.java    |    3 +
 .../cloud/storage/dao/VMTemplateDaoImpl.java    |   58 +-
 .../cloud/storage/dao/VMTemplateDetailsDao.java |   12 +-
 .../storage/dao/VMTemplateDetailsDaoImpl.java   |   73 +-
 .../storage/dao/VMTemplateHostDaoImpl.java      |    8 +-
 .../storage/dao/VMTemplatePoolDaoImpl.java      |    8 +-
 .../storage/dao/VMTemplateZoneDaoImpl.java      |    4 +-
 .../com/cloud/storage/dao/VolumeDaoImpl.java    |   20 +-
 .../com/cloud/storage/dao/VolumeDetailsDao.java |   16 +-
 .../cloud/storage/dao/VolumeDetailsDaoImpl.java |   91 +-
 .../src/com/cloud/tags/ResourceTagVO.java       |    6 +-
 .../src/com/cloud/tags/dao/ResourceTagDao.java  |    6 +-
 .../com/cloud/tags/dao/ResourceTagsDaoImpl.java |    6 +-
 .../src/com/cloud/upgrade/DatabaseCreator.java  |    8 +-
 .../cloud/upgrade/DatabaseIntegrityChecker.java |    7 +-
 .../cloud/upgrade/DatabaseUpgradeChecker.java   |   90 +-
 .../com/cloud/upgrade/dao/Upgrade2214to30.java  |    2 +-
 .../com/cloud/upgrade/dao/Upgrade307to410.java  |   31 +-
 .../com/cloud/upgrade/dao/Upgrade40to41.java    |   30 +-
 .../com/cloud/upgrade/dao/Upgrade410to420.java  |  205 +
 .../com/cloud/upgrade/dao/Upgrade420to421.java  |  217 +
 .../com/cloud/upgrade/dao/Upgrade420to430.java  |  200 -
 .../com/cloud/upgrade/dao/Upgrade421to430.java  |  200 +
 .../com/cloud/upgrade/dao/VersionDaoImpl.java   |    8 +-
 .../src/com/cloud/usage/dao/UsageDaoImpl.java   |   26 +-
 .../cloud/usage/dao/UsageIPAddressDaoImpl.java  |    6 +-
 .../com/cloud/usage/dao/UsageJobDaoImpl.java    |    8 +-
 .../dao/UsageLoadBalancerPolicyDaoImpl.java     |    8 +-
 .../cloud/usage/dao/UsageNetworkDaoImpl.java    |    8 +-
 .../usage/dao/UsageNetworkOfferingDaoImpl.java  |    6 +-
 .../dao/UsagePortForwardingRuleDaoImpl.java     |    8 +-
 .../usage/dao/UsageSecurityGroupDaoImpl.java    |    6 +-
 .../cloud/usage/dao/UsageStorageDaoImpl.java    |    8 +-
 .../cloud/usage/dao/UsageVMInstanceDaoImpl.java |    8 +-
 .../cloud/usage/dao/UsageVMSnapshotDaoImpl.java |    8 +-
 .../cloud/usage/dao/UsageVPNUserDaoImpl.java    |    6 +-
 .../com/cloud/usage/dao/UsageVmDiskDaoImpl.java |    8 +-
 .../com/cloud/usage/dao/UsageVolumeDaoImpl.java |    8 +-
 .../com/cloud/user/AccountDetailsDaoImpl.java   |   17 +-
 .../src/com/cloud/user/dao/AccountDaoImpl.java  |    6 +-
 .../cloud/user/dao/UserStatisticsDaoImpl.java   |    6 +-
 .../cloud/user/dao/VmDiskStatisticsDaoImpl.java |    6 +-
 engine/schema/src/com/cloud/vm/NicDetailVO.java |   39 +-
 .../schema/src/com/cloud/vm/UserVmDetailVO.java |   44 +-
 .../com/cloud/vm/dao/ConsoleProxyDaoImpl.java   |   16 +-
 .../com/cloud/vm/dao/DomainRouterDaoImpl.java   |    8 +-
 .../src/com/cloud/vm/dao/NicDetailDao.java      |   35 -
 .../src/com/cloud/vm/dao/NicDetailDaoImpl.java  |  110 -
 .../src/com/cloud/vm/dao/NicDetailsDao.java     |   25 +
 .../src/com/cloud/vm/dao/NicDetailsDaoImpl.java |   34 +
 .../cloud/vm/dao/SecondaryStorageVmDaoImpl.java |    8 +-
 .../cloud/vm/dao/UserVmCloneSettingDaoImpl.java |    2 +-
 .../src/com/cloud/vm/dao/UserVmDaoImpl.java     |   30 +-
 .../src/com/cloud/vm/dao/UserVmDetailsDao.java  |   11 +-
 .../com/cloud/vm/dao/UserVmDetailsDaoImpl.java  |   76 +-
 .../src/com/cloud/vm/dao/VMInstanceDaoImpl.java |   20 +-
 .../cloud/vm/snapshot/VMSnapshotDetailsVO.java  |   87 +
 .../src/com/cloud/vm/snapshot/VMSnapshotVO.java |    2 +-
 .../vm/snapshot/dao/VMSnapshotDetailsDao.java   |   28 +
 .../snapshot/dao/VMSnapshotDetailsDaoImpl.java  |   52 +
 .../affinity/dao/AffinityGroupVMMapDaoImpl.java |    8 +-
 .../entity/api/db/dao/VMComputeTagDaoImpl.java  |    4 +-
 .../entity/api/db/dao/VMEntityDaoImpl.java      |    4 +-
 .../entity/api/db/dao/VMNetworkMapDaoImpl.java  |    4 +-
 .../entity/api/db/dao/VMReservationDaoImpl.java |    4 +-
 .../entity/api/db/dao/VMRootDiskTagDaoImpl.java |    4 +-
 .../apache/cloudstack/region/dao/RegionDao.java |    2 +-
 .../cloudstack/region/dao/RegionDaoImpl.java    |    5 +
 .../GlobalLoadBalancerLbRuleMapDaoImpl.java     |    2 +-
 .../resourcedetail/FirewallRuleDetailVO.java    |   80 +
 .../resourcedetail/ResourceDetailsDao.java      |   71 +
 .../resourcedetail/ResourceDetailsDaoBase.java  |  139 +
 .../dao/FirewallRuleDetailsDao.java             |   26 +
 .../dao/FirewallRuleDetailsDaoImpl.java         |   34 +
 .../storage/datastore/db/ImageStoreDao.java     |    2 +
 .../datastore/db/PrimaryDataStoreDaoImpl.java   |   47 +-
 .../datastore/db/PrimaryDataStoreDetailVO.java  |   40 +-
 .../db/PrimaryDataStoreDetailsDao.java          |   10 +-
 .../datastore/db/SnapshotDataStoreDao.java      |   10 +
 .../datastore/db/SnapshotDataStoreVO.java       |   34 +-
 .../datastore/db/StoragePoolDetailVO.java       |   44 +-
 .../datastore/db/StoragePoolDetailsDao.java     |   10 +-
 .../datastore/db/TemplateDataStoreDao.java      |   10 +-
 .../datastore/db/TemplateDataStoreVO.java       |   51 +-
 .../datastore/db/VolumeDataStoreDao.java        |    2 +
 .../storage/datastore/db/VolumeDataStoreVO.java |   47 +-
 .../service/src/main/webapp/WEB-INF/beans.xml   |    4 +-
 engine/service/src/main/webapp/WEB-INF/web.xml  |    9 +-
 ...spring-engine-storage-cache-core-context.xml |   38 +
 .../cache/manager/StorageCacheManagerImpl.java  |   68 +-
 .../StorageCacheReplacementAlgorithmLRU.java    |   72 +-
 ...g-engine-storage-datamotion-core-context.xml |   34 +
 ...ngine-storage-datamotion-storage-context.xml |   34 +
 .../motion/AncientDataMotionStrategy.java       |   92 +-
 .../storage/motion/DataMotionServiceImpl.java   |   56 +-
 ...spring-engine-storage-image-core-context.xml |   45 +
 .../storage/image/TemplateDataFactoryImpl.java  |   46 +-
 .../storage/image/TemplateServiceImpl.java      |   95 +-
 .../manager/ImageStoreProviderManagerImpl.java  |   15 +-
 .../storage/image/store/ImageStoreImpl.java     |   14 +-
 .../storage/image/store/TemplateObject.java     |    8 +
 engine/storage/integration-test/pom.xml         |    3 +-
 .../vm/snapshot/dao/VmSnapshotDaoTest.java      |   46 +
 .../cloudstack/storage/test/AopTestAdvice.java  |    3 +-
 .../storage/test/ChildTestConfiguration.java    |   57 +-
 .../storage/test/CloudStackTestNGBase.java      |    5 +-
 .../test/DirectAgentManagerSimpleImpl.java      |    5 +
 .../storage/test/EndpointSelectorTest.java      |    8 +
 .../test/FakeDriverTestConfiguration.java       |    4 +-
 .../test/FakePrimaryDataStoreDriver.java        |    7 +-
 .../storage/test/MockStorageMotionStrategy.java |   50 +-
 .../cloudstack/storage/test/SnapshotTest.java   |  145 +-
 .../storage/test/SnapshotTestWithFakeData.java  |  229 +-
 .../cloudstack/storage/test/TestNGAop.java      |    4 +-
 .../test/resource/fakeDriverTestContext.xml     |    6 +-
 .../test/resources/storageContext.xml           |    6 +
 .../core/spring-engine-storage-core-context.xml |   70 +
 .../storage-allocator/module.properties         |   18 +
 ...engine-storage-storage-allocator-context.xml |   49 +
 engine/storage/snapshot/pom.xml                 |   32 +
 ...ing-engine-storage-snapshot-core-context.xml |   41 +
 ...-engine-storage-snapshot-storage-context.xml |   38 +
 .../snapshot/SnapshotDataFactoryImpl.java       |   22 +-
 .../storage/snapshot/SnapshotObject.java        |  141 +-
 .../storage/snapshot/SnapshotServiceImpl.java   |  107 +-
 .../storage/snapshot/SnapshotStrategyBase.java  |    7 +-
 .../snapshot/XenserverSnapshotStrategy.java     |  136 +-
 .../vmsnapshot/DefaultVMSnapshotStrategy.java   |  371 ++
 .../storage/vmsnapshot/VMSnapshotHelper.java    |   38 +
 .../vmsnapshot/VMSnapshotHelperImpl.java        |  148 +
 .../snapshot/test/resources/db.properties       |   70 +
 .../test/src/VMSnapshotStrategyTest.java        |  256 +
 .../cloudstack/storage/LocalHostEndpoint.java   |   13 +-
 .../cloudstack/storage/RemoteHostEndPoint.java  |    5 +-
 .../ClusterScopeStoragePoolAllocator.java       |   19 +-
 .../allocator/LocalStoragePoolAllocator.java    |   19 +-
 .../allocator/ZoneWideStoragePoolAllocator.java |   31 +-
 .../storage/datastore/DataStoreManagerImpl.java |    5 +
 .../provider/DataStoreProviderManagerImpl.java  |  112 +-
 .../endpoint/DefaultEndPointSelector.java       |   33 +-
 .../storage/helper/HypervisorHelper.java        |   31 +
 .../storage/helper/HypervisorHelperImpl.java    |   77 +
 .../helper/StorageStrategyFactoryImpl.java      |  136 +
 .../image/datastore/ImageStoreHelper.java       |   21 +-
 .../datastore/ImageStoreProviderManager.java    |    2 +
 .../storage/image/db/ImageStoreDaoImpl.java     |   10 +-
 .../image/db/ImageStoreDetailsDaoImpl.java      |    4 +-
 .../image/db/SnapshotDataStoreDaoImpl.java      |  101 +-
 .../image/db/TemplateDataStoreDaoImpl.java      |  110 +-
 .../image/db/VolumeDataStoreDaoImpl.java        |   57 +-
 .../datastore/PrimaryDataStoreHelper.java       |    4 +-
 .../db/PrimaryDataStoreDetailsDaoImpl.java      |   50 +-
 .../db/TemplatePrimaryDataStoreDaoImpl.java     |   26 +-
 .../api/storage/StrategyPriorityTest.java       |  161 +
 ...pring-engine-storage-volume-core-context.xml |   49 +
 .../storage/datastore/PrimaryDataStoreImpl.java |   87 +-
 .../storage/volume/VolumeDataFactoryImpl.java   |   33 +-
 .../storage/volume/VolumeServiceImpl.java       |  123 +-
 .../spring-framework-cluster-core-context.xml   |   36 +
 .../com/cloud/cluster/ClusterManagerImpl.java   |  126 +-
 .../cluster/ClusterServiceServletAdapter.java   |    3 +-
 .../cluster/ClusterServiceServletContainer.java |    6 +-
 .../dao/ManagementServerHostDaoImpl.java        |   16 +-
 .../dao/ManagementServerHostPeerDaoImpl.java    |    4 +-
 ...mework-config-system-context-inheritable.xml |   38 +
 .../spring-framework-config-system-context.xml  |   51 +
 .../framework/config/ConfigDepotAdmin.java      |    2 +
 .../framework/config/dao/ConfigurationDao.java  |    2 +
 .../config/dao/ConfigurationDaoImpl.java        |   27 +-
 .../framework/config/impl/ConfigDepotImpl.java  |  102 +-
 .../config/impl/ConfigDepotAdminTest.java       |    1 +
 .../spring-framework-db-system-context.xml      |   32 +
 .../utils/crypt/EncryptionSecretKeyChanger.java |    3 +-
 .../com/cloud/utils/db/ConnectionConcierge.java |    8 +-
 framework/db/src/com/cloud/utils/db/DB.java     |   16 -
 framework/db/src/com/cloud/utils/db/DbUtil.java |    2 +-
 .../db/src/com/cloud/utils/db/GenericDao.java   |    6 -
 .../src/com/cloud/utils/db/GenericDaoBase.java  |  210 +-
 .../com/cloud/utils/db/GenericQueryBuilder.java |  176 +
 .../cloud/utils/db/GenericSearchBuilder.java    |  558 +--
 .../db/src/com/cloud/utils/db/GroupBy.java      |   14 +-
 .../db/src/com/cloud/utils/db/JoinBuilder.java  |  113 +-
 .../db/src/com/cloud/utils/db/Merovingian2.java |    2 +-
 .../db/src/com/cloud/utils/db/QueryBuilder.java |   29 +
 .../db/src/com/cloud/utils/db/SearchBase.java   |  499 ++
 .../src/com/cloud/utils/db/SearchBuilder.java   |    6 +-
 .../src/com/cloud/utils/db/SearchCriteria.java  |   90 +-
 .../src/com/cloud/utils/db/SearchCriteria2.java |  213 -
 .../cloud/utils/db/SearchCriteriaService.java   |   29 -
 .../src/com/cloud/utils/db/SequenceFetcher.java |    2 +-
 .../db/src/com/cloud/utils/db/Transaction.java  | 1172 +----
 .../com/cloud/utils/db/TransactionCallback.java |   25 +
 .../utils/db/TransactionCallbackNoReturn.java   |   31 +
 .../db/TransactionCallbackWithException.java    |   25 +
 ...ransactionCallbackWithExceptionNoReturn.java |   32 +
 .../utils/db/TransactionContextBuilder.java     |    6 +-
 .../utils/db/TransactionContextInterceptor.java |   39 +
 .../utils/db/TransactionContextListener.java    |   41 +
 .../com/cloud/utils/db/TransactionLegacy.java   | 1195 +++++
 .../cloud/utils/db/TransactionMBeanImpl.java    |   18 +-
 .../com/cloud/utils/db/TransactionStatus.java   |   25 +
 .../db/test/com/cloud/utils/db/DbTestDao.java   |    4 +-
 .../db/test/com/cloud/utils/db/DbTestUtils.java |    4 +-
 .../com/cloud/utils/db/TestTransaction.java     |  154 +
 .../com/cloud/utils/db/TransactionTest.java     |   26 +-
 framework/db/test/db.properties                 |   18 +
 .../core/spring-framework-ipc-core-context.xml  |   59 +
 .../client/ClientTransportProvider.java         |    8 +-
 .../server/ServerTransportProvider.java         |   10 +-
 .../core/spring-framework-jobs-core-context.xml |   48 +
 .../jobs/AsyncJobExecutionContext.java          |    4 +-
 .../framework/jobs/dao/AsyncJobDaoImpl.java     |    4 +-
 .../jobs/dao/AsyncJobJoinMapDaoImpl.java        |   10 +-
 .../framework/jobs/dao/SyncQueueDaoImpl.java    |    4 +-
 .../jobs/dao/SyncQueueItemDaoImpl.java          |    6 +-
 .../jobs/impl/AsyncJobManagerImpl.java          |  311 +-
 .../framework/jobs/impl/AsyncJobMonitor.java    |   42 +-
 .../jobs/impl/SyncQueueManagerImpl.java         |  271 +-
 framework/managed-context/pom.xml               |   36 +
 .../context/AbstractManagedContextListener.java |   32 +
 .../managed/context/ManagedContext.java         |   33 +
 .../managed/context/ManagedContextListener.java |   36 +
 .../managed/context/ManagedContextRunnable.java |   86 +
 .../context/ManagedContextTimerTask.java        |   37 +
 .../managed/context/ManagedContextUtils.java    |   55 +
 .../context/impl/DefaultManagedContext.java     |  155 +
 .../managed/threadlocal/ManagedThreadLocal.java |   82 +
 .../context/impl/DefaultManagedContextTest.java |  269 +
 framework/pom.xml                               |    3 +
 framework/spring/lifecycle/pom.xml              |   34 +
 .../spring/lifecycle/AbstractBeanCollector.java |  113 +
 .../lifecycle/AbstractSmartLifeCycle.java       |   53 +
 .../lifecycle/CloudStackExtendedLifeCycle.java  |  169 +
 .../CloudStackExtendedLifeCycleStart.java       |   49 +
 .../spring/lifecycle/CloudStackLog4jSetup.java  |   56 +
 .../spring/lifecycle/ConfigDepotLifeCycle.java  |   47 +
 .../spring/lifecycle/registry/DumpRegistry.java |   77 +
 .../lifecycle/registry/ExtensionRegistry.java   |  245 +
 .../registry/PluggableServiceLifecycle.java     |   53 +
 .../lifecycle/registry/RegistryLifecycle.java   |  144 +
 framework/spring/module/pom.xml                 |   50 +
 .../context/ResourceApplicationContext.java     |   55 +
 .../module/factory/CloudStackSpringContext.java |  137 +
 .../factory/ModuleBasedContextFactory.java      |   84 +
 .../module/locator/ModuleDefinitionLocator.java |   36 +
 .../impl/ClasspathModuleDefinitionLocator.java  |   62 +
 .../spring/module/model/ModuleDefinition.java   |   48 +
 .../module/model/ModuleDefinitionSet.java       |   32 +
 .../model/impl/DefaultModuleDefinition.java     |  167 +
 .../model/impl/DefaultModuleDefinitionSet.java  |  243 +
 .../cloudstack/spring/module/util/Main.java     |   58 +
 .../spring/module/util/ModuleLocationUtils.java |   53 +
 .../web/CloudStackContextLoaderListener.java    |   75 +
 .../module/model/impl/defaults-context.xml      |   28 +
 .../spring/module/factory/InitTest.java         |   39 +
 .../factory/ModuleBasedContextFactoryTest.java  |  121 +
 ...ClasspathModuleDefinitionSetLocatorTest.java |   40 +
 .../model/impl/DefaultModuleDefinitionTest.java |  131 +
 .../resources/testfiles/all/defaults.properties |   18 +
 .../testfiles/all/empty-context-inheritable.xml |   26 +
 .../resources/testfiles/all/empty-context.xml   |   26 +
 .../all/empty2-context-inheritable.xml          |   26 +
 .../resources/testfiles/all/empty2-context.xml  |   26 +
 .../resources/testfiles/all/module.properties   |   17 +
 .../testfiles/all/test2-defaults.properties     |   17 +
 .../testfiles/badname/module.properties         |   17 +
 .../testfiles/blankname/module.properties       |   18 +
 .../resources/testfiles/good/empty-context.xml  |   26 +
 .../resources/testfiles/good/module.properties  |   17 +
 .../testfiles/missingname/module.properties     |   17 +
 .../testfiles/wrongname/module.properties       |   17 +
 .../testhierarchy/base/module.properties        |   17 +
 .../base/test-context-inheritable.xml           |   28 +
 .../testhierarchy/base/test-context.xml         |   34 +
 .../testhierarchy/child1-1/module.properties    |   18 +
 .../testhierarchy/child1-1/test-context.xml     |   34 +
 .../testhierarchy/child1/module.properties      |   18 +
 .../child1/test-context-override.xml            |   30 +
 .../testhierarchy/child1/test-context.xml       |   38 +
 .../testhierarchy/child2/module.properties      |   18 +
 .../testhierarchy/child2/test-context.xml       |   33 +
 .../testhierarchy/orphan1/module.properties     |   18 +
 .../testhierarchy/orphan1/test-context.xml      |   30 +
 m2-settings.xml                                 |   59 -
 maven-standard/pom.xml                          |   48 +
 packaging/centos63/cloud-agent.rc               |    3 +-
 packaging/centos63/cloud-management.rc          |    4 +-
 packaging/centos63/cloud.spec                   |   44 +-
 packaging/centos63/cloudstack-sccs              |   20 +
 packaging/centos63/package.sh                   |   62 +-
 packaging/debian/init/cloud-agent               |    3 +-
 patches/cloudpatch-descriptor.xml               |   59 -
 patches/pom.xml                                 |   84 -
 patches/systemvm/debian/README                  |   34 -
 patches/systemvm/debian/buildsystemvm.sh        |  567 ---
 patches/systemvm/debian/config.dat              |  398 --
 .../debian/config/etc/apache2/httpd.conf        |    2 -
 .../debian/config/etc/apache2/ports.conf        |   23 -
 .../config/etc/apache2/sites-available/default  |   41 -
 .../etc/apache2/sites-available/default-ssl     |  172 -
 .../debian/config/etc/apache2/vhostexample.conf |  238 -
 .../systemvm/debian/config/etc/cloud-nic.rules  |    2 -
 .../debian/config/etc/cron.daily/cloud-cleanup  |   27 -
 .../systemvm/debian/config/etc/default/cloud    |   19 -
 .../debian/config/etc/default/cloud-passwd-srvr |   19 -
 .../debian/config/etc/dnsmasq.conf.tmpl         |  636 ---
 .../debian/config/etc/haproxy/haproxy.cfg       |   26 -
 patches/systemvm/debian/config/etc/init.d/cloud |  153 -
 .../debian/config/etc/init.d/cloud-early-config | 1428 ------
 .../debian/config/etc/init.d/cloud-passwd-srvr  |  124 -
 .../systemvm/debian/config/etc/init.d/postinit  |  178 -
 .../config/etc/iptables/iptables-consoleproxy   |   38 -
 .../debian/config/etc/iptables/iptables-elbvm   |   34 -
 .../debian/config/etc/iptables/iptables-ilbvm   |   33 -
 .../debian/config/etc/iptables/iptables-router  |   55 -
 .../config/etc/iptables/iptables-secstorage     |   36 -
 .../config/etc/iptables/iptables-vpcrouter      |   42 -
 .../debian/config/etc/iptables/rt_tables_init   |   29 -
 .../systemvm/debian/config/etc/iptables/rules   |   42 -
 .../systemvm/debian/config/etc/logrotate.conf   |   25 -
 .../debian/config/etc/logrotate.d/apache2       |   13 -
 .../debian/config/etc/logrotate.d/dnsmasq       |   13 -
 .../debian/config/etc/logrotate.d/haproxy       |   10 -
 .../systemvm/debian/config/etc/logrotate.d/ppp  |    9 -
 .../debian/config/etc/logrotate.d/rsyslog       |   37 -
 .../debian/config/etc/modprobe.d/aesni_intel    |    1 -
 .../debian/config/etc/profile.d/cloud.sh        |   22 -
 patches/systemvm/debian/config/etc/rc.local     |   18 -
 patches/systemvm/debian/config/etc/rsyslog.conf |  106 -
 .../systemvm/debian/config/etc/ssh/sshd_config  |  130 -
 patches/systemvm/debian/config/etc/sysctl.conf  |   49 -
 .../systemvm/debian/config/etc/vpcdnsmasq.conf  |  462 --
 .../config/opt/cloud/bin/checkbatchs2svpn.sh    |   25 -
 .../debian/config/opt/cloud/bin/checks2svpn.sh  |   46 -
 .../debian/config/opt/cloud/bin/cloud-nic.sh    |   80 -
 .../opt/cloud/bin/get_template_version.sh       |   46 -
 .../systemvm/debian/config/opt/cloud/bin/ilb.sh |  211 -
 .../debian/config/opt/cloud/bin/ipassoc.sh      |  443 --
 .../debian/config/opt/cloud/bin/ipsectunnel.sh  |  298 --
 .../debian/config/opt/cloud/bin/netusage.sh     |  155 -
 .../debian/config/opt/cloud/bin/passwd_server   |   23 -
 .../config/opt/cloud/bin/passwd_server_ip       |   32 -
 .../config/opt/cloud/bin/patchsystemvm.sh       |  279 --
 .../config/opt/cloud/bin/serve_password.sh      |  103 -
 .../debian/config/opt/cloud/bin/vmdata.py       |  204 -
 .../debian/config/opt/cloud/bin/vpc_acl.sh      |  233 -
 .../debian/config/opt/cloud/bin/vpc_func.sh     |   68 -
 .../debian/config/opt/cloud/bin/vpc_guestnw.sh  |  294 --
 .../debian/config/opt/cloud/bin/vpc_ipassoc.sh  |  223 -
 .../config/opt/cloud/bin/vpc_loadbalancer.sh    |  224 -
 .../debian/config/opt/cloud/bin/vpc_netusage.sh |  158 -
 .../config/opt/cloud/bin/vpc_passwd_server      |   32 -
 .../config/opt/cloud/bin/vpc_portforwarding.sh  |  126 -
 .../config/opt/cloud/bin/vpc_privateGateway.sh  |   98 -
 .../config/opt/cloud/bin/vpc_privategw_acl.sh   |  224 -
 .../debian/config/opt/cloud/bin/vpc_snat.sh     |  102 -
 .../config/opt/cloud/bin/vpc_staticnat.sh       |  124 -
 .../config/opt/cloud/bin/vpc_staticroute.sh     |  134 -
 .../debian/config/root/.ssh/authorized_keys     |    1 -
 .../debian/config/root/bumpup_priority.sh       |   19 -
 .../debian/config/root/clearUsageRules.sh       |   39 -
 .../debian/config/root/createIpAlias.sh         |  100 -
 .../debian/config/root/deleteIpAlias.sh         |   60 -
 patches/systemvm/debian/config/root/dnsmasq.sh  |  130 -
 .../systemvm/debian/config/root/edithosts.sh    |  234 -
 patches/systemvm/debian/config/root/firewall.sh |  357 --
 .../debian/config/root/firewallRule_egress.sh   |  187 -
 .../debian/config/root/firewall_rule.sh         |  202 -
 patches/systemvm/debian/config/root/func.sh     |  143 -
 .../systemvm/debian/config/root/loadbalancer.sh |  320 --
 .../systemvm/debian/config/root/reconfigLB.sh   |   44 -
 .../redundant_router/arping_gateways.sh.templ   |   29 -
 .../root/redundant_router/backup.sh.templ       |   39 -
 .../root/redundant_router/check_bumpup.sh       |   19 -
 .../redundant_router/check_heartbeat.sh.templ   |   37 -
 .../root/redundant_router/checkrouter.sh.templ  |   56 -
 .../root/redundant_router/conntrackd.conf.templ |  401 --
 .../root/redundant_router/disable_pubip.sh      |   23 -
 .../root/redundant_router/enable_pubip.sh.templ |   37 -
 .../config/root/redundant_router/fault.sh.templ |   33 -
 .../root/redundant_router/heartbeat.sh.templ    |   20 -
 .../root/redundant_router/keepalived.conf.templ |   57 -
 .../root/redundant_router/master.sh.templ       |   60 -
 .../redundant_router/primary-backup.sh.templ    |  126 -
 .../config/root/redundant_router/services.sh    |   68 -
 .../systemvm/debian/config/root/savepassword.sh |   58 -
 patches/systemvm/debian/config/root/userdata.py |   92 -
 patches/systemvm/debian/config/root/userdata.sh |  165 -
 .../debian/config/var/www/html/latest/.htaccess |    5 -
 .../config/var/www/html/userdata/.htaccess      |    1 -
 patches/systemvm/debian/convert.sh              |   64 -
 patches/systemvm/debian/qemuconvert.sh          |   32 -
 patches/systemvm/debian/systemvm.vmx            |   37 -
 patches/systemvm/debian/systemvm.xml            |   53 -
 patches/systemvm/debian/vhdconvert.sh           |   40 -
 patches/systemvm/debian/vpn/etc/ipsec.conf      |    9 -
 .../systemvm/debian/vpn/etc/ipsec.d/l2tp.conf   |   33 -
 patches/systemvm/debian/vpn/etc/ipsec.secrets   |    2 -
 .../systemvm/debian/vpn/etc/ppp/options.xl2tpd  |   14 -
 .../systemvm/debian/vpn/etc/xl2tpd/xl2tpd.conf  |    6 -
 .../debian/vpn/opt/cloud/bin/vpc_vpn_l2tp.sh    |  178 -
 .../debian/vpn/opt/cloud/bin/vpn_l2tp.sh        |  192 -
 patches/systemvm/debian/xe/xe-daemon            |   65 -
 .../systemvm/debian/xe/xe-linux-distribution    |  267 -
 .../systemvm/debian/xe/xe-update-guest-attrs    |  226 -
 .../acl-static-role-based/module.properties     |   18 +
 .../spring-acl-static-role-based-context.xml    |   34 +
 .../acl/StaticRoleBasedAPIAccessChecker.java    |   48 +-
 .../explicit-dedication/module.properties       |   18 +
 .../spring-explicit-dedication-context.xml      |   36 +
 .../affinity/ExplicitDedicationProcessor.java   |   32 +-
 .../host-anti-affinity/module.properties        |   18 +
 .../spring-host-anti-affinity-context.xml       |   37 +
 .../discovery/ApiDiscoveryServiceImpl.java      |   65 +-
 .../cloudstack/discovery/ApiDiscoveryTest.java  |    2 +-
 .../cloudstack/rate-limit/module.properties     |   18 +
 .../rate-limit/spring-rate-limit-context.xml    |   32 +
 .../spring-dedicated-resources-core-context.xml |   33 +
 .../dedicated/DedicatedResourceManagerImpl.java |  273 +-
 .../implicit-dedication/module.properties       |   18 +
 .../spring-implicit-dedication-context.xml      |   25 +
 .../cloud/deploy/ImplicitDedicationPlanner.java |    2 +-
 .../implicitplanner/ImplicitPlannerTest.java    |    2 +-
 .../user-concentrated-pod/module.properties     |   18 +
 .../spring-user-concentrated-pod-context.xml    |   35 +
 .../mom/rabbitmq/RabbitMQEventBus.java          |    8 +-
 .../src/com/cloud/netapp/NetappManagerImpl.java |   10 +-
 .../host-allocator-random/module.properties     |   18 +
 .../spring-host-allocator-random-context.xml    |   34 +
 .../baremetal-compute/module.properties         |   18 +
 .../spring-baremetal-compute-context.xml        |   35 +
 .../baremetal-discoverer/module.properties      |   18 +
 .../spring-baremetal-discoverer-context.xml     |   34 +
 .../baremetal-network/module.properties         |   18 +
 .../spring-baremetal-network-context.xml        |   46 +
 .../baremetal-planner/module.properties         |   18 +
 .../spring-baremetal-planner-context.xml        |   34 +
 .../baremetal-storage/module.properties         |   18 +
 .../spring-baremetal-storage-context.xml        |   32 +
 .../core/spring-baremetal-core-context.xml      |   42 +
 .../database/BaremetalDhcpDaoImpl.java          |    9 +-
 .../baremetal/database/BaremetalPxeDaoImpl.java |    9 +-
 .../BareMetalPingServiceImpl.java               |   14 +-
 .../networkservice/BareMetalResourceBase.java   |    2 +-
 .../networkservice/BaremetaNetworkGuru.java     |   21 +-
 .../networkservice/BaremetalDhcpElement.java    |   39 +-
 .../BaremetalDhcpManagerImpl.java               |   24 +-
 .../BaremetalKickStartServiceImpl.java          |   15 +-
 .../networkservice/BaremetalPxeElement.java     |   18 +-
 .../networkservice/BaremetalPxeManagerImpl.java |   10 +-
 plugins/hypervisors/kvm/agent-descriptor.xml    |   68 -
 plugins/hypervisors/kvm/pom.xml                 |   47 -
 .../cloudstack/kvm-compute/module.properties    |   18 +
 .../kvm-compute/spring-kvm-compute-context.xml  |   34 +
 .../kvm/src/com/cloud/ha/KVMInvestigator.java   |   14 +-
 .../kvm/resource/BridgeVifDriver.java           |   99 +-
 .../hypervisor/kvm/resource/KVMHAMonitor.java   |    7 +-
 .../kvm/resource/LibvirtComputingResource.java  |  170 +-
 .../hypervisor/kvm/storage/KVMStoragePool.java  |   12 +-
 .../kvm/storage/KVMStoragePoolManager.java      |  212 +-
 .../kvm/storage/KVMStorageProcessor.java        |  180 +-
 .../kvm/storage/LibvirtStorageAdaptor.java      |  129 +-
 .../kvm/storage/LibvirtStoragePool.java         |   43 +-
 .../hypervisor/kvm/storage/StorageAdaptor.java  |   17 +-
 .../kvm/storage/iScsiAdmStorageAdaptor.java     |  373 ++
 .../kvm/storage/iScsiAdmStoragePool.java        |  167 +
 .../apache/cloudstack/utils/qemu/QemuImg.java   |   11 +-
 .../resource/LibvirtComputingResourceTest.java  |   15 +
 .../cloudstack/utils/qemu/QemuImgTest.java      |   20 +-
 .../cloudstack/ovm-compute/module.properties    |   18 +
 .../ovm-compute/spring-ovm-compute-context.xml  |   39 +
 .../cloudstack/ovm-discoverer/module.properties |   18 +
 .../spring-ovm-discoverer-context.xml           |   34 +
 .../com/cloud/ovm/hypervisor/OvmDiscoverer.java |  440 +-
 .../cloud/ovm/hypervisor/OvmResourceBase.java   |    4 +-
 plugins/hypervisors/simulator/pom.xml           |    1 -
 .../core/spring-simulator-core-context.xml      |   45 +
 .../simulator-compute/module.properties         |   18 +
 .../spring-simulator-compute-context.xml        |   34 +
 .../simulator-discoverer/module.properties      |   18 +
 .../spring-simulator-discover-context.xml       |   36 +
 .../simulator-storage/module.properties         |   18 +
 .../spring-simulator-storage-context.xml        |   33 +
 .../agent/manager/MockAgentManagerImpl.java     |   95 +-
 .../agent/manager/MockStorageManagerImpl.java   |  170 +-
 .../cloud/agent/manager/MockVmManagerImpl.java  |   48 +-
 .../agent/manager/SimulatorManagerImpl.java     |   10 +-
 .../cloud/resource/AgentRoutingResource.java    |    2 +-
 .../resource/SimulatorStorageProcessor.java     |   35 +-
 .../simulator/dao/MockConfigurationDaoImpl.java |    4 +-
 .../SimulatorImageStoreLifeCycleImpl.java       |   36 +-
 .../motion/SimulatorDataMotionStrategy.java     |   22 +-
 plugins/hypervisors/ucs/pom.xml                 |    2 -
 .../cloudstack/core/spring-ucs-core-context.xml |   35 +
 .../com/cloud/ucs/database/UcsBladeDaoImpl.java |    4 +-
 .../com/cloud/ucs/database/UcsManagerDao.java   |    2 +-
 .../cloud/ucs/database/UcsManagerDaoImpl.java   |    4 +-
 .../com/cloud/ucs/manager/UcsManagerImpl.java   |   41 +-
 .../core/spring-vmware-core-context.xml         |   43 +
 .../cloudstack/vmware-compute/module.properties |   18 +
 .../spring-vmware-compute-context.xml           |   43 +
 .../vmware-compute/vmware-defaults.properties   |   17 +
 .../vmware-discoverer/module.properties         |   18 +
 .../spring-vmware-discoverer-context.xml        |   35 +
 .../cloudstack/vmware-network/module.properties |   18 +
 .../spring-vmware-network-context.xml           |   34 +
 .../cloudstack/vmware-storage/module.properties |   18 +
 .../spring-vmware-storage-context.xml           |   33 +
 .../vmware/VmwareServerDiscoverer.java          |   33 +-
 .../vmware/dao/LegacyZoneDaoImpl.java           |    2 +-
 .../vmware/dao/VmwareDatacenterDaoImpl.java     |    2 +-
 .../vmware/manager/VmwareHostService.java       |    6 +-
 .../vmware/manager/VmwareManagerImpl.java       |   59 +-
 .../manager/VmwareStorageManagerImpl.java       |   87 +-
 .../vmware/resource/VmwareContextFactory.java   |    9 +-
 .../vmware/resource/VmwareResource.java         |  163 +-
 .../network/CiscoNexusVSMDeviceManagerImpl.java |   68 +-
 .../network/dao/CiscoNexusVSMDeviceDaoImpl.java |    2 +-
 .../network/element/CiscoNexusVSMElement.java   |   50 +-
 .../VmwareSecondaryStorageContextFactory.java   |   10 +
 .../VmwareSecondaryStorageResourceHandler.java  |    9 +-
 .../resource/VmwareStorageProcessor.java        |  327 +-
 .../motion/VmwareStorageMotionStrategy.java     |   12 +-
 .../motion/VmwareStorageMotionStrategyTest.java |   28 +-
 plugins/hypervisors/xen/pom.xml                 |    1 +
 .../xenserver-compute/module.properties         |   18 +
 .../spring-xenserver-compute-context.xml        |   28 +
 .../xenserver-discoverer/module.properties      |   18 +
 .../spring-xenserver-discoverer-context.xml     |   25 +
 .../xen/discoverer/XcpServerDiscoverer.java     |   57 +-
 .../xen/resource/CitrixResourceBase.java        |  498 +-
 .../xen/resource/XenServer56FP1Resource.java    |  131 -
 .../xen/resource/XenServer610Resource.java      |   22 +
 .../xen/resource/XenServerPoolVms.java          |   39 +-
 .../xen/resource/XenServerStorageProcessor.java |  140 +-
 .../motion/XenServerStorageMotionStrategy.java  |   18 +-
 .../META-INF/cloudstack/vns/module.properties   |   18 +
 .../cloudstack/vns/spring-vns-context.xml       |   36 +
 .../network/element/BigSwitchVnsElement.java    |   45 +-
 .../api/ConfigureNexusVsmForAsaCommand.java     |    3 +
 .../cloud/network/element/CiscoVnmcElement.java |   89 +-
 plugins/network-elements/dns-notifier/pom.xml   |    1 -
 .../META-INF/cloudstack/elb/module.properties   |   18 +
 .../cloudstack/elb/spring-elb-context.xml       |   34 +
 .../lb/ElasticLoadBalancerManagerImpl.java      |   44 +-
 .../core/spring-internallb-core-context.xml     |   37 +
 .../element/InternalLoadBalancerElement.java    |   27 +-
 .../lb/InternalLoadBalancerVMManagerImpl.java   |    8 +-
 .../InternalLbElementServiceTest.java           |    8 +-
 .../InternalLbElementTest.java                  |   16 +-
 .../JuniperSRXExternalFirewallElement.java      |   38 +-
 .../cloudstack/midonet/module.properties        |   18 +
 .../midonet/spring-midonet-context.xml          |   37 +
 .../network/guru/MidoNetPublicNetworkGuru.java  |   19 +-
 .../cloud/network/dao/NetScalerPodDaoImpl.java  |    2 +-
 .../cloud/network/element/NetscalerElement.java |   52 +-
 .../META-INF/cloudstack/nvp/module.properties   |   18 +
 .../cloudstack/nvp/spring-nvp-context.xml       |   40 +
 .../cloud/network/element/NiciraNvpElement.java |   45 +-
 .../META-INF/cloudstack/ovs/module.properties   |   18 +
 .../cloudstack/ovs/spring-ovs-context.xml       |   40 +
 .../META-INF/cloudstack/ssp/module.properties   |   18 +
 .../cloudstack/ssp/spring-ssp-context.xml       |   42 +
 plugins/network-elements/vxlan/pom.xml          |   29 +
 .../META-INF/cloudstack/vxlan/module.properties |   18 +
 .../cloudstack/vxlan/spring-vxlan-context.xml   |   34 +
 .../network/guru/VxlanGuestNetworkGuru.java     |  179 +
 .../network/guru/VxlanGuestNetworkGuruTest.java |  274 ++
 plugins/pom.xml                                 |   15 +-
 .../storage-image-default/module.properties     |   18 +
 .../spring-storage-image-default-context.xml    |   33 +
 .../CloudStackImageStoreLifeCycleImpl.java      |    9 +
 .../storage-image-s3/module.properties          |   18 +
 .../spring-storage-image-s3-context.xml         |   34 +
 .../driver/S3ImageStoreDriverImpl.java          |   13 +-
 .../lifecycle/S3ImageStoreLifeCycleImpl.java    |   12 +-
 .../SampleImageStoreLifeCycleImpl.java          |    9 +
 .../storage-image-swift/module.properties       |   18 +
 .../spring-storage-image-swift-context.xml      |   33 +
 .../lifecycle/SwiftImageStoreLifeCycleImpl.java |   30 +-
 .../storage-volume-default/module.properties    |   18 +
 .../spring-storage-volume-default-context.xml   |   35 +
 .../CloudStackPrimaryDataStoreDriverImpl.java   |   94 +-
 ...CloudStackPrimaryDataStoreLifeCycleImpl.java |   19 +-
 .../SamplePrimaryDataStoreDriverImpl.java       |   22 +-
 .../SamplePrimaryDataStoreLifeCycleImpl.java    |   34 +-
 .../storage-volume-solidfire/module.properties  |   18 +
 .../spring-storage-volume-solidfire-context.xml |   33 +
 .../driver/SolidfirePrimaryDataStoreDriver.java |   77 +-
 .../SolidFirePrimaryDataStoreLifeCycle.java     |   52 +-
 .../provider/SolidFireHostListener.java         |  102 +
 .../SolidfirePrimaryDataStoreProvider.java      |   10 +-
 .../storage/datastore/util/SolidFireUtil.java   |   22 +-
 .../cloudstack/storage/test/AopTestAdvice.java  |    4 +-
 .../solidfire/test/resource/storageContext.xml  |    2 +-
 .../META-INF/cloudstack/ldap/module.properties  |   18 +
 .../cloudstack/ldap/spring-ldap-context.xml     |   39 +
 .../api/command/LdapImportUsersCmd.java         |  123 +
 .../api/response/LdapUserResponse.java          |  162 +-
 .../cloudstack/ldap/LdapAuthenticator.java      |   10 -
 .../cloudstack/ldap/LdapConfiguration.java      |    6 +-
 .../apache/cloudstack/ldap/LdapManagerImpl.java |    9 +-
 .../org/apache/cloudstack/ldap/LdapUser.java    |   12 +-
 .../apache/cloudstack/ldap/LdapUserManager.java |  175 +-
 .../ldap/LdapConfigurationSpec.groovy           |    4 +-
 .../ldap/LdapImportUsersCmdSpec.groovy          |   71 +
 .../cloudstack/ldap/LdapListUsersCmdSpec.groovy |   10 +-
 .../cloudstack/ldap/LdapManagerImplSpec.groovy  |   39 +-
 .../ldap/LdapSearchUserCmdSpec.groovy           |    5 +-
 .../cloudstack/ldap/LdapUserResponseSpec.groovy |   18 +
 .../apache/cloudstack/ldap/LdapUserSpec.groovy  |   31 +-
 .../META-INF/cloudstack/md5/module.properties   |   18 +
 .../cloudstack/md5/spring-md5-context.xml       |   34 +
 .../cloud/server/auth/MD5UserAuthenticator.java |   14 +-
 .../cloudstack/plaintext/module.properties      |   18 +
 .../plaintext/spring-plaintext-context.xml      |   35 +
 .../server/auth/PlainTextUserAuthenticator.java |   15 -
 .../cloudstack/sha256salted/module.properties   |   18 +
 .../spring-sha256salted-context.xml             |   34 +
 .../auth/SHA256SaltedUserAuthenticator.java     |   11 -
 pom.xml                                         |  116 +-
 python/lib/cloudutils/networkConfig.py          |    5 +
 python/lib/cloudutils/serviceConfig.py          |    5 +-
 quickcloud/pom.xml                              |   30 +
 .../spring-quickcloud-core-context-override.xml |   32 +
 scripts/storage/qcow2/managesnapshot.sh         |    4 +-
 scripts/vm/hypervisor/xenserver/s3xen           |   68 +-
 .../vm/hypervisor/xenserver/setupxenserver.sh   |    2 +-
 scripts/vm/hypervisor/xenserver/vmops           |   10 +-
 scripts/vm/hypervisor/xenserver/xcposs/vmops    |    3 +
 .../hypervisor/xenserver/xcposs/vmopsSnapshot   |   16 +-
 scripts/vm/network/security_group.py            |   21 +-
 scripts/vm/network/vnet/modifyvxlan.sh          |  239 +
 server/conf/cloudstack-sudoers.in               |    2 +-
 server/pom.xml                                  |   15 +-
 .../spring-server-core-managers-context.xml     |  228 +
 .../core/spring-server-core-misc-context.xml    |   68 +
 .../module.properties                           |   18 +
 ...ing-server-alert-adapter-backend-context.xml |   32 +
 .../module.properties                           |   18 +
 ...ing-server-alert-adapter-compute-context.xml |   32 +
 .../module.properties                           |   18 +
 ...ing-server-alert-adapter-storage-context.xml |   32 +
 .../server-allocator/module.properties          |   18 +
 .../spring-server-allocator-context.xml         |   48 +
 .../cloudstack/server-api/module.properties     |   18 +
 .../server-api/spring-server-api-context.xml    |   33 +
 .../cloudstack/server-compute/module.properties |   18 +
 .../spring-server-compute-context.xml           |   38 +
 .../server-discoverer/module.properties         |   18 +
 .../spring-server-discoverer-context.xml        |   45 +
 .../cloudstack/server-fencer/module.properties  |   18 +
 .../spring-server-fencer-context.xml            |   37 +
 .../server-investigator/module.properties       |   18 +
 .../spring-server-investigator-context.xml      |   46 +
 .../cloudstack/server-network/module.properties |   18 +
 .../spring-server-network-context.xml           |   64 +
 .../cloudstack/server-planner/module.properties |   18 +
 .../spring-server-planner-context.xml           |   34 +
 .../cloudstack/server-storage/module.properties |   18 +
 .../spring-server-storage-context.xml           |   34 +
 .../server-template-adapter/module.properties   |   18 +
 .../spring-server-template-adapter-context.xml  |   32 +
 .../system/spring-server-system-context.xml     |   36 +
 .../src/com/cloud/alert/AlertManagerImpl.java   |    5 +-
 .../com/cloud/api/ApiAsyncJobDispatcher.java    |   16 +-
 server/src/com/cloud/api/ApiDBUtils.java        |   34 +-
 server/src/com/cloud/api/ApiResponseHelper.java |   58 +-
 server/src/com/cloud/api/ApiServer.java         |  104 +-
 server/src/com/cloud/api/ApiServlet.java        |   16 +-
 .../com/cloud/api/query/QueryManagerImpl.java   |  221 +-
 .../api/query/dao/DataCenterJoinDaoImpl.java    |   22 +-
 .../api/query/dao/DiskOfferingJoinDaoImpl.java  |   25 +-
 .../cloud/api/query/dao/ResourceTagJoinDao.java |    3 +
 .../api/query/dao/ResourceTagJoinDaoImpl.java   |   25 +-
 .../query/dao/ServiceOfferingJoinDaoImpl.java   |   12 +-
 .../cloud/api/query/dao/UserVmJoinDaoImpl.java  |   11 +
 .../cloud/api/query/dao/VolumeJoinDaoImpl.java  |    5 +
 .../com/cloud/api/query/vo/AccountJoinVO.java   |  319 +-
 .../com/cloud/api/query/vo/AclGroupJoinVO.java  |    4 -
 .../com/cloud/api/query/vo/AclRoleJoinVO.java   |    4 -
 .../cloud/api/query/vo/AffinityGroupJoinVO.java |   79 -
 .../com/cloud/api/query/vo/AsyncJobJoinVO.java  |  142 +-
 .../src/com/cloud/api/query/vo/BaseViewVO.java  |    3 -
 .../cloud/api/query/vo/DataCenterJoinVO.java    |  118 +-
 .../cloud/api/query/vo/DiskOfferingJoinVO.java  |  109 +-
 .../cloud/api/query/vo/DomainRouterJoinVO.java  |  531 +-
 .../src/com/cloud/api/query/vo/EventJoinVO.java |  109 +-
 .../src/com/cloud/api/query/vo/HostJoinVO.java  |  181 +-
 .../cloud/api/query/vo/ImageStoreJoinVO.java    |   68 +-
 .../cloud/api/query/vo/InstanceGroupJoinVO.java |   74 -
 .../api/query/vo/ProjectAccountJoinVO.java      |   90 +-
 .../api/query/vo/ProjectInvitationJoinVO.java   |   72 -
 .../com/cloud/api/query/vo/ProjectJoinVO.java   |  110 +-
 .../cloud/api/query/vo/ResourceTagJoinVO.java   |   93 +-
 .../cloud/api/query/vo/SecurityGroupJoinVO.java |  153 +-
 .../api/query/vo/ServiceOfferingJoinVO.java     |  123 -
 .../cloud/api/query/vo/StoragePoolJoinVO.java   |  136 +-
 .../com/cloud/api/query/vo/TemplateJoinVO.java  |  548 +--
 .../cloud/api/query/vo/UserAccountJoinVO.java   |  124 +-
 .../com/cloud/api/query/vo/UserVmJoinVO.java    |  882 +---
 .../com/cloud/api/query/vo/VolumeJoinVO.java    |  413 +-
 .../api/response/ApiResponseSerializer.java     |   42 -
 .../com/cloud/capacity/CapacityManagerImpl.java |  321 +-
 server/src/com/cloud/configuration/Config.java  |    9 +-
 .../configuration/ConfigurationManagerImpl.java |  445 +-
 .../consoleproxy/ConsoleProxyManagerImpl.java   |   55 +-
 .../consoleproxy/StaticConsoleProxyManager.java |    3 +
 .../cloud/dc/dao/DedicatedResourceDaoImpl.java  |    6 +-
 .../deploy/DeploymentPlanningManagerImpl.java   |   86 +-
 .../com/cloud/event/ActionEventInterceptor.java |   33 +-
 .../com/cloud/ha/AbstractInvestigatorImpl.java  |   18 +-
 .../ha/HighAvailabilityManagerExtImpl.java      |   13 +-
 .../cloud/ha/HighAvailabilityManagerImpl.java   |  137 +-
 .../ha/ManagementIPSystemVMInvestigator.java    |   15 -
 .../com/cloud/ha/UserVmDomRInvestigator.java    |   15 -
 .../cloud/ha/dao/HighAvailabilityDaoImpl.java   |    3 +-
 .../hypervisor/CloudZonesStartupProcessor.java  |   13 +-
 .../cloud/hypervisor/HypervisorGuruBase.java    |   10 +-
 .../hypervisor/HypervisorGuruManagerImpl.java   |   34 +-
 .../metadata/ResourceMetaDataManagerImpl.java   |  291 +-
 .../network/ExternalDeviceUsageManagerImpl.java |  161 +-
 .../ExternalFirewallDeviceManagerImpl.java      |   63 +-
 .../ExternalLoadBalancerDeviceManagerImpl.java  |  171 +-
 .../com/cloud/network/IpAddressManagerImpl.java |  221 +-
 .../com/cloud/network/NetworkServiceImpl.java   |  305 +-
 .../cloud/network/NetworkUsageManagerImpl.java  |   50 +-
 .../cloud/network/PortProfileManagerImpl.java   |   39 +-
 .../network/StorageNetworkManagerImpl.java      |  181 +-
 .../cloud/network/as/AutoScaleManagerImpl.java  |  191 +-
 .../network/element/VirtualRouterElement.java   |  152 +-
 .../element/VpcVirtualRouterElement.java        |   55 +-
 .../network/firewall/FirewallManagerImpl.java   |  104 +-
 .../cloud/network/guru/DirectNetworkGuru.java   |  121 +-
 .../network/guru/DirectPodBasedNetworkGuru.java |  113 +-
 .../cloud/network/guru/GuestNetworkGuru.java    |   17 +-
 .../cloud/network/guru/PublicNetworkGuru.java   |   20 +-
 .../network/lb/LBHealthCheckManagerImpl.java    |    6 +-
 .../lb/LoadBalancingRulesManagerImpl.java       |  409 +-
 .../VirtualNetworkApplianceManagerImpl.java     |  579 ++-
 .../VpcVirtualNetworkApplianceManager.java      |   29 +
 .../VpcVirtualNetworkApplianceManagerImpl.java  |  126 +-
 .../cloud/network/rules/RulesManagerImpl.java   |  231 +-
 .../security/SecurityGroupManagerImpl.java      |  536 +-
 .../security/SecurityGroupManagerImpl2.java     |   12 +-
 .../network/vpc/NetworkACLManagerImpl.java      |   50 +-
 .../network/vpc/NetworkACLServiceImpl.java      |    4 +-
 .../com/cloud/network/vpc/VpcManagerImpl.java   |  218 +-
 .../network/vpn/RemoteAccessVpnManagerImpl.java |  311 +-
 .../network/vpn/Site2SiteVpnManagerImpl.java    |   12 +-
 .../com/cloud/projects/ProjectManagerImpl.java  |  136 +-
 .../com/cloud/resource/ResourceManagerImpl.java |  154 +-
 .../resourcelimit/ResourceLimitManagerImpl.java |   77 +-
 .../cloud/server/ConfigurationServerImpl.java   |  637 +--
 .../com/cloud/server/ManagementServerImpl.java  |   93 +-
 server/src/com/cloud/server/StatsCollector.java |  268 +-
 .../server/auth/DefaultUserAuthenticator.java   |   27 -
 .../com/cloud/servlet/CloudStartupServlet.java  |    3 +-
 .../com/cloud/servlet/ConsoleProxyServlet.java  |    3 +-
 .../src/com/cloud/storage/OCFS2ManagerImpl.java |   18 +-
 .../com/cloud/storage/StorageManagerImpl.java   |   76 +-
 .../com/cloud/storage/VolumeApiServiceImpl.java |  170 +-
 .../storage/download/DownloadListener.java      |   10 +-
 .../storage/listener/StoragePoolMonitor.java    |    3 +
 .../secondary/SecondaryStorageManagerImpl.java  |   30 +-
 .../storage/snapshot/SnapshotManagerImpl.java   |  194 +-
 .../storage/snapshot/SnapshotSchedulerImpl.java |    9 +-
 .../cloud/storage/upload/UploadListener.java    |   10 +-
 .../cloud/storage/upload/UploadMonitorImpl.java |    6 +-
 .../cloud/tags/TaggedResourceManagerImpl.java   |  193 +-
 .../template/HypervisorTemplateAdapter.java     |   29 +-
 .../com/cloud/template/TemplateAdapterBase.java |   17 +
 .../com/cloud/template/TemplateManagerImpl.java |  111 +-
 server/src/com/cloud/test/DatabaseConfig.java   |   67 +-
 server/src/com/cloud/test/IPRangeConfig.java    |   15 +-
 server/src/com/cloud/test/PodZoneConfig.java    |    7 +-
 .../src/com/cloud/usage/UsageServiceImpl.java   |   26 +-
 .../src/com/cloud/user/AccountManagerImpl.java  |  149 +-
 .../src/com/cloud/user/DomainManagerImpl.java   |   47 +-
 .../com/cloud/uuididentity/dao/IdentityDao.java |    4 +-
 .../cloud/uuididentity/dao/IdentityDaoImpl.java |   27 +-
 .../src/com/cloud/vm/SystemVmLoadScanner.java   |   10 +-
 server/src/com/cloud/vm/UserVmManager.java      |    4 +
 server/src/com/cloud/vm/UserVmManagerImpl.java  |  352 +-
 .../vm/snapshot/VMSnapshotManagerImpl.java      |  448 +-
 .../apache/cloudstack/acl/AclServiceImpl.java   |  354 +-
 .../affinity/AffinityGroupServiceImpl.java      |   53 +-
 .../lb/ApplicationLoadBalancerManagerImpl.java  |   56 +-
 .../cloudstack/region/RegionManagerImpl.java    |   31 +-
 .../GlobalLoadBalancingRulesServiceImpl.java    |  219 +-
 .../test/com/cloud/api/ApiDispatcherTest.java   |  108 +
 .../configuration/ConfigurationManagerTest.java |   88 +-
 server/test/com/cloud/ha/KVMFencerTest.java     |  193 +
 .../metadata/ResourceMetaDataManagerTest.java   |   43 +-
 .../cloud/network/CreatePrivateNetworkTest.java |    6 +-
 .../network/DedicateGuestVlanRangesTest.java    |   18 +-
 .../network/UpdatePhysicalNetworkTest.java      |    5 +-
 .../SecurityGroupManagerTestConfiguration.java  |    4 +-
 .../vpn/MockRemoteAccessVPNServiceProvider.java |    5 +-
 .../com/cloud/user/MockDomainManagerImpl.java   |    6 +
 .../vm/snapshot/VMSnapshotManagerTest.java      |    7 -
 .../cloud/vpc/MockConfigurationManagerImpl.java |    2 +-
 .../MockVpcVirtualNetworkApplianceManager.java  |   22 +
 .../com/cloud/vpc/VpcTestConfiguration.java     |    4 +-
 .../cloud/vpc/dao/MockConfigurationDaoImpl.java |   11 +-
 .../com/cloud/vpc/dao/MockNetworkDaoImpl.java   |    2 +-
 .../vpc/dao/MockNetworkOfferingDaoImpl.java     |    3 +-
 .../MockNetworkOfferingServiceMapDaoImpl.java   |    6 +-
 .../vpc/dao/MockNetworkServiceMapDaoImpl.java   |    2 +-
 .../test/com/cloud/vpc/dao/MockVpcDaoImpl.java  |    6 +-
 .../cloud/vpc/dao/MockVpcOfferingDaoImpl.java   |    2 +-
 .../dao/MockVpcOfferingServiceMapDaoImpl.java   |    2 +-
 .../networkoffering/ChildTestConfiguration.java |    4 +-
 .../CreateNetworkOfferingTest.java              |   20 +-
 .../cloudstack/region/RegionManagerTest.java    |   29 +-
 ...GlobalLoadBalancingRulesServiceImplTest.java |   28 +-
 .../server/bindir/cloud-setup-console-proxy.in  |  220 -
 .../console-proxy/server/certs/localhost.crt    |   22 -
 .../console-proxy/server/certs/localhost.key    |   27 -
 .../console-proxy/server/certs/realhostip.crt   |   31 -
 .../console-proxy/server/certs/realhostip.csr   |   15 -
 .../console-proxy/server/certs/realhostip.key   |   24 -
 .../server/certs/realhostip.keystore            |  Bin 8690 -> 0 bytes
 .../server/conf.dom0/agent.properties.in        |   46 -
 .../server/conf.dom0/consoleproxy.properties.in |   23 -
 .../server/conf.dom0/log4j-cloud.xml.in         |  101 -
 .../console-proxy/server/conf/agent.properties  |    2 -
 .../server/conf/consoleproxy.properties         |   23 -
 .../server/conf/environment.properties          |    2 -
 .../console-proxy/server/conf/log4j-cloud.xml   |  102 -
 .../console-proxy/server/css/ajaxviewer.css     |  144 -
 services/console-proxy/server/css/logger.css    |  139 -
 .../rc.d/init.d/cloud-console-proxy.in          |   98 -
 .../rc.d/init.d/cloud-console-proxy.in          |   98 -
 .../rc.d/init.d/cloud-console-proxy.in          |   98 -
 .../SYSCONFDIR/init.d/cloud-console-proxy.in    |  112 -
 services/console-proxy/server/images/back.gif   |  Bin 149 -> 0 bytes
 .../server/images/bright-green.png              |  Bin 3903 -> 0 bytes
 services/console-proxy/server/images/cad.gif    |  Bin 918 -> 0 bytes
 .../server/images/cannotconnect.jpg             |  Bin 1810 -> 0 bytes
 .../console-proxy/server/images/clr_button.gif  |  Bin 1274 -> 0 bytes
 .../server/images/clr_button_hover.gif          |  Bin 437 -> 0 bytes
 services/console-proxy/server/images/dot.cur    |  Bin 326 -> 0 bytes
 .../console-proxy/server/images/gray-green.png  |  Bin 3833 -> 0 bytes
 .../server/images/grid_headerbg.gif             |  Bin 196 -> 0 bytes
 services/console-proxy/server/images/left.png   |  Bin 3024 -> 0 bytes
 .../server/images/minimize_button.gif           |  Bin 634 -> 0 bytes
 .../server/images/minimize_button_hover.gif     |  Bin 227 -> 0 bytes
 .../console-proxy/server/images/notready.jpg    |  Bin 1827 -> 0 bytes
 .../console-proxy/server/images/play_button.gif |  Bin 657 -> 0 bytes
 .../server/images/play_button_hover.gif         |  Bin 243 -> 0 bytes
 services/console-proxy/server/images/right.png  |  Bin 3131 -> 0 bytes
 services/console-proxy/server/images/right2.png |  Bin 3156 -> 0 bytes
 .../server/images/shrink_button.gif             |  Bin 655 -> 0 bytes
 .../server/images/shrink_button_hover.gif       |  Bin 243 -> 0 bytes
 .../console-proxy/server/images/stop_button.gif |  Bin 649 -> 0 bytes
 .../server/images/stop_button_hover.gif         |  Bin 231 -> 0 bytes
 services/console-proxy/server/images/winlog.png |  Bin 2629 -> 0 bytes
 services/console-proxy/server/js/ajaxkeys.js    |  343 --
 services/console-proxy/server/js/ajaxviewer.js  | 1383 ------
 .../console-proxy/server/js/cloud.logger.js     |  338 --
 services/console-proxy/server/js/handler.js     |   72 -
 services/console-proxy/server/js/jquery.js      |   19 -
 .../server/libexec/console-proxy-runner.in      |   90 -
 services/console-proxy/server/pom.xml           |  243 +-
 services/console-proxy/server/scripts/_run.sh   |   64 -
 .../console-proxy/server/scripts/config_auth.sh |   69 -
 .../console-proxy/server/scripts/config_ssl.sh  |  183 -
 .../server/scripts/consoleproxy.sh              |   33 -
 .../console-proxy/server/scripts/ipfirewall.sh  |   50 -
 .../console-proxy/server/scripts/run-proxy.sh   |   48 -
 services/console-proxy/server/scripts/run.bat   |   18 -
 services/console-proxy/server/scripts/run.sh    |   45 -
 .../console-proxy/server/scripts/secstorage.sh  |   33 -
 .../server/systemvm-descriptor.xml              |  122 -
 .../console-proxy/server/ui/viewer-bad-sid.ftl  |   29 -
 .../server/ui/viewer-connect-failed.ftl         |   29 -
 .../console-proxy/server/ui/viewer-update.ftl   |   24 -
 services/console-proxy/server/ui/viewer.ftl     |   60 -
 services/console-proxy/server/vm-script/vmops   |  119 -
 .../secondary-storage/conf/agent.properties     |    4 -
 .../conf/environment.properties                 |    2 -
 services/secondary-storage/conf/log4j-cloud.xml |  102 -
 services/secondary-storage/conf/log4j.xml       |  102 -
 services/secondary-storage/pom.xml              |    7 -
 .../module.properties                           |   18 +
 ...ing-secondary-storage-discoverer-context.xml |   36 +
 services/secondary-storage/scripts/_run.sh      |   64 -
 .../secondary-storage/scripts/config_auth.sh    |   69 -
 .../secondary-storage/scripts/config_ssl.sh     |  183 -
 .../secondary-storage/scripts/ipfirewall.sh     |   50 -
 services/secondary-storage/scripts/run-proxy.sh |   48 -
 services/secondary-storage/scripts/run.bat      |   18 -
 services/secondary-storage/scripts/run.sh       |   45 -
 .../secondary-storage/scripts/ssvm-check.sh     |  136 -
 .../resource/NfsSecondaryStorageResource.java   |  121 +-
 setup/bindir/cloud-sysvmadm.in                  |  102 +-
 setup/db/db/schema-410to420.sql                 |    6 +-
 setup/db/db/schema-420to421.sql                 |  218 +
 setup/db/db/schema-420to430-cleanup.sql         |   22 -
 setup/db/db/schema-420to430.sql                 |  465 --
 setup/db/db/schema-421to430-cleanup.sql         |   22 +
 setup/db/db/schema-421to430.sql                 |  666 +++
 setup/db/templates.sql                          |    4 -
 setup/dev/advanced.cfg                          |    6 +-
 systemvm/bindir/cloud-setup-console-proxy.in    |  220 +
 systemvm/certs/localhost.crt                    |   22 +
 systemvm/certs/localhost.key                    |   27 +
 systemvm/certs/realhostip.crt                   |   31 +
 systemvm/certs/realhostip.csr                   |   15 +
 systemvm/certs/realhostip.key                   |   24 +
 systemvm/certs/realhostip.keystore              |  Bin 0 -> 8690 bytes
 systemvm/cloudpatch-descriptor.xml              |   59 +
 systemvm/conf.dom0/agent.properties.in          |   46 +
 systemvm/conf.dom0/consoleproxy.properties.in   |   23 +
 systemvm/conf.dom0/log4j-cloud.xml.in           |  101 +
 systemvm/conf/agent.properties                  |   18 +
 systemvm/conf/agent.properties.ssvm             |   21 +
 systemvm/conf/consoleproxy.properties           |   23 +
 systemvm/conf/environment.properties            |    2 +
 systemvm/conf/log4j-cloud.xml                   |  102 +
 systemvm/css/ajaxviewer.css                     |  144 +
 systemvm/css/logger.css                         |  139 +
 .../rc.d/init.d/cloud-console-proxy.in          |   98 +
 .../rc.d/init.d/cloud-console-proxy.in          |   98 +
 .../rc.d/init.d/cloud-console-proxy.in          |   98 +
 .../SYSCONFDIR/init.d/cloud-console-proxy.in    |  112 +
 systemvm/images/back.gif                        |  Bin 0 -> 149 bytes
 systemvm/images/bright-green.png                |  Bin 0 -> 3903 bytes
 systemvm/images/cad.gif                         |  Bin 0 -> 918 bytes
 systemvm/images/cannotconnect.jpg               |  Bin 0 -> 1810 bytes
 systemvm/images/clr_button.gif                  |  Bin 0 -> 1274 bytes
 systemvm/images/clr_button_hover.gif            |  Bin 0 -> 437 bytes
 systemvm/images/dot.cur                         |  Bin 0 -> 326 bytes
 systemvm/images/gray-green.png                  |  Bin 0 -> 3833 bytes
 systemvm/images/grid_headerbg.gif               |  Bin 0 -> 196 bytes
 systemvm/images/left.png                        |  Bin 0 -> 3024 bytes
 systemvm/images/minimize_button.gif             |  Bin 0 -> 634 bytes
 systemvm/images/minimize_button_hover.gif       |  Bin 0 -> 227 bytes
 systemvm/images/notready.jpg                    |  Bin 0 -> 1827 bytes
 systemvm/images/play_button.gif                 |  Bin 0 -> 657 bytes
 systemvm/images/play_button_hover.gif           |  Bin 0 -> 243 bytes
 systemvm/images/right.png                       |  Bin 0 -> 3131 bytes
 systemvm/images/right2.png                      |  Bin 0 -> 3156 bytes
 systemvm/images/shrink_button.gif               |  Bin 0 -> 655 bytes
 systemvm/images/shrink_button_hover.gif         |  Bin 0 -> 243 bytes
 systemvm/images/stop_button.gif                 |  Bin 0 -> 649 bytes
 systemvm/images/stop_button_hover.gif           |  Bin 0 -> 231 bytes
 systemvm/images/winlog.png                      |  Bin 0 -> 2629 bytes
 systemvm/js/ajaxkeys.js                         |  343 ++
 systemvm/js/ajaxviewer.js                       | 1383 ++++++
 systemvm/js/cloud.logger.js                     |  338 ++
 systemvm/js/handler.js                          |   72 +
 systemvm/js/jquery.js                           |   19 +
 systemvm/libexec/console-proxy-runner.in        |   90 +
 systemvm/patches/debian/README                  |   34 +
 systemvm/patches/debian/buildsystemvm.sh        |  567 +++
 systemvm/patches/debian/config.dat              |  398 ++
 .../debian/config/etc/apache2/httpd.conf        |    2 +
 .../debian/config/etc/apache2/ports.conf        |   23 +
 .../config/etc/apache2/sites-available/default  |   41 +
 .../etc/apache2/sites-available/default-ssl     |  172 +
 .../debian/config/etc/apache2/vhostexample.conf |  238 +
 .../patches/debian/config/etc/cloud-nic.rules   |    2 +
 .../debian/config/etc/cron.daily/cloud-cleanup  |   27 +
 .../patches/debian/config/etc/default/cloud     |   19 +
 .../debian/config/etc/default/cloud-passwd-srvr |   19 +
 .../patches/debian/config/etc/dnsmasq.conf.tmpl |  636 +++
 .../debian/config/etc/haproxy/haproxy.cfg       |   26 +
 systemvm/patches/debian/config/etc/init.d/cloud |  153 +
 .../debian/config/etc/init.d/cloud-early-config | 1429 ++++++
 .../debian/config/etc/init.d/cloud-passwd-srvr  |  124 +
 .../patches/debian/config/etc/init.d/postinit   |  178 +
 .../config/etc/iptables/iptables-consoleproxy   |   38 +
 .../debian/config/etc/iptables/iptables-elbvm   |   34 +
 .../debian/config/etc/iptables/iptables-ilbvm   |   33 +
 .../debian/config/etc/iptables/iptables-router  |   55 +
 .../config/etc/iptables/iptables-secstorage     |   36 +
 .../config/etc/iptables/iptables-vpcrouter      |   42 +
 .../debian/config/etc/iptables/rt_tables_init   |   29 +
 .../patches/debian/config/etc/iptables/rules    |   42 +
 .../patches/debian/config/etc/logrotate.conf    |   25 +
 .../debian/config/etc/logrotate.d/apache2       |   13 +
 .../debian/config/etc/logrotate.d/dnsmasq       |   13 +
 .../debian/config/etc/logrotate.d/haproxy       |   10 +
 .../patches/debian/config/etc/logrotate.d/ppp   |    9 +
 .../debian/config/etc/logrotate.d/rsyslog       |   37 +
 .../debian/config/etc/modprobe.d/aesni_intel    |    1 +
 .../debian/config/etc/profile.d/cloud.sh        |   22 +
 systemvm/patches/debian/config/etc/rc.local     |   18 +
 systemvm/patches/debian/config/etc/rsyslog.conf |  106 +
 .../patches/debian/config/etc/ssh/sshd_config   |  130 +
 systemvm/patches/debian/config/etc/sysctl.conf  |   49 +
 .../patches/debian/config/etc/vpcdnsmasq.conf   |  462 ++
 .../config/opt/cloud/bin/checkbatchs2svpn.sh    |   25 +
 .../debian/config/opt/cloud/bin/checks2svpn.sh  |   46 +
 .../debian/config/opt/cloud/bin/cloud-nic.sh    |   80 +
 .../opt/cloud/bin/get_template_version.sh       |   46 +
 .../patches/debian/config/opt/cloud/bin/ilb.sh  |  211 +
 .../debian/config/opt/cloud/bin/ipassoc.sh      |  443 ++
 .../debian/config/opt/cloud/bin/ipsectunnel.sh  |  298 ++
 .../debian/config/opt/cloud/bin/netusage.sh     |  155 +
 .../debian/config/opt/cloud/bin/passwd_server   |   23 +
 .../config/opt/cloud/bin/passwd_server_ip       |   32 +
 .../config/opt/cloud/bin/patchsystemvm.sh       |  279 ++
 .../debian/config/opt/cloud/bin/savepassword.sh |   65 +
 .../config/opt/cloud/bin/serve_password.sh      |  103 +
 .../debian/config/opt/cloud/bin/vmdata.py       |  204 +
 .../debian/config/opt/cloud/bin/vpc_acl.sh      |  233 +
 .../debian/config/opt/cloud/bin/vpc_func.sh     |   68 +
 .../debian/config/opt/cloud/bin/vpc_guestnw.sh  |  294 ++
 .../debian/config/opt/cloud/bin/vpc_ipassoc.sh  |  223 +
 .../config/opt/cloud/bin/vpc_loadbalancer.sh    |  224 +
 .../debian/config/opt/cloud/bin/vpc_netusage.sh |  158 +
 .../config/opt/cloud/bin/vpc_passwd_server      |   32 +
 .../config/opt/cloud/bin/vpc_portforwarding.sh  |  126 +
 .../config/opt/cloud/bin/vpc_privateGateway.sh  |   98 +
 .../config/opt/cloud/bin/vpc_privategw_acl.sh   |  224 +
 .../debian/config/opt/cloud/bin/vpc_snat.sh     |  102 +
 .../config/opt/cloud/bin/vpc_staticnat.sh       |  124 +
 .../config/opt/cloud/bin/vpc_staticroute.sh     |  134 +
 .../debian/config/root/.ssh/authorized_keys     |    1 +
 .../debian/config/root/bumpup_priority.sh       |   19 +
 .../debian/config/root/clearUsageRules.sh       |   39 +
 .../patches/debian/config/root/createIpAlias.sh |  100 +
 .../patches/debian/config/root/deleteIpAlias.sh |   60 +
 systemvm/patches/debian/config/root/dnsmasq.sh  |  130 +
 .../patches/debian/config/root/edithosts.sh     |  234 +
 systemvm/patches/debian/config/root/firewall.sh |  357 ++
 .../debian/config/root/firewallRule_egress.sh   |  187 +
 .../patches/debian/config/root/firewall_rule.sh |  202 +
 systemvm/patches/debian/config/root/func.sh     |  143 +
 .../patches/debian/config/root/loadbalancer.sh  |  320 ++
 .../patches/debian/config/root/reconfigLB.sh    |   44 +
 .../redundant_router/arping_gateways.sh.templ   |   29 +
 .../root/redundant_router/backup.sh.templ       |   39 +
 .../root/redundant_router/check_bumpup.sh       |   19 +
 .../redundant_router/check_heartbeat.sh.templ   |   40 +
 .../root/redundant_router/checkrouter.sh.templ  |   56 +
 .../root/redundant_router/conntrackd.conf.templ |  401 ++
 .../root/redundant_router/disable_pubip.sh      |   23 +
 .../root/redundant_router/enable_pubip.sh.templ |   37 +
 .../config/root/redundant_router/fault.sh.templ |   37 +
 .../root/redundant_router/heartbeat.sh.templ    |   20 +
 .../root/redundant_router/keepalived.conf.templ |   57 +
 .../root/redundant_router/master.sh.templ       |   60 +
 .../redundant_router/primary-backup.sh.templ    |  126 +
 .../config/root/redundant_router/services.sh    |   68 +
 systemvm/patches/debian/config/root/userdata.py |   92 +
 systemvm/patches/debian/config/root/userdata.sh |  165 +
 .../debian/config/var/www/html/latest/.htaccess |    5 +
 .../config/var/www/html/userdata/.htaccess      |    1 +
 systemvm/patches/debian/convert.sh              |   64 +
 systemvm/patches/debian/qemuconvert.sh          |   32 +
 systemvm/patches/debian/systemvm.vmx            |   37 +
 systemvm/patches/debian/systemvm.xml            |   53 +
 systemvm/patches/debian/vhdconvert.sh           |   40 +
 systemvm/patches/debian/vpn/etc/ipsec.conf      |    9 +
 .../patches/debian/vpn/etc/ipsec.d/l2tp.conf    |   33 +
 systemvm/patches/debian/vpn/etc/ipsec.secrets   |    2 +
 .../patches/debian/vpn/etc/ppp/options.xl2tpd   |   14 +
 .../patches/debian/vpn/etc/xl2tpd/xl2tpd.conf   |    6 +
 .../debian/vpn/opt/cloud/bin/vpn_l2tp.sh        |  235 +
 systemvm/patches/debian/xe/xe-daemon            |   65 +
 .../patches/debian/xe/xe-linux-distribution     |  267 +
 .../patches/debian/xe/xe-update-guest-attrs     |  226 +
 systemvm/pom.xml                                |  261 +
 systemvm/scripts/_run.sh                        |   64 +
 systemvm/scripts/config_auth.sh                 |   69 +
 systemvm/scripts/config_ssl.sh                  |  183 +
 systemvm/scripts/consoleproxy.sh                |   33 +
 systemvm/scripts/ipfirewall.sh                  |   50 +
 systemvm/scripts/run-proxy.sh                   |   48 +
 systemvm/scripts/run.bat                        |   18 +
 systemvm/scripts/run.sh                         |   45 +
 systemvm/scripts/secstorage.sh                  |   33 +
 systemvm/scripts/ssvm-check.sh                  |  136 +
 systemvm/systemvm-descriptor.xml                |  107 +
 systemvm/ui/viewer-bad-sid.ftl                  |   29 +
 systemvm/ui/viewer-connect-failed.ftl           |   29 +
 systemvm/ui/viewer-update.ftl                   |   24 +
 systemvm/ui/viewer.ftl                          |   60 +
 systemvm/vm-script/vmops                        |  119 +
 .../maint/test_egress_rules_host_maintenance.py |  290 ++
 .../maint/test_host_high_availability.py        |    4 +-
 .../component/maint/test_multiple_ip_ranges.py  |  742 +++
 .../memory_limits/test_domain_limits.py         |   58 +-
 test/integration/component/test_accounts.py     |   27 +-
 test/integration/component/test_blocker_bugs.py |   52 +-
 .../component/test_egress_fw_rules.py           |  108 +-
 test/integration/component/test_egress_rules.py |  207 -
 test/integration/component/test_haproxy.py      |  874 ++++
 .../component/test_netscaler_nw_off.py          |   54 +-
 .../component/test_non_contiguous_vlan.py       |  446 ++
 .../component/test_persistent_networks.py       |  290 ++
 test/integration/component/test_portable_ip.py  |  245 +-
 .../component/test_redundant_router_cleanups.py |    2 +-
 .../component/test_reset_ssh_keypair.py         |  146 +-
 .../component/test_resource_limits.py           |    2 +-
 test/integration/component/test_routers.py      |   52 +-
 .../component/test_shared_networks.py           |    8 +-
 test/integration/component/test_snapshot_gc.py  |   17 +-
 .../component/test_snapshots_improvement.py     |  693 +++
 test/integration/component/test_stopped_vm.py   |   24 +-
 test/integration/component/test_vpc_network.py  |  685 ++-
 .../component/test_vpc_vm_life_cycle.py         |   53 +-
 test/integration/smoke/test_network.py          |   12 +-
 test/integration/smoke/test_routers.py          |   15 +-
 test/integration/smoke/test_snapshots.py        |   76 +-
 test/integration/smoke/test_vpc_vpn.py          |  192 +
 test/pom.xml                                    |    7 +-
 tools/apidoc/gen_toc.py                         |    1 +
 tools/appliance/build.sh                        |    6 +-
 tools/appliance/definitions/devcloud/base.sh    |    2 +-
 .../definitions/systemvm64template/base.sh      |   25 +
 .../definitions/systemvm64template/cleanup.sh   |   20 +
 .../systemvm64template/definition.rb            |   45 +
 .../systemvm64template/postinstall.sh           |  253 +
 .../definitions/systemvm64template/preseed.cfg  |  357 ++
 .../definitions/systemvm64template/zerodisk.sh  |   15 +
 .../definitions/systemvmtemplate/base.sh        |    2 +-
 .../definitions/systemvmtemplate/definition.rb  |    2 +-
 .../definitions/systemvmtemplate/postinstall.sh |   10 +-
 .../definitions/systemvmtemplate64/base.sh      |   25 -
 .../definitions/systemvmtemplate64/cleanup.sh   |   20 -
 .../systemvmtemplate64/definition.rb            |   45 -
 .../systemvmtemplate64/postinstall.sh           |  252 -
 .../definitions/systemvmtemplate64/preseed.cfg  |  357 --
 .../definitions/systemvmtemplate64/zerodisk.sh  |   15 -
 tools/build/build_asf.sh                        |    2 +-
 tools/build/setnextversion.sh                   |    2 +-
 tools/devcloud-kvm/pom.xml                      |    1 -
 tools/devcloud/devcloud-advanced.cfg            |    4 +-
 tools/devcloud/devcloud-advancedsg.cfg          |    4 +-
 tools/devcloud/pom.xml                          |    1 -
 .../src/deps/boxes/basebox-build/postinstall.sh |    2 +-
 tools/eclipse/ApacheCloudStack.xml              |  309 ++
 tools/marvin/marvin/asyncJobMgr.py              |    4 +-
 tools/marvin/marvin/cloudstackConnection.py     |  118 +-
 tools/marvin/marvin/cloudstackTestClient.py     |   58 +-
 tools/marvin/marvin/codegenerator.py            |    2 +-
 tools/marvin/marvin/codes.py                    |   39 +
 tools/marvin/marvin/configGenerator.py          |    9 +-
 tools/marvin/marvin/deployAndRun.py             |   48 +-
 tools/marvin/marvin/deployDataCenter.py         |   76 +-
 tools/marvin/marvin/integration/lib/base.py     |   13 +-
 tools/marvin/marvin/integration/lib/common.py   |   16 +
 tools/marvin/marvin/integration/lib/utils.py    |   55 +-
 tools/marvin/marvin/marvinPlugin.py             |   37 +-
 .../demo/simulator/testcase/libs/base.py        |    8 +-
 tools/marvin/pom.xml                            |    1 -
 tools/pom.xml                                   |    1 -
 ui/css/cloudstack3.css                          | 1420 +++---
 ui/dictionary.jsp                               |   25 +
 ui/images/header-gradient.png                   |  Bin 0 -> 62651 bytes
 ui/images/logo-login-oss.png                    |  Bin 4567 -> 22165 bytes
 ui/images/logo.png                              |  Bin 3886 -> 21781 bytes
 ui/images/overlay-pattern.png                   |  Bin 0 -> 14969 bytes
 ui/index.jsp                                    | 3241 +++++++------
 ui/modules/vpc/vpc.js                           |    2 +-
 ui/scripts/accounts.js                          |   32 +-
 ui/scripts/autoscaler.js                        |    2 +-
 ui/scripts/configuration.js                     |   45 +-
 ui/scripts/docs.js                              |   16 +
 ui/scripts/domains.js                           |  126 +-
 ui/scripts/events.js                            |    6 +
 ui/scripts/globalSettings.js                    |    4 +-
 ui/scripts/instanceWizard.js                    |    8 +
 ui/scripts/instances.js                         |  249 +-
 ui/scripts/network.js                           |  322 +-
 ui/scripts/sharedFunctions.js                   |   41 +-
 ui/scripts/storage.js                           |   36 +-
 ui/scripts/system.js                            | 1062 ++--
 ui/scripts/templates.js                         |  150 +-
 ui/scripts/ui-custom/granularSettings.js        |    3 +
 ui/scripts/ui-custom/instanceWizard.js          |  100 +-
 ui/scripts/ui-custom/physicalResources.js       |   24 +
 ui/scripts/ui-custom/zoneWizard.js              |    6 +-
 ui/scripts/ui/core.js                           |   10 +-
 ui/scripts/ui/dialog.js                         |   10 +-
 ui/scripts/ui/widgets/cloudBrowser.js           |   52 +-
 ui/scripts/ui/widgets/dataTable.js              |   10 +-
 ui/scripts/ui/widgets/detailView.js             |   50 +-
 ui/scripts/ui/widgets/listView.js               |  300 +-
 ui/scripts/ui/widgets/treeView.js               |    1 +
 ui/scripts/vm_snapshots.js                      |    9 +-
 ui/scripts/vpc.js                               |    4 +-
 ui/scripts/zoneWizard.js                        |   24 +-
 usage/resources/usageApplicationContext.xml     |    2 +-
 usage/src/com/cloud/usage/UsageManagerImpl.java |   40 +-
 .../src/com/cloud/usage/UsageSanityChecker.java |    4 +-
 .../src/com/cloud/usage/parser/UsageParser.java |    5 +-
 utils/pom.xml                                   |   44 +-
 utils/src/com/cloud/utils/DateUtil.java         |   41 +-
 utils/src/com/cloud/utils/NumbersUtil.java      |  181 +-
 .../src/com/cloud/utils/PasswordGenerator.java  |   11 +-
 utils/src/com/cloud/utils/ProcessUtil.java      |    5 +-
 utils/src/com/cloud/utils/PropertiesUtil.java   |   18 +-
 utils/src/com/cloud/utils/ReflectUtil.java      |   30 +-
 utils/src/com/cloud/utils/S3Utils.java          |   60 +
 .../utils/backoff/impl/ConstantTimeBackoff.java |   36 +-
 .../cloud/utils/component/ComponentContext.java |   39 +-
 .../utils/component/ComponentLifecycle.java     |    4 +-
 utils/src/com/cloud/utils/component/Named.java  |   25 +
 .../src/com/cloud/utils/component/Registry.java |   50 +
 .../com/cloud/utils/crypt/DBEncryptionUtil.java |    2 +-
 .../utils/crypt/EncryptionSecretKeyChecker.java |    3 +-
 .../com/cloud/utils/encoding/URLEncoder.java    |   44 +-
 .../cloud/utils/exception/ExceptionUtil.java    |   12 +
 utils/src/com/cloud/utils/net/NetUtils.java     |   14 +-
 utils/src/com/cloud/utils/script/Script.java    |   28 +-
 utils/src/com/cloud/utils/ssh/SshHelper.java    |   10 +-
 utils/test/com/cloud/utils/NumbersUtilTest.java |   47 +
 .../com/cloud/utils/PasswordGeneratorTest.java  |   55 +
 .../com/cloud/utils/PropertiesUtilsTest.java    |   54 +
 utils/test/com/cloud/utils/ReflectUtilTest.java |   59 +
 .../backoff/impl/ConstantTimeBackoffTest.java   |  110 +
 .../cloud/utils/encoding/UrlEncoderTest.java    |   32 +
 .../utils/exception/ExceptionUtilTest.java      |   48 +
 .../hypervisor/vmware/mo/DatacenterMO.java      |    8 +-
 .../com/cloud/hypervisor/vmware/mo/HostMO.java  |    2 +-
 .../hypervisor/vmware/mo/VirtualMachineMO.java  |   43 +-
 .../hypervisor/vmware/util/VmwareClient.java    |   56 +-
 .../hypervisor/vmware/util/VmwareContext.java   |    4 +
 .../vmware/util/VmwareContextPool.java          |    8 +-
 .../vmware/util/VmwareGuestOsMapper.java        |    2 +-
 .../hypervisor/vmware/util/VmwareHelper.java    |   44 +-
 2842 files changed, 64719 insertions(+), 142133 deletions(-)
----------------------------------------------------------------------



[25/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
Infra. chart: Adjust colors for better readability


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

Branch: refs/heads/rbac
Commit: bad6c5da3384ea925c952dd595dbdb82c4ca584c
Parents: 6e19864
Author: Brian Federle <br...@citrix.com>
Authored: Tue Oct 29 15:31:57 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Tue Oct 29 15:31:57 2013 -0700

----------------------------------------------------------------------
 ui/css/cloudstack3.css | 31 +++++++++++++++++++++----------
 1 file changed, 21 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bad6c5da/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index 4b5c414..362ec93 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -8527,7 +8527,6 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
   height: 258px;
   width: 762px;
   display: block;
-  background: #8DA4B9 repeat-x 0px -475px;
   /*+border-radius:3px;*/
   -moz-border-radius: 3px;
   -webkit-border-radius: 3px;
@@ -8538,16 +8537,13 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
   -webkit-box-shadow: inset 0px 0px 1px #FFFFFF;
   -o-box-shadow: inset 0px 0px 1px #FFFFFF;
   box-shadow: inset 0px 0px 1px #FFFFFF;
-  border: 1px solid #7D7D7D;
   position: relative;
   margin: 18px 0 0 15px;
-  font-weight: bold;
 }
 
 .system-dashboard.zone {
   height: 609px;
   background-position: 0px -1423px;
-  background-color: #FFFFFF;
 }
 
 .system-dashboard-view .toolbar {
@@ -8578,13 +8574,22 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
   font-size: 13px;
   font-weight: 100;
   background: #DADADA repeat-x 0px -735px;
+  background: rgb(234, 234, 234);
+  background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VhZWFlYSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNkNmQ2ZDYiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
+  background: -moz-linear-gradient(top, rgba(234,234,234,1) 0%, rgba(214,214,214,1) 100%);
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(234,234,234,1)), color-stop(100%,rgba(214,214,214,1)));
+  background: -webkit-linear-gradient(top, rgba(234,234,234,1) 0%,rgba(214,214,214,1) 100%);
+  background: -o-linear-gradient(top, rgba(234,234,234,1) 0%,rgba(214,214,214,1) 100%);
+  background: -ms-linear-gradient(top, rgba(234,234,234,1) 0%,rgba(214,214,214,1) 100%);
+  background: linear-gradient(to bottom, rgba(234,234,234,1) 0%,rgba(214,214,214,1) 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eaeaea', endColorstr='#d6d6d6',GradientType=0 );
   /*+border-radius:3px;*/
   -moz-border-radius: 3px;
   -webkit-border-radius: 3px;
   -khtml-border-radius: 3px;
   border-radius: 3px;
   border-radius: 3px 3px 3px 3px;
-  border: 1px solid #5A5A5A;
+  border: 1px solid #B5B5B5;
 }
 
 .system-dashboard .view-more:hover,
@@ -8627,7 +8632,7 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
   -khtml-border-radius: 3px;
   border-radius: 3px;
   position: relative;
-  border: 1px solid #808080;
+  border: 1px solid #C6C6C6;
   float: left;
 }
 
@@ -8758,7 +8763,13 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
   left: 9px;
   top: 29px;
   position: absolute;
-  font-weight: normal;
+  font-weight: 100;
+  color: #2B7DAF;
+  /*+text-shadow:0px -1px 2px #FFFFFF;*/
+  -moz-text-shadow: 0px -1px 2px #FFFFFF;
+  -webkit-text-shadow: 0px -1px 2px #FFFFFF;
+  -o-text-shadow: 0px -1px 2px #FFFFFF;
+  text-shadow: 0px -1px 2px #FFFFFF;
 }
 
 .system-dashboard .status_box li.capacity span.overview.total {
@@ -8832,7 +8843,6 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
 }
 
 .system-dashboard-view .socket-info > .title {
-  border-bottom: 1px solid #7D7D7D;
   padding: 8px;
   font-size: 13px;
 }
@@ -8848,9 +8858,9 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
   -webkit-border-radius: 3px;
   -khtml-border-radius: 3px;
   border-radius: 3px;
-  margin: 7px 7px 7px 12px;
+  margin: 7px;
   border: 1px solid #CCC;
-  background: #E2E2E2;
+  background: #EFEFEF;
   float: left;
 }
 
@@ -8868,6 +8878,7 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
 .system-dashboard-view .socket-info li .hosts,
 .system-dashboard-view .socket-info li .sockets {
   width: 54px;
+  /*[empty]color:;*/
 }
 
 .system-dashboard-view .socket-info li div .title {


[37/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
Add support for multiple networks in the 'per account' source nat type setting in external network devices

Signed-off-by: Sheng Yang <sh...@citrix.com>


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

Branch: refs/heads/rbac
Commit: 8871cdc03a4009b309fde6d9baa4f9d5e89f7ae7
Parents: a6b6fa6
Author: Will Stevens  <ws...@cloudops.com>
Authored: Wed Oct 30 10:14:14 2013 -0700
Committer: Sheng Yang <sh...@citrix.com>
Committed: Wed Oct 30 10:16:00 2013 -0700

----------------------------------------------------------------------
 .../network/ExternalFirewallDeviceManagerImpl.java   | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8871cdc0/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java
index fa171ab..b0e1b39 100644
--- a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java
+++ b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java
@@ -434,17 +434,20 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl
 
         IPAddressVO sourceNatIp = null;
         if (!sharedSourceNat) {
-            // Get the source NAT IP address for this account
+            // Get the source NAT IP address for this network
             List<? extends IpAddress> sourceNatIps = _networkModel.listPublicIpsAssignedToAccount(network.getAccountId(),
                     zoneId, true);
 
-            if (sourceNatIps.size() != 1) {
-                String errorMsg = "External firewall was unable to find the source NAT IP address for account "
-                        + account.getAccountName();
+            for (IpAddress ipAddress : sourceNatIps) {
+                if (ipAddress.getAssociatedWithNetworkId().longValue() == network.getId()) {
+                    sourceNatIp = _ipAddressDao.findById(ipAddress.getId());
+                    break;
+                }
+            }
+            if (sourceNatIp == null) {
+                String errorMsg = "External firewall was unable to find the source NAT IP address for network " + network.getName();
                 s_logger.error(errorMsg);
                 return true;
-            } else {
-                sourceNatIp = _ipAddressDao.findById(sourceNatIps.get(0).getId());
             }
         }
 


[20/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
Infra. chart: Fix socket info items duplicated on refresh


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

Branch: refs/heads/rbac
Commit: 8a37f40c0ae611d8f0747392ea5f313473846bba
Parents: f1eaa97
Author: Brian Federle <br...@citrix.com>
Authored: Tue Oct 29 15:17:09 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Tue Oct 29 15:17:09 2013 -0700

----------------------------------------------------------------------
 ui/scripts/ui-custom/physicalResources.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8a37f40c/ui/scripts/ui-custom/physicalResources.js
----------------------------------------------------------------------
diff --git a/ui/scripts/ui-custom/physicalResources.js b/ui/scripts/ui-custom/physicalResources.js
index b41400a..fcc2f6a 100644
--- a/ui/scripts/ui-custom/physicalResources.js
+++ b/ui/scripts/ui-custom/physicalResources.js
@@ -40,7 +40,8 @@
                         });
 
                         // Socket info
-                        var $socketInfo = $dashboard.find('.socket-info ul');  
+                        var $socketInfo = $dashboard.find('.socket-info ul');
+                        $socketInfo.find('li').remove(); // Clean up
                         $(args.data.socketInfo).each(function() {
                             var item = this;
                             var name = item.name;


[39/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
Rename 'socket info' title to 'hypervisors'

Rename 'socket info' title to 'hypervisors' to make it more generic, as
the dashboard section contains hypervisor host counts which are useful
in other contexts.


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

Branch: refs/heads/rbac
Commit: 25d4333d45a23d8fdb7b809f3d6071e69ead272e
Parents: 2189da6
Author: Brian Federle <br...@citrix.com>
Authored: Wed Oct 30 11:37:54 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Wed Oct 30 11:37:54 2013 -0700

----------------------------------------------------------------------
 client/WEB-INF/classes/resources/messages.properties | 1 +
 ui/dictionary.jsp                                    | 1 +
 ui/index.jsp                                         | 2 +-
 3 files changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/25d4333d/client/WEB-INF/classes/resources/messages.properties
----------------------------------------------------------------------
diff --git a/client/WEB-INF/classes/resources/messages.properties b/client/WEB-INF/classes/resources/messages.properties
index dd5e65a..12d2a11 100644
--- a/client/WEB-INF/classes/resources/messages.properties
+++ b/client/WEB-INF/classes/resources/messages.properties
@@ -14,6 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+label.hypervisors=Hypervisors
 label.home=Home
 label.sockets=Sockets
 label.root.disk.size=Root disk size

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/25d4333d/ui/dictionary.jsp
----------------------------------------------------------------------
diff --git a/ui/dictionary.jsp b/ui/dictionary.jsp
index cb24d56..1bf0eab 100644
--- a/ui/dictionary.jsp
+++ b/ui/dictionary.jsp
@@ -25,6 +25,7 @@ under the License.
 <% long now = System.currentTimeMillis(); %>
 <script language="javascript">
 dictionary = {
+'label.hypervisors': '<fmt:message key="label.hypervisors" />',
 'label.home': '<fmt:message key="label.home" />',
 'label.sockets': '<fmt:message key="label.sockets" />',
 'label.root.disk.size': '<fmt:message key="label.root.disk.size" />',

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/25d4333d/ui/index.jsp
----------------------------------------------------------------------
diff --git a/ui/index.jsp b/ui/index.jsp
index 3325f75..a4e3e4c 100644
--- a/ui/index.jsp
+++ b/ui/index.jsp
@@ -1121,7 +1121,7 @@
                     </ul>
                     
                     <div class="socket-info">
-                        <div class="title">Socket info</div>
+                        <div class="title"><fmt:message key="label.hypervisors"/></div>
                         <ul></ul>
                     </div>
                 </div>


[02/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
ResourceDetails: added "display" field to a bunch of VOs - determines whether the detail should be returned to the regular user


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

Branch: refs/heads/rbac
Commit: 591dcd1d1c3c9e547631610bcee79a5f5120b661
Parents: 30aea0b
Author: Alena Prokharchyk <al...@citrix.com>
Authored: Mon Oct 28 16:01:56 2013 -0700
Committer: Alena Prokharchyk <al...@citrix.com>
Committed: Tue Oct 29 09:18:11 2013 -0700

----------------------------------------------------------------------
 .../cloud/server/ResourceMetaDataService.java   |  7 +--
 .../org/apache/cloudstack/api/ApiConstants.java |  1 +
 .../apache/cloudstack/api/ResourceDetail.java   |  2 +
 .../user/volume/ListResourceDetailsCmd.java     | 41 +++++++++++-----
 .../api/response/ResourceDetailResponse.java    | 15 +++---
 .../apache/cloudstack/query/QueryService.java   |  2 +-
 client/tomcatconf/commands.properties.in        |  2 +-
 .../com/cloud/vm/VirtualMachineManagerImpl.java | 16 ++----
 .../src/com/cloud/dc/DataCenterDetailVO.java    |  8 +++
 .../src/com/cloud/dc/dao/DataCenterDaoImpl.java |  4 +-
 .../cloud/dc/dao/DataCenterDetailsDaoImpl.java  |  4 +-
 .../com/cloud/network/dao/NetworkDetailVO.java  |  8 +++
 .../network/dao/NetworkDetailsDaoImpl.java      |  4 +-
 .../cloud/service/ServiceOfferingDetailsVO.java |  8 +++
 .../service/dao/ServiceOfferingDaoImpl.java     |  4 +-
 .../dao/ServiceOfferingDetailsDaoImpl.java      |  4 +-
 .../com/cloud/storage/VMTemplateDetailVO.java   |  8 +++
 .../src/com/cloud/storage/VolumeDetailVO.java   |  9 +++-
 .../storage/dao/StoragePoolDetailsDaoImpl.java  |  4 +-
 .../cloud/storage/dao/VMTemplateDaoImpl.java    |  6 +--
 .../storage/dao/VMTemplateDetailsDaoImpl.java   |  4 +-
 .../cloud/storage/dao/VolumeDetailsDaoImpl.java |  4 +-
 engine/schema/src/com/cloud/vm/NicDetailVO.java |  7 +++
 .../schema/src/com/cloud/vm/UserVmDetailVO.java |  8 +++
 .../src/com/cloud/vm/dao/NicDetailsDaoImpl.java |  4 +-
 .../src/com/cloud/vm/dao/UserVmDaoImpl.java     |  4 +-
 .../com/cloud/vm/dao/UserVmDetailsDaoImpl.java  |  4 +-
 .../resourcedetail/FirewallRuleDetailVO.java    |  8 +++
 .../resourcedetail/ResourceDetailsDao.java      | 45 ++++++++++++++---
 .../resourcedetail/ResourceDetailsDaoBase.java  | 31 ++++++++++--
 .../dao/FirewallRuleDetailsDaoImpl.java         |  4 +-
 .../datastore/db/PrimaryDataStoreDaoImpl.java   |  4 +-
 .../datastore/db/PrimaryDataStoreDetailVO.java  |  8 +++
 .../datastore/db/StoragePoolDetailVO.java       |  8 +++
 .../db/PrimaryDataStoreDetailsDaoImpl.java      |  4 +-
 .../cloud/deploy/ImplicitDedicationPlanner.java |  2 +-
 .../implicitplanner/ImplicitPlannerTest.java    |  2 +-
 server/src/com/cloud/api/ApiDBUtils.java        | 29 +++++------
 .../com/cloud/api/query/QueryManagerImpl.java   | 25 +++++-----
 .../api/query/dao/DataCenterJoinDaoImpl.java    |  2 +-
 .../query/dao/ServiceOfferingJoinDaoImpl.java   |  3 +-
 .../configuration/ConfigurationManagerImpl.java |  8 ++-
 .../consoleproxy/ConsoleProxyManagerImpl.java   |  2 +-
 .../cloud/hypervisor/HypervisorGuruBase.java    |  2 +-
 .../metadata/ResourceMetaDataManagerImpl.java   | 51 +++++++++++---------
 .../VirtualNetworkApplianceManagerImpl.java     |  2 +-
 .../com/cloud/storage/StorageManagerImpl.java   |  2 +-
 .../secondary/SecondaryStorageManagerImpl.java  |  2 +-
 .../com/cloud/template/TemplateManagerImpl.java |  2 +-
 server/src/com/cloud/vm/UserVmManagerImpl.java  |  4 +-
 setup/db/db/schema-421to430.sql                 | 14 +++++-
 51 files changed, 307 insertions(+), 149 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/api/src/com/cloud/server/ResourceMetaDataService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/server/ResourceMetaDataService.java b/api/src/com/cloud/server/ResourceMetaDataService.java
index 46f1c4a..a71cfe7 100644
--- a/api/src/com/cloud/server/ResourceMetaDataService.java
+++ b/api/src/com/cloud/server/ResourceMetaDataService.java
@@ -44,10 +44,11 @@ public interface ResourceMetaDataService {
     public boolean deleteResourceMetaData(String resourceId, ResourceObjectType resourceType, String key);
 
 
-    List<? extends ResourceDetail> getDetails(long resourceId, ResourceObjectType resourceType);
+    ResourceDetail getDetail(long resourceId, ResourceObjectType resourceType, String key);
 
 
-    ResourceDetail getDetail(long resourceId, ResourceObjectType resourceType, String key);
+    Map<String, String> getDetailsMap(long resourceId, ResourceObjectType resourceType, Boolean forDisplay);
 
+    List<? extends ResourceDetail> getDetailsList(long resourceId, ResourceObjectType resourceType, Boolean forDisplay);
 
-    }
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/api/src/org/apache/cloudstack/api/ApiConstants.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java b/api/src/org/apache/cloudstack/api/ApiConstants.java
index e10c37b..e56fdbc 100755
--- a/api/src/org/apache/cloudstack/api/ApiConstants.java
+++ b/api/src/org/apache/cloudstack/api/ApiConstants.java
@@ -523,6 +523,7 @@ public class ApiConstants {
     public static final String SERVICE_STATE = "servicestate";
     public static final String RESOURCE_DETAILS = "resourcedetails";
     public static final String EXPUNGE = "expunge";
+    public static final String FOR_DISPLAY = "fordisplay";
 
     public enum HostDetails {
         all, capacity, events, stats, min;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/api/src/org/apache/cloudstack/api/ResourceDetail.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/ResourceDetail.java b/api/src/org/apache/cloudstack/api/ResourceDetail.java
index 7a2570b..4914c78 100644
--- a/api/src/org/apache/cloudstack/api/ResourceDetail.java
+++ b/api/src/org/apache/cloudstack/api/ResourceDetail.java
@@ -23,5 +23,7 @@ public interface ResourceDetail extends InternalIdentity{
     public String getName();
     
     public String getValue();
+    
+    public boolean isDisplay();
         
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/api/src/org/apache/cloudstack/api/command/user/volume/ListResourceDetailsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ListResourceDetailsCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ListResourceDetailsCmd.java
index 18accac..1e522b2 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/ListResourceDetailsCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/ListResourceDetailsCmd.java
@@ -26,6 +26,7 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.response.ListResponse;
 import org.apache.cloudstack.api.response.ResourceDetailResponse;
 import org.apache.cloudstack.api.response.ResourceTagResponse;
+import org.apache.cloudstack.context.CallContext;
 
 import com.cloud.server.ResourceTag;
 
@@ -41,6 +42,31 @@ public class ListResourceDetailsCmd extends BaseListProjectAndAccountResourcesCm
 
     @Parameter(name=ApiConstants.KEY, type=CommandType.STRING, description="list by key")
     private String key;
+    
+    @Parameter(name=ApiConstants.FOR_DISPLAY, type=CommandType.BOOLEAN, description="if set to true, only details marked with display=true, are returned." +
+    		" Always false is the call is made by the regular user", since="4.3")
+    private Boolean forDisplay;
+    
+    public String getResourceId() {
+        return resourceId;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    @Override
+    public String getCommandName() {
+        return s_name;
+    }
+    
+    public Boolean forDisplay() {
+        if (!_accountService.isAdmin(CallContext.current().getCallingAccount().getType())) {
+            return true;
+        } 
+        
+        return forDisplay;
+    }
 
     /////////////////////////////////////////////////////
     /////////////////// Accessors ///////////////////////
@@ -50,7 +76,7 @@ public class ListResourceDetailsCmd extends BaseListProjectAndAccountResourcesCm
     public void execute() {
 
         ListResponse<ResourceDetailResponse> response = new ListResponse<ResourceDetailResponse>();
-        List<ResourceDetailResponse> resourceDetailResponse = _queryService.listResource(this);
+        List<ResourceDetailResponse> resourceDetailResponse = _queryService.listResourceDetails(this);
         response.setResponses(resourceDetailResponse);
         response.setResponseName(getCommandName());
         this.setResponseObject(response);
@@ -60,17 +86,6 @@ public class ListResourceDetailsCmd extends BaseListProjectAndAccountResourcesCm
         return _taggedResourceService.getResourceType(resourceType);
     }
 
-    public String getResourceId() {
-        return resourceId;
-    }
-
-    public String getKey() {
-        return key;
-    }
-
-    @Override
-    public String getCommandName() {
-        return s_name;
-    }
+    
 
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/api/src/org/apache/cloudstack/api/response/ResourceDetailResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/ResourceDetailResponse.java b/api/src/org/apache/cloudstack/api/response/ResourceDetailResponse.java
index 0e917d7..989a126 100644
--- a/api/src/org/apache/cloudstack/api/response/ResourceDetailResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/ResourceDetailResponse.java
@@ -16,14 +16,8 @@
 // under the License.
 package org.apache.cloudstack.api.response;
 
-import java.util.Date;
-import java.util.HashSet;
-import java.util.LinkedHashSet;
-import java.util.Set;
-
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.BaseResponse;
-import org.apache.cloudstack.api.EntityReference;
 
 import com.cloud.serializer.Param;
 import com.google.gson.annotations.SerializedName;
@@ -47,6 +41,11 @@ public class ResourceDetailResponse extends BaseResponse{
     @Param(description = "value of the resource detail")
     private String value;
 
+    
+    @SerializedName(ApiConstants.FOR_DISPLAY)
+    @Param(description = "if detail is returned to the regular user", since="4.3")
+    private boolean forDisplay;
+    
     public String getResourceId() {
         return resourceId;
     }
@@ -78,4 +77,8 @@ public class ResourceDetailResponse extends BaseResponse{
     public void setValue(String value) {
         this.value = value;
     }
+
+    public void setForDisplay(boolean forDisplay) {
+        this.forDisplay = forDisplay;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/api/src/org/apache/cloudstack/query/QueryService.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/query/QueryService.java b/api/src/org/apache/cloudstack/query/QueryService.java
index a203564..4a9e218 100644
--- a/api/src/org/apache/cloudstack/query/QueryService.java
+++ b/api/src/org/apache/cloudstack/query/QueryService.java
@@ -100,7 +100,7 @@ public interface QueryService {
             String affinityGroupType, Long vmId, String accountName, Long domainId, boolean isRecursive,
             boolean listAll, Long startIndex, Long pageSize);
 
-    public List<ResourceDetailResponse> listResource(ListResourceDetailsCmd cmd);
+    public List<ResourceDetailResponse> listResourceDetails(ListResourceDetailsCmd cmd);
 
     ListResponse<DomainRouterResponse> searchForInternalLbVms(ListInternalLBVMsCmd cmd);
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/client/tomcatconf/commands.properties.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in
index 81fd985..b106b9f 100644
--- a/client/tomcatconf/commands.properties.in
+++ b/client/tomcatconf/commands.properties.in
@@ -473,7 +473,7 @@ listTags=15
 #### Meta Data commands
 addResourceDetail=1
 removeResourceDetail=1
-listResourceDetails=1
+listResourceDetails=15
 
 ### Site-to-site VPN commands
 createVpnCustomerGateway=15

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
index 539936f..b74b4c5 100755
--- a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -35,7 +35,6 @@ import javax.ejb.Local;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
-import org.apache.log4j.Logger;
 import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
 import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
@@ -51,6 +50,7 @@ import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 import org.apache.cloudstack.storage.to.VolumeObjectTO;
 import org.apache.cloudstack.utils.identity.ManagementServerNode;
+import org.apache.log4j.Logger;
 
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.Listener;
@@ -162,8 +162,6 @@ import com.cloud.utils.db.DB;
 import com.cloud.utils.db.EntityManager;
 import com.cloud.utils.db.GlobalLock;
 import com.cloud.utils.db.Transaction;
-import com.cloud.utils.db.TransactionCallback;
-import com.cloud.utils.db.TransactionCallbackNoReturn;
 import com.cloud.utils.db.TransactionCallbackWithException;
 import com.cloud.utils.db.TransactionCallbackWithExceptionNoReturn;
 import com.cloud.utils.db.TransactionStatus;
@@ -803,15 +801,11 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
                 //storing the value of overcommit in the vm_details table for doing a capacity check in case the cluster overcommit ratio is changed.
                 if (_uservmDetailsDao.findDetail(vm.getId(), "cpuOvercommitRatio") == null &&
                         ((Float.parseFloat(cluster_detail_cpu.getValue()) > 1f || Float.parseFloat(cluster_detail_ram.getValue()) > 1f))) {
-                    UserVmDetailVO vmDetail_cpu = new UserVmDetailVO(vm.getId(), "cpuOvercommitRatio", cluster_detail_cpu.getValue());
-                    UserVmDetailVO vmDetail_ram = new UserVmDetailVO(vm.getId(), "memoryOvercommitRatio", cluster_detail_ram.getValue());
-                    _uservmDetailsDao.persist(vmDetail_cpu);
-                    _uservmDetailsDao.persist(vmDetail_ram);
+                    _uservmDetailsDao.addDetail(vm.getId(), "cpuOvercommitRatio", cluster_detail_cpu.getValue());
+                    _uservmDetailsDao.addDetail(vm.getId(), "memoryOvercommitRatio", cluster_detail_ram.getValue());
                 } else if (_uservmDetailsDao.findDetail(vm.getId(), "cpuOvercommitRatio") != null) {
-                    UserVmDetailVO vmDetail_cpu = _uservmDetailsDao.findDetail(vm.getId(), "cpuOvercommitRatio");
-                    UserVmDetailVO vmDetail_ram = _uservmDetailsDao.findDetail(vm.getId(), "memoryOvercommitRatio");
-                    _uservmDetailsDao.addDetail(vmDetail_cpu);
-                    _uservmDetailsDao.addDetail(vmDetail_ram);
+                    _uservmDetailsDao.addDetail(vm.getId(), "cpuOvercommitRatio", cluster_detail_cpu.getValue());
+                    _uservmDetailsDao.addDetail(vm.getId(), "memoryOvercommitRatio", cluster_detail_ram.getValue());
                 }
                 vmProfile.setCpuOvercommitRatio(Float.parseFloat(cluster_detail_cpu.getValue()));
                 vmProfile.setMemoryOvercommitRatio(Float.parseFloat(cluster_detail_ram.getValue()));

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/com/cloud/dc/DataCenterDetailVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/dc/DataCenterDetailVO.java b/engine/schema/src/com/cloud/dc/DataCenterDetailVO.java
index 6771ef8..0ff7865 100644
--- a/engine/schema/src/com/cloud/dc/DataCenterDetailVO.java
+++ b/engine/schema/src/com/cloud/dc/DataCenterDetailVO.java
@@ -42,6 +42,9 @@ public class DataCenterDetailVO implements ResourceDetail {
     @Column(name="value")
     private String value;
     
+    @Column(name="display")
+    private boolean display;
+    
     protected DataCenterDetailVO() {
     }
     
@@ -71,4 +74,9 @@ public class DataCenterDetailVO implements ResourceDetail {
     public long getResourceId() {
         return resourceId;
     }
+    
+    @Override
+    public boolean isDisplay() {
+        return display;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/com/cloud/dc/dao/DataCenterDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterDaoImpl.java b/engine/schema/src/com/cloud/dc/dao/DataCenterDaoImpl.java
index 9d90241..9cc43ef 100755
--- a/engine/schema/src/com/cloud/dc/dao/DataCenterDaoImpl.java
+++ b/engine/schema/src/com/cloud/dc/dao/DataCenterDaoImpl.java
@@ -358,7 +358,7 @@ public class DataCenterDaoImpl extends GenericDaoBase<DataCenterVO, Long> implem
 
     @Override
     public void loadDetails(DataCenterVO zone) {
-        Map<String, String> details =_detailsDao.findDetails(zone.getId());
+        Map<String, String> details =_detailsDao.listDetailsKeyPairs(zone.getId());
         zone.setDetails(details);
     }
 
@@ -374,7 +374,7 @@ public class DataCenterDaoImpl extends GenericDaoBase<DataCenterVO, Long> implem
             resourceDetails.add(new DataCenterDetailVO(zone.getId(), key, details.get(key)));
         }
         
-        _detailsDao.addDetails(resourceDetails);
+        _detailsDao.saveDetails(resourceDetails);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/com/cloud/dc/dao/DataCenterDetailsDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterDetailsDaoImpl.java b/engine/schema/src/com/cloud/dc/dao/DataCenterDetailsDaoImpl.java
index 93c08ec..49092f8 100644
--- a/engine/schema/src/com/cloud/dc/dao/DataCenterDetailsDaoImpl.java
+++ b/engine/schema/src/com/cloud/dc/dao/DataCenterDetailsDaoImpl.java
@@ -42,8 +42,8 @@ public class DataCenterDetailsDaoImpl extends ResourceDetailsDaoBase<DataCenterD
     }
 
     @Override
-    public DataCenterDetailVO createDetail(long resourceId, String key, String value) {
-        return new DataCenterDetailVO(resourceId, key, value);
+    public void addDetail(long resourceId, String key, String value) {
+        super.addDetail(new DataCenterDetailVO(resourceId, key, value));
     }
 
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/com/cloud/network/dao/NetworkDetailVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkDetailVO.java b/engine/schema/src/com/cloud/network/dao/NetworkDetailVO.java
index c7006c4..b7c4db8 100644
--- a/engine/schema/src/com/cloud/network/dao/NetworkDetailVO.java
+++ b/engine/schema/src/com/cloud/network/dao/NetworkDetailVO.java
@@ -41,6 +41,9 @@ public class NetworkDetailVO implements ResourceDetail {
 
     @Column(name="value", length=1024)
     private String value;
+    
+    @Column(name="display")
+    private boolean display;
 
     public NetworkDetailVO() {}
 
@@ -69,4 +72,9 @@ public class NetworkDetailVO implements ResourceDetail {
     public long getResourceId() {
         return resourceId;
     }
+    
+    @Override
+    public boolean isDisplay() {
+        return display;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/com/cloud/network/dao/NetworkDetailsDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkDetailsDaoImpl.java b/engine/schema/src/com/cloud/network/dao/NetworkDetailsDaoImpl.java
index db5c44f..b42481c 100644
--- a/engine/schema/src/com/cloud/network/dao/NetworkDetailsDaoImpl.java
+++ b/engine/schema/src/com/cloud/network/dao/NetworkDetailsDaoImpl.java
@@ -27,8 +27,8 @@ import org.springframework.stereotype.Component;
 public class NetworkDetailsDaoImpl extends ResourceDetailsDaoBase<NetworkDetailVO> implements NetworkDetailsDao {
 
     @Override
-    public NetworkDetailVO createDetail(long resourceId, String key, String value) {
-        return new NetworkDetailVO(resourceId, key, value);
+    public void addDetail(long resourceId, String key, String value) {
+        super.addDetail(new NetworkDetailVO(resourceId, key, value));
     }
 
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/com/cloud/service/ServiceOfferingDetailsVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/service/ServiceOfferingDetailsVO.java b/engine/schema/src/com/cloud/service/ServiceOfferingDetailsVO.java
index 8b70b77..4ab3134 100644
--- a/engine/schema/src/com/cloud/service/ServiceOfferingDetailsVO.java
+++ b/engine/schema/src/com/cloud/service/ServiceOfferingDetailsVO.java
@@ -41,6 +41,9 @@ public class ServiceOfferingDetailsVO implements ResourceDetail {
 
     @Column(name="value")
     private String value;
+    
+    @Column(name="display")
+    boolean display;
 
     protected ServiceOfferingDetailsVO() {
     }
@@ -70,4 +73,9 @@ public class ServiceOfferingDetailsVO implements ResourceDetail {
     public long getId() {
         return id;
     }
+    
+    @Override
+    public boolean isDisplay() {
+        return display;
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/com/cloud/service/dao/ServiceOfferingDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/service/dao/ServiceOfferingDaoImpl.java b/engine/schema/src/com/cloud/service/dao/ServiceOfferingDaoImpl.java
index 648e4d0..f807f0d 100644
--- a/engine/schema/src/com/cloud/service/dao/ServiceOfferingDaoImpl.java
+++ b/engine/schema/src/com/cloud/service/dao/ServiceOfferingDaoImpl.java
@@ -162,7 +162,7 @@ public class ServiceOfferingDaoImpl extends GenericDaoBase<ServiceOfferingVO, Lo
 
     @Override
     public void loadDetails(ServiceOfferingVO serviceOffering) {
-        Map<String, String> details = detailsDao.findDetails(serviceOffering.getId());
+        Map<String, String> details = detailsDao.listDetailsKeyPairs(serviceOffering.getId());
         serviceOffering.setDetails(details);
     }
 
@@ -178,6 +178,6 @@ public class ServiceOfferingDaoImpl extends GenericDaoBase<ServiceOfferingVO, Lo
             resourceDetails.add(new ServiceOfferingDetailsVO(serviceOffering.getId(), key, details.get(key)));
         }
         
-        detailsDao.addDetails(resourceDetails);
+        detailsDao.saveDetails(resourceDetails);
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/com/cloud/service/dao/ServiceOfferingDetailsDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/service/dao/ServiceOfferingDetailsDaoImpl.java b/engine/schema/src/com/cloud/service/dao/ServiceOfferingDetailsDaoImpl.java
index 8a78b17..5d81861 100644
--- a/engine/schema/src/com/cloud/service/dao/ServiceOfferingDetailsDaoImpl.java
+++ b/engine/schema/src/com/cloud/service/dao/ServiceOfferingDetailsDaoImpl.java
@@ -29,8 +29,8 @@ public class ServiceOfferingDetailsDaoImpl extends ResourceDetailsDaoBase<Servic
         implements ServiceOfferingDetailsDao {
 
     @Override
-    public ServiceOfferingDetailsVO createDetail(long resourceId, String key, String value) {
-        return new ServiceOfferingDetailsVO(resourceId, key, value);
+    public void addDetail(long resourceId, String key, String value) {
+        super.addDetail(new ServiceOfferingDetailsVO(resourceId, key, value));
     }
     
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/com/cloud/storage/VMTemplateDetailVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/storage/VMTemplateDetailVO.java b/engine/schema/src/com/cloud/storage/VMTemplateDetailVO.java
index 59b490b..52efe3b 100644
--- a/engine/schema/src/com/cloud/storage/VMTemplateDetailVO.java
+++ b/engine/schema/src/com/cloud/storage/VMTemplateDetailVO.java
@@ -41,6 +41,9 @@ public class VMTemplateDetailVO implements ResourceDetail {
 
     @Column(name = "value", length = 1024)
     private String value;
+    
+    @Column(name="display")
+    private boolean display;
 
     public VMTemplateDetailVO() {
     }
@@ -70,4 +73,9 @@ public class VMTemplateDetailVO implements ResourceDetail {
     public String getValue() {
         return value;
     }
+    
+    @Override
+    public boolean isDisplay() {
+        return display;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/com/cloud/storage/VolumeDetailVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/storage/VolumeDetailVO.java b/engine/schema/src/com/cloud/storage/VolumeDetailVO.java
index 499be86..f9b7653 100644
--- a/engine/schema/src/com/cloud/storage/VolumeDetailVO.java
+++ b/engine/schema/src/com/cloud/storage/VolumeDetailVO.java
@@ -23,7 +23,6 @@ import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.Table;
 
-import org.apache.cloudstack.api.InternalIdentity;
 import org.apache.cloudstack.api.ResourceDetail;
 
 @Entity
@@ -42,6 +41,9 @@ public class VolumeDetailVO implements ResourceDetail {
 
     @Column(name="value", length=1024)
     private String value;
+    
+    @Column(name="display")
+    private boolean display;
 
     public VolumeDetailVO() {}
 
@@ -70,5 +72,10 @@ public class VolumeDetailVO implements ResourceDetail {
     public long getResourceId() {
         return resourceId;
     }
+    
+    @Override
+    public boolean isDisplay() {
+        return display;
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/com/cloud/storage/dao/StoragePoolDetailsDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/storage/dao/StoragePoolDetailsDaoImpl.java b/engine/schema/src/com/cloud/storage/dao/StoragePoolDetailsDaoImpl.java
index 3c177d0..ed10270 100644
--- a/engine/schema/src/com/cloud/storage/dao/StoragePoolDetailsDaoImpl.java
+++ b/engine/schema/src/com/cloud/storage/dao/StoragePoolDetailsDaoImpl.java
@@ -44,7 +44,7 @@ public class StoragePoolDetailsDaoImpl extends ResourceDetailsDaoBase<StoragePoo
     }
 
     @Override
-    public StoragePoolDetailVO createDetail(long resourceId, String key, String value) {
-        return new StoragePoolDetailVO(resourceId, key, value);
+    public void addDetail(long resourceId, String key, String value) {
+        super.addDetail(new StoragePoolDetailVO(resourceId, key, value));
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java b/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
index d4bb367..73b68ea 100755
--- a/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
+++ b/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
@@ -405,7 +405,7 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
 
     @Override
     public void loadDetails(VMTemplateVO tmpl) {
-        Map<String, String> details = _templateDetailsDao.findDetails(tmpl.getId());
+        Map<String, String> details = _templateDetailsDao.listDetailsKeyPairs(tmpl.getId());
         tmpl.setDetails(details);
     }
 
@@ -421,7 +421,7 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
             details.add(detail);
         }
         
-        _templateDetailsDao.addDetails(details);
+        _templateDetailsDao.saveDetails(details);
     }
 
 
@@ -756,7 +756,7 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
                 for (String key : tmplt.getDetails().keySet()) {
                     details.add(new VMTemplateDetailVO(tmplt.getId(), key, tmplt.getDetails().get(key)));
                 }
-                _templateDetailsDao.addDetails(details);
+                _templateDetailsDao.saveDetails(details);
             }
         }
         VMTemplateZoneVO tmpltZoneVO = _templateZoneDao.findByZoneTemplate(zoneId, tmplt.getId());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/com/cloud/storage/dao/VMTemplateDetailsDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/storage/dao/VMTemplateDetailsDaoImpl.java b/engine/schema/src/com/cloud/storage/dao/VMTemplateDetailsDaoImpl.java
index e2f5abf..327f854 100644
--- a/engine/schema/src/com/cloud/storage/dao/VMTemplateDetailsDaoImpl.java
+++ b/engine/schema/src/com/cloud/storage/dao/VMTemplateDetailsDaoImpl.java
@@ -28,7 +28,7 @@ import com.cloud.storage.VMTemplateDetailVO;
 public class VMTemplateDetailsDaoImpl extends ResourceDetailsDaoBase<VMTemplateDetailVO> implements VMTemplateDetailsDao {
 
     @Override
-    public VMTemplateDetailVO createDetail(long resourceId, String key, String value) {
-        return new VMTemplateDetailVO(resourceId, key, value);
+    public void addDetail(long resourceId, String key, String value) {
+        super.addDetail(new VMTemplateDetailVO(resourceId, key, value));
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/com/cloud/storage/dao/VolumeDetailsDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/storage/dao/VolumeDetailsDaoImpl.java b/engine/schema/src/com/cloud/storage/dao/VolumeDetailsDaoImpl.java
index 1afa6a2..7bb540a 100644
--- a/engine/schema/src/com/cloud/storage/dao/VolumeDetailsDaoImpl.java
+++ b/engine/schema/src/com/cloud/storage/dao/VolumeDetailsDaoImpl.java
@@ -28,8 +28,8 @@ import com.cloud.storage.VolumeDetailVO;
 public class VolumeDetailsDaoImpl extends ResourceDetailsDaoBase<VolumeDetailVO> implements VolumeDetailsDao {
 
     @Override
-    public VolumeDetailVO createDetail(long resourceId, String key, String value) {
-        return new VolumeDetailVO(resourceId, key, value);
+    public void addDetail(long resourceId, String key, String value) {
+        super.addDetail(new VolumeDetailVO(resourceId, key, value));
     }
     
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/com/cloud/vm/NicDetailVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/vm/NicDetailVO.java b/engine/schema/src/com/cloud/vm/NicDetailVO.java
index 4be5723..93d0d32 100644
--- a/engine/schema/src/com/cloud/vm/NicDetailVO.java
+++ b/engine/schema/src/com/cloud/vm/NicDetailVO.java
@@ -41,6 +41,9 @@ public class NicDetailVO implements ResourceDetail {
 
     @Column(name="value", length=1024)
     private String value;
+    
+    @Column(name="display")
+    private boolean display;
 
     public NicDetailVO() {}
 
@@ -70,4 +73,8 @@ public class NicDetailVO implements ResourceDetail {
         return resourceId;
     }
 
+    @Override
+    public boolean isDisplay() {
+        return display;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/com/cloud/vm/UserVmDetailVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/vm/UserVmDetailVO.java b/engine/schema/src/com/cloud/vm/UserVmDetailVO.java
index 62c924b..82bf32d 100644
--- a/engine/schema/src/com/cloud/vm/UserVmDetailVO.java
+++ b/engine/schema/src/com/cloud/vm/UserVmDetailVO.java
@@ -42,6 +42,9 @@ public class UserVmDetailVO implements ResourceDetail {
     @Column(name="value", length=1024)
     private String value;
     
+    @Column(name="display")
+    private boolean display;
+    
     public UserVmDetailVO() {}
     
     public UserVmDetailVO(long vmId, String name, String value) {
@@ -69,5 +72,10 @@ public class UserVmDetailVO implements ResourceDetail {
     public long getResourceId() {
         return resourceId;
     }
+    
+    @Override
+    public boolean isDisplay() {
+        return display;
+    }
 	
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/com/cloud/vm/dao/NicDetailsDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/vm/dao/NicDetailsDaoImpl.java b/engine/schema/src/com/cloud/vm/dao/NicDetailsDaoImpl.java
index d442982..013c87b 100644
--- a/engine/schema/src/com/cloud/vm/dao/NicDetailsDaoImpl.java
+++ b/engine/schema/src/com/cloud/vm/dao/NicDetailsDaoImpl.java
@@ -28,7 +28,7 @@ import com.cloud.vm.NicDetailVO;
 public class NicDetailsDaoImpl extends ResourceDetailsDaoBase<NicDetailVO> implements NicDetailsDao {
 
     @Override
-    public NicDetailVO createDetail(long resourceId, String key, String value) {
-        return new NicDetailVO(resourceId, key, value);
+    public void addDetail(long resourceId, String key, String value) {
+        super.addDetail(new NicDetailVO(resourceId, key, value));
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/com/cloud/vm/dao/UserVmDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/vm/dao/UserVmDaoImpl.java b/engine/schema/src/com/cloud/vm/dao/UserVmDaoImpl.java
index 1992ef47..2108069 100755
--- a/engine/schema/src/com/cloud/vm/dao/UserVmDaoImpl.java
+++ b/engine/schema/src/com/cloud/vm/dao/UserVmDaoImpl.java
@@ -332,7 +332,7 @@ public class UserVmDaoImpl extends GenericDaoBase<UserVmVO, Long> implements Use
 
 	@Override
 	public void loadDetails(UserVmVO vm) {
-        Map<String, String> details = _detailsDao.findDetails(vm.getId());
+        Map<String, String> details = _detailsDao.listDetailsKeyPairs(vm.getId());
         vm.setDetails(details);
 	}
 
@@ -347,7 +347,7 @@ public class UserVmDaoImpl extends GenericDaoBase<UserVmVO, Long> implements Use
             details.add(new UserVmDetailVO(vm.getId(), key, detailsStr.get(key)));
         }
         
-        _detailsDao.addDetails(details);
+        _detailsDao.saveDetails(details);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java b/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java
index 0445419..fad9ace 100644
--- a/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java
+++ b/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java
@@ -28,8 +28,8 @@ import com.cloud.vm.UserVmDetailVO;
 public class UserVmDetailsDaoImpl extends ResourceDetailsDaoBase<UserVmDetailVO> implements UserVmDetailsDao {
 
     @Override
-    public UserVmDetailVO createDetail(long resourceId, String key, String value) {
-        return new UserVmDetailVO(resourceId, key, value);
+    public void addDetail(long resourceId, String key, String value) {
+        super.addDetail(new UserVmDetailVO(resourceId, key, value));
     }
     
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/org/apache/cloudstack/resourcedetail/FirewallRuleDetailVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/FirewallRuleDetailVO.java b/engine/schema/src/org/apache/cloudstack/resourcedetail/FirewallRuleDetailVO.java
index d7e90e8..88d2b00 100644
--- a/engine/schema/src/org/apache/cloudstack/resourcedetail/FirewallRuleDetailVO.java
+++ b/engine/schema/src/org/apache/cloudstack/resourcedetail/FirewallRuleDetailVO.java
@@ -41,6 +41,9 @@ public class FirewallRuleDetailVO implements ResourceDetail{
 
         @Column(name="value", length=1024)
         private String value;
+        
+        @Column(name="display")
+        private boolean display;
 
         public FirewallRuleDetailVO() {}
 
@@ -69,4 +72,9 @@ public class FirewallRuleDetailVO implements ResourceDetail{
         public long getResourceId() {
             return resourceId;
         }
+
+        @Override
+        public boolean isDisplay() {
+            return display;
+        }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/org/apache/cloudstack/resourcedetail/ResourceDetailsDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/ResourceDetailsDao.java b/engine/schema/src/org/apache/cloudstack/resourcedetail/ResourceDetailsDao.java
index 043c833..4689543 100644
--- a/engine/schema/src/org/apache/cloudstack/resourcedetail/ResourceDetailsDao.java
+++ b/engine/schema/src/org/apache/cloudstack/resourcedetail/ResourceDetailsDao.java
@@ -24,19 +24,48 @@ import org.apache.cloudstack.api.ResourceDetail;
 import com.cloud.utils.db.GenericDao;
 
 public interface ResourceDetailsDao<R extends ResourceDetail> extends GenericDao<R, Long>{
+    /**
+     * Finds detail by resourceId and key
+     * @param resourceId
+     * @param name
+     * @return
+     */
     public R findDetail(long resourceId, String name);
-
-    public Map<String, String> findDetails(long resourceId);
-
-    public List<R> findDetailsList(long resourceId);
-
+    
+    /**
+     * Removes all details for the resource specified
+     * @param resourceId
+     */
     public void removeDetails(long resourceId);
 
+    /**
+     * Removes detail having resourceId and key specified (unique combination)
+     * @param resourceId
+     * @param key
+     */
     public void removeDetail(long resourceId, String key);
 
-    public void addDetails(List<R> details);
+    /**
+     * Lists all details for the resourceId
+     * @param resourceId
+     * @return list of details each implementing ResourceDetail interface
+     */
+    public List<R> listDetails(long resourceId);
     
-    public void addDetail(R detail);
+    /**
+     * List details for resourceId having display field = forDisplay value passed in
+     * @param resourceId
+     * @param forDisplay
+     * @return
+     */
+    public List<R> listDetails(long resourceId, boolean forDisplay);
+
+    public Map<String, String> listDetailsKeyPairs(long resourceId);
+    
+    public Map<String, String> listDetailsKeyPairs(long resourceId, boolean forDisplay);
     
-    public R createDetail(long resourceId, String key, String value);
+    public void saveDetails(List<R> details);
+        
+    public void addDetail(long resourceId, String key, String value);
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/org/apache/cloudstack/resourcedetail/ResourceDetailsDaoBase.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/ResourceDetailsDaoBase.java b/engine/schema/src/org/apache/cloudstack/resourcedetail/ResourceDetailsDaoBase.java
index a514b1e..4ecebf8 100644
--- a/engine/schema/src/org/apache/cloudstack/resourcedetail/ResourceDetailsDaoBase.java
+++ b/engine/schema/src/org/apache/cloudstack/resourcedetail/ResourceDetailsDaoBase.java
@@ -35,6 +35,7 @@ public abstract class ResourceDetailsDaoBase<R extends ResourceDetail> extends G
         AllFieldsSearch = createSearchBuilder();
         AllFieldsSearch.and("resourceId", AllFieldsSearch.entity().getResourceId(), SearchCriteria.Op.EQ);
         AllFieldsSearch.and("name", AllFieldsSearch.entity().getName(), SearchCriteria.Op.EQ);
+        AllFieldsSearch.and("display", AllFieldsSearch.entity().isDisplay(), SearchCriteria.Op.EQ);
         AllFieldsSearch.done();
     }
 
@@ -47,7 +48,7 @@ public abstract class ResourceDetailsDaoBase<R extends ResourceDetail> extends G
     }
 
 
-    public Map<String, String> findDetails(long resourceId) {
+    public Map<String, String> listDetailsKeyPairs(long resourceId) {
         SearchCriteria<R> sc = AllFieldsSearch.create();
         sc.setParameters("resourceId", resourceId);
         
@@ -59,7 +60,7 @@ public abstract class ResourceDetailsDaoBase<R extends ResourceDetail> extends G
         return details;
     }
 
-    public List<R> findDetailsList(long resourceId) {
+    public List<R> listDetails(long resourceId) {
         SearchCriteria<R> sc = AllFieldsSearch.create();
         sc.setParameters("resourceId", resourceId);
 
@@ -84,7 +85,7 @@ public abstract class ResourceDetailsDaoBase<R extends ResourceDetail> extends G
     }
 
 
-    public void addDetails(List<R> details) {
+    public void saveDetails(List<R> details) {
         if (details.isEmpty()) {
             return;
         }
@@ -102,7 +103,7 @@ public abstract class ResourceDetailsDaoBase<R extends ResourceDetail> extends G
     }
     
 
-    public void addDetail(R detail) {
+    protected void addDetail(R detail) {
         if (detail == null) {
             return;
         }
@@ -112,5 +113,27 @@ public abstract class ResourceDetailsDaoBase<R extends ResourceDetail> extends G
         }
         persist(detail);
     }
+    
+    public Map<String, String> listDetailsKeyPairs(long resourceId, boolean forDisplay) {
+        SearchCriteria<R> sc = AllFieldsSearch.create();
+        sc.setParameters("resourceId", resourceId);
+        sc.setParameters("display", forDisplay);
+        
+        List<R> results = search(sc, null);
+        Map<String, String> details = new HashMap<String, String>(results.size());
+        for (R result : results) {
+            details.put(result.getName(), result.getValue());
+        }
+        return details;
+    }
+    
 
+    public List<R> listDetails(long resourceId, boolean forDisplay) {
+        SearchCriteria<R> sc = AllFieldsSearch.create();
+        sc.setParameters("resourceId", resourceId);
+        sc.setParameters("display", forDisplay);
+
+        List<R> results = search(sc, null);
+        return results;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/FirewallRuleDetailsDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/FirewallRuleDetailsDaoImpl.java b/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/FirewallRuleDetailsDaoImpl.java
index bff86db..35613d6 100644
--- a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/FirewallRuleDetailsDaoImpl.java
+++ b/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/FirewallRuleDetailsDaoImpl.java
@@ -28,7 +28,7 @@ import org.springframework.stereotype.Component;
 public class FirewallRuleDetailsDaoImpl extends ResourceDetailsDaoBase<FirewallRuleDetailVO> implements FirewallRuleDetailsDao {
 
     @Override
-    public FirewallRuleDetailVO createDetail(long resourceId, String key, String value) {
-        return new FirewallRuleDetailVO(resourceId, key, value);
+    public void addDetail(long resourceId, String key, String value) {
+        super.addDetail(new FirewallRuleDetailVO(resourceId, key, value));
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
index bee76f5..d35aa44 100644
--- a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
+++ b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
@@ -386,13 +386,13 @@ public class PrimaryDataStoreDaoImpl extends GenericDaoBase<StoragePoolVO, Long>
             for (String key : details.keySet()) {
                 detailsVO.add(new StoragePoolDetailVO(poolId, key, details.get(key)));
             }
-            _detailsDao.addDetails(detailsVO);
+            _detailsDao.saveDetails(detailsVO);
         }
     }
 
     @Override
     public Map<String, String> getDetails(long poolId) {
-        return _detailsDao.findDetails(poolId);
+        return _detailsDao.listDetailsKeyPairs(poolId);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailVO.java b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailVO.java
index badb637..68da2e2 100644
--- a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailVO.java
+++ b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailVO.java
@@ -41,6 +41,9 @@ public class PrimaryDataStoreDetailVO implements ResourceDetail{
 
     @Column(name = "value")
     String value;
+    
+    @Column(name="display")
+    private boolean display;
 
     public PrimaryDataStoreDetailVO(long poolId, String name, String value) {
         this.resourceId = poolId;
@@ -70,4 +73,9 @@ public class PrimaryDataStoreDetailVO implements ResourceDetail{
     public String getValue() {
         return value;
     }
+    
+    @Override
+    public boolean isDisplay() {
+        return display;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/schema/src/org/apache/cloudstack/storage/datastore/db/StoragePoolDetailVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/StoragePoolDetailVO.java b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/StoragePoolDetailVO.java
index 9499df0..5968fd2 100644
--- a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/StoragePoolDetailVO.java
+++ b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/StoragePoolDetailVO.java
@@ -42,6 +42,9 @@ public class StoragePoolDetailVO implements ResourceDetail {
     @Column(name = "value")
     String value;
 
+    @Column(name="display")
+    private boolean display;
+    
     public StoragePoolDetailVO(long poolId, String name, String value) {
         this.resourceId = poolId;
         this.name = name;
@@ -70,4 +73,9 @@ public class StoragePoolDetailVO implements ResourceDetail {
     public String getValue() {
         return value;
     }
+    
+    @Override
+    public boolean isDisplay() {
+        return display;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/engine/storage/src/org/apache/cloudstack/storage/volume/db/PrimaryDataStoreDetailsDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/db/PrimaryDataStoreDetailsDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/volume/db/PrimaryDataStoreDetailsDaoImpl.java
index 61125f6..ee45053 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/volume/db/PrimaryDataStoreDetailsDaoImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/volume/db/PrimaryDataStoreDetailsDaoImpl.java
@@ -27,8 +27,8 @@ public class PrimaryDataStoreDetailsDaoImpl extends ResourceDetailsDaoBase<Prima
         PrimaryDataStoreDetailsDao {
 
     @Override
-    public PrimaryDataStoreDetailVO createDetail(long resourceId, String key, String value) {
-        return new PrimaryDataStoreDetailVO(resourceId, key, value);
+    public void addDetail(long resourceId, String key, String value) {
+        super.addDetail(new PrimaryDataStoreDetailVO(resourceId, key, value));
     }
     
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/plugins/deployment-planners/implicit-dedication/src/com/cloud/deploy/ImplicitDedicationPlanner.java
----------------------------------------------------------------------
diff --git a/plugins/deployment-planners/implicit-dedication/src/com/cloud/deploy/ImplicitDedicationPlanner.java b/plugins/deployment-planners/implicit-dedication/src/com/cloud/deploy/ImplicitDedicationPlanner.java
index 6eee28d..e73bc72 100644
--- a/plugins/deployment-planners/implicit-dedication/src/com/cloud/deploy/ImplicitDedicationPlanner.java
+++ b/plugins/deployment-planners/implicit-dedication/src/com/cloud/deploy/ImplicitDedicationPlanner.java
@@ -223,7 +223,7 @@ public class ImplicitDedicationPlanner extends FirstFitPlanner implements Deploy
 
     private boolean isServiceOfferingUsingPlannerInPreferredMode(long serviceOfferingId) {
         boolean preferred = false;
-        Map<String, String> details = serviceOfferingDetailsDao.findDetails(serviceOfferingId);
+        Map<String, String> details = serviceOfferingDetailsDao.listDetailsKeyPairs(serviceOfferingId);
         if (details != null && !details.isEmpty()) {
             String preferredAttribute = details.get("ImplicitDedicationMode");
             if (preferredAttribute != null && preferredAttribute.equals("Preferred")) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/plugins/deployment-planners/implicit-dedication/test/org/apache/cloudstack/implicitplanner/ImplicitPlannerTest.java
----------------------------------------------------------------------
diff --git a/plugins/deployment-planners/implicit-dedication/test/org/apache/cloudstack/implicitplanner/ImplicitPlannerTest.java b/plugins/deployment-planners/implicit-dedication/test/org/apache/cloudstack/implicitplanner/ImplicitPlannerTest.java
index c0ce9d0..f1fa71c 100644
--- a/plugins/deployment-planners/implicit-dedication/test/org/apache/cloudstack/implicitplanner/ImplicitPlannerTest.java
+++ b/plugins/deployment-planners/implicit-dedication/test/org/apache/cloudstack/implicitplanner/ImplicitPlannerTest.java
@@ -405,7 +405,7 @@ public class ImplicitPlannerTest {
 
         Map<String, String> details = new HashMap<String, String>();
         details.put("ImplicitDedicationMode", plannerMode);
-        when(serviceOfferingDetailsDao.findDetails(offeringId)).thenReturn(details);
+        when(serviceOfferingDetailsDao.listDetailsKeyPairs(offeringId)).thenReturn(details);
 
         // Initialize hosts in clusters
         HostVO host1 = mock(HostVO.class);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/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 aec25e5..d36604c 100755
--- a/server/src/com/cloud/api/ApiDBUtils.java
+++ b/server/src/com/cloud/api/ApiDBUtils.java
@@ -52,6 +52,7 @@ import org.apache.cloudstack.api.response.UserResponse;
 import org.apache.cloudstack.api.response.UserVmResponse;
 import org.apache.cloudstack.api.response.VolumeResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
 import org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService;
 import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
@@ -59,7 +60,6 @@ import org.apache.cloudstack.framework.jobs.AsyncJob;
 import org.apache.cloudstack.framework.jobs.AsyncJobManager;
 import org.apache.cloudstack.framework.jobs.dao.AsyncJobDao;
 import org.apache.cloudstack.lb.dao.ApplicationLoadBalancerRuleDao;
-import org.apache.cloudstack.resourcedetail.ResourceDetailsDaoBase;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 
@@ -117,7 +117,6 @@ import com.cloud.dc.ClusterDetailsDao;
 import com.cloud.dc.ClusterDetailsVO;
 import com.cloud.dc.ClusterVO;
 import com.cloud.dc.DataCenter;
-import com.cloud.dc.DataCenterDetailVO;
 import com.cloud.dc.DataCenterVO;
 import com.cloud.dc.HostPodVO;
 import com.cloud.dc.Vlan;
@@ -219,6 +218,7 @@ import com.cloud.region.ha.GlobalLoadBalancingRulesService;
 import com.cloud.resource.ResourceManager;
 import com.cloud.server.Criteria;
 import com.cloud.server.ManagementServer;
+import com.cloud.server.ResourceMetaDataService;
 import com.cloud.server.ResourceTag;
 import com.cloud.server.ResourceTag.ResourceObjectType;
 import com.cloud.server.StatsCollector;
@@ -401,11 +401,8 @@ public class ApiDBUtils {
     static AffinityGroupJoinDao _affinityGroupJoinDao;
     static GlobalLoadBalancingRulesService _gslbService;
     static NetworkACLDao _networkACLDao;
-    static ServiceOfferingDetailsDao _serviceOfferingDetailsDao;
     static AccountService _accountService;
-    static DataCenterDetailsDao _zoneDetailsDao;
-
-
+    static ResourceMetaDataService _resourceDetailsService;
 
     @Inject
     private ManagementServer ms;
@@ -520,6 +517,7 @@ public class ApiDBUtils {
     @Inject private AccountService accountService;
     @Inject private ConfigurationManager configMgr;
     @Inject private DataCenterDetailsDao zoneDetailsDao;
+    @Inject private  ResourceMetaDataService resourceDetailsService;
 
     @PostConstruct
     void init() {
@@ -629,9 +627,8 @@ public class ApiDBUtils {
         // Note: stats collector should already have been initialized by this time, otherwise a null instance is returned
         _statsCollector = StatsCollector.getInstance();
         _networkACLDao = networkACLDao;
-        _serviceOfferingDetailsDao = serviceOfferingDetailsDao;
         _accountService = accountService;
-        _zoneDetailsDao = zoneDetailsDao;
+        _resourceDetailsService = resourceDetailsService;
 
     }
 
@@ -894,7 +891,7 @@ public class ApiDBUtils {
     public static VMTemplateVO findTemplateById(Long templateId) {
         VMTemplateVO template = _templateDao.findByIdIncludingRemoved(templateId);
         if(template != null) {
-            Map details = _templateDetailsDao.findDetails(templateId);
+            Map<String, String> details = _templateDetailsDao.listDetailsKeyPairs(templateId);
             if(details != null && !details.isEmpty()) {
                 template.setDetails(details);
             }
@@ -1687,8 +1684,13 @@ public class ApiDBUtils {
         return providerDnsName;
     }
 
-    public static Map<String, String> getServiceOfferingDetails(long serviceOfferingId) {
-        Map<String, String> details = _serviceOfferingDetailsDao.findDetails(serviceOfferingId);
+    public static Map<String, String> getResourceDetails(long resourceId, ResourceObjectType resourceType) {
+        Map<String, String> details = null;
+        if (isAdmin(CallContext.current().getCallingAccount())) {
+            details = _resourceDetailsService.getDetailsMap(resourceId, resourceType, null);
+        } else {
+            details = _resourceDetailsService.getDetailsMap(resourceId, resourceType, true);
+        }
         return details.isEmpty() ? null : details;
     }
 
@@ -1699,9 +1701,4 @@ public class ApiDBUtils {
     public static List<ResourceTagJoinVO> listResourceTagViewByResourceUUID(String resourceUUID, ResourceObjectType resourceType){
         return  _tagJoinDao.listBy(resourceUUID, resourceType);
     }
-    
-    public static Map<String, String> getZoneDetails(long zoneId) {
-        Map<String, String> details = _zoneDetailsDao.findDetails(zoneId);
-        return details.isEmpty() ? null : details;
-    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/server/src/com/cloud/api/query/QueryManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java
index a7d85cf..0e3f7c9 100644
--- a/server/src/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/com/cloud/api/query/QueryManagerImpl.java
@@ -3260,8 +3260,9 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
     }
 
     @Override
-    public List<ResourceDetailResponse> listResource(ListResourceDetailsCmd cmd) {
+    public List<ResourceDetailResponse> listResourceDetails(ListResourceDetailsCmd cmd) {
         String key = cmd.getKey();
+        Boolean forDisplay = cmd.forDisplay();
         ResourceTag.ResourceObjectType resourceType = cmd.getResourceType();
         String resourceIdStr = cmd.getResourceId();
         long resourceId = _taggedResourceMgr.getResourceId(resourceIdStr, resourceType);
@@ -3269,20 +3270,21 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
         ResourceDetail requestedDetail = null;
 
         if (key == null) {
-            detailList = _resourceMetaDataMgr.getDetails(resourceId, resourceType);
+            detailList = _resourceMetaDataMgr.getDetailsList(resourceId, resourceType, forDisplay);
         } else {
             requestedDetail = _resourceMetaDataMgr.getDetail(resourceId, resourceType, key);
+            if (forDisplay != null && requestedDetail.isDisplay() != forDisplay) {
+                requestedDetail = null;
+            }
         }
         
         List<ResourceDetailResponse> responseList = new ArrayList<ResourceDetailResponse>();
         if (requestedDetail != null) {
-            ResourceDetailResponse detailResponse = createResourceDetailsResponse(resourceId, requestedDetail.getName(), requestedDetail.getValue(),
-                    resourceType);
+            ResourceDetailResponse detailResponse = createResourceDetailsResponse(requestedDetail, resourceType);
             responseList.add(detailResponse);
         } else {
             for (ResourceDetail detail : detailList) {
-                ResourceDetailResponse detailResponse = createResourceDetailsResponse(resourceId, detail.getName(), detail.getValue(),
-                        resourceType);
+                ResourceDetailResponse detailResponse = createResourceDetailsResponse(detail, resourceType);
                 responseList.add(detailResponse);
             }
         }
@@ -3291,12 +3293,13 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
     }
 
     
-    protected ResourceDetailResponse createResourceDetailsResponse(long resourceId, String key, String value, ResourceTag.ResourceObjectType type) {
+    protected ResourceDetailResponse createResourceDetailsResponse(ResourceDetail requestedDetail, ResourceTag.ResourceObjectType resourceType) {
         ResourceDetailResponse resourceDetailResponse = new ResourceDetailResponse();
-        resourceDetailResponse.setResourceId(String.valueOf(resourceId));
-        resourceDetailResponse.setName(key);
-        resourceDetailResponse.setValue(value);
-        resourceDetailResponse.setResourceType(type.toString());
+        resourceDetailResponse.setResourceId(String.valueOf(requestedDetail.getResourceId()));
+        resourceDetailResponse.setName(requestedDetail.getName());
+        resourceDetailResponse.setValue(requestedDetail.getValue());
+        resourceDetailResponse.setForDisplay(requestedDetail.isDisplay());
+        resourceDetailResponse.setResourceType(resourceType.toString().toString());
         resourceDetailResponse.setObjectName("resourcedetail");
         return resourceDetailResponse;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/server/src/com/cloud/api/query/dao/DataCenterJoinDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/dao/DataCenterJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/DataCenterJoinDaoImpl.java
index 5198555..c06e294 100644
--- a/server/src/com/cloud/api/query/dao/DataCenterJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/DataCenterJoinDaoImpl.java
@@ -105,7 +105,7 @@ public class DataCenterJoinDaoImpl extends GenericDaoBase<DataCenterJoinVO, Long
             zoneResponse.addTag(tagResponse);
         }
         
-        zoneResponse.setResourceDetails(ApiDBUtils.getZoneDetails(dataCenter.getId()));
+        zoneResponse.setResourceDetails(ApiDBUtils.getResourceDetails(dataCenter.getId(), ResourceObjectType.Zone));
         
         zoneResponse.setObjectName("zone");
         return zoneResponse;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/server/src/com/cloud/api/query/dao/ServiceOfferingJoinDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/dao/ServiceOfferingJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/ServiceOfferingJoinDaoImpl.java
index 1727034..3bc6c78 100644
--- a/server/src/com/cloud/api/query/dao/ServiceOfferingJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/ServiceOfferingJoinDaoImpl.java
@@ -27,6 +27,7 @@ import org.springframework.stereotype.Component;
 import com.cloud.api.ApiDBUtils;
 import com.cloud.api.query.vo.ServiceOfferingJoinVO;
 import com.cloud.offering.ServiceOffering;
+import com.cloud.server.ResourceTag.ResourceObjectType;
 import com.cloud.utils.db.GenericDaoBase;
 import com.cloud.utils.db.SearchBuilder;
 import com.cloud.utils.db.SearchCriteria;
@@ -79,7 +80,7 @@ public class ServiceOfferingJoinDaoImpl extends GenericDaoBase<ServiceOfferingJo
         offeringResponse.setBytesWriteRate(offering.getBytesWriteRate());
         offeringResponse.setIopsReadRate(offering.getIopsReadRate());
         offeringResponse.setIopsWriteRate(offering.getIopsWriteRate());
-        offeringResponse.setDetails(ApiDBUtils.getServiceOfferingDetails(offering.getId()));
+        offeringResponse.setDetails(ApiDBUtils.getResourceDetails(offering.getId(), ResourceObjectType.ServiceOffering));
         offeringResponse.setObjectName("serviceoffering");
 
         return offeringResponse;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
index 998e3ef..e3aa4fa 100755
--- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -451,8 +451,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
                 if (zone == null) {
                     throw new InvalidParameterValueException("unable to find zone by id " + resourceId);
                 }
-                DataCenterDetailVO dcDetailVO = new DataCenterDetailVO(resourceId, name, value);
-                _dcDetailsDao.addDetail(dcDetailVO);
+                _dcDetailsDao.addDetail(resourceId, name, value);
                 break;
             case Cluster:
                 ClusterVO cluster = _clusterDao.findById(resourceId);
@@ -474,8 +473,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
                 if (pool == null) {
                     throw new InvalidParameterValueException("unable to find storage pool by id " + resourceId);
                 }
-                StoragePoolDetailVO storagePoolDetailVO = _storagePoolDetailsDao.findDetail(resourceId, name);
-                _storagePoolDetailsDao.addDetail(storagePoolDetailVO);
+                _storagePoolDetailsDao.addDetail(resourceId, name, value);
                 
                 break;
 
@@ -2107,7 +2105,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
                     detailsVO.add(new ServiceOfferingDetailsVO(offering.getId(), key, details.get(key)));
                 }
                 
-                _serviceOfferingDetailsDao.addDetails(detailsVO);
+                _serviceOfferingDetailsDao.saveDetails(detailsVO);
             }
             CallContext.current().setEventDetails("Service offering id=" + offering.getId());
             return offering;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/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 e55477a..e82aaba 100755
--- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
+++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
@@ -1326,7 +1326,7 @@ VirtualMachineGuru, SystemVmLoadScanHandler<Long>, ResourceStateAdapter {
     public boolean finalizeVirtualMachineProfile(VirtualMachineProfile profile, DeployDestination dest, ReservationContext context) {
 
         ConsoleProxyVO vm = _consoleProxyDao.findById(profile.getId());
-        Map<String, String> details = _vmDetailsDao.findDetails(vm.getId());
+        Map<String, String> details = _vmDetailsDao.listDetailsKeyPairs(vm.getId());
         vm.setDetails(details);
 
         StringBuilder buf = profile.getBootArgsBuilder();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/server/src/com/cloud/hypervisor/HypervisorGuruBase.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/hypervisor/HypervisorGuruBase.java b/server/src/com/cloud/hypervisor/HypervisorGuruBase.java
index a528334..4e28a6a 100644
--- a/server/src/com/cloud/hypervisor/HypervisorGuruBase.java
+++ b/server/src/com/cloud/hypervisor/HypervisorGuruBase.java
@@ -115,7 +115,7 @@ public abstract class HypervisorGuruBase extends AdapterBase implements Hypervis
             to.setArch("x86_64");
         }
 
-        Map<String, String> detailsInVm = _userVmDetailsDao.findDetails(vm.getId());
+        Map<String, String> detailsInVm = _userVmDetailsDao.listDetailsKeyPairs(vm.getId());
         if(detailsInVm != null) {
             to.setDetails(detailsInVm);
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java b/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java
index ec5b7ea..5f7ad4b 100644
--- a/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java
+++ b/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java
@@ -16,7 +16,6 @@
 // under the License.
 package com.cloud.metadata;
 
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -122,14 +121,7 @@ public class ResourceMetaDataManagerImpl extends ManagerBase implements Resource
                     }
 
                     DetailDaoHelper newDetailDaoHelper = new DetailDaoHelper(resourceType);
-                    ResourceDetail detail = newDetailDaoHelper.createDetail( _taggedResourceMgr.getResourceId(resourceId, resourceType), key, value);
-                    
-                    if (detail == null) {
-                        throw new UnsupportedOperationException("ResourceType " + resourceType + " doesn't support metadata");
-
-                    }
-                    newDetailDaoHelper.addDetail(detail);
-                        
+                    newDetailDaoHelper.addDetail( _taggedResourceMgr.getResourceId(resourceId, resourceType), key, value);                    
                 }
                 
                 return true;
@@ -166,39 +158,50 @@ public class ResourceMetaDataManagerImpl extends ManagerBase implements Resource
             this.dao = (ResourceDetailsDao)_daoMap.get(resourceType);
         }
         
-        private void addDetail(ResourceDetail detail) {
-            dao.addDetail(detail);   
-        }
-        
         private void removeDetail(long resourceId, String key) {
             dao.removeDetail(resourceId, key);
         }
         
-        private List<? extends ResourceDetail> getDetails(long resourceId) {
-            List<? extends ResourceDetail> detailList = new ArrayList<ResourceDetail>();        
-            detailList = dao.findDetailsList(resourceId);
-            return detailList;
-        }
-        
         private ResourceDetail getDetail(long resourceId, String key) {
             return dao.findDetail(resourceId, key);
         }
         
-        private ResourceDetail createDetail(long resourceId, String key, String value) {
-            return dao.createDetail(resourceId, key, value);
+        private void addDetail(long resourceId, String key, String value) {
+            dao.addDetail(resourceId, key, value);
+        }
+        
+        private Map<String, String> getDetailsMap(long resourceId, Boolean forDisplay) {            
+            if (forDisplay == null) {
+                return dao.listDetailsKeyPairs(resourceId);
+            } else  {
+                return dao.listDetailsKeyPairs(resourceId, forDisplay);
+            }
         }
         
+        private List<? extends ResourceDetail> getDetailsList(long resourceId, Boolean forDisplay) {
+            if (forDisplay == null) {
+                return dao.listDetails(resourceId);
+            } else {
+                return dao.listDetails(resourceId, forDisplay);
+            }
+        }
     }
     
     @Override
-    public List<? extends ResourceDetail> getDetails(long resourceId, ResourceObjectType resourceType) {
+    public List<? extends ResourceDetail> getDetailsList(long resourceId, ResourceObjectType resourceType, Boolean forDisplay) {
         DetailDaoHelper newDetailDaoHelper = new DetailDaoHelper(resourceType);
-        return newDetailDaoHelper.getDetails(resourceId);  
+        return newDetailDaoHelper.getDetailsList(resourceId, forDisplay);  
     }
     
     @Override
     public ResourceDetail getDetail(long resourceId, ResourceObjectType resourceType, String key) {
         DetailDaoHelper newDetailDaoHelper = new DetailDaoHelper(resourceType);
-        return newDetailDaoHelper.getDetail(resourceId, key);  
+        return newDetailDaoHelper.getDetail(resourceId, key);
+    }
+    
+    @Override 
+    public Map<String, String> getDetailsMap(long resourceId, ResourceObjectType resourceType, Boolean forDisplay) {
+        DetailDaoHelper newDetailDaoHelper = new DetailDaoHelper(resourceType);
+        return newDetailDaoHelper.getDetailsMap(resourceId, forDisplay); 
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/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 48fdc35..a93480b 100755
--- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -2008,7 +2008,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
 
         //1) Set router details
         DomainRouterVO router = _routerDao.findById(profile.getVirtualMachine().getId());
-        Map<String, String> details = _vmDetailsDao.findDetails(router.getId());
+        Map<String, String> details = _vmDetailsDao.listDetailsKeyPairs(router.getId());
         router.setDetails(details);
 
         //2) Prepare boot loader elements related with Control network

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/server/src/com/cloud/storage/StorageManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java
index 7342653..a301639 100755
--- a/server/src/com/cloud/storage/StorageManagerImpl.java
+++ b/server/src/com/cloud/storage/StorageManagerImpl.java
@@ -706,7 +706,7 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
         Map<String, String> updatedDetails = new HashMap<String, String>();
 
         if (tags != null) {
-            Map<String, String> existingDetails = _storagePoolDetailsDao.findDetails(id);
+            Map<String, String> existingDetails = _storagePoolDetailsDao.listDetailsKeyPairs(id);
             Set<String> existingKeys = existingDetails.keySet();
 
             Map<String, String> existingDetailsToKeep = new HashMap<String, String>();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/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 007557d..7743dca 100755
--- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
+++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
@@ -1006,7 +1006,7 @@ public class SecondaryStorageManagerImpl extends ManagerBase implements Secondar
     public boolean finalizeVirtualMachineProfile(VirtualMachineProfile profile, DeployDestination dest, ReservationContext context) {
 
         SecondaryStorageVmVO vm = _secStorageVmDao.findById(profile.getId());
-        Map<String, String> details = _vmDetailsDao.findDetails(vm.getId());
+        Map<String, String> details = _vmDetailsDao.listDetailsKeyPairs(vm.getId());
         vm.setDetails(details);
 
         DataStore secStore = _dataStoreMgr.getImageStore(dest.getDataCenter().getId());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/server/src/com/cloud/template/TemplateManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java
index d32776a..50e557a 100755
--- a/server/src/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/com/cloud/template/TemplateManagerImpl.java
@@ -1639,7 +1639,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
                 for (String key : detailsStr.keySet()) {
                     details.add(new VMTemplateDetailVO(template.getId(), key, detailsStr.get(key)));
                 }
-                _templateDetailsDao.addDetails(details);
+                _templateDetailsDao.saveDetails(details);
             }
 
             _resourceLimitMgr.incrementResourceCount(templateOwner.getId(), ResourceType.template);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/server/src/com/cloud/vm/UserVmManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java
index f202784..a0c7151 100755
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -3002,7 +3002,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
     @Override
     public boolean finalizeVirtualMachineProfile(VirtualMachineProfile profile, DeployDestination dest, ReservationContext context) {
         UserVmVO vm = _vmDao.findById(profile.getId());
-        Map<String, String> details = _vmDetailsDao.findDetails(vm.getId());
+        Map<String, String> details = _vmDetailsDao.listDetailsKeyPairs(vm.getId());
         vm.setDetails(details);
 
         if (vm.getIsoId() != null) {
@@ -4202,7 +4202,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
     }
     private boolean isServiceOfferingUsingPlannerInPreferredMode(long serviceOfferingId) {
         boolean preferred = false;
-        Map<String, String> details = serviceOfferingDetailsDao.findDetails(serviceOfferingId);
+        Map<String, String> details = serviceOfferingDetailsDao.listDetailsKeyPairs(serviceOfferingId);
         if (details != null && !details.isEmpty()) {
             String preferredAttribute = details.get("ImplicitDedicationMode");
             if (preferredAttribute != null && preferredAttribute.equals("Preferred")) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/591dcd1d/setup/db/db/schema-421to430.sql
----------------------------------------------------------------------
diff --git a/setup/db/db/schema-421to430.sql b/setup/db/db/schema-421to430.sql
index 0e78875..803f1d9 100644
--- a/setup/db/db/schema-421to430.sql
+++ b/setup/db/db/schema-421to430.sql
@@ -464,10 +464,20 @@ CREATE VIEW `cloud`.`storage_pool_view` AS
             
 CREATE TABLE `cloud`.`firewall_rule_details` (
   `id` bigint unsigned NOT NULL auto_increment,
-  `firewall_rule_id` bigint unsigned NOT NULL COMMENT 'firewall rule id',
+  `firewall_rule_id` bigint unsigned NOT NULL COMMENT 'Firewall rule id',
   `name` varchar(255) NOT NULL,
   `value` varchar(1024) NOT NULL,
-  `display_detail` tinyint(1) NOT NULL DEFAULT '1' COMMENT 'True if detail can be displayed to the end user',
+  `display` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'True if the detail can be displayed to the end user',
   PRIMARY KEY (`id`),
   CONSTRAINT `fk_firewall_rule_details__firewall_rule_id` FOREIGN KEY `fk_firewall_rule_details__firewall_rule_id`(`firewall_rule_id`) REFERENCES `firewall_rules`(`id`) ON DELETE CASCADE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+
+ALTER TABLE `cloud`.`data_center_details` ADD COLUMN `display` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'True if the detail can be displayed to the end user';
+ALTER TABLE `cloud`.`network_details` CHANGE `display_detail` `display` tinyint(0) NOT NULL DEFAULT '0' COMMENT 'True if the detail can be displayed to the end user';
+ALTER TABLE `cloud`.`vm_template_details` ADD COLUMN `display` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'True if the detail can be displayed to the end user';
+ALTER TABLE `cloud`.`volume_details` CHANGE `display_detail` `display` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'True if the detail can be displayed to the end user';
+ALTER TABLE `cloud`.`nic_details` CHANGE `display_detail` `display` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'True if the detail can be displayed to the end user';
+ALTER TABLE `cloud`.`user_vm_details` CHANGE `display_detail` `display` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'True if the detail can be displayed to the end user';
+ALTER TABLE `cloud`.`service_offering_details` ADD COLUMN `display` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'True if the detail can be displayed to the end user';
+ALTER TABLE `cloud`.`storage_pool_details` ADD COLUMN `display` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'True if the detail can be displayed to the end user';


[27/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
Detail view: Adjust tab colors


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

Branch: refs/heads/rbac
Commit: 5e9320faa14f7bd63fdec4aee98cf89d20ace69d
Parents: 185be21
Author: Brian Federle <br...@citrix.com>
Authored: Tue Oct 29 15:43:08 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Tue Oct 29 15:43:08 2013 -0700

----------------------------------------------------------------------
 ui/css/cloudstack3.css | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e9320fa/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index 5d782b8..7185c85 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -1604,13 +1604,14 @@ div.list-view td.state.off span {
 }
 
 .ui-tabs ul li.ui-state-default a {
-  padding-bottom: 12px;
-  border: 1px solid #E2DDDD;
+  padding-bottom: 10px;
+  border: 1px solid #D9D9D9;
   /*+border-radius:4px 4px 0 0;*/
   -moz-border-radius: 4px 4px 0 0;
   -webkit-border-radius: 4px 4px 0 0;
   -khtml-border-radius: 4px 4px 0 0;
   border-radius: 4px 4px 0 0;
+  background: #F0F0F0;
 }
 
 .project-view .ui-tabs ul li.ui-state-default a {
@@ -1696,7 +1697,7 @@ div.list-view td.state.off span {
 }
 
 .ui-tabs div.ui-tabs-panel {
-  border: 1px solid #E2DDDD;
+  border: 1px solid #D9D9D9;
   clear: both;
   height: 78%;
   width: 97%;


[44/50] [abbrv] Merge branch 'master' into rbac.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/projects/ProjectManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/projects/ProjectManagerImpl.java
index b4987cb,22e2020..b97f1e8
--- a/server/src/com/cloud/projects/ProjectManagerImpl.java
+++ b/server/src/com/cloud/projects/ProjectManagerImpl.java
@@@ -202,31 -205,33 +205,33 @@@ public class ProjectManagerImpl extend
          //do resource limit check
          _resourceLimitMgr.checkResourceLimit(owner, ResourceType.project);
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+         final Account ownerFinal = owner;
+         return Transaction.execute(new TransactionCallback<Project>() {
+             @Override
+             public Project doInTransaction(TransactionStatus status) {
  
 -                //Create an account associated with the project
 -                StringBuilder acctNm = new StringBuilder("PrjAcct-");
 +        //Create an account associated with the project
 +        StringBuilder acctNm = new StringBuilder("PrjAcct-");
-         acctNm.append(name).append("-").append(owner.getDomainId());
+                 acctNm.append(name).append("-").append(ownerFinal.getDomainId());
 -        
 -                Account projectAccount = _accountMgr.createAccount(acctNm.toString(), Account.ACCOUNT_TYPE_PROJECT, domainId, null, null, UUID.randomUUID().toString());
 -        
 +
 +        Account projectAccount = _accountMgr.createAccount(acctNm.toString(), Account.ACCOUNT_TYPE_PROJECT, domainId, null, null, UUID.randomUUID().toString());
 +
-         Project project = _projectDao.persist(new ProjectVO(name, displayText, owner.getDomainId(), projectAccount.getId()));
+                 Project project = _projectDao.persist(new ProjectVO(name, displayText, ownerFinal.getDomainId(), projectAccount.getId()));
 -        
 -                //assign owner to the project
 +
 +        //assign owner to the project
-         assignAccountToProject(project, owner.getId(), ProjectAccount.Role.Admin);
+                 assignAccountToProject(project, ownerFinal.getId(), ProjectAccount.Role.Admin);
 -        
 -                if (project != null) {
 -                    CallContext.current().setEventDetails("Project id=" + project.getId());
 -                }
 -        
 -                //Increment resource count
 +
 +        if (project != null) {
 +            CallContext.current().setEventDetails("Project id=" + project.getId());
 +        }
 +
 +        //Increment resource count
-         _resourceLimitMgr.incrementResourceCount(owner.getId(), ResourceType.project);
- 
-         txn.commit();
+                 _resourceLimitMgr.incrementResourceCount(ownerFinal.getId(), ResourceType.project);
  
 -                return project;
 -            }
 +        return project;
 +    }
+         });
+     }
  
  
      @Override
@@@ -269,20 -274,24 +274,24 @@@
  
      @DB
      @Override
-     public boolean deleteProject(Account caller, long callerUserId, ProjectVO project) {
+     public boolean deleteProject(Account caller, long callerUserId, final ProjectVO project) {
          //mark project as inactive first, so you can't add resources to it
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+         boolean updateResult = Transaction.execute(new TransactionCallback<Boolean>() {
+             @Override
+             public Boolean doInTransaction(TransactionStatus status) {
 -                s_logger.debug("Marking project id=" + project.getId() + " with state " + State.Disabled + " as a part of project delete...");
 -                project.setState(State.Disabled);
 -                boolean updateResult = _projectDao.update(project.getId(), project);
 -                //owner can be already removed at this point, so adding the conditional check
 -                Account projectOwner = getProjectOwner(project.getId());
 -                if (projectOwner != null) {
 -                    _resourceLimitMgr.decrementResourceCount(projectOwner.getId(), ResourceType.project);
 -                }
 +        s_logger.debug("Marking project id=" + project.getId() + " with state " + State.Disabled + " as a part of project delete...");
 +        project.setState(State.Disabled);
 +        boolean updateResult = _projectDao.update(project.getId(), project);
 +        //owner can be already removed at this point, so adding the conditional check
 +        Account projectOwner = getProjectOwner(project.getId());
 +        if (projectOwner != null) {
 +            _resourceLimitMgr.decrementResourceCount(projectOwner.getId(), ResourceType.project);
 +        } 
  
-         txn.commit();
+                 return updateResult;
+             }
+         });
+ 
  
          if (updateResult) {
              //pass system caller when clenaup projects account
@@@ -309,20 -318,22 +318,22 @@@
  
          if (result) {
              //Unassign all users from the project
- 
-             Transaction txn = Transaction.currentTxn();
-             txn.start();
- 
+             result = Transaction.execute(new TransactionCallback<Boolean>() {
+                 @Override
+                 public Boolean doInTransaction(TransactionStatus status) {
+                     boolean result = true;
 -                    s_logger.debug("Unassigning all accounts from project " + project + " as a part of project cleanup...");
 -                    List<? extends ProjectAccount> projectAccounts = _projectAccountDao.listByProjectId(project.getId());
 -                    for (ProjectAccount projectAccount : projectAccounts) {
 -                        result = result && unassignAccountFromProject(projectAccount.getProjectId(), projectAccount.getAccountId());
 -                    }
 -        
 -                    s_logger.debug("Removing all invitations for the project " + project + " as a part of project cleanup...");
 -                    _projectInvitationDao.cleanupInvitations(project.getId());
 -                    
 +            s_logger.debug("Unassigning all accounts from project " + project + " as a part of project cleanup...");
 +            List<? extends ProjectAccount> projectAccounts = _projectAccountDao.listByProjectId(project.getId());
 +            for (ProjectAccount projectAccount : projectAccounts) {
 +                result = result && unassignAccountFromProject(projectAccount.getProjectId(), projectAccount.getAccountId());
 +            }
 +
 +            s_logger.debug("Removing all invitations for the project " + project + " as a part of project cleanup...");
 +            _projectInvitationDao.cleanupInvitations(project.getId());
 +
-             txn.commit();
+                     return result;
+                 }
+             });
              if (result) {
                  s_logger.debug("Accounts are unassign successfully from project " + project + " as a part of project cleanup...");
              }
@@@ -367,27 -378,29 +378,29 @@@
      }
  
      @Override @DB
-     public boolean deleteAccountFromProject(long projectId, long accountId) {
+     public boolean deleteAccountFromProject(final long projectId, final long accountId) {
+         return Transaction.execute(new TransactionCallback<Boolean>() {
+             @Override
+             public Boolean doInTransaction(TransactionStatus status) {
 -                boolean success = true;
 -
 -                //remove account
 -                ProjectAccountVO projectAccount = _projectAccountDao.findByProjectIdAccountId(projectId, accountId);
 -                success = _projectAccountDao.remove(projectAccount.getId());
 -
 -                //remove all invitations for account
 -                if (success) {
 -                    s_logger.debug("Removed account " + accountId + " from project " + projectId + " , cleaning up old invitations for account/project...");
 -                    ProjectInvitation invite = _projectInvitationDao.findByAccountIdProjectId(accountId, projectId);
 -                    if (invite != null) {
 -                        success = success && _projectInvitationDao.remove(invite.getId());
 -                    }
 -                }
 +        boolean success = true;
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
  
 -                return success;
 +        //remove account
 +        ProjectAccountVO projectAccount = _projectAccountDao.findByProjectIdAccountId(projectId, accountId);
 +        success = _projectAccountDao.remove(projectAccount.getId());
 +
 +        //remove all invitations for account
 +        if (success) {
 +            s_logger.debug("Removed account " + accountId + " from project " + projectId + " , cleaning up old invitations for account/project...");
 +            ProjectInvitation invite = _projectInvitationDao.findByAccountIdProjectId(accountId, projectId);
 +            if (invite != null) {
 +                success = success && _projectInvitationDao.remove(invite.getId());
              }
 +        }
 +
-         txn.commit();
 +        return success;
 +    }
+         });
+     }
  
      @Override
      public Account getProjectOwner(long projectId) {
@@@ -456,47 -469,49 +469,49 @@@
          //verify permissions
          _accountMgr.checkAccess(caller,AccessType.ModifyProject, true, _accountMgr.getAccount(project.getProjectAccountId()));
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+         Transaction.execute(new TransactionCallbackWithExceptionNoReturn<ResourceAllocationException>() {
+             @Override
+             public void doInTransactionWithoutResult(TransactionStatus status) throws ResourceAllocationException {
 -                if (displayText != null) {
 -                    project.setDisplayText(displayText);
 -                    _projectDao.update(projectId, project);
 +        if (displayText != null) {
 +            project.setDisplayText(displayText);
 +            _projectDao.update(projectId, project);
 +        }
 +
 +        if (newOwnerName != null) {
 +            //check that the new owner exists
 +            Account futureOwnerAccount = _accountMgr.getActiveAccountByName(newOwnerName, project.getDomainId());
 +            if (futureOwnerAccount == null) {
 +                throw new InvalidParameterValueException("Unable to find account name=" + newOwnerName + " in domain id=" + project.getDomainId());
 +            }
 +            Account currentOwnerAccount = getProjectOwner(projectId);
 +            if (currentOwnerAccount.getId() != futureOwnerAccount.getId()) {
 +                ProjectAccountVO futureOwner = _projectAccountDao.findByProjectIdAccountId(projectId, futureOwnerAccount.getAccountId());
 +                if (futureOwner == null) {
 +                    throw new InvalidParameterValueException("Account " + newOwnerName + " doesn't belong to the project. Add it to the project first and then change the project's ownership");
                  }
 -        
 -                if (newOwnerName != null) {
 -                    //check that the new owner exists
 -                    Account futureOwnerAccount = _accountMgr.getActiveAccountByName(newOwnerName, project.getDomainId());
 -                    if (futureOwnerAccount == null) {
 -                        throw new InvalidParameterValueException("Unable to find account name=" + newOwnerName + " in domain id=" + project.getDomainId());
 -                    }
 -                    Account currentOwnerAccount = getProjectOwner(projectId);
 -                    if (currentOwnerAccount.getId() != futureOwnerAccount.getId()) {
 -                        ProjectAccountVO futureOwner = _projectAccountDao.findByProjectIdAccountId(projectId, futureOwnerAccount.getAccountId());
 -                        if (futureOwner == null) {
 -                            throw new InvalidParameterValueException("Account " + newOwnerName + " doesn't belong to the project. Add it to the project first and then change the project's ownership");
 -                        }
 -        
 -                        //do resource limit check
 -                        _resourceLimitMgr.checkResourceLimit(_accountMgr.getAccount(futureOwnerAccount.getId()), ResourceType.project);
 -        
 -                        //unset the role for the old owner
 -                        ProjectAccountVO currentOwner = _projectAccountDao.findByProjectIdAccountId(projectId, currentOwnerAccount.getId());
 -                        currentOwner.setAccountRole(Role.Regular);
 -                        _projectAccountDao.update(currentOwner.getId(), currentOwner);
 -                        _resourceLimitMgr.decrementResourceCount(currentOwnerAccount.getId(), ResourceType.project);
 -        
 -                        //set new owner
 -                        futureOwner.setAccountRole(Role.Admin);
 -                        _projectAccountDao.update(futureOwner.getId(), futureOwner);
 -                        _resourceLimitMgr.incrementResourceCount(futureOwnerAccount.getId(), ResourceType.project);
 -        
 -        
 -                    } else {
 -                        s_logger.trace("Future owner " + newOwnerName + "is already the owner of the project id=" + projectId);
 -                    }
 -               }
 +
 +                //do resource limit check
 +                _resourceLimitMgr.checkResourceLimit(_accountMgr.getAccount(futureOwnerAccount.getId()), ResourceType.project);
 +
 +                //unset the role for the old owner
 +                ProjectAccountVO currentOwner = _projectAccountDao.findByProjectIdAccountId(projectId, currentOwnerAccount.getId());
 +                currentOwner.setAccountRole(Role.Regular);
 +                _projectAccountDao.update(currentOwner.getId(), currentOwner);
 +                _resourceLimitMgr.decrementResourceCount(currentOwnerAccount.getId(), ResourceType.project);
 +
 +                //set new owner
 +                futureOwner.setAccountRole(Role.Admin);
 +                _projectAccountDao.update(futureOwner.getId(), futureOwner);
 +                _resourceLimitMgr.incrementResourceCount(futureOwnerAccount.getId(), ResourceType.project);
 +
 +
 +            } else {
 +                s_logger.trace("Future owner " + newOwnerName + "is already the owner of the project id=" + projectId);
 +            }
 +        }
+             }
+         });
  
-         txn.commit();
  
          return _projectDao.findById(projectId);
  
@@@ -650,38 -665,41 +665,41 @@@
      }
  
      @DB
-     public boolean activeInviteExists(Project project, Long accountId, String email) {
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+     public boolean activeInviteExists(final Project project, final Long accountId, final String email) {
+         return Transaction.execute(new TransactionCallback<Boolean>() {
+             @Override
+             public Boolean doInTransaction(TransactionStatus status) {
 -                //verify if the invitation was already generated
 -                ProjectInvitationVO invite = null;
 +        //verify if the invitation was already generated
 +        ProjectInvitationVO invite = null;
 +        if (accountId != null) {
 +            invite = _projectInvitationDao.findByAccountIdProjectId(accountId, project.getId());
 +        } else if (email != null) {
 +            invite = _projectInvitationDao.findByEmailAndProjectId(email, project.getId());
 +        }
 +
 +        if (invite != null) {
 +            if (invite.getState() == ProjectInvitation.State.Completed || 
 +                    (invite.getState() == ProjectInvitation.State.Pending && _projectInvitationDao.isActive(invite.getId(), _invitationTimeOut))) {
 +                return true;
 +            } else {
 +                if (invite.getState() == ProjectInvitation.State.Pending) {
 +                    expireInvitation(invite);
 +                }
 +                //remove the expired/declined invitation
                  if (accountId != null) {
 -                    invite = _projectInvitationDao.findByAccountIdProjectId(accountId, project.getId());
 +                    s_logger.debug("Removing invitation in state " + invite.getState() + " for account id=" + accountId + " to project " + project);
                  } else if (email != null) {
 -                    invite = _projectInvitationDao.findByEmailAndProjectId(email, project.getId());
 -                }
 -
 -                if (invite != null) {
 -                    if (invite.getState() == ProjectInvitation.State.Completed || 
 -                            (invite.getState() == ProjectInvitation.State.Pending && _projectInvitationDao.isActive(invite.getId(), _invitationTimeOut))) {
 -                        return true;
 -                    } else {
 -                        if (invite.getState() == ProjectInvitation.State.Pending) {
 -                            expireInvitation(invite);
 -                        }
 -                        //remove the expired/declined invitation
 -                        if (accountId != null) {
 -                            s_logger.debug("Removing invitation in state " + invite.getState() + " for account id=" + accountId + " to project " + project);
 -                        } else if (email != null) {
 -                            s_logger.debug("Removing invitation in state " + invite.getState() + " for email " + email + " to project " + project);
 -                        }
 -
 -                        _projectInvitationDao.expunge(invite.getId());
 -                    }
 +                    s_logger.debug("Removing invitation in state " + invite.getState() + " for email " + email + " to project " + project);
                  }
  
 -                return false;
 +                _projectInvitationDao.expunge(invite.getId());
              }
 +        }
-         txn.commit();
++
 +        return false;
 +    }
+         });
+     }
  
      public ProjectInvitation generateTokenBasedInvitation(Project project, String email, String token) {
          //verify if the invitation was already generated
@@@ -756,29 -774,37 +774,37 @@@
                  expireInvitation(invite);
                  throw new InvalidParameterValueException("Invitation is expired for account id=" + accountName + " to the project id=" + projectId);
              } else {
-                 Transaction txn = Transaction.currentTxn();
-                 txn.start();
+                 
+                 final ProjectInvitationVO inviteFinal = invite;
+                 final Long accountIdFinal = accountId;
+                 final String accountNameFinal = accountName;
+                 result = Transaction.execute(new TransactionCallback<Boolean>() {
+                     @Override
+                     public Boolean doInTransaction(TransactionStatus status) {
+                         boolean result = true;
 -                        
 -                        ProjectInvitation.State newState = accept ? ProjectInvitation.State.Completed : ProjectInvitation.State.Declined;
 -        
 -                        //update invitation
 +
 +                ProjectInvitation.State newState = accept ? ProjectInvitation.State.Completed : ProjectInvitation.State.Declined;
 +
 +                //update invitation
-                 s_logger.debug("Marking invitation " + invite + " with state " + newState);
-                 invite.setState(newState);
-                 result = _projectInvitationDao.update(invite.getId(), invite);
+                         s_logger.debug("Marking invitation " + inviteFinal + " with state " + newState);
+                         inviteFinal.setState(newState);
+                         result = _projectInvitationDao.update(inviteFinal.getId(), inviteFinal);
 -        
 -                        if (result && accept) {
 -                            //check if account already exists for the project (was added before invitation got accepted)
 +
 +                if (result && accept) {
 +                    //check if account already exists for the project (was added before invitation got accepted)
-                     ProjectAccount projectAccount =  _projectAccountDao.findByProjectIdAccountId(projectId, accountId);
+                             ProjectAccount projectAccount =  _projectAccountDao.findByProjectIdAccountId(projectId, accountIdFinal);
 -                            if (projectAccount != null) {
 +                    if (projectAccount != null) {
-                         s_logger.debug("Account " + accountName + " already added to the project id=" + projectId);
+                                 s_logger.debug("Account " + accountNameFinal + " already added to the project id=" + projectId);
 -                            } else {
 +                    } else {
-                         assignAccountToProject(project, accountId, ProjectAccount.Role.Regular); 
+                                 assignAccountToProject(project, accountIdFinal, ProjectAccount.Role.Regular); 
 -                            }
 -                        } else {
 +                    }
 +                } else {
-                     s_logger.warn("Failed to update project invitation " + invite + " with state " + newState);
+                             s_logger.warn("Failed to update project invitation " + inviteFinal + " with state " + newState);
 -                        }
 -                        
 +                }
 +
-                 txn.commit();
+                         return result;
+                     }
+                 });
              }
          } else {
              throw new InvalidParameterValueException("Unable to find invitation for account name=" + accountName + " to the project id=" + projectId);
@@@ -822,15 -848,15 +848,15 @@@
              throw new InvalidParameterValueException("Can't activate the project in " + currentState + " state");
          }
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
- 
+         Transaction.execute(new TransactionCallbackNoReturn() {
+             @Override
+             public void doInTransactionWithoutResult(TransactionStatus status) {
 -                project.setState(Project.State.Active);
 -                _projectDao.update(projectId, project);
 -        
 -                _accountMgr.enableAccount(project.getProjectAccountId());
 +        project.setState(Project.State.Active);
 +        _projectDao.update(projectId, project);
 +
 +        _accountMgr.enableAccount(project.getProjectAccountId());
- 
-         txn.commit();
+             }
+         });
  
          return _projectDao.findById(projectId);
      }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/resource/ResourceManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/resource/ResourceManagerImpl.java
index b36e03a,e9d5193..5682d6f
--- a/server/src/com/cloud/resource/ResourceManagerImpl.java
+++ b/server/src/com/cloud/resource/ResourceManagerImpl.java
@@@ -818,74 -820,77 +820,77 @@@ public class ResourceManagerImpl extend
              return true;
          }
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+         Transaction.execute(new TransactionCallbackNoReturn() {
+             @Override
+             public void doInTransactionWithoutResult(TransactionStatus status) {
  
 -                _dcDao.releasePrivateIpAddress(host.getPrivateIpAddress(), host.getDataCenterId(), null);
 -                _agentMgr.disconnectWithoutInvestigation(hostId, Status.Event.Remove);
 -        
 -                // delete host details
 -                _hostDetailsDao.deleteDetails(hostId);
 -        
 -                host.setGuid(null);
 -                Long clusterId = host.getClusterId();
 -                host.setClusterId(null);
 -                _hostDao.update(host.getId(), host);
 -        
 -                _hostDao.remove(hostId);
 -                if (clusterId != null) {
 -                    List<HostVO> hosts = listAllHostsInCluster(clusterId);
 -                    if (hosts.size() == 0) {
 -                        ClusterVO cluster = _clusterDao.findById(clusterId);
 -                        cluster.setGuid(null);
 -                        _clusterDao.update(clusterId, cluster);
 -                    }
 -                }
 -        
 -                try {
 -                    resourceStateTransitTo(host, ResourceState.Event.DeleteHost, _nodeId);
 -                } catch (NoTransitionException e) {
 -                    s_logger.debug("Cannot transmit host " + host.getId() + "to Enabled state", e);
 -                }
 -        
 -                // Delete the associated entries in host ref table
 -                _storagePoolHostDao.deletePrimaryRecordsForHost(hostId);
 -        
 -                // Make sure any VMs that were marked as being on this host are cleaned up
 -                List<VMInstanceVO> vms = _vmDao.listByHostId(hostId);
 -                for (VMInstanceVO vm : vms) {
 -                    // this is how VirtualMachineManagerImpl does it when it syncs VM states
 -                    vm.setState(State.Stopped);
 -                    vm.setHostId(null);
 -                    _vmDao.persist(vm);
 -                }
 -        
 -                // For pool ids you got, delete local storage host entries in pool table
 -                // where
 -                for (StoragePoolHostVO pool : pools) {
 -                    Long poolId = pool.getPoolId();
 -                    StoragePoolVO storagePool = _storagePoolDao.findById(poolId);
 -                    if (storagePool.isLocal() && isForceDeleteStorage) {
 -                        storagePool.setUuid(null);
 -                        storagePool.setClusterId(null);
 -                        _storagePoolDao.update(poolId, storagePool);
 -                        _storagePoolDao.remove(poolId);
 -                        s_logger.debug("Local storage id=" + poolId + " is removed as a part of host removal id=" + hostId);
 -                    }
 -                }
 -        
 -                // delete the op_host_capacity entry
 -                Object[] capacityTypes = {Capacity.CAPACITY_TYPE_CPU, Capacity.CAPACITY_TYPE_MEMORY};
 -                SearchCriteria<CapacityVO> hostCapacitySC = _capacityDao.createSearchCriteria();
 -                hostCapacitySC.addAnd("hostOrPoolId", SearchCriteria.Op.EQ, hostId);
 -                hostCapacitySC.addAnd("capacityType", SearchCriteria.Op.IN, capacityTypes);
 -                _capacityDao.remove(hostCapacitySC);
 -                // remove from dedicated resources
 -                DedicatedResourceVO dr = _dedicatedDao.findByHostId(hostId);
 -                if (dr != null) {
 -                    _dedicatedDao.remove(dr.getId());
 -                }
 +        _dcDao.releasePrivateIpAddress(host.getPrivateIpAddress(), host.getDataCenterId(), null);
 +        _agentMgr.disconnectWithoutInvestigation(hostId, Status.Event.Remove);
 +
 +        // delete host details
 +        _hostDetailsDao.deleteDetails(hostId);
 +
 +        host.setGuid(null);
 +        Long clusterId = host.getClusterId();
 +        host.setClusterId(null);
 +        _hostDao.update(host.getId(), host);
 +
 +        _hostDao.remove(hostId);
 +        if (clusterId != null) {
 +            List<HostVO> hosts = listAllHostsInCluster(clusterId);
 +            if (hosts.size() == 0) {
 +                ClusterVO cluster = _clusterDao.findById(clusterId);
 +                cluster.setGuid(null);
 +                _clusterDao.update(clusterId, cluster);
 +            }
 +        }
 +
 +        try {
 +            resourceStateTransitTo(host, ResourceState.Event.DeleteHost, _nodeId);
 +        } catch (NoTransitionException e) {
 +            s_logger.debug("Cannot transmit host " + host.getId() + "to Enabled state", e);
 +        }
 +
 +        // Delete the associated entries in host ref table
 +        _storagePoolHostDao.deletePrimaryRecordsForHost(hostId);
 +
 +        // Make sure any VMs that were marked as being on this host are cleaned up
 +        List<VMInstanceVO> vms = _vmDao.listByHostId(hostId);
 +        for (VMInstanceVO vm : vms) {
 +            // this is how VirtualMachineManagerImpl does it when it syncs VM states
 +            vm.setState(State.Stopped);
 +            vm.setHostId(null);
 +            _vmDao.persist(vm);
 +        }
 +
 +        // For pool ids you got, delete local storage host entries in pool table
 +        // where
 +        for (StoragePoolHostVO pool : pools) {
 +            Long poolId = pool.getPoolId();
 +            StoragePoolVO storagePool = _storagePoolDao.findById(poolId);
 +            if (storagePool.isLocal() && isForceDeleteStorage) {
 +                storagePool.setUuid(null);
 +                storagePool.setClusterId(null);
 +                _storagePoolDao.update(poolId, storagePool);
 +                _storagePoolDao.remove(poolId);
 +                s_logger.debug("Local storage id=" + poolId + " is removed as a part of host removal id=" + hostId);
 +            }
 +        }
 +
 +        // delete the op_host_capacity entry
 +        Object[] capacityTypes = {Capacity.CAPACITY_TYPE_CPU, Capacity.CAPACITY_TYPE_MEMORY};
 +        SearchCriteria<CapacityVO> hostCapacitySC = _capacityDao.createSearchCriteria();
 +        hostCapacitySC.addAnd("hostOrPoolId", SearchCriteria.Op.EQ, hostId);
 +        hostCapacitySC.addAnd("capacityType", SearchCriteria.Op.IN, capacityTypes);
 +        _capacityDao.remove(hostCapacitySC);
 +        // remove from dedicated resources
 +        DedicatedResourceVO dr = _dedicatedDao.findByHostId(hostId);
 +        if (dr != null) {
 +            _dedicatedDao.remove(dr.getId());
 +        }
-         txn.commit();
+             }
+         });
+ 
          return true;
      }
  
@@@ -905,57 -910,56 +910,56 @@@
  
      @Override
      @DB
-     public boolean deleteCluster(DeleteClusterCmd cmd) {
-         Transaction txn = Transaction.currentTxn();
+     public boolean deleteCluster(final DeleteClusterCmd cmd) {
          try {
-             txn.start();
+             Transaction.execute(new TransactionCallbackNoReturn() {
+                 @Override
+                 public void doInTransactionWithoutResult(TransactionStatus status) {
 -                    ClusterVO cluster = _clusterDao.lockRow(cmd.getId(), true);
 -                    if (cluster == null) {
 -                        if (s_logger.isDebugEnabled()) {
 -                            s_logger.debug("Cluster: " + cmd.getId() + " does not even exist.  Delete call is ignored.");
 -                        }
 -                        throw new CloudRuntimeException("Cluster: " + cmd.getId() + " does not exist");
 -                    }
 -        
 -                    Hypervisor.HypervisorType hypervisorType = cluster.getHypervisorType();
 -        
 -                    List<HostVO> hosts = listAllHostsInCluster(cmd.getId());
 -                    if (hosts.size() > 0) {
 -                        if (s_logger.isDebugEnabled()) {
 -                            s_logger.debug("Cluster: " + cmd.getId() + " still has hosts, can't remove");
 -                        }
 -                        throw new CloudRuntimeException("Cluster: " + cmd.getId() + " cannot be removed. Cluster still has hosts");
 -                    }
 -        
 -                    // don't allow to remove the cluster if it has non-removed storage
 -                    // pools
 -                    List<StoragePoolVO> storagePools = _storagePoolDao.listPoolsByCluster(cmd.getId());
 -                    if (storagePools.size() > 0) {
 -                        if (s_logger.isDebugEnabled()) {
 -                            s_logger.debug("Cluster: " + cmd.getId() + " still has storage pools, can't remove");
 -                        }
 -                        throw new CloudRuntimeException("Cluster: " + cmd.getId() + " cannot be removed. Cluster still has storage pools");
 -                    }
 -        
 -                    if (_clusterDao.remove(cmd.getId())) {
 -                        _capacityDao.removeBy(null, null, null, cluster.getId(), null);
 -                        // If this cluster is of type vmware, and if the nexus vswitch
 -                        // global parameter setting is turned
 -                        // on, remove the row in cluster_vsm_map for this cluster id.
 -                        if (hypervisorType == HypervisorType.VMware && Boolean.parseBoolean(_configDao.getValue(Config.VmwareUseNexusVSwitch.toString()))) {
 -                            _clusterVSMMapDao.removeByClusterId(cmd.getId());
 -                        }
 -                        // remove from dedicated resources
 -                        DedicatedResourceVO dr = _dedicatedDao.findByClusterId(cluster.getId());
 -                        if (dr != null) {
 -                            _dedicatedDao.remove(dr.getId());
 -                        }
 -                    }
 +            ClusterVO cluster = _clusterDao.lockRow(cmd.getId(), true);
 +            if (cluster == null) {
 +                if (s_logger.isDebugEnabled()) {
 +                    s_logger.debug("Cluster: " + cmd.getId() + " does not even exist.  Delete call is ignored.");
 +                }
-                 txn.rollback();
 +                throw new CloudRuntimeException("Cluster: " + cmd.getId() + " does not exist");
 +            }
 +
 +            Hypervisor.HypervisorType hypervisorType = cluster.getHypervisorType();
 +
 +            List<HostVO> hosts = listAllHostsInCluster(cmd.getId());
 +            if (hosts.size() > 0) {
 +                if (s_logger.isDebugEnabled()) {
 +                    s_logger.debug("Cluster: " + cmd.getId() + " still has hosts, can't remove");
 +                }
-                 txn.rollback();
 +                throw new CloudRuntimeException("Cluster: " + cmd.getId() + " cannot be removed. Cluster still has hosts");
 +            }
 +
 +            // don't allow to remove the cluster if it has non-removed storage
 +            // pools
 +            List<StoragePoolVO> storagePools = _storagePoolDao.listPoolsByCluster(cmd.getId());
 +            if (storagePools.size() > 0) {
 +                if (s_logger.isDebugEnabled()) {
 +                    s_logger.debug("Cluster: " + cmd.getId() + " still has storage pools, can't remove");
 +                }
-                 txn.rollback();
 +                throw new CloudRuntimeException("Cluster: " + cmd.getId() + " cannot be removed. Cluster still has storage pools");
 +            }
 +
 +            if (_clusterDao.remove(cmd.getId())) {
 +                _capacityDao.removeBy(null, null, null, cluster.getId(), null);
 +                // If this cluster is of type vmware, and if the nexus vswitch
 +                // global parameter setting is turned
 +                // on, remove the row in cluster_vsm_map for this cluster id.
 +                if (hypervisorType == HypervisorType.VMware && Boolean.parseBoolean(_configDao.getValue(Config.VmwareUseNexusVSwitch.toString()))) {
 +                    _clusterVSMMapDao.removeByClusterId(cmd.getId());
 +                }
 +                // remove from dedicated resources
 +                DedicatedResourceVO dr = _dedicatedDao.findByClusterId(cluster.getId());
 +                if (dr != null) {
 +                    _dedicatedDao.remove(dr.getId());
 +                }
 +            }
  
-             txn.commit();
+                 }
+             });
              return true;
          } catch (CloudRuntimeException e) {
              throw e;
@@@ -1035,15 -1038,7 +1038,7 @@@
          }
  
          if (doUpdate) {
-             Transaction txn = Transaction.currentTxn();
-             try {
-                 txn.start();
 -            _clusterDao.update(cluster.getId(), cluster);
 +                _clusterDao.update(cluster.getId(), cluster);
-                 txn.commit();
-             } catch (Exception e) {
-                 s_logger.error("Unable to update cluster due to " + e.getMessage(), e);
-                 throw new CloudRuntimeException("Failed to update cluster. Please contact Cloud Support.");
-             }
          }
  
          if (newManagedState != null && !newManagedState.equals(oldManagedState)) {
@@@ -2460,30 -2448,33 +2448,33 @@@
      @Override
      @DB
      @ActionEvent(eventType = EventTypes.EVENT_HOST_RESERVATION_RELEASE, eventDescription = "releasing host reservation", async = true)
-     public boolean releaseHostReservation(Long hostId) {
-         Transaction txn = Transaction.currentTxn();
+     public boolean releaseHostReservation(final Long hostId) {
          try {
-             txn.start();
+             return Transaction.execute(new TransactionCallback<Boolean>() {
+                 @Override
+                 public Boolean doInTransaction(TransactionStatus status) {
 -                    PlannerHostReservationVO reservationEntry = _plannerHostReserveDao.findByHostId(hostId);
 -                    if (reservationEntry != null) {
 -                        long id = reservationEntry.getId();
 -                        PlannerHostReservationVO hostReservation = _plannerHostReserveDao.lockRow(id, true);
 -                        if (hostReservation == null) {
 -                            if (s_logger.isDebugEnabled()) {
 -                                s_logger.debug("Host reservation for host: " + hostId + " does not even exist.  Release reservartion call is ignored.");
 -                            }
 -                            return false;
 -                        }
 -                        hostReservation.setResourceUsage(null);
 -                        _plannerHostReserveDao.persist(hostReservation);
 -                        return true;
 -                    }
 -
 +            PlannerHostReservationVO reservationEntry = _plannerHostReserveDao.findByHostId(hostId);
 +            if (reservationEntry != null) {
 +                long id = reservationEntry.getId();
 +                PlannerHostReservationVO hostReservation = _plannerHostReserveDao.lockRow(id, true);
 +                if (hostReservation == null) {
                      if (s_logger.isDebugEnabled()) {
                          s_logger.debug("Host reservation for host: " + hostId + " does not even exist.  Release reservartion call is ignored.");
                      }
-                     txn.rollback();
 -
                      return false;
                  }
 +                hostReservation.setResourceUsage(null);
 +                _plannerHostReserveDao.persist(hostReservation);
-                 txn.commit();
 +                return true;
 +            }
++
 +            if (s_logger.isDebugEnabled()) {
 +                s_logger.debug("Host reservation for host: " + hostId + " does not even exist.  Release reservartion call is ignored.");
 +            }
++
 +            return false;
++                }
+             });
          } catch (CloudRuntimeException e) {
              throw e;
          } catch (Throwable t) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
index c0d3cb9,7417754..55097ce
--- a/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
+++ b/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
@@@ -375,53 -377,53 +378,53 @@@ public class ResourceLimitManagerImpl e
              project = _projectDao.findByProjectAccountId(account.getId());
          }
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
-         try {
+         final Project projectFinal = project;
+         Transaction.execute(new TransactionCallbackWithExceptionNoReturn<ResourceAllocationException>() {
+             @Override
+             public void doInTransactionWithoutResult(TransactionStatus status) throws ResourceAllocationException {
 -                // Lock all rows first so nobody else can read it
 -                Set<Long> rowIdsToLock = _resourceCountDao.listAllRowsToUpdate(account.getId(), ResourceOwnerType.Account, type);
 -                SearchCriteria<ResourceCountVO> sc = ResourceCountSearch.create();
 -                sc.setParameters("id", rowIdsToLock.toArray());
 -                _resourceCountDao.lockRows(sc, null, true);
 -    
 -                // Check account limits
 -                long accountLimit = findCorrectResourceLimitForAccount(account, type);
 -                long potentialCount = _resourceCountDao.getResourceCount(account.getId(), ResourceOwnerType.Account, type) + numResources;
 -                if (accountLimit != Resource.RESOURCE_UNLIMITED && potentialCount > accountLimit) {
 -                    String message = "Maximum number of resources of type '" + type + "' for account name=" + account.getAccountName()
 -                            + " in domain id=" + account.getDomainId() + " has been exceeded.";
 +            // Lock all rows first so nobody else can read it
 +            Set<Long> rowIdsToLock = _resourceCountDao.listAllRowsToUpdate(account.getId(), ResourceOwnerType.Account, type);
 +            SearchCriteria<ResourceCountVO> sc = ResourceCountSearch.create();
 +            sc.setParameters("id", rowIdsToLock.toArray());
 +            _resourceCountDao.lockRows(sc, null, true);
 +
 +            // Check account limits
 +            long accountLimit = findCorrectResourceLimitForAccount(account, type);
 +            long potentialCount = _resourceCountDao.getResourceCount(account.getId(), ResourceOwnerType.Account, type) + numResources;
 +            if (accountLimit != Resource.RESOURCE_UNLIMITED && potentialCount > accountLimit) {
 +                String message = "Maximum number of resources of type '" + type + "' for account name=" + account.getAccountName()
 +                        + " in domain id=" + account.getDomainId() + " has been exceeded.";
-                 if (project != null) {
-                     message = "Maximum number of resources of type '" + type + "' for project name=" + project.getName()
+                     if (projectFinal != null) {
+                         message = "Maximum number of resources of type '" + type + "' for project name=" + projectFinal.getName()
 -                                + " in domain id=" + account.getDomainId() + " has been exceeded.";
 -                    }
 -                    throw new ResourceAllocationException(message, type);
 +                            + " in domain id=" + account.getDomainId() + " has been exceeded.";
                  }
 -    
 -                // check all domains in the account's domain hierarchy
 -                Long domainId = null;
 +                throw new ResourceAllocationException(message, type);
 +            }
 +
 +            // check all domains in the account's domain hierarchy
 +            Long domainId = null;
-             if (project != null) {
-                 domainId = project.getDomainId();
+                 if (projectFinal != null) {
+                     domainId = projectFinal.getDomainId();
 -                } else {
 -                    domainId = account.getDomainId();
 -                }
 -    
 -                while (domainId != null) {
 -                    DomainVO domain = _domainDao.findById(domainId);
 -                    // no limit check if it is ROOT domain
 -                    if (domainId != Domain.ROOT_DOMAIN) {
 -                        ResourceLimitVO domainLimit = _resourceLimitDao.findByOwnerIdAndType(domainId, ResourceOwnerType.Domain, type);
 -                        if (domainLimit != null && domainLimit.getMax().longValue() != Resource.RESOURCE_UNLIMITED) {
 -                            long domainCount = _resourceCountDao.getResourceCount(domainId, ResourceOwnerType.Domain, type);
 -                            if ((domainCount + numResources) > domainLimit.getMax().longValue()) {
 -                                throw new ResourceAllocationException("Maximum number of resources of type '" + type + "' for domain id=" + domainId + " has been exceeded.", type);
 -                            }
 +            } else {
 +                domainId = account.getDomainId();
 +            }
 +
 +            while (domainId != null) {
 +                DomainVO domain = _domainDao.findById(domainId);
 +                // no limit check if it is ROOT domain
 +                if (domainId != Domain.ROOT_DOMAIN) {
 +                    ResourceLimitVO domainLimit = _resourceLimitDao.findByOwnerIdAndType(domainId, ResourceOwnerType.Domain, type);
 +                    if (domainLimit != null && domainLimit.getMax().longValue() != Resource.RESOURCE_UNLIMITED) {
 +                        long domainCount = _resourceCountDao.getResourceCount(domainId, ResourceOwnerType.Domain, type);
 +                        if ((domainCount + numResources) > domainLimit.getMax().longValue()) {
 +                            throw new ResourceAllocationException("Maximum number of resources of type '" + type + "' for domain id=" + domainId + " has been exceeded.", type);
                          }
                      }
 -                    domainId = domain.getParent();
                  }
 +                domainId = domain.getParent();
              }
-         } finally {
-             txn.commit();
 +        }
+         });
      }
  
      @Override
@@@ -717,143 -719,143 +720,143 @@@
      }
  
      @DB
-     protected boolean updateResourceCountForAccount(long accountId, ResourceType type, boolean increment, long delta) {
-         boolean result = true;
+     protected boolean updateResourceCountForAccount(final long accountId, final ResourceType type, final boolean increment, final long delta) {
          try {
-             Transaction txn = Transaction.currentTxn();
-             txn.start();
- 
+             return Transaction.execute(new TransactionCallback<Boolean>() {
+                 @Override
+                 public Boolean doInTransaction(TransactionStatus status) {
+                     boolean result = true;
 -                    Set<Long> rowsToLock = _resourceCountDao.listAllRowsToUpdate(accountId, ResourceOwnerType.Account, type);
 -        
 -                    // Lock rows first
 -                    SearchCriteria<ResourceCountVO> sc = ResourceCountSearch.create();
 -                    sc.setParameters("id", rowsToLock.toArray());
 -                    List<ResourceCountVO> rowsToUpdate = _resourceCountDao.lockRows(sc, null, true);
 -        
 -                    for (ResourceCountVO rowToUpdate : rowsToUpdate) {
 -                        if (!_resourceCountDao.updateById(rowToUpdate.getId(), increment, delta)) {
 -                            s_logger.trace("Unable to update resource count for the row " + rowToUpdate);
 -                            result = false;
 -                        }
 -                    }
 -                    
 +            Set<Long> rowsToLock = _resourceCountDao.listAllRowsToUpdate(accountId, ResourceOwnerType.Account, type);
 +
 +            // Lock rows first
 +            SearchCriteria<ResourceCountVO> sc = ResourceCountSearch.create();
 +            sc.setParameters("id", rowsToLock.toArray());
 +            List<ResourceCountVO> rowsToUpdate = _resourceCountDao.lockRows(sc, null, true);
 +
 +            for (ResourceCountVO rowToUpdate : rowsToUpdate) {
 +                if (!_resourceCountDao.updateById(rowToUpdate.getId(), increment, delta)) {
 +                    s_logger.trace("Unable to update resource count for the row " + rowToUpdate);
 +                    result = false;
 +                }
 +            }
 +
-             txn.commit();
+                     return result;
+                 }
+             });
          } catch (Exception ex) {
              s_logger.error("Failed to update resource count for account id=" + accountId);
-             result = false;
+             return false;
          }
      }
  
      @DB
-     protected long recalculateDomainResourceCount(long domainId, ResourceType type) {
+     protected long recalculateDomainResourceCount(final long domainId, final ResourceType type) {
+         return Transaction.execute(new TransactionCallback<Long>() {
+             @Override
+             public Long doInTransaction(TransactionStatus status) {
 -                long newCount = 0;
 -
 -                // Lock all rows first so nobody else can read it
 -                Set<Long> rowIdsToLock = _resourceCountDao.listAllRowsToUpdate(domainId, ResourceOwnerType.Domain, type);
 -                SearchCriteria<ResourceCountVO> sc = ResourceCountSearch.create();
 -                sc.setParameters("id", rowIdsToLock.toArray());
 -                _resourceCountDao.lockRows(sc, null, true);
 -    
 -                ResourceCountVO domainRC = _resourceCountDao.findByOwnerAndType(domainId, ResourceOwnerType.Domain, type);
 -                long oldCount = domainRC.getCount();
 -    
 -                List<DomainVO> domainChildren = _domainDao.findImmediateChildrenForParent(domainId);
 -                // for each child domain update the resource count
 -                if (type.supportsOwner(ResourceOwnerType.Domain)) {
 -    
 -                    // calculate project count here
 -                    if (type == ResourceType.project) {
 -                        newCount = newCount + _projectDao.countProjectsForDomain(domainId);
 -                    }
 -    
 -                    for (DomainVO domainChild : domainChildren) {
 -                        long domainCount = recalculateDomainResourceCount(domainChild.getId(), type);
 -                        newCount = newCount + domainCount; // add the child domain count to parent domain count
 -                    }
 +        long newCount = 0;
 +
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
- 
-         try {
 +            // Lock all rows first so nobody else can read it
 +            Set<Long> rowIdsToLock = _resourceCountDao.listAllRowsToUpdate(domainId, ResourceOwnerType.Domain, type);
 +            SearchCriteria<ResourceCountVO> sc = ResourceCountSearch.create();
 +            sc.setParameters("id", rowIdsToLock.toArray());
 +            _resourceCountDao.lockRows(sc, null, true);
 +
 +            ResourceCountVO domainRC = _resourceCountDao.findByOwnerAndType(domainId, ResourceOwnerType.Domain, type);
 +            long oldCount = domainRC.getCount();
 +
 +            List<DomainVO> domainChildren = _domainDao.findImmediateChildrenForParent(domainId);
 +            // for each child domain update the resource count
 +            if (type.supportsOwner(ResourceOwnerType.Domain)) {
 +
 +                // calculate project count here
 +                if (type == ResourceType.project) {
 +                    newCount = newCount + _projectDao.countProjectsForDomain(domainId);
                  }
 -    
 -                if (type.supportsOwner(ResourceOwnerType.Account)) {
 -                    List<AccountVO> accounts = _accountDao.findActiveAccountsForDomain(domainId);
 -                    for (AccountVO account : accounts) {
 -                        long accountCount = recalculateAccountResourceCount(account.getId(), type);
 -                        newCount = newCount + accountCount; // add account's resource count to parent domain count
 -                    }
 +
 +                for (DomainVO domainChild : domainChildren) {
 +                    long domainCount = recalculateDomainResourceCount(domainChild.getId(), type);
 +                    newCount = newCount + domainCount; // add the child domain count to parent domain count
                  }
 -                _resourceCountDao.setResourceCount(domainId, ResourceOwnerType.Domain, type, newCount);
 -    
 -                if (oldCount != newCount) {
 -                    s_logger.info("Discrepency in the resource count " + "(original count=" + oldCount + " correct count = " +
 -                            newCount + ") for type " + type + " for domain ID " + domainId + " is fixed during resource count recalculation.");
 +            }
 +
 +            if (type.supportsOwner(ResourceOwnerType.Account)) {
 +                List<AccountVO> accounts = _accountDao.findActiveAccountsForDomain(domainId);
 +                for (AccountVO account : accounts) {
 +                    long accountCount = recalculateAccountResourceCount(account.getId(), type);
 +                    newCount = newCount + accountCount; // add account's resource count to parent domain count
                  }
 -                
 -                return newCount;
              }
 +            _resourceCountDao.setResourceCount(domainId, ResourceOwnerType.Domain, type, newCount);
 +
 +            if (oldCount != newCount) {
 +                s_logger.info("Discrepency in the resource count " + "(original count=" + oldCount + " correct count = " +
 +                        newCount + ") for type " + type + " for domain ID " + domainId + " is fixed during resource count recalculation.");
 +            }
-         } catch (Exception e) {
-             throw new CloudRuntimeException("Failed to update resource count for domain with Id " + domainId);
-         } finally {
-             txn.commit();
-         }
 +
 +        return newCount;
 +    }
+         });
+     }
  
      @DB
-     protected long recalculateAccountResourceCount(long accountId, ResourceType type) {
+     protected long recalculateAccountResourceCount(final long accountId, final ResourceType type) {
+         Long newCount = Transaction.execute(new TransactionCallback<Long>() {
+             @Override
+             public Long doInTransaction(TransactionStatus status) {
 -                Long newCount = null;
 -
 -                // this lock guards against the updates to user_vm, volume, snapshot, public _ip and template table
 -                // as any resource creation precedes with the resourceLimitExceeded check which needs this lock too
 -                SearchCriteria<ResourceCountVO> sc = ResourceCountSearch.create();
 -                sc.setParameters("accountId", accountId);
 -                _resourceCountDao.lockRows(sc, null, true);
 -        
 -                ResourceCountVO accountRC = _resourceCountDao.findByOwnerAndType(accountId, ResourceOwnerType.Account, type);
 -                long oldCount = 0;
 -                if (accountRC != null)
 -                    oldCount = accountRC.getCount();
 -        
 -                if (type == Resource.ResourceType.user_vm) {
 -                    newCount = _userVmDao.countAllocatedVMsForAccount(accountId);
 -                } else if (type == Resource.ResourceType.volume) {
 -                    newCount = _volumeDao.countAllocatedVolumesForAccount(accountId);
 -                    long virtualRouterCount = _vmDao.findIdsOfAllocatedVirtualRoutersForAccount(accountId).size();
 -                    newCount = newCount - virtualRouterCount; // don't count the volumes of virtual router
 -                } else if (type == Resource.ResourceType.snapshot) {
 -                    newCount = _snapshotDao.countSnapshotsForAccount(accountId);
 -                } else if (type == Resource.ResourceType.public_ip) {
 -                    newCount = calculatePublicIpForAccount(accountId);
 -                } else if (type == Resource.ResourceType.template) {
 -                    newCount = _vmTemplateDao.countTemplatesForAccount(accountId);
 -                } else if (type == Resource.ResourceType.project) {
 -                    newCount = _projectAccountDao.countByAccountIdAndRole(accountId, Role.Admin);
 -                } else if (type == Resource.ResourceType.network) {
 -                    newCount = _networkDao.countNetworksUserCanCreate(accountId);
 -                } else if (type == Resource.ResourceType.vpc) {
 -                    newCount = _vpcDao.countByAccountId(accountId);
 -                } else if (type == Resource.ResourceType.cpu) {
 -                    newCount = countCpusForAccount(accountId);
 -                } else if (type == Resource.ResourceType.memory) {
 -                    newCount = calculateMemoryForAccount(accountId);
 -                } else if (type == Resource.ResourceType.primary_storage) {
 -                    List<Long> virtualRouters = _vmDao.findIdsOfAllocatedVirtualRoutersForAccount(accountId);
 -                    newCount = _volumeDao.primaryStorageUsedForAccount(accountId, virtualRouters);
 -                } else if (type == Resource.ResourceType.secondary_storage) {
 -                    newCount = calculateSecondaryStorageForAccount(accountId);
 -                } else {
 -                    throw new InvalidParameterValueException("Unsupported resource type " + type);
 -                }
 -                _resourceCountDao.setResourceCount(accountId, ResourceOwnerType.Account, type, (newCount == null) ? 0 : newCount.longValue());
 -        
 -                if (oldCount != newCount) {
 -                    s_logger.info("Discrepency in the resource count " + "(original count=" + oldCount + " correct count = " +
 -                            newCount + ") for type " + type + " for account ID " + accountId + " is fixed during resource count recalculation.");
 -                }
 +        Long newCount = null;
 +
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
- 
 +        // this lock guards against the updates to user_vm, volume, snapshot, public _ip and template table
 +        // as any resource creation precedes with the resourceLimitExceeded check which needs this lock too
 +        SearchCriteria<ResourceCountVO> sc = ResourceCountSearch.create();
 +        sc.setParameters("accountId", accountId);
 +        _resourceCountDao.lockRows(sc, null, true);
 +
 +        ResourceCountVO accountRC = _resourceCountDao.findByOwnerAndType(accountId, ResourceOwnerType.Account, type);
 +        long oldCount = 0;
 +        if (accountRC != null)
 +            oldCount = accountRC.getCount();
 +
 +        if (type == Resource.ResourceType.user_vm) {
 +            newCount = _userVmDao.countAllocatedVMsForAccount(accountId);
 +        } else if (type == Resource.ResourceType.volume) {
 +            newCount = _volumeDao.countAllocatedVolumesForAccount(accountId);
 +            long virtualRouterCount = _vmDao.findIdsOfAllocatedVirtualRoutersForAccount(accountId).size();
 +            newCount = newCount - virtualRouterCount; // don't count the volumes of virtual router
 +        } else if (type == Resource.ResourceType.snapshot) {
 +            newCount = _snapshotDao.countSnapshotsForAccount(accountId);
 +        } else if (type == Resource.ResourceType.public_ip) {
 +            newCount = calculatePublicIpForAccount(accountId);
 +        } else if (type == Resource.ResourceType.template) {
 +            newCount = _vmTemplateDao.countTemplatesForAccount(accountId);
 +        } else if (type == Resource.ResourceType.project) {
 +            newCount = _projectAccountDao.countByAccountIdAndRole(accountId, Role.Admin);
 +        } else if (type == Resource.ResourceType.network) {
 +            newCount = _networkDao.countNetworksUserCanCreate(accountId);
 +        } else if (type == Resource.ResourceType.vpc) {
 +            newCount = _vpcDao.countByAccountId(accountId);
 +        } else if (type == Resource.ResourceType.cpu) {
 +            newCount = countCpusForAccount(accountId);
 +        } else if (type == Resource.ResourceType.memory) {
 +            newCount = calculateMemoryForAccount(accountId);
 +        } else if (type == Resource.ResourceType.primary_storage) {
 +            List<Long> virtualRouters = _vmDao.findIdsOfAllocatedVirtualRoutersForAccount(accountId);
 +            newCount = _volumeDao.primaryStorageUsedForAccount(accountId, virtualRouters);
 +        } else if (type == Resource.ResourceType.secondary_storage) {
 +            newCount = calculateSecondaryStorageForAccount(accountId);
 +        } else {
 +            throw new InvalidParameterValueException("Unsupported resource type " + type);
 +        }
 +        _resourceCountDao.setResourceCount(accountId, ResourceOwnerType.Account, type, (newCount == null) ? 0 : newCount.longValue());
 +
 +        if (oldCount != newCount) {
 +            s_logger.info("Discrepency in the resource count " + "(original count=" + oldCount + " correct count = " +
 +                    newCount + ") for type " + type + " for account ID " + accountId + " is fixed during resource count recalculation.");
 +        }
-         txn.commit();
+                 
+                 return newCount;
+             }
+         });
  
          return (newCount == null) ? 0 : newCount.longValue();
      }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/server/ManagementServerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/server/ManagementServerImpl.java
index 1144330,79b20d0..5af088d
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@@ -211,7 -198,7 +212,8 @@@ import org.apache.cloudstack.api.comman
  import org.apache.cloudstack.api.command.admin.vlan.ListVlanIpRangesCmd;
  import org.apache.cloudstack.api.command.admin.vlan.ReleasePublicIpRangeCmd;
  import org.apache.cloudstack.api.command.admin.vm.AssignVMCmd;
+ import org.apache.cloudstack.api.command.admin.vm.ExpungeVMCmd;
 +import org.apache.cloudstack.api.command.admin.vm.ListVMsCmdByAdmin;
  import org.apache.cloudstack.api.command.admin.vm.MigrateVMCmd;
  import org.apache.cloudstack.api.command.admin.vm.MigrateVirtualMachineWithVolumeCmd;
  import org.apache.cloudstack.api.command.admin.vm.RecoverVMCmd;
@@@ -583,6 -575,6 +587,8 @@@ import com.cloud.utils.db.JoinBuilder.J
  import com.cloud.utils.db.SearchBuilder;
  import com.cloud.utils.db.SearchCriteria;
  import com.cloud.utils.db.Transaction;
++import com.cloud.utils.db.TransactionCallbackNoReturn;
++import com.cloud.utils.db.TransactionStatus;
  import com.cloud.utils.exception.CloudRuntimeException;
  import com.cloud.utils.net.MacAddress;
  import com.cloud.utils.net.NetUtils;
@@@ -2758,9 -2762,9 +2769,10 @@@ public class ManagementServerImpl exten
          cmdList.add(AddNicToVMCmd.class);
          cmdList.add(DeployVMCmd.class);
          cmdList.add(DestroyVMCmd.class);
+         cmdList.add(ExpungeVMCmd.class);
          cmdList.add(GetVMPasswordCmd.class);
          cmdList.add(ListVMsCmd.class);
 +        cmdList.add(ListVMsCmdByAdmin.class);
          cmdList.add(ScaleVMCmd.class);
          cmdList.add(RebootVMCmd.class);
          cmdList.add(RemoveNicFromVMCmd.class);
@@@ -3893,4 -3879,21 +3901,21 @@@
  
          _dpMgr.cleanupVMReservations();
      }
+ 
+     public List<StoragePoolAllocator> getStoragePoolAllocators() {
+         return _storagePoolAllocators;
+     }
+ 
+     @Inject
+     public void setStoragePoolAllocators(List<StoragePoolAllocator> storagePoolAllocators) {
+         _storagePoolAllocators = storagePoolAllocators;
+     }
+ 
+     public LockMasterListener getLockMasterListener() {
+         return _lockMasterListener;
+     }
+ 
+     public void setLockMasterListener(LockMasterListener lockMasterListener) {
 -        this._lockMasterListener = lockMasterListener;
++        _lockMasterListener = lockMasterListener;
+     }
  }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/servlet/ConsoleProxyServlet.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/storage/StorageManagerImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/storage/VolumeApiServiceImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/storage/VolumeApiServiceImpl.java
index dbcb961,d445381..61422d1
--- a/server/src/com/cloud/storage/VolumeApiServiceImpl.java
+++ b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
@@@ -1050,8 -1066,17 +1066,17 @@@ public class VolumeApiServiceImpl exten
          HypervisorType rootDiskHyperType = vm.getHypervisorType();
  
          HypervisorType dataDiskHyperType = _volsDao.getHypervisorType(volume.getId());
+ 
+         VolumeVO dataDiskVol = _volsDao.findById(volume.getId());
+         StoragePoolVO dataDiskStoragePool = _storagePoolDao.findById(dataDiskVol.getPoolId());
+ 
+         // managed storage can be used for different types of hypervisors
+         // only perform this check if the volume's storage pool is not null and not managed
+         if (dataDiskStoragePool != null && !dataDiskStoragePool.isManaged()) {
 -            if (dataDiskHyperType != HypervisorType.None && rootDiskHyperType != dataDiskHyperType) {
 +        if (dataDiskHyperType != HypervisorType.None && rootDiskHyperType != dataDiskHyperType) {
-             throw new InvalidParameterValueException("Can't attach a volume created by: " + dataDiskHyperType + " to a " + rootDiskHyperType + " vm");
+                 throw new InvalidParameterValueException("Can't attach a volume created by: " + dataDiskHyperType +
+                     " to a " + rootDiskHyperType + " vm");
+             }
          }
  
          deviceId = getDeviceId(vmId, deviceId);
@@@ -1108,16 -1133,36 +1133,36 @@@
      }
  
      @Override
-     public Volume updateVolume(UpdateVolumeCmd cmd) {
-         Long volumeId = cmd.getId();
-         String path = cmd.getPath();
+     @ActionEvent(eventType = EventTypes.EVENT_VOLUME_UPDATE, eventDescription = "updating volume", async = true)
+     public Volume updateVolume(long volumeId, String path, String state, Long storageId, Boolean displayVolume) {
+         VolumeVO volume = _volumeDao.findById(volumeId);
 -        
 +
-         if (path == null) {
-             throw new InvalidParameterValueException("Failed to update the volume as path was null");
+         if (path != null) {
+             volume.setPath(path);
+         }
+ 
+         if (displayVolume != null) {
+             volume.setDisplayVolume(displayVolume);
+         }
+         
+         if (state != null) {
+             try {
+                 Volume.State volumeState = Volume.State.valueOf(state);
+                 volume.setState(volumeState);
+             }
+             catch(IllegalArgumentException ex) {
+                 throw new InvalidParameterValueException("Invalid volume state specified");
+             }
+         }
+         
+         if (storageId != null) {
+             StoragePool pool = _storagePoolDao.findById(storageId);
+             if (pool.getDataCenterId() != volume.getDataCenterId()) {
+                 throw new InvalidParameterValueException("Invalid storageId specified; refers to the pool outside of the volume's zone");
+             }
+             volume.setPoolId(pool.getId());
          }
 -        
 +
-         VolumeVO volume = ApiDBUtils.findVolumeById(volumeId);
-         volume.setPath(path);
          _volumeDao.update(volumeId, volume);
  
          return volume;
@@@ -1519,15 -1568,25 +1568,25 @@@
          }
  
          if (storeForRootStoreScope.getScopeType() != storeForDataStoreScope.getScopeType()) {
-             if (storeForDataStoreScope.getScopeType() == ScopeType.CLUSTER && storeForRootStoreScope.getScopeType() == ScopeType.HOST) {
+             if (storeForDataStoreScope.getScopeType() == ScopeType.CLUSTER) {
+                 Long vmClusterId = null;
+                 if (storeForRootStoreScope.getScopeType() == ScopeType.HOST) {
 -                    HostScope hs = (HostScope)storeForRootStoreScope;
 +                HostScope hs = (HostScope)storeForRootStoreScope;
-                 if (storeForDataStoreScope.getScopeId().equals(hs.getClusterId())) {
-                     return false;
+                     vmClusterId = hs.getClusterId();
+                 } else if (storeForRootStoreScope.getScopeType() == ScopeType.ZONE) {
+                     Long hostId = _vmInstanceDao.findById(rootVolumeOfVm.getInstanceId()).getHostId();
+                     if (hostId != null) {
+                         HostVO host = _hostDao.findById(hostId);
+                         vmClusterId = host.getClusterId();
+                     }
                  }
+                 if (storeForDataStoreScope.getScopeId().equals(vmClusterId)) {
+                     return false;
 -                }
 +            }
-             if (storeForRootStoreScope.getScopeType() == ScopeType.CLUSTER && storeForDataStoreScope.getScopeType() == ScopeType.HOST) {
-                 HostScope hs = (HostScope)storeForDataStoreScope;
-                 if (storeForRootStoreScope.getScopeId().equals(hs.getClusterId())) {
+             } else if (storeForDataStoreScope.getScopeType() == ScopeType.HOST &&
+                     (storeForRootStoreScope.getScopeType() == ScopeType.CLUSTER || storeForRootStoreScope.getScopeType() == ScopeType.ZONE)) {
+                 Long hostId = _vmInstanceDao.findById(rootVolumeOfVm.getInstanceId()).getHostId();
+                 if (storeForDataStoreScope.getScopeId().equals(hostId)) {
                      return false;
                  }
              }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
index 69ed16e,d15393c..464f7f8
--- a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
+++ b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
@@@ -197,10 -195,9 +195,9 @@@ public class SnapshotManagerImpl extend
      @Inject VolumeDataFactory volFactory;
      @Inject SnapshotDataFactory snapshotFactory;
      @Inject EndPointSelector _epSelector;
 -    @Inject
 -    private ResourceManager _resourceMgr;
 +	@Inject
 +	private ResourceManager _resourceMgr;
- 	@Inject
- 	protected List<SnapshotStrategy> snapshotStrategies;
+     @Inject StorageStrategyFactory _storageStrategyFactory;
  
  
      private int _totalRetries;
@@@ -311,119 -337,26 +337,26 @@@
          return snapshot;
      }
  
- 
- 
      @Override
      public Snapshot backupSnapshot(Long snapshotId) {
 -        SnapshotInfo snapshot = snapshotFactory.getSnapshot(snapshotId, DataStoreRole.Image);
 -        if (snapshot != null) {
 -            throw new CloudRuntimeException("Already in the backup snapshot:" + snapshotId);
 -        }
 +    	 SnapshotInfo snapshot = snapshotFactory.getSnapshot(snapshotId, DataStoreRole.Image);
 +    	 if (snapshot != null) {
 +    		 throw new CloudRuntimeException("Already in the backup snapshot:" + snapshotId);
 +    	 }
  
 -        return snapshotSrv.backupSnapshot(snapshot);
 +         return snapshotSrv.backupSnapshot(snapshot);
      }
  
-     /*
-     @Override
-     public void downloadSnapshotsFromSwift(SnapshotVO ss) {
- 
-         long volumeId = ss.getVolumeId();
-         VolumeVO volume = _volsDao.findById(volumeId);
-         Long dcId = volume.getDataCenterId();
-         Long accountId = volume.getAccountId();
-         DataStore secStore = this.dataStoreMgr.getImageStore(dcId);
- 
-         Long swiftId = ss.getSwiftId();
-         SwiftTO swift = _swiftMgr.getSwiftTO(swiftId);
-         SnapshotVO tss = ss;
-         List<String> BackupUuids = new ArrayList<String>(30);
-         while (true) {
-             BackupUuids.add(0, tss.getBackupSnapshotId());
-             if (tss.getPrevSnapshotId() == 0)
-                 break;
-             Long id = tss.getPrevSnapshotId();
-             tss = _snapshotDao.findById(id);
-             assert tss != null : " can not find snapshot " + id;
-         }
-         String parent = null;
-         try {
-             for (String backupUuid : BackupUuids) {
- <<<<<<< HEAD
-                 downloadSnapshotFromSwiftCommand cmd = new downloadSnapshotFromSwiftCommand(swift, secStore.getUri(), dcId, accountId, volumeId, parent, backupUuid, _backupsnapshotwait);
- =======
-                 DownloadSnapshotFromSwiftCommand cmd = new DownloadSnapshotFromSwiftCommand(swift, secondaryStoragePoolUrl, dcId, accountId, volumeId, parent, backupUuid, _backupsnapshotwait);
- >>>>>>> master
-                 Answer answer = _agentMgr.sendToSSVM(dcId, cmd);
-                 if ((answer == null) || !answer.getResult()) {
-                     throw new CloudRuntimeException("downloadSnapshotsFromSwift failed ");
-                 }
-                 parent = backupUuid;
-             }
-         } catch (Exception e) {
-             throw new CloudRuntimeException("downloadSnapshotsFromSwift failed due to " + e.toString());
-         }
- 
-     }
- 
-     private List<String> determineBackupUuids(final SnapshotVO snapshot) {
- 
-         final List<String> backupUuids = new ArrayList<String>();
-         backupUuids.add(0, snapshot.getBackupSnapshotId());
- 
-         SnapshotVO tempSnapshot = snapshot;
-         while (tempSnapshot.getPrevSnapshotId() != 0) {
-             tempSnapshot = _snapshotDao.findById(tempSnapshot
-                     .getPrevSnapshotId());
-             backupUuids.add(0, tempSnapshot.getBackupSnapshotId());
-         }
- 
-         return Collections.unmodifiableList(backupUuids);
-     }
- 
-     @Override
-     public void downloadSnapshotsFromS3(final SnapshotVO snapshot) {
- 
-         final VolumeVO volume = _volsDao.findById(snapshot.getVolumeId());
-         final Long zoneId = volume.getDataCenterId();
-         final DataStore secStore = this.dataStoreMgr.getImageStore(zoneId);
- 
-         final S3TO s3 = _s3Mgr.getS3TO(snapshot.getS3Id());
-         final List<String> backupUuids = determineBackupUuids(snapshot);
- 
-         try {
-             String parent = null;
-             for (final String backupUuid : backupUuids) {
-                 final DownloadSnapshotFromS3Command cmd = new DownloadSnapshotFromS3Command(
-                         s3, parent, secStore.getUri(), zoneId,
-                         volume.getAccountId(), volume.getId(), backupUuid,
-                         _backupsnapshotwait);
-                 final Answer answer = _agentMgr.sendToSSVM(zoneId, cmd);
-                 if ((answer == null) || !answer.getResult()) {
-                     throw new CloudRuntimeException(String.format(
-                             "S3 snapshot download failed due to %1$s.",
-                             answer != null ? answer.getDetails()
-                                     : "unspecified error"));
-                 }
-                 parent = backupUuid;
-             }
-         } catch (Exception e) {
-             throw new CloudRuntimeException(
-                     "Snapshot download from S3 failed due to " + e.toString(),
-                     e);
-         }
- 
-     }*/
- 
      @Override
      public SnapshotVO getParentSnapshot(VolumeInfo volume) {
 -        long preId = _snapshotDao.getLastSnapshot(volume.getId(), DataStoreRole.Primary);
 +    	 long preId = _snapshotDao.getLastSnapshot(volume.getId(), DataStoreRole.Primary);
  
 -        SnapshotVO preSnapshotVO = null;
 -        if (preId != 0 && !(volume.getLastPoolId() != null && !volume.getLastPoolId().equals(volume.getPoolId()))) {
 -            preSnapshotVO = _snapshotDao.findByIdIncludingRemoved(preId);
 -        }
 +         SnapshotVO preSnapshotVO = null;
 +         if (preId != 0 && !(volume.getLastPoolId() != null && !volume.getLastPoolId().equals(volume.getPoolId()))) {
 +             preSnapshotVO = _snapshotDao.findByIdIncludingRemoved(preId);
 +         }
  
 -        return preSnapshotVO;
 +         return preSnapshotVO;
      }
  
      private Long getSnapshotUserId() {
@@@ -463,9 -396,11 +396,11 @@@
          while (snaps.size() > maxSnaps && snaps.size() > 1) {
              SnapshotVO oldestSnapshot = snaps.get(0);
              long oldSnapId = oldestSnapshot.getId();
+             if (policy != null) {
 -                s_logger.debug("Max snaps: " + policy.getMaxSnaps() + " exceeded for snapshot policy with Id: " + policyId + ". Deleting oldest snapshot: " + oldSnapId);
 +            s_logger.debug("Max snaps: " + policy.getMaxSnaps() + " exceeded for snapshot policy with Id: " + policyId + ". Deleting oldest snapshot: " + oldSnapId);
+             }
              if(deleteSnapshot(oldSnapId)){
 -                //log Snapshot delete event
 +            	//log Snapshot delete event
                  ActionEventUtils.onCompletedActionEvent(User.UID_SYSTEM, oldestSnapshot.getAccountId(), EventVO.LEVEL_INFO, EventTypes.EVENT_SNAPSHOT_DELETE, "Successfully deleted oldest snapshot: " + oldSnapId, 0);
              }
              snaps.remove(oldestSnapshot);
@@@ -485,21 -420,20 +420,20 @@@
          }
  
          _accountMgr.checkAccess(caller, null, true, snapshotCheck);
-         SnapshotStrategy snapshotStrategy = null;
-         for (SnapshotStrategy strategy : snapshotStrategies) {
-         	if (strategy.canHandle(snapshotCheck)) {
-         		snapshotStrategy = strategy;
-         		break;
-         	}
+         SnapshotStrategy snapshotStrategy = _storageStrategyFactory.getSnapshotStrategy(snapshotCheck, SnapshotOperation.DELETE);
+         if (snapshotStrategy == null) {
+             s_logger.error("Unable to find snaphot strategy to handle snapshot with id '"+snapshotId+"'");
+             return false;
          }
+ 
          try {
 -            boolean result = snapshotStrategy.deleteSnapshot(snapshotId);
 -            if (result) {
 +        	boolean result = snapshotStrategy.deleteSnapshot(snapshotId);
 +        	if (result) {
                  if (snapshotCheck.getState() == Snapshot.State.BackedUp) {
 -                    UsageEventUtils.publishUsageEvent(EventTypes.EVENT_SNAPSHOT_DELETE, snapshotCheck.getAccountId(),
 -                            snapshotCheck.getDataCenterId(), snapshotId, snapshotCheck.getName(), null, null, 0L,
 -                            snapshotCheck.getClass().getName(), snapshotCheck.getUuid());
 -                }
 +        			UsageEventUtils.publishUsageEvent(EventTypes.EVENT_SNAPSHOT_DELETE, snapshotCheck.getAccountId(),
 +        					snapshotCheck.getDataCenterId(), snapshotId, snapshotCheck.getName(), null, null, 0L,
 +        					snapshotCheck.getClass().getName(), snapshotCheck.getUuid());
 +        		}
                  _resourceLimitMgr.decrementResourceCount(snapshotCheck.getAccountId(), ResourceType.snapshot);
                  _resourceLimitMgr.decrementResourceCount(snapshotCheck.getAccountId(), ResourceType.secondary_storage,
                          new Long(snapshotCheck.getSize()));
@@@ -904,40 -834,38 +834,38 @@@
          return null;
      }
  
- 
- 
      private boolean hostSupportSnapsthotForVolume(HostVO host, VolumeInfo volume) {
 -        if (host.getHypervisorType() != HypervisorType.KVM) {
 -            return true;
 -        }
 +		if (host.getHypervisorType() != HypervisorType.KVM) {
 +			return true;
 +		}
  
          //Turn off snapshot by default for KVM if the volume attached to vm that is not in the Stopped/Destroyed state,
 -        //unless it is set in the global flag
 -        Long vmId = volume.getInstanceId();
 -        if (vmId != null) {
 -            VMInstanceVO vm = _vmDao.findById(vmId);
 -            if (vm.getState() != VirtualMachine.State.Stopped && vm.getState() != VirtualMachine.State.Destroyed) {
 -                boolean snapshotEnabled = Boolean.parseBoolean(_configDao.getValue("kvm.snapshot.enabled"));
 -                if (!snapshotEnabled) {
 -                    s_logger.debug("Snapshot is not supported on host " + host + " for the volume " + volume + " attached to the vm " + vm);
 -                    return false;
 -                }
 -            }
 -        }
 -
 -        // Determine host capabilities
 -        String caps = host.getCapabilities();
 -
 -        if (caps != null) {
 -            String[] tokens = caps.split(",");
 -            for (String token : tokens) {
 -                if (token.contains("snapshot")) {
 -                    return true;
 -                }
 -            }
 -        }
 -        return false;
 -    }
 +		//unless it is set in the global flag
 +		Long vmId = volume.getInstanceId();
 +		if (vmId != null) {
 +		    VMInstanceVO vm = _vmDao.findById(vmId);
 +		    if (vm.getState() != VirtualMachine.State.Stopped && vm.getState() != VirtualMachine.State.Destroyed) {
 +		        boolean snapshotEnabled = Boolean.parseBoolean(_configDao.getValue("kvm.snapshot.enabled"));
 +	            if (!snapshotEnabled) {
 +	                 s_logger.debug("Snapshot is not supported on host " + host + " for the volume " + volume + " attached to the vm " + vm);
 +	                 return false;
 +	            }
 +		    }
 +		}
 +        
 +		// Determine host capabilities
 +		String caps = host.getCapabilities();
 +
 +		if (caps != null) {
 +			String[] tokens = caps.split(",");
 +			for (String token : tokens) {
 +				if (token.contains("snapshot")) {
 +					return true;
 +				}
 +			}
 +		}
 +		return false;
 +	}
  
      private boolean supportedByHypervisor(VolumeInfo volume) {
          HypervisorType hypervisorType;
@@@ -995,39 -923,38 +923,38 @@@
                      throw new CloudRuntimeException(
                              "There is other active vm snapshot tasks on the instance to which the volume is attached, please try again later");
                  }
 -            }
 -        }
 +			}
 +		}
  
 -        return true;
 -    }
 +		return true;
 +	}
      @Override
+     @DB
      public SnapshotInfo takeSnapshot(VolumeInfo volume) throws ResourceAllocationException {
          CreateSnapshotPayload payload = (CreateSnapshotPayload)volume.getpayload();
          Long snapshotId = payload.getSnapshotId();
          Account snapshotOwner = payload.getAccount();
          SnapshotInfo snapshot = snapshotFactory.getSnapshot(snapshotId, volume.getDataStore());
-         boolean processed = false;
  
          try {
-             for (SnapshotStrategy strategy : snapshotStrategies) {
-                 if (strategy.canHandle(snapshot)) {
-                     processed = true;
-                     snapshot = strategy.takeSnapshot(snapshot);
-                     break;
-                 }
-             }
-             if (!processed) {
+             SnapshotStrategy snapshotStrategy = _storageStrategyFactory.getSnapshotStrategy(snapshot, SnapshotOperation.TAKE);
+ 
+             if (snapshotStrategy == null) {
                  throw new CloudRuntimeException("Can't find snapshot strategy to deal with snapshot:" + snapshotId);
              }
+ 
+             snapshotStrategy.takeSnapshot(snapshot);
+ 
+             try {
 -                postCreateSnapshot(volume.getId(), snapshotId, payload.getSnapshotPolicyId());
 +            postCreateSnapshot(volume.getId(), snapshotId, payload.getSnapshotPolicyId());
  
 -                UsageEventUtils.publishUsageEvent(EventTypes.EVENT_SNAPSHOT_CREATE, snapshot.getAccountId(),
 -                        snapshot.getDataCenterId(), snapshotId, snapshot.getName(), null, null,
 -                        volume.getSize(), snapshot.getClass().getName(), snapshot.getUuid());
 -                _resourceLimitMgr.incrementResourceCount(snapshotOwner.getId(), ResourceType.snapshot);
 +            UsageEventUtils.publishUsageEvent(EventTypes.EVENT_SNAPSHOT_CREATE, snapshot.getAccountId(),
 +                    snapshot.getDataCenterId(), snapshotId, snapshot.getName(), null, null,
 +                    volume.getSize(), snapshot.getClass().getName(), snapshot.getUuid());
- 
- 
 +            _resourceLimitMgr.incrementResourceCount(snapshotOwner.getId(), ResourceType.snapshot);
- 
+             } catch (Exception e) {
+                 s_logger.debug("post process snapshot failed", e);
+             }
          } catch(Exception e) {
              s_logger.debug("Failed to create snapshot", e);
              if (backup) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/template/TemplateAdapterBase.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/template/TemplateManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/template/TemplateManagerImpl.java
index a1e20b9,50e557a..d40a01f
--- a/server/src/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/com/cloud/template/TemplateManagerImpl.java
@@@ -770,30 -778,43 +778,43 @@@ public class TemplateManagerImpl extend
      }
  
      @Override
+     @DB
      public void evictTemplateFromStoragePool(VMTemplateStoragePoolVO templatePoolVO) {
+         //Need to hold the lock, otherwise, another thread may create a volume from the template at the same time.
+         //Assumption here is that, we will hold the same lock during create volume from template
+         VMTemplateStoragePoolVO templatePoolRef = _tmpltPoolDao.acquireInLockTable(templatePoolVO.getId());
+         if (templatePoolRef == null) {
+            s_logger.debug("can't aquire the lock for template pool ref:" + templatePoolVO.getId());
+            return;
+         }
+ 
+         try {
 -            StoragePool pool = (StoragePool) _dataStoreMgr.getPrimaryDataStore(templatePoolVO.getPoolId());
 -            VMTemplateVO template = _tmpltDao.findByIdIncludingRemoved(templatePoolVO.getTemplateId());
 +        StoragePool pool = (StoragePool) _dataStoreMgr.getPrimaryDataStore(templatePoolVO.getPoolId());
 +        VMTemplateVO template = _tmpltDao.findByIdIncludingRemoved(templatePoolVO.getTemplateId());
  
 -            if (s_logger.isDebugEnabled()) {
 -                s_logger.debug("Evicting " + templatePoolVO);
 -            }
 -            DestroyCommand cmd = new DestroyCommand(pool, templatePoolVO);
 +        if (s_logger.isDebugEnabled()) {
 +            s_logger.debug("Evicting " + templatePoolVO);
 +        }
 +        DestroyCommand cmd = new DestroyCommand(pool, templatePoolVO);
  
 -            try {
 -                Answer answer = _storageMgr.sendToPool(pool, cmd);
 +        try {
 +            Answer answer = _storageMgr.sendToPool(pool, cmd);
  
 -                if (answer != null && answer.getResult()) {
 -                    // Remove the templatePoolVO
 -                    if (_tmpltPoolDao.remove(templatePoolVO.getId())) {
 -                        s_logger.debug("Successfully evicted template: " + template.getName() + " from storage pool: " + pool.getName());
 -                    }
 -                } else {
 -                    s_logger.info("Will retry evicte template: " + template.getName() + " from storage pool: " + pool.getName());
 +            if (answer != null && answer.getResult()) {
 +                // Remove the templatePoolVO
 +                if (_tmpltPoolDao.remove(templatePoolVO.getId())) {
 +                    s_logger.debug("Successfully evicted template: " + template.getName() + " from storage pool: " + pool.getName());
                  }
 -            } catch (StorageUnavailableException e) {
 -                s_logger.info("Storage is unavailable currently.  Will retry evicte template: " + template.getName() + " from storage pool: "
 -                        + pool.getName());
 +            } else {
 +                s_logger.info("Will retry evicte template: " + template.getName() + " from storage pool: " + pool.getName());
              }
 +        } catch (StorageUnavailableException e) {
 +            s_logger.info("Storage is unavailable currently.  Will retry evicte template: " + template.getName() + " from storage pool: "
 +                    + pool.getName());
 +        }
+         } finally {
+             _tmpltPoolDao.releaseFromLockTable(templatePoolRef.getId());
+         }
  
      }
  


[47/50] [abbrv] Merge branch 'master' into rbac.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/configuration/ConfigurationManagerImpl.java
index 0c7374e,e3aa4fa..b7ffbfc
--- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
@@@ -477,15 -473,8 +473,8 @@@ public class ConfigurationManagerImpl e
                  if (pool == null) {
                      throw new InvalidParameterValueException("unable to find storage pool by id " + resourceId);
                  }
-                 StoragePoolDetailVO storagePoolDetailVO = _storagePoolDetailsDao.findDetail(resourceId, name);
-                 if (storagePoolDetailVO == null) {
-                     storagePoolDetailVO = new StoragePoolDetailVO(resourceId, name, value);
-                     _storagePoolDetailsDao.persist(storagePoolDetailVO);
+                 _storagePoolDetailsDao.addDetail(resourceId, name, value);
 -                
 +
-                 } else {
-                     storagePoolDetailVO.setValue(value);
-                     _storagePoolDetailsDao.update(storagePoolDetailVO.getId(), storagePoolDetailVO);
-                 }
                  break;
  
              case Account:
@@@ -1004,50 -991,52 +991,52 @@@
  
          checkIfPodIsDeletable(podId);
  
-         HostPodVO pod = _podDao.findById(podId);
- 
-         txn.start();
+         final HostPodVO pod = _podDao.findById(podId);
  
+         Transaction.execute(new TransactionCallbackNoReturn() {
+             @Override
+             public void doInTransactionWithoutResult(TransactionStatus status) {
 -                // Delete private ip addresses for the pod if there are any
 -                List<DataCenterIpAddressVO> privateIps = _privateIpAddressDao.listByPodIdDcId(Long.valueOf(podId),
 -                        pod.getDataCenterId());
 -                if (!privateIps.isEmpty()) {
 -                    if (!(_privateIpAddressDao.deleteIpAddressByPod(podId))) {
 -                        throw new CloudRuntimeException("Failed to cleanup private ip addresses for pod " + podId);
 -                    }
 -                }
 +        // Delete private ip addresses for the pod if there are any
 +        List<DataCenterIpAddressVO> privateIps = _privateIpAddressDao.listByPodIdDcId(Long.valueOf(podId),
 +                pod.getDataCenterId());
 +        if (!privateIps.isEmpty()) {
 +            if (!(_privateIpAddressDao.deleteIpAddressByPod(podId))) {
 +                throw new CloudRuntimeException("Failed to cleanup private ip addresses for pod " + podId);
 +            }
 +        }
  
 -                // Delete link local ip addresses for the pod
 -                List<DataCenterLinkLocalIpAddressVO> localIps = _LinkLocalIpAllocDao.listByPodIdDcId(podId,
 -                        pod.getDataCenterId());
 -                if (!localIps.isEmpty()) {
 -                    if (!(_LinkLocalIpAllocDao.deleteIpAddressByPod(podId))) {
 -                        throw new CloudRuntimeException("Failed to cleanup private ip addresses for pod " + podId);
 -                    }
 -                }
 +        // Delete link local ip addresses for the pod
 +        List<DataCenterLinkLocalIpAddressVO> localIps = _LinkLocalIpAllocDao.listByPodIdDcId(podId,
 +                pod.getDataCenterId());
 +        if (!localIps.isEmpty()) {
 +            if (!(_LinkLocalIpAllocDao.deleteIpAddressByPod(podId))) {
 +                throw new CloudRuntimeException("Failed to cleanup private ip addresses for pod " + podId);
 +            }
 +        }
  
 -                // Delete vlans associated with the pod
 -                List<? extends Vlan> vlans = _networkModel.listPodVlans(podId);
 -                if (vlans != null && !vlans.isEmpty()) {
 -                    for (Vlan vlan : vlans) {
 -                        _vlanDao.remove(vlan.getId());
 -                    }
 -                }
 +        // Delete vlans associated with the pod
 +        List<? extends Vlan> vlans = _networkModel.listPodVlans(podId);
 +        if (vlans != null && !vlans.isEmpty()) {
 +            for (Vlan vlan : vlans) {
 +                _vlanDao.remove(vlan.getId());
 +            }
 +        }
  
 -                // Delete corresponding capacity records
 -                _capacityDao.removeBy(null, null, podId, null, null);
 +        // Delete corresponding capacity records
 +        _capacityDao.removeBy(null, null, podId, null, null);
  
 -                // Delete the pod
 -                if (!(_podDao.remove(podId))) {
 -                    throw new CloudRuntimeException("Failed to delete pod " + podId);
 -                }
 +        // Delete the pod
 +        if (!(_podDao.remove(podId))) {
 +            throw new CloudRuntimeException("Failed to delete pod " + podId);
 +        }
  
 -                // remove from dedicated resources
 -                DedicatedResourceVO dr = _dedicatedDao.findByPodId(podId);
 -                if (dr != null) {
 -                    _dedicatedDao.remove(dr.getId());
 -                }
 +        // remove from dedicated resources
 +        DedicatedResourceVO dr = _dedicatedDao.findByPodId(podId);
 +        if (dr != null) {
 +            _dedicatedDao.remove(dr.getId());
 +        }
-         txn.commit();
+             }
+         });
  
          return true;
      }
@@@ -1152,54 -1141,68 +1141,68 @@@
          checkPodAttributes(id, name, pod.getDataCenterId(), gateway, cidr, startIp, endIp, allocationStateStr,
                  checkForDuplicates, false);
  
-         Transaction txn = Transaction.currentTxn();
          try {
-             txn.start();
+ 
+             final String[] existingPodIpRangeFinal = existingPodIpRange;
+             final String[] leftRangeToAddFinal = leftRangeToAdd;
+             final String[] rightRangeToAddFinal = rightRangeToAdd;
+             final boolean allowToDownsizeFinal = allowToDownsize;
+             final String allocationStateStrFinal = allocationStateStr;
+             final String startIpFinal = startIp;
+             final String endIpFinal = endIp;
+             final String nameFinal = name;
+             final String gatewayFinal = gateway;
+             Transaction.execute(new TransactionCallbackNoReturn() {
+                 @Override
+                 public void doInTransactionWithoutResult(TransactionStatus status) {
 -                    long zoneId = pod.getDataCenterId();
 +            long zoneId = pod.getDataCenterId();
  
-             if (!allowToDownsize) {
-                 if (leftRangeToAdd != null) {
-                     _zoneDao.addPrivateIpAddress(zoneId, pod.getId(), leftRangeToAdd[0], leftRangeToAdd[1]);
+                     String startIp = startIpFinal;
+                     String endIp = endIpFinal;
+ 
+                     if (!allowToDownsizeFinal) {
+                         if (leftRangeToAddFinal != null) {
+                             _zoneDao.addPrivateIpAddress(zoneId, pod.getId(), leftRangeToAddFinal[0], leftRangeToAddFinal[1]);
 -                        }
 +                }
  
-                 if (rightRangeToAdd != null) {
-                     _zoneDao.addPrivateIpAddress(zoneId, pod.getId(), rightRangeToAdd[0], rightRangeToAdd[1]);
+                         if (rightRangeToAddFinal != null) {
+                             _zoneDao.addPrivateIpAddress(zoneId, pod.getId(), rightRangeToAddFinal[0], rightRangeToAddFinal[1]);
 -                        }
 +                }
  
 -                    } else {
 -                        // delete the old range
 -                        _zoneDao.deletePrivateIpAddressByPod(pod.getId());
 +            } else {
 +                // delete the old range
 +                _zoneDao.deletePrivateIpAddressByPod(pod.getId());
  
 -                        // add the new one
 -                        if (startIp == null) {
 +                // add the new one
 +                if (startIp == null) {
-                     startIp = existingPodIpRange[0];
+                             startIp = existingPodIpRangeFinal[0];
 -                        }
 +                }
  
 -                        if (endIp == null) {
 +                if (endIp == null) {
-                     endIp = existingPodIpRange[1];
+                             endIp = existingPodIpRangeFinal[1];
 -                        }
 +                }
  
 -                        _zoneDao.addPrivateIpAddress(zoneId, pod.getId(), startIp, endIp);
 -                    }
 +                _zoneDao.addPrivateIpAddress(zoneId, pod.getId(), startIp, endIp);
 +            }
  
-             pod.setName(name);
+                     pod.setName(nameFinal);
 -                    pod.setDataCenterId(zoneId);
 +            pod.setDataCenterId(zoneId);
-             pod.setGateway(gateway);
+                     pod.setGateway(gatewayFinal);
 -                    pod.setCidrAddress(getCidrAddress(cidr));
 -                    pod.setCidrSize(getCidrSize(cidr));
 +            pod.setCidrAddress(getCidrAddress(cidr));
 +            pod.setCidrSize(getCidrSize(cidr));
  
 -                    String ipRange = startIp + "-" + endIp;
 -                    pod.setDescription(ipRange);
 -                    Grouping.AllocationState allocationState = null;
 +            String ipRange = startIp + "-" + endIp;
 +            pod.setDescription(ipRange);
 +            Grouping.AllocationState allocationState = null;
-             if (allocationStateStr != null && !allocationStateStr.isEmpty()) {
-                 allocationState = Grouping.AllocationState.valueOf(allocationStateStr);
-                 _capacityDao.updateCapacityState(null, pod.getId(), null, null, allocationStateStr);
+                     if (allocationStateStrFinal != null && !allocationStateStrFinal.isEmpty()) {
+                         allocationState = Grouping.AllocationState.valueOf(allocationStateStrFinal);
+                         _capacityDao.updateCapacityState(null, pod.getId(), null, null, allocationStateStrFinal);
 -                        pod.setAllocationState(allocationState);
 -                    }
 -        
 -                    _podDao.update(id, pod);
 +                pod.setAllocationState(allocationState);
 +            }
 +
 +            _podDao.update(id, pod);
- 
-             txn.commit();
+                 }
+             });
          } catch (Exception e) {
              s_logger.error("Unable to edit pod due to " + e.getMessage(), e);
              throw new CloudRuntimeException("Failed to edit pod. Please contact Cloud Support.");
@@@ -1266,27 -1269,29 +1269,29 @@@
          Grouping.AllocationState allocationState = null;
          if (allocationStateStr != null && !allocationStateStr.isEmpty()) {
              allocationState = Grouping.AllocationState.valueOf(allocationStateStr);
-             pod.setAllocationState(allocationState);
+             podFinal.setAllocationState(allocationState);
          }
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+         final String endIpFinal = endIp;
+         return Transaction.execute(new TransactionCallback<HostPodVO>() {
+             @Override
+             public HostPodVO doInTransaction(TransactionStatus status) {
  
-         pod = _podDao.persist(pod);
+                 HostPodVO pod = _podDao.persist(podFinal);
  
 -                if (startIp != null) {
 +        if (startIp != null) {
-             _zoneDao.addPrivateIpAddress(zoneId, pod.getId(), startIp, endIp);
+                     _zoneDao.addPrivateIpAddress(zoneId, pod.getId(), startIp, endIpFinal);
 -                }
 +        }
  
 -                String[] linkLocalIpRanges = getLinkLocalIPRange();
 -                if (linkLocalIpRanges != null) {
 -                    _zoneDao.addLinkLocalIpAddress(zoneId, pod.getId(), linkLocalIpRanges[0], linkLocalIpRanges[1]);
 -                }
 +        String[] linkLocalIpRanges = getLinkLocalIPRange();
 +        if (linkLocalIpRanges != null) {
 +            _zoneDao.addLinkLocalIpAddress(zoneId, pod.getId(), linkLocalIpRanges[0], linkLocalIpRanges[1]);
 +        }
  
-         txn.commit();
- 
 -                return pod;
 -            }
 +        return pod;
 +    }
+         });
+     }
  
      @DB
      protected void checkIfZoneIsDeletable(long zoneId) {
@@@ -1522,38 -1524,38 +1524,38 @@@
  
          checkIfZoneIsDeletable(zoneId);
  
-         txn.start();
- 
+         return Transaction.execute(new TransactionCallback<Boolean>() {
+             @Override
+             public Boolean doInTransaction(TransactionStatus status) {
 -                // delete vlans for this zone
 -                List<VlanVO> vlans = _vlanDao.listByZone(zoneId);
 -                for (VlanVO vlan : vlans) {
 -                    _vlanDao.remove(vlan.getId());
 -                }
 +        // delete vlans for this zone
 +        List<VlanVO> vlans = _vlanDao.listByZone(zoneId);
 +        for (VlanVO vlan : vlans) {
 +            _vlanDao.remove(vlan.getId());
 +        }
  
-         success = _zoneDao.remove(zoneId);
+                 boolean success = _zoneDao.remove(zoneId);
  
 -                if (success) {
 -                    // delete all capacity records for the zone
 -                    _capacityDao.removeBy(null, zoneId, null, null, null);
 -                    // remove from dedicated resources
 -                    DedicatedResourceVO dr = _dedicatedDao.findByZoneId(zoneId);
 -                    if (dr != null) {
 -                        _dedicatedDao.remove(dr.getId());
 -                        // find the group associated and check if there are any more
 -                        // resources under that group
 -                        List<DedicatedResourceVO> resourcesInGroup = _dedicatedDao.listByAffinityGroupId(dr
 -                                .getAffinityGroupId());
 -                        if (resourcesInGroup.isEmpty()) {
 -                            // delete the group
 -                            _affinityGroupService.deleteAffinityGroup(dr.getAffinityGroupId(), null, null, null);
 -                        }
 -                    }
 +        if (success) {
 +            // delete all capacity records for the zone
 +            _capacityDao.removeBy(null, zoneId, null, null, null);
 +            // remove from dedicated resources
 +            DedicatedResourceVO dr = _dedicatedDao.findByZoneId(zoneId);
 +            if (dr != null) {
 +                _dedicatedDao.remove(dr.getId());
 +                // find the group associated and check if there are any more
 +                // resources under that group
 +                List<DedicatedResourceVO> resourcesInGroup = _dedicatedDao.listByAffinityGroupId(dr
 +                        .getAffinityGroupId());
 +                if (resourcesInGroup.isEmpty()) {
 +                    // delete the group
 +                    _affinityGroupService.deleteAffinityGroup(dr.getAffinityGroupId(), null, null, null);
                  }
 +            }
 +        }
  
-         txn.commit();
- 
 -                return success;
 +        return success;
- 
+             }
+         });
      }
  
      @Override
@@@ -1699,86 -1701,87 +1701,87 @@@
              }
          }
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
- 
+         Transaction.execute(new TransactionCallbackNoReturn() {
+             @Override
+             public void doInTransactionWithoutResult(TransactionStatus status) {
 -                Map<String, String> updatedDetails = new HashMap<String, String>();
 -                _zoneDao.loadDetails(zone);
 -                if (zone.getDetails() != null) {
 -                    updatedDetails.putAll(zone.getDetails());
 -                }
 -                updatedDetails.putAll(newDetails);
 -                zone.setDetails(updatedDetails);
 -        
 -                if (allocationStateStr != null && !allocationStateStr.isEmpty()) {
 -                    Grouping.AllocationState allocationState = Grouping.AllocationState.valueOf(allocationStateStr);
 -        
 -                    if (allocationState == Grouping.AllocationState.Enabled) {
 -                        // check if zone has necessary trafficTypes before enabling
 -                        try {
 -                            PhysicalNetwork mgmtPhyNetwork;
 -                            // zone should have a physical network with management
 -                            // traffiType
 -                            mgmtPhyNetwork = _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId,
 -                                    TrafficType.Management);
 -                            if (NetworkType.Advanced == zone.getNetworkType() && !zone.isSecurityGroupEnabled()) {
 -                                // advanced zone without SG should have a physical
 -                                // network with public Thpe
 -                                _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Public);
 -                            }
 -        
 -                            try {
 -                                _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Storage);
 -                            } catch (InvalidParameterValueException noStorage) {
 -                                PhysicalNetworkTrafficTypeVO mgmtTraffic = _trafficTypeDao.findBy(mgmtPhyNetwork.getId(),
 -                                        TrafficType.Management);
 -                                _networkSvc.addTrafficTypeToPhysicalNetwork(mgmtPhyNetwork.getId(),
 -                                        TrafficType.Storage.toString(), mgmtTraffic.getXenNetworkLabel(),
 -                                        mgmtTraffic.getKvmNetworkLabel(), mgmtTraffic.getVmwareNetworkLabel(),
 -                                        mgmtTraffic.getSimulatorNetworkLabel(), mgmtTraffic.getVlan());
 -                                s_logger.info("No storage traffic type was specified by admin, create default storage traffic on physical network "
 -                                        + mgmtPhyNetwork.getId() + " with same configure of management traffic type");
 -                            }
 -                        } catch (InvalidParameterValueException ex) {
 -                            throw new InvalidParameterValueException("Cannot enable this Zone since: " + ex.getMessage());
 -                        }
 -                    }
 -                    _capacityDao.updateCapacityState(zone.getId(), null, null, null, allocationStateStr);
 -                    zone.setAllocationState(allocationState);
 -                }
 +        Map<String, String> updatedDetails = new HashMap<String, String>();
 +        _zoneDao.loadDetails(zone);
 +        if (zone.getDetails() != null) {
 +            updatedDetails.putAll(zone.getDetails());
 +        }
 +        updatedDetails.putAll(newDetails);
 +        zone.setDetails(updatedDetails);
  
 -                if (dhcpProvider != null) {
 -                    zone.setDhcpProvider(dhcpProvider);
 -                }
 +        if (allocationStateStr != null && !allocationStateStr.isEmpty()) {
 +            Grouping.AllocationState allocationState = Grouping.AllocationState.valueOf(allocationStateStr);
  
 -                // update a private zone to public; not vice versa
 -                if (isPublic != null && isPublic) {
 -                    zone.setDomainId(null);
 -                    zone.setDomain(null);
 -
 -                    // release the dedication for this zone
 -                    DedicatedResourceVO resource = _dedicatedDao.findByZoneId(zoneId);
 -                    Long resourceId = null;
 -                    if (resource != null) {
 -                        resourceId = resource.getId();
 -                        if (!_dedicatedDao.remove(resourceId)) {
 -                            throw new CloudRuntimeException("Failed to delete dedicated Zone Resource " + resourceId);
 -                        }
 -                        // find the group associated and check if there are any more
 -                        // resources under that group
 -                        List<DedicatedResourceVO> resourcesInGroup = _dedicatedDao.listByAffinityGroupId(resource.getAffinityGroupId());
 -                        if (resourcesInGroup.isEmpty()) {
 -                            // delete the group
 -                            _affinityGroupService.deleteAffinityGroup(resource.getAffinityGroupId(), null, null, null);
 -                        }
 +            if (allocationState == Grouping.AllocationState.Enabled) {
 +                // check if zone has necessary trafficTypes before enabling
 +                try {
 +                    PhysicalNetwork mgmtPhyNetwork;
 +                    // zone should have a physical network with management
 +                    // traffiType
 +                    mgmtPhyNetwork = _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId,
 +                            TrafficType.Management);
 +                    if (NetworkType.Advanced == zone.getNetworkType() && !zone.isSecurityGroupEnabled()) {
 +                        // advanced zone without SG should have a physical
 +                        // network with public Thpe
 +                        _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Public);
                      }
 +
 +                    try {
 +                        _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Storage);
 +                    } catch (InvalidParameterValueException noStorage) {
 +                        PhysicalNetworkTrafficTypeVO mgmtTraffic = _trafficTypeDao.findBy(mgmtPhyNetwork.getId(),
 +                                TrafficType.Management);
 +                        _networkSvc.addTrafficTypeToPhysicalNetwork(mgmtPhyNetwork.getId(),
 +                                TrafficType.Storage.toString(), mgmtTraffic.getXenNetworkLabel(),
 +                                mgmtTraffic.getKvmNetworkLabel(), mgmtTraffic.getVmwareNetworkLabel(),
 +                                mgmtTraffic.getSimulatorNetworkLabel(), mgmtTraffic.getVlan());
 +                        s_logger.info("No storage traffic type was specified by admin, create default storage traffic on physical network "
 +                                + mgmtPhyNetwork.getId() + " with same configure of management traffic type");
 +                    }
 +                } catch (InvalidParameterValueException ex) {
 +                    throw new InvalidParameterValueException("Cannot enable this Zone since: " + ex.getMessage());
                  }
 +            }
 +            _capacityDao.updateCapacityState(zone.getId(), null, null, null, allocationStateStr);
 +            zone.setAllocationState(allocationState);
 +        }
  
 -                if (!_zoneDao.update(zoneId, zone)) {
 -                    throw new CloudRuntimeException("Failed to edit zone. Please contact Cloud Support.");
 +        if (dhcpProvider != null) {
 +            zone.setDhcpProvider(dhcpProvider);
 +        }
 +        
 +        // update a private zone to public; not vice versa
 +        if (isPublic != null && isPublic) {
 +            zone.setDomainId(null);
 +            zone.setDomain(null);
 +
 +            // release the dedication for this zone
 +            DedicatedResourceVO resource = _dedicatedDao.findByZoneId(zoneId);
 +            Long resourceId = null;
 +            if (resource != null) {
 +                resourceId = resource.getId();
 +                if (!_dedicatedDao.remove(resourceId)) {
 +                    throw new CloudRuntimeException("Failed to delete dedicated Zone Resource " + resourceId);
                  }
 +                // find the group associated and check if there are any more
 +                // resources under that group
 +                List<DedicatedResourceVO> resourcesInGroup = _dedicatedDao.listByAffinityGroupId(resource.getAffinityGroupId());
 +                if (resourcesInGroup.isEmpty()) {
 +                    // delete the group
 +                    _affinityGroupService.deleteAffinityGroup(resource.getAffinityGroupId(), null, null, null);
 +                }
 +            }
 +        }
 +
 +        if (!_zoneDao.update(zoneId, zone)) {
 +            throw new CloudRuntimeException("Failed to edit zone. Please contact Cloud Support.");
 +        }
+             }
+         });
  
-         txn.commit();
          return zone;
      }
  
@@@ -1810,43 -1813,40 +1813,40 @@@
  
          byte[] bytes = (zoneName + System.currentTimeMillis()).getBytes();
          String zoneToken = UUID.nameUUIDFromBytes(bytes).toString();
-         Transaction txn = Transaction.currentTxn();
-         try {
-             txn.start();
+ 
 -        // Create the new zone in the database
 +            // Create the new zone in the database
-             DataCenterVO zone = new DataCenterVO(zoneName, null, dns1, dns2, internalDns1, internalDns2, guestCidr,
+         final DataCenterVO zoneFinal = new DataCenterVO(zoneName, null, dns1, dns2, internalDns1, internalDns2, guestCidr,
 -                domain, domainId, zoneType, zoneToken, networkDomain, isSecurityGroupEnabled,
 -                isLocalStorageEnabled,
 -                ip6Dns1, ip6Dns2);
 -        if (allocationStateStr != null && !allocationStateStr.isEmpty()) {
 -            Grouping.AllocationState allocationState = Grouping.AllocationState.valueOf(allocationStateStr);
 +                    domain, domainId, zoneType, zoneToken, networkDomain, isSecurityGroupEnabled,
 +                    isLocalStorageEnabled,
 +                    ip6Dns1, ip6Dns2);
 +            if (allocationStateStr != null && !allocationStateStr.isEmpty()) {
 +                Grouping.AllocationState allocationState = Grouping.AllocationState.valueOf(allocationStateStr);
-                 zone.setAllocationState(allocationState);
+             zoneFinal.setAllocationState(allocationState);
 -        } else {
 -            // Zone will be disabled since 3.0. Admin should enable it after
 -            // physical network and providers setup.
 +            } else {
 +                // Zone will be disabled since 3.0. Admin should enable it after
 +                // physical network and providers setup.
-                 zone.setAllocationState(Grouping.AllocationState.Disabled);
+             zoneFinal.setAllocationState(Grouping.AllocationState.Disabled);
 -        }
 +            }
-             zone = _zoneDao.persist(zone);
+ 
+         return Transaction.execute(new TransactionCallback<DataCenterVO>() {
+             @Override
+             public DataCenterVO doInTransaction(TransactionStatus status) {
+                 DataCenterVO zone = _zoneDao.persist(zoneFinal);
 -                if (domainId != null) {
 -                    // zone is explicitly dedicated to this domain
 -                    // create affinity group associated and dedicate the zone.
 -                    AffinityGroup group = createDedicatedAffinityGroup(null, domainId, null);
 -                    DedicatedResourceVO dedicatedResource = new DedicatedResourceVO(zone.getId(), null, null, null,
 -                            domainId, null, group.getId());
 -                    _dedicatedDao.persist(dedicatedResource);
 -                }
 +            if (domainId != null) {
 +                // zone is explicitly dedicated to this domain
 +                // create affinity group associated and dedicate the zone.
 +                AffinityGroup group = createDedicatedAffinityGroup(null, domainId, null);
 +                DedicatedResourceVO dedicatedResource = new DedicatedResourceVO(zone.getId(), null, null, null,
 +                        domainId, null, group.getId());
 +                _dedicatedDao.persist(dedicatedResource);
 +            }
  
 -                // Create default system networks
 -                createDefaultSystemNetworks(zone.getId());
 +            // Create default system networks
 +            createDefaultSystemNetworks(zone.getId());
-             txn.commit();
+ 
 -                return zone;
 -            }
 +            return zone;
-         } catch (Exception ex) {
-             txn.rollback();
-             s_logger.warn("Exception: ", ex);
-             throw new CloudRuntimeException("Fail to create a network");
-         } finally {
-             txn.close();
 +        }
+         });
      }
  
      private AffinityGroup createDedicatedAffinityGroup(String affinityGroupName, Long domainId, Long accountId) {
@@@ -2658,32 -2668,44 +2668,44 @@@
          if (ipv4) {
              checkOverlapPrivateIpRange(zoneId, startIP, endIP);
          }
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+ 
+         return commitVlan(zoneId, podId, startIP, endIP, newVlanGateway, newVlanNetmask, vlanId,
+                 forVirtualNetwork, networkId, physicalNetworkId, startIPv6, endIPv6, ip6Gateway, ip6Cidr, vlanOwner,
+                 network, sameSubnet);
+     }
+ 
+     private Vlan commitVlan(final Long zoneId, final Long podId, final String startIP, final String endIP, final String newVlanGatewayFinal,
+             final String newVlanNetmaskFinal, final String vlanId, final Boolean forVirtualNetwork, final Long networkId, final Long physicalNetworkId,
+             final String startIPv6, final String endIPv6, final String ip6Gateway, final String ip6Cidr, final Account vlanOwner, final Network network,
+             final Pair<Boolean, Pair<String, String>> sameSubnet) {
+         return Transaction.execute(new TransactionCallback<Vlan>() {
+             @Override
+             public Vlan doInTransaction(TransactionStatus status) {
+                 String newVlanNetmask = newVlanNetmaskFinal;
+                 String newVlanGateway = newVlanGatewayFinal;
 -                
 -                if ((sameSubnet == null || sameSubnet.first() == false) && (network.getTrafficType()== TrafficType.Guest) && (network.getGuestType() == GuestType.Shared) && (_vlanDao.listVlansByNetworkId(networkId) != null)) {
 -                    Map<Capability, String> dhcpCapabilities = _networkSvc.getNetworkOfferingServiceCapabilities(_networkOfferingDao.findById(network.getNetworkOfferingId()), Service.Dhcp);
 -                    String supportsMultipleSubnets = dhcpCapabilities.get(Capability.DhcpAccrossMultipleSubnets);
 -                    if (supportsMultipleSubnets == null || !Boolean.valueOf(supportsMultipleSubnets)) {
 -                               throw new  InvalidParameterValueException("The Dhcp serivice provider for this network dose not support the dhcp  across multiple subnets");
 -                    }
 -                    s_logger.info("adding a new subnet to the network " + network.getId());
 -                } else if (sameSubnet != null)  {
 -                    // if it is same subnet the user might not send the vlan and the
 -                    // netmask details. so we are
 -                    // figuring out while validation and setting them here.
 -                    newVlanGateway = sameSubnet.second().first();
 -                    newVlanNetmask = sameSubnet.second().second();
 -                }
 -                Vlan vlan = createVlanAndPublicIpRange(zoneId, networkId, physicalNetworkId, forVirtualNetwork, podId, startIP,
 -                        endIP, newVlanGateway, newVlanNetmask, vlanId, vlanOwner, startIPv6, endIPv6, ip6Gateway, ip6Cidr);
 -                // create an entry in the nic_secondary table. This will be the new
 -                // gateway that will be configured on the corresponding routervm.
 -                return vlan;
 -            }
 +
 +        if ((sameSubnet == null || sameSubnet.first() == false) && (network.getTrafficType()== TrafficType.Guest) && (network.getGuestType() == GuestType.Shared) && (_vlanDao.listVlansByNetworkId(networkId) != null)) {
 +            Map<Capability, String> dhcpCapabilities = _networkSvc.getNetworkOfferingServiceCapabilities(_networkOfferingDao.findById(network.getNetworkOfferingId()), Service.Dhcp);
 +            String supportsMultipleSubnets = dhcpCapabilities.get(Capability.DhcpAccrossMultipleSubnets);
 +            if (supportsMultipleSubnets == null || !Boolean.valueOf(supportsMultipleSubnets)) {
 +                       throw new  InvalidParameterValueException("The Dhcp serivice provider for this network dose not support the dhcp  across multiple subnets");
 +            }
 +            s_logger.info("adding a new subnet to the network " + network.getId());
 +        } else if (sameSubnet != null)  {
 +            // if it is same subnet the user might not send the vlan and the
 +            // netmask details. so we are
 +            // figuring out while validation and setting them here.
 +            newVlanGateway = sameSubnet.second().first();
 +            newVlanNetmask = sameSubnet.second().second();
 +        }
 +        Vlan vlan = createVlanAndPublicIpRange(zoneId, networkId, physicalNetworkId, forVirtualNetwork, podId, startIP,
 +                endIP, newVlanGateway, newVlanNetmask, vlanId, vlanOwner, startIPv6, endIPv6, ip6Gateway, ip6Cidr);
 +        // create an entry in the nic_secondary table. This will be the new
 +        // gateway that will be configured on the corresponding routervm.
- 
-         txn.commit();
- 
 +        return vlan;
 +    }
+         });
+     }
  
      public NetUtils.supersetOrSubset checkIfSubsetOrSuperset(String newVlanGateway, String newVlanNetmask, VlanVO vlan, String startIP,
              String endIP) {
@@@ -3010,48 -3039,58 +3039,58 @@@
          }
  
          // Everything was fine, so persist the VLAN
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+         VlanVO vlan = commitVlanAndIpRange(zoneId, networkId, physicalNetworkId, podId, startIP, endIP, vlanGateway,
+                 vlanNetmask, vlanId, vlanOwner, vlanIp6Gateway, vlanIp6Cidr, ipv4, zone, vlanType, ipv6Range, ipRange);
  
+         return vlan;
+     }
+ 
+     private VlanVO commitVlanAndIpRange(final long zoneId, final long networkId, final long physicalNetworkId, final Long podId,
+             final String startIP, final String endIP, final String vlanGateway, final String vlanNetmask, final String vlanId, final Account vlanOwner,
+             final String vlanIp6Gateway, final String vlanIp6Cidr, final boolean ipv4, final DataCenterVO zone, final VlanType vlanType,
+             final String ipv6Range, final String ipRange) {
+         return Transaction.execute(new TransactionCallback<VlanVO>() {
+             @Override
+             public VlanVO doInTransaction(TransactionStatus status) {
 -                VlanVO vlan = new VlanVO(vlanType, vlanId, vlanGateway, vlanNetmask, zone.getId(), ipRange, networkId,
 -                        physicalNetworkId, vlanIp6Gateway, vlanIp6Cidr, ipv6Range);
 -                s_logger.debug("Saving vlan range " + vlan);
 -                vlan = _vlanDao.persist(vlan);
 +        VlanVO vlan = new VlanVO(vlanType, vlanId, vlanGateway, vlanNetmask, zone.getId(), ipRange, networkId,
 +                physicalNetworkId, vlanIp6Gateway, vlanIp6Cidr, ipv6Range);
 +        s_logger.debug("Saving vlan range " + vlan);
 +        vlan = _vlanDao.persist(vlan);
  
 -                // IPv6 use a used ip map, is different from ipv4, no need to save
 -                // public ip range
 -                if (ipv4) {
 -                    if (!savePublicIPRange(startIP, endIP, zoneId, vlan.getId(), networkId, physicalNetworkId)) {
 -                        throw new CloudRuntimeException("Failed to save IPv4 range. Please contact Cloud Support.");
 -                    }
 -                }
 +        // IPv6 use a used ip map, is different from ipv4, no need to save
 +        // public ip range
 +        if (ipv4) {
 +            if (!savePublicIPRange(startIP, endIP, zoneId, vlan.getId(), networkId, physicalNetworkId)) {
 +                throw new CloudRuntimeException("Failed to save IPv4 range. Please contact Cloud Support.");
 +            }
 +        }
  
 -                if (vlanOwner != null) {
 -                    // This VLAN is account-specific, so create an AccountVlanMapVO
 -                    // entry
 -                    AccountVlanMapVO accountVlanMapVO = new AccountVlanMapVO(vlanOwner.getId(), vlan.getId());
 -                    _accountVlanMapDao.persist(accountVlanMapVO);
 +        if (vlanOwner != null) {
 +            // This VLAN is account-specific, so create an AccountVlanMapVO
 +            // entry
 +            AccountVlanMapVO accountVlanMapVO = new AccountVlanMapVO(vlanOwner.getId(), vlan.getId());
 +            _accountVlanMapDao.persist(accountVlanMapVO);
  
 -                    // generate usage event for dedication of every ip address in the
 -                    // range
 -                    List<IPAddressVO> ips = _publicIpAddressDao.listByVlanId(vlan.getId());
 -                    for (IPAddressVO ip : ips) {
 -                        UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NET_IP_ASSIGN, vlanOwner.getId(), ip
 -                                .getDataCenterId(), ip.getId(), ip.getAddress().toString(), ip.isSourceNat(), vlan
 -                                .getVlanType().toString(), ip.getSystem(), ip.getClass().getName(), ip.getUuid());
 -                    }
 -                    // increment resource count for dedicated public ip's
 -                    _resourceLimitMgr.incrementResourceCount(vlanOwner.getId(), ResourceType.public_ip, new Long(ips.size()));
 -                } else if (podId != null) {
 -                    // This VLAN is pod-wide, so create a PodVlanMapVO entry
 -                    PodVlanMapVO podVlanMapVO = new PodVlanMapVO(podId, vlan.getId());
 -                    _podVlanMapDao.persist(podVlanMapVO);
 -                }
 -                return vlan;
 +            // generate usage event for dedication of every ip address in the
 +            // range
 +            List<IPAddressVO> ips = _publicIpAddressDao.listByVlanId(vlan.getId());
 +            for (IPAddressVO ip : ips) {
 +                UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NET_IP_ASSIGN, vlanOwner.getId(), ip
 +                        .getDataCenterId(), ip.getId(), ip.getAddress().toString(), ip.isSourceNat(), vlan
 +                        .getVlanType().toString(), ip.getSystem(), ip.getClass().getName(), ip.getUuid());
              }
 +            // increment resource count for dedicated public ip's
 +            _resourceLimitMgr.incrementResourceCount(vlanOwner.getId(), ResourceType.public_ip, new Long(ips.size()));
 +        } else if (podId != null) {
 +            // This VLAN is pod-wide, so create a PodVlanMapVO entry
 +            PodVlanMapVO podVlanMapVO = new PodVlanMapVO(podId, vlan.getId());
 +            _podVlanMapDao.persist(podVlanMapVO);
 +        }
- 
-         txn.commit();
- 
 +        return vlan;
 +    }
+         });
+ 
+     }
  
      @Override
      @DB
@@@ -3142,12 -3181,13 +3181,13 @@@
              }
          }
  
- 
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+         Transaction.execute(new TransactionCallbackNoReturn() {
+             @Override
+             public void doInTransactionWithoutResult(TransactionStatus status) {
 -                _publicIpAddressDao.deletePublicIPRange(vlanDbId);
 -                _vlanDao.expunge(vlanDbId);
 +        _publicIpAddressDao.deletePublicIPRange(vlanDbId);
 +        _vlanDao.expunge(vlanDbId);
-         txn.commit();
+             }
+         });
  
          return true;
      }
@@@ -3328,16 -3363,20 +3363,20 @@@
      }
  
      @DB
-     protected boolean savePublicIPRange(String startIP, String endIP, long zoneId, long vlanDbId, long sourceNetworkid,
-             long physicalNetworkId) {
-         long startIPLong = NetUtils.ip2Long(startIP);
-         long endIPLong = NetUtils.ip2Long(endIP);
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+     protected boolean savePublicIPRange(String startIP, String endIP, final long zoneId, final long vlanDbId, final long sourceNetworkid,
+             final long physicalNetworkId) {
+         final long startIPLong = NetUtils.ip2Long(startIP);
+         final long endIPLong = NetUtils.ip2Long(endIP);
+ 
+         List<String> problemIps = Transaction.execute(new TransactionCallback<List<String>>() {
+             @Override
+             public List<String> doInTransaction(TransactionStatus status) {
 -                IPRangeConfig config = new IPRangeConfig();
 +        IPRangeConfig config = new IPRangeConfig();
-         List<String> problemIps = config.savePublicIPRange(txn, startIPLong, endIPLong, zoneId, vlanDbId,
+                 return config.savePublicIPRange(TransactionLegacy.currentTxn(), startIPLong, endIPLong, zoneId, vlanDbId,
 -                        sourceNetworkid, physicalNetworkId);
 +                sourceNetworkid, physicalNetworkId);
-         txn.commit();
+             }
+         });
+ 
          return problemIps != null && problemIps.size() == 0;
      }
  
@@@ -3956,13 -4004,13 +4004,13 @@@
                              + Capability.AssociatePublicIP.getName()
                              + " capabilitiy can be sepcified for static nat service");
                  }
-                 if (eipDisabled && associatePublicIP) {
+             }
+             if ((! eipEnabled) && associatePublicIP) {
 -                throw new InvalidParameterValueException("Capability " + Capability.AssociatePublicIP.getName()
 -                        + " can only be set when capability " + Capability.ElasticIp.getName() + " is true");
 +                    throw new InvalidParameterValueException("Capability " + Capability.AssociatePublicIP.getName()
 +                            + " can only be set when capability " + Capability.ElasticIp.getName() + " is true");
 +                }
              }
          }
--    }
  
      @Override
      @DB
@@@ -4125,47 -4173,51 +4173,51 @@@
              validateNtwkOffDetails(details, serviceProviderMap);
          }
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+         return Transaction.execute(new TransactionCallback<NetworkOfferingVO>() {
+             @Override
+             public NetworkOfferingVO doInTransaction(TransactionStatus status) {
+                 NetworkOfferingVO offering = offeringFinal;
+ 
 -                // 1) create network offering object
 -                s_logger.debug("Adding network offering " + offering);
 -                offering.setConcurrentConnections(maxconn);
 +        // 1) create network offering object
 +        s_logger.debug("Adding network offering " + offering);
 +        offering.setConcurrentConnections(maxconn);
+                 offering.setKeepAliveEnabled(enableKeepAlive);
 -                offering = _networkOfferingDao.persist(offering, details);
 -                // 2) populate services and providers
 -                if (serviceProviderMap != null) {
 -                    for (Network.Service service : serviceProviderMap.keySet()) {
 -                        Set<Provider> providers = serviceProviderMap.get(service);
 -                        if (providers != null && !providers.isEmpty()) {
 -                            boolean vpcOff = false;
 -                            for (Network.Provider provider : providers) {
 -                                if (provider == Provider.VPCVirtualRouter) {
 -                                    vpcOff = true;
 -                                }
 -                                NetworkOfferingServiceMapVO offService = new NetworkOfferingServiceMapVO(offering.getId(),
 -                                        service, provider);
 -                                _ntwkOffServiceMapDao.persist(offService);
 -                                s_logger.trace("Added service for the network offering: " + offService + " with provider "
 -                                        + provider.getName());
 -                            }
 -
 -                            if (vpcOff) {
 -                                List<Service> supportedSvcs = new ArrayList<Service>();
 -                                supportedSvcs.addAll(serviceProviderMap.keySet());
 -                                _vpcMgr.validateNtwkOffForVpc(offering, supportedSvcs);
 -                            }
 -                        } else {
 -                            NetworkOfferingServiceMapVO offService = new NetworkOfferingServiceMapVO(offering.getId(), service,
 -                                    null);
 -                            _ntwkOffServiceMapDao.persist(offService);
 -                            s_logger.trace("Added service for the network offering: " + offService + " with null provider");
 +        offering = _networkOfferingDao.persist(offering, details);
 +        // 2) populate services and providers
 +        if (serviceProviderMap != null) {
 +            for (Network.Service service : serviceProviderMap.keySet()) {
 +                Set<Provider> providers = serviceProviderMap.get(service);
 +                if (providers != null && !providers.isEmpty()) {
 +                    boolean vpcOff = false;
 +                    for (Network.Provider provider : providers) {
 +                        if (provider == Provider.VPCVirtualRouter) {
 +                            vpcOff = true;
                          }
 +                        NetworkOfferingServiceMapVO offService = new NetworkOfferingServiceMapVO(offering.getId(),
 +                                service, provider);
 +                        _ntwkOffServiceMapDao.persist(offService);
 +                        s_logger.trace("Added service for the network offering: " + offService + " with provider "
 +                                + provider.getName());
                      }
 -                }
  
 -                return offering;
 +                    if (vpcOff) {
 +                        List<Service> supportedSvcs = new ArrayList<Service>();
 +                        supportedSvcs.addAll(serviceProviderMap.keySet());
 +                        _vpcMgr.validateNtwkOffForVpc(offering, supportedSvcs);
 +                    }
 +                } else {
 +                    NetworkOfferingServiceMapVO offService = new NetworkOfferingServiceMapVO(offering.getId(), service,
 +                            null);
 +                    _ntwkOffServiceMapDao.persist(offService);
 +                    s_logger.trace("Added service for the network offering: " + offService + " with null provider");
 +                }
              }
 +        }
 +
-         txn.commit();
- 
 +        return offering;
 +    }
+         });
+     }
  
      protected void validateNtwkOffDetails(Map<Detail, String> details, Map<Service, Set<Provider>> serviceProviderMap) {
          for (Detail detail : details.keySet()) {
@@@ -4691,22 -4743,24 +4743,24 @@@
  
      @Override
      @DB
-     public boolean releaseAccountSpecificVirtualRanges(long accountId) {
-         List<AccountVlanMapVO> maps = _accountVlanMapDao.listAccountVlanMapsByAccount(accountId);
-         boolean result = true;
+     public boolean releaseAccountSpecificVirtualRanges(final long accountId) {
+         final List<AccountVlanMapVO> maps = _accountVlanMapDao.listAccountVlanMapsByAccount(accountId);
          if (maps != null && !maps.isEmpty()) {
-             Transaction txn = Transaction.currentTxn();
-             txn.start();
+             try {
+                 Transaction.execute(new TransactionCallbackNoReturn() {
+                     @Override
+                     public void doInTransactionWithoutResult(TransactionStatus status) {
 -                        for (AccountVlanMapVO map : maps) {
 -                            if (!releasePublicIpRange(map.getVlanDbId(), _accountMgr.getSystemUser().getId(),
 -                                    _accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM))) {
 +            for (AccountVlanMapVO map : maps) {
 +                if (!releasePublicIpRange(map.getVlanDbId(), _accountMgr.getSystemUser().getId(),
 +                        _accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM))) {
-                     result = false;
+                                 throw new CloudRuntimeException("Failed to release account specific virtual ip ranges for account id=" + accountId);
 -                            }
 -                        }
 +                }
 +            }
-             if (result) {
-                 txn.commit();
-             } else {
-                 s_logger.error("Failed to release account specific virtual ip ranges for account id=" + accountId);
+                     }
+                 });
+             } catch ( CloudRuntimeException e ) {
+                 s_logger.error(e);
+                 return false;
              }
          } else {
              s_logger.trace("Account id=" + accountId + " has no account specific virtual ip ranges, nothing to release");
@@@ -4833,29 -4889,34 +4889,34 @@@
          }
          GlobalLock portableIpLock = GlobalLock.getInternLock("PortablePublicIpRange");
          portableIpLock.lock(5);
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
- 
-         PortableIpRangeVO portableIpRange = new PortableIpRangeVO(regionId, vlanId, gateway, netmask, startIP, endIP);
+         try {
+             final String vlanIdFinal = vlanId;
+             return Transaction.execute(new TransactionCallback<PortableIpRangeVO>() {
+                 @Override
+                 public PortableIpRangeVO doInTransaction(TransactionStatus status) {
+                     PortableIpRangeVO portableIpRange = new PortableIpRangeVO(regionId, vlanIdFinal, gateway, netmask, startIP, endIP);
 -                    portableIpRange = _portableIpRangeDao.persist(portableIpRange);
 +        portableIpRange = _portableIpRangeDao.persist(portableIpRange);
  
 -                    long startIpLong = NetUtils.ip2Long(startIP);
 -                    long endIpLong = NetUtils.ip2Long(endIP);
 -                    while (startIpLong <= endIpLong) {
 +        long startIpLong = NetUtils.ip2Long(startIP);
 +        long endIpLong = NetUtils.ip2Long(endIP);
 +        while (startIpLong <= endIpLong) {
-             PortableIpVO portableIP = new PortableIpVO(regionId, portableIpRange.getId(), vlanId, gateway, netmask,
+                         PortableIpVO portableIP = new PortableIpVO(regionId, portableIpRange.getId(), vlanIdFinal, gateway, netmask,
 -                                NetUtils.long2Ip(startIpLong));
 -                        _portableIpDao.persist(portableIP);
 -                        startIpLong++;
 -                    }
 +                    NetUtils.long2Ip(startIpLong));
 +            _portableIpDao.persist(portableIP);
 +            startIpLong++;
 +        }
  
 -                    // implicitly enable portable IP service for the region
 -                    region.setPortableipEnabled(true);
 -                    _regionDao.update(region.getId(), region);
 -                    
 -                    return portableIpRange;
 -                }
 +        // implicitly enable portable IP service for the region
 +        region.setPortableipEnabled(true);
 +        _regionDao.update(region.getId(), region);
 +
-         txn.commit();
-         portableIpLock.unlock();
 +        return portableIpRange;
 +    }
+             });
+         } finally {
+             portableIpLock.unlock();
+         }
+     }
  
      @Override
      @DB

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
index e1d5cb1,e79e8e3..719f209
--- a/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
+++ b/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
@@@ -562,36 -565,35 +565,35 @@@ public class DeploymentPlanningManagerI
                      return false;
                  }
              } else {
+                 final PlannerResourceUsage hostResourceTypeFinal = hostResourceType;
                  // reserve the host for required resourceType
                  // let us lock the reservation entry before updating.
-                 final Transaction txn = Transaction.currentTxn();
- 
-                 try {
-                     txn.start();
- 
+                 return Transaction.execute(new TransactionCallback<Boolean>() {
+                     @Override
+                     public Boolean doInTransaction(TransactionStatus status) {
 -                        final PlannerHostReservationVO lockedEntry = _plannerHostReserveDao.lockRow(id, true);
 -                        if (lockedEntry == null) {
 -                            s_logger.error("Unable to lock the host entry for reservation, host: " + hostId);
 -                            return false;
 -                        }
 -                        // check before updating
 -                        if (lockedEntry.getResourceUsage() == null) {
 -                            lockedEntry.setResourceUsage(resourceUsageRequired);
 -                            _plannerHostReserveDao.persist(lockedEntry);
 +                    final PlannerHostReservationVO lockedEntry = _plannerHostReserveDao.lockRow(id, true);
 +                    if (lockedEntry == null) {
 +                        s_logger.error("Unable to lock the host entry for reservation, host: " + hostId);
 +                        return false;
 +                    }
 +                    // check before updating
 +                    if (lockedEntry.getResourceUsage() == null) {
 +                        lockedEntry.setResourceUsage(resourceUsageRequired);
 +                        _plannerHostReserveDao.persist(lockedEntry);
 +                        return true;
 +                    } else {
 +                        // someone updated it earlier. check if we can still use it
 +                        if (lockedEntry.getResourceUsage() == resourceUsageRequired) {
                              return true;
                          } else {
 -                            // someone updated it earlier. check if we can still use it
 -                            if (lockedEntry.getResourceUsage() == resourceUsageRequired) {
 -                                return true;
 -                            } else {
 -                                s_logger.debug("Cannot use this host for usage: " + resourceUsageRequired
 +                            s_logger.debug("Cannot use this host for usage: " + resourceUsageRequired
-                                     + ", since this host has been reserved for planner usage : " + hostResourceType);
+                                         + ", since this host has been reserved for planner usage : " + hostResourceTypeFinal);
 -                                return false;
 -                            }
 +                            return false;
                          }
                      }
-                 } finally {
-                     txn.commit();
 +                }
+                 });
+ 
              }
  
          }
@@@ -662,26 -664,26 +664,26 @@@
                      s_logger.debug("Host has no VMs associated, releasing the planner reservation for host " + hostId);
                  }
  
-                 long id = reservationEntry.getId();
-                 final Transaction txn = Transaction.currentTxn();
- 
-                 try {
-                     txn.start();
+                 final long id = reservationEntry.getId();
  
+                 return Transaction.execute(new TransactionCallback<Boolean>() {
+                     @Override
+                     public Boolean doInTransaction(TransactionStatus status) {
 -                        final PlannerHostReservationVO lockedEntry = _plannerHostReserveDao.lockRow(id, true);
 -                        if (lockedEntry == null) {
 -                            s_logger.error("Unable to lock the host entry for reservation, host: " + hostId);
 -                            return false;
 -                        }
 -                        // check before updating
 -                        if (lockedEntry.getResourceUsage() != null) {
 -                            lockedEntry.setResourceUsage(null);
 -                            _plannerHostReserveDao.persist(lockedEntry);
 -                            return true;
 -                        }
 -
 +                    final PlannerHostReservationVO lockedEntry = _plannerHostReserveDao.lockRow(id, true);
 +                    if (lockedEntry == null) {
 +                        s_logger.error("Unable to lock the host entry for reservation, host: " + hostId);
                          return false;
                      }
 +                    // check before updating
 +                    if (lockedEntry.getResourceUsage() != null) {
 +                        lockedEntry.setResourceUsage(null);
 +                        _plannerHostReserveDao.persist(lockedEntry);
 +                        return true;
 +                    }
-                 } finally {
-                     txn.commit();
++
++                        return false;
 +                }
+                 });
              }
  
          }
@@@ -935,12 -938,32 +938,32 @@@
              }
          }
  
+         // Cluster can be put in avoid set in following scenarios:
+         // 1. If storage allocators haven't put any pools in avoid set means either no pools in cluster 
+         // or pools not suitable for the allocators to handle.
+         // 2. If all 'shared' or 'local' pools are in avoid set
+         if  (allocatorAvoidOutput.getPoolsToAvoid() != null && !allocatorAvoidOutput.getPoolsToAvoid().isEmpty()) {
+             // check shared pools
 -            List<StoragePoolVO> allPoolsInCluster = _storagePoolDao.findPoolsByTags(clusterVO.getDataCenterId(),
 -                    clusterVO.getPodId(), clusterVO.getId(), null);
 -            for (StoragePoolVO pool : allPoolsInCluster) {
 -                if (!allocatorAvoidOutput.shouldAvoid(pool)) {
 -                    // there's some pool in the cluster that is not yet in avoid set
 -                    avoidAllPools = false;
 +        List<StoragePoolVO> allPoolsInCluster = _storagePoolDao.findPoolsByTags(clusterVO.getDataCenterId(),
 +                clusterVO.getPodId(), clusterVO.getId(), null);
 +        for (StoragePoolVO pool : allPoolsInCluster) {
 +            if (!allocatorAvoidOutput.shouldAvoid(pool)) {
 +                // there's some pool in the cluster that is not yet in avoid set
 +                avoidAllPools = false;
+                     break;
+                 }
+             }
+             if (avoidAllPools) {
+                 // check local pools
+                 List<StoragePoolVO> allLocalPoolsInCluster = _storagePoolDao.findLocalStoragePoolsByTags(clusterVO.getDataCenterId(),
+                         clusterVO.getPodId(), clusterVO.getId(), null);
+                 for (StoragePoolVO pool : allLocalPoolsInCluster) {
+                     if (!allocatorAvoidOutput.shouldAvoid(pool)) {
+                         // there's some pool in the cluster that is not yet in avoid set
+                         avoidAllPools = false;
+                         break;
+                     }
+                 }
              }
          }
  
@@@ -1230,51 -1253,52 +1253,52 @@@
  
      @DB
      @Override
-     public String finalizeReservation(DeployDestination plannedDestination,
-             VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoids)
+     public String finalizeReservation(final DeployDestination plannedDestination,
+             final VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoids)
              throws InsufficientServerCapacityException, AffinityConflictException {
  
-         VirtualMachine vm = vmProfile.getVirtualMachine();
-         long vmGroupCount = _affinityGroupVMMapDao.countAffinityGroupsForVm(vm.getId());
+         final VirtualMachine vm = vmProfile.getVirtualMachine();
+         final long vmGroupCount = _affinityGroupVMMapDao.countAffinityGroupsForVm(vm.getId());
  
+         return Transaction.execute(new TransactionCallback<String>() {
+             @Override
+             public String doInTransaction(TransactionStatus status) {
 -                boolean saveReservation = true;
 -
 -                if (vmGroupCount > 0) {
 -                    List<Long> groupIds = _affinityGroupVMMapDao.listAffinityGroupIdsByVmId(vm.getId());
 -                    SearchCriteria<AffinityGroupVO> criteria = _affinityGroupDao.createSearchCriteria();
 -                    criteria.addAnd("id", SearchCriteria.Op.IN, groupIds.toArray(new Object[groupIds.size()]));
 -                    List<AffinityGroupVO> groups = _affinityGroupDao.lockRows(criteria, null, true);
 -
 -                    for (AffinityGroupProcessor processor : _affinityProcessors) {
 -                        if (!processor.check(vmProfile, plannedDestination)) {
 -                            saveReservation = false;
 -                            break;
 -                        }
 +        boolean saveReservation = true;
-         final Transaction txn = Transaction.currentTxn();
-         try {
-             txn.start();
++
 +            if (vmGroupCount > 0) {
 +                List<Long> groupIds = _affinityGroupVMMapDao.listAffinityGroupIdsByVmId(vm.getId());
 +                SearchCriteria<AffinityGroupVO> criteria = _affinityGroupDao.createSearchCriteria();
 +                criteria.addAnd("id", SearchCriteria.Op.IN, groupIds.toArray(new Object[groupIds.size()]));
 +                List<AffinityGroupVO> groups = _affinityGroupDao.lockRows(criteria, null, true);
 +
 +                for (AffinityGroupProcessor processor : _affinityProcessors) {
 +                    if (!processor.check(vmProfile, plannedDestination)) {
 +                        saveReservation = false;
 +                        break;
                      }
                  }
 +            }
  
 -                if (saveReservation) {
 -                    VMReservationVO vmReservation = new VMReservationVO(vm.getId(), plannedDestination.getDataCenter()
 -                            .getId(), plannedDestination.getPod().getId(), plannedDestination.getCluster().getId(),
 -                            plannedDestination.getHost().getId());
 -                    Map<Long, Long> volumeReservationMap = new HashMap<Long, Long>();
 +            if (saveReservation) {
 +                VMReservationVO vmReservation = new VMReservationVO(vm.getId(), plannedDestination.getDataCenter()
 +                        .getId(), plannedDestination.getPod().getId(), plannedDestination.getCluster().getId(),
 +                        plannedDestination.getHost().getId());
 +                Map<Long, Long> volumeReservationMap = new HashMap<Long, Long>();
  
 -                    if (vm.getHypervisorType() != HypervisorType.BareMetal) {
 -                        for (Volume vo : plannedDestination.getStorageForDisks().keySet()) {
 -                            volumeReservationMap.put(vo.getId(), plannedDestination.getStorageForDisks().get(vo).getId());
 -                        }
 -                        vmReservation.setVolumeReservation(volumeReservationMap);
 +                if (vm.getHypervisorType() != HypervisorType.BareMetal) {
 +                    for (Volume vo : plannedDestination.getStorageForDisks().keySet()) {
 +                        volumeReservationMap.put(vo.getId(), plannedDestination.getStorageForDisks().get(vo).getId());
                      }
 -                    _reservationDao.persist(vmReservation);
 -                    return vmReservation.getUuid();
 +                    vmReservation.setVolumeReservation(volumeReservationMap);
                  }
 -
 -                return null;
 +                _reservationDao.persist(vmReservation);
 +                return vmReservation.getUuid();
              }
-         } finally {
-             txn.commit();
-         }
++
 +        return null;
 +    }
+         });
+     }
  
      @Override
      public boolean preStateTransitionEvent(State oldState, Event event, State newState, VirtualMachine vo,


[13/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
CLOUDSTACK-4772: modify the script to get_process_status for vmware deployment

Signed-off-by: SrikanteswaraRao Talluri <ta...@apache.org>


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

Branch: refs/heads/rbac
Commit: 3223fcf672d0bf4cadc6cdfa1b92dbe04cad11f1
Parents: f1683d0
Author: SrikanteswaraRao Talluri <ta...@apache.org>
Authored: Wed Oct 30 01:40:33 2013 +0530
Committer: SrikanteswaraRao Talluri <ta...@apache.org>
Committed: Wed Oct 30 01:46:26 2013 +0530

----------------------------------------------------------------------
 test/integration/component/test_routers.py | 54 ++++++++++++++++---------
 test/integration/smoke/test_routers.py     | 15 +++----
 2 files changed, 42 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3223fcf6/test/integration/component/test_routers.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_routers.py b/test/integration/component/test_routers.py
index 396c54e..8706a1e 100644
--- a/test/integration/component/test_routers.py
+++ b/test/integration/component/test_routers.py
@@ -1110,7 +1110,7 @@ class TestRouterStopCreateFW(cloudstackTestCase):
         self.cleanup = []
         return
 
-    @attr(tags = ["advanced", "advancedns"])
+    @attr(tags = ["advanced", "advancedns","test"])
     def test_01_RouterStopCreateFW(self):
         """Test router stop create Firewall rule
         """
@@ -1249,25 +1249,39 @@ class TestRouterStopCreateFW(cloudstackTestCase):
                         "Check for list hosts response return valid data"
                         )
         host = hosts[0]
+        host.user, host.passwd = get_host_credentials(self.config, host.ipaddress)
+
         # For DNS and DHCP check 'dnsmasq' process status
-        try:
-            host.user, host.passwd = get_host_credentials(self.config, host.ipaddress)
-            result = get_process_status(
-                host.ipaddress,
-                22,
-                host.user,
-                host.passwd,
-                router.linklocalip,
-                'iptables -t nat -L'
-            )
-            self.debug("iptables -t nat -L: %s" % result)
-            self.debug("Public IP: %s" % public_ip.ipaddress)
-            res = str(result)
-            self.assertEqual(
-                res.count(str(public_ip.ipaddress)),
-                1,
-                "Check public IP address"
+        if self.apiclient.hypervisor.lower() == 'vmware':
+               result = get_process_status(
+                               self.apiclient.connection.mgtSvr,
+                               22,
+                               self.apiclient.connection.user,
+                               self.apiclient.connection.passwd,
+                               router.linklocalip,
+                               'iptables -t nat -L',
+                                hypervisor=self.apiclient.hypervisor
+                               )
+        else:
+            try:
+                result = get_process_status(
+                    host.ipaddress,
+                    22,
+                    host.user,
+                    host.passwd,
+                    router.linklocalip,
+                    'iptables -t nat -L'
+                )
+            except KeyError:
+                self.skipTest("Provide a marvin config file with host credentials to run %s" % self._testMethodName)
+
+        self.debug("iptables -t nat -L: %s" % result)
+        self.debug("Public IP: %s" % public_ip.ipaddress)
+        res = str(result)
+        self.assertEqual(
+            res.count(str(public_ip.ipaddress)),
+            1,
+            "Check public IP address"
             )
-        except KeyError:
-            self.skipTest("Provide a marvin config file with host credentials to run %s" % self._testMethodName)
+
         return

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3223fcf6/test/integration/smoke/test_routers.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_routers.py b/test/integration/smoke/test_routers.py
index 0268666..0f32e27 100644
--- a/test/integration/smoke/test_routers.py
+++ b/test/integration/smoke/test_routers.py
@@ -201,16 +201,17 @@ class TestRouterServices(cloudstackTestCase):
                                     router.linklocalip,
                                     "service dnsmasq status"
                                     )
-                res = str(result)
-                self.debug("Dnsmasq process status: %s" % res)
 
-                self.assertEqual(
-                                res.count("running"),
-                                1,
-                                "Check dnsmasq service is running or not"
-                        )
             except KeyError:
                 self.skipTest("Marvin configuration has no host credentials to check router services")
+        res = str(result)
+        self.debug("Dnsmasq process status: %s" % res)
+
+        self.assertEqual(
+            res.count("running"),
+            1,
+            "Check dnsmasq service is running or not"
+        )
         return
 
 


[41/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
CLOUDSTACK-4750

    use interface wildcard "+" in iptables to cover potential used VLAN interface to allow output on physical interface.

you will see
 0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           PHYSDEV match --physdev-out bond2+ --physdev-is-bridged
instead of
 0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           PHYSDEV match --physdev-out bond2.1234 --physdev-is-bridged

Anthony


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

Branch: refs/heads/rbac
Commit: 27294a382757da25528bd45647933387b031ab5d
Parents: 9d2271d
Author: Anthony Xu <an...@citrix.com>
Authored: Wed Oct 30 15:12:21 2013 -0700
Committer: Anthony Xu <an...@citrix.com>
Committed: Wed Oct 30 15:12:21 2013 -0700

----------------------------------------------------------------------
 scripts/vm/hypervisor/xenserver/vmops | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/27294a38/scripts/vm/hypervisor/xenserver/vmops
----------------------------------------------------------------------
diff --git a/scripts/vm/hypervisor/xenserver/vmops b/scripts/vm/hypervisor/xenserver/vmops
index 18233d9..3f11960 100755
--- a/scripts/vm/hypervisor/xenserver/vmops
+++ b/scripts/vm/hypervisor/xenserver/vmops
@@ -495,12 +495,8 @@ def allow_egress_traffic(session):
     devs = []
     for pif in session.xenapi.PIF.get_all():
         pif_rec = session.xenapi.PIF.get_record(pif)
-        vlan = pif_rec.get('VLAN')
         dev = pif_rec.get('device')
-        if vlan == '-1':
-            devs.append(dev)
-        else:
-            devs.append(dev + "." + vlan)
+        devs.append(dev + "+")
     for d in devs:
         try:
             util.pread2(['/bin/bash', '-c', "iptables -n -L FORWARD | grep '%s '" % d])
@@ -804,8 +800,6 @@ def default_network_rules_systemvm(session, args):
     except:
         util.pread2(['iptables', '-F', vmchain])
     
-    allow_egress_traffic(session)
-  
     for vif in vifs:
         try:
             util.pread2(['iptables', '-A', 'BRIDGE-FIREWALL', '-m', 'physdev', '--physdev-is-bridged', '--physdev-out', vif, '-j', vmchain])


[45/50] [abbrv] Merge branch 'master' into rbac.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/network/NetworkServiceImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/NetworkServiceImpl.java
index aa14a1d,7e971bd..690365f
--- a/server/src/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/com/cloud/network/NetworkServiceImpl.java
@@@ -714,26 -720,29 +720,29 @@@ public class NetworkServiceImpl extend
              return null;
          }
  
-         NicSecondaryIpVO secondaryIpVO;
          if (ipaddr != null) {
              // we got the ip addr so up the nics table and secodary ip
-             Transaction txn = Transaction.currentTxn();
-             txn.start();
- 
+             final String addrFinal = ipaddr;
+             long id = Transaction.execute(new TransactionCallback<Long>() {
+                 @Override
+                 public Long doInTransaction(TransactionStatus status) {
 -                    boolean nicSecondaryIpSet = nicVO.getSecondaryIp();
 -                    if (!nicSecondaryIpSet) {
 -                        nicVO.setSecondaryIp(true);
 -                        // commit when previously set ??
 -                        s_logger.debug("Setting nics table ...");
 -                        _nicDao.update(nicId, nicVO);
 -                    }
 -        
 -                    s_logger.debug("Setting nic_secondary_ip table ...");
 +            boolean nicSecondaryIpSet = nicVO.getSecondaryIp();
 +            if (!nicSecondaryIpSet) {
 +                nicVO.setSecondaryIp(true);
 +                // commit when previously set ??
 +                s_logger.debug("Setting nics table ...");
 +                _nicDao.update(nicId, nicVO);
 +            }
 +
 +            s_logger.debug("Setting nic_secondary_ip table ...");
-             vmId = nicVO.getInstanceId();
-             secondaryIpVO = new NicSecondaryIpVO(nicId, ipaddr, vmId, accountId, domainId, networkId);
+                     Long vmId = nicVO.getInstanceId();
+                     NicSecondaryIpVO secondaryIpVO = new NicSecondaryIpVO(nicId, addrFinal, vmId, accountId, domainId, networkId);
 -                    _nicSecondaryIpDao.persist(secondaryIpVO);
 +            _nicSecondaryIpDao.persist(secondaryIpVO);
-             txn.commit();
-            return  getNicSecondaryIp(secondaryIpVO.getId());
+                     return secondaryIpVO.getId();
+                 }
+             });
+ 
+            return getNicSecondaryIp(id);
          } else {
              return null;
          }
@@@ -803,13 -812,15 +812,15 @@@
                  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 || ntwkOff.getGuestType()  == Network.GuestType.Shared) {
-             IPAddressVO ip = _ipAddressDao.findByIpAndNetworkId(secIpVO.getNetworkId(), secIpVO.getIp4Address());
+             final IPAddressVO ip = _ipAddressDao.findByIpAndNetworkId(secIpVO.getNetworkId(), secIpVO.getIp4Address());
              if (ip != null) {
-                 Transaction txn = Transaction.currentTxn();
-                 txn.start();
+                 Transaction.execute(new TransactionCallbackNoReturn() {
+                     @Override
+                     public void doInTransactionWithoutResult(TransactionStatus status) {
 -                        _ipAddrMgr.markIpAsUnavailable(ip.getId());
 -                        _ipAddressDao.unassignIpAddress(ip.getId());
 +                _ipAddrMgr.markIpAsUnavailable(ip.getId());
 +                _ipAddressDao.unassignIpAddress(ip.getId());
-                 txn.commit();
+                     }
+                 });
              }
          } else {
              throw new InvalidParameterValueException("Not supported for this network now");
@@@ -819,22 -830,24 +830,24 @@@
          return success;
      }
  
-     boolean removeNicSecondaryIP(NicSecondaryIpVO ipVO, boolean lastIp) {
-         Transaction txn = Transaction.currentTxn();
-         long nicId = ipVO.getNicId();
-         NicVO nic = _nicDao.findById(nicId);
- 
-         txn.start();
+     boolean removeNicSecondaryIP(final NicSecondaryIpVO ipVO, final boolean lastIp) {
+         final long nicId = ipVO.getNicId();
+         final NicVO nic = _nicDao.findById(nicId);
  
+         Transaction.execute(new TransactionCallbackNoReturn() {
+             @Override
+             public void doInTransactionWithoutResult(TransactionStatus status) {
 -                if (lastIp) {
 -                    nic.setSecondaryIp(false);
 -                    s_logger.debug("Setting nics secondary ip to false ...");
 -                    _nicDao.update(nicId, nic);
 -                }
 +        if (lastIp) {
 +            nic.setSecondaryIp(false);
 +            s_logger.debug("Setting nics secondary ip to false ...");
 +            _nicDao.update(nicId, nic);
 +        }
  
 -                s_logger.debug("Revoving nic secondary ip entry ...");
 -                _nicSecondaryIpDao.remove(ipVO.getId());
 +        s_logger.debug("Revoving nic secondary ip entry ...");
 +        _nicSecondaryIpDao.remove(ipVO.getId());
-         txn.commit();
+             }
+         });
+ 
          return true;
      }
  
@@@ -1253,93 -1266,117 +1266,117 @@@
              throw ex;
          }
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+         Network network = commitNetwork(networkOfferingId, gateway, startIP, endIP, netmask, networkDomain, vlanId,
+                 name, displayText, caller, physicalNetworkId, zoneId, domainId, isDomainSpecific, subdomainAccess,
+                 vpcId, startIPv6, endIPv6, ip6Gateway, ip6Cidr, displayNetwork, aclId, isolatedPvlan, ntwkOff, pNtwk,
+                 aclType, owner, cidr, createVlan);
+ 
+         // if the network offering has persistent set to true, implement the network
+         if ( ntwkOff.getIsPersistent() ) {
+             try {
+                 if ( network.getState() == Network.State.Setup ) {
+                     s_logger.debug("Network id=" + network.getId() + " is already provisioned");
+                     return network;
+                 }
+                 DeployDestination dest = new DeployDestination(zone, null, null, null);
+                 UserVO callerUser = _userDao.findById(CallContext.current().getCallingUserId());
+                 Journal journal = new Journal.LogJournal("Implementing " + network, s_logger);
+                 ReservationContext context = new ReservationContextImpl(UUID.randomUUID().toString(), journal, callerUser, caller);
+                 s_logger.debug("Implementing network " + network + " as a part of network provision for persistent network");
+                 Pair<? extends NetworkGuru, ? extends Network> implementedNetwork = _networkMgr.implementNetwork(network.getId(), dest, context);
+                 if (implementedNetwork.first() == null) {
+                     s_logger.warn("Failed to provision the network " + network);
+                 }
+                 network = implementedNetwork.second();
+             } catch (ResourceUnavailableException ex) {
+                 s_logger.warn("Failed to implement persistent guest network " + network + "due to ", ex);
+                 CloudRuntimeException e = new CloudRuntimeException("Failed to implement persistent guest network");
+                 e.addProxyObject(network.getUuid(), "networkId");
+                 throw e;
+             }
+         }
+         return network;
+     }
+ 
+     private Network commitNetwork(final Long networkOfferingId, final String gateway, final String startIP, final String endIP, final String netmask,
+             final String networkDomain, final String vlanId, final String name, final String displayText, final Account caller,
+             final Long physicalNetworkId, final Long zoneId, final Long domainId, final boolean isDomainSpecific, final Boolean subdomainAccessFinal,
+             final Long vpcId, final String startIPv6, final String endIPv6, final String ip6Gateway, final String ip6Cidr, final Boolean displayNetwork,
+             final Long aclId, final String isolatedPvlan, final NetworkOfferingVO ntwkOff, final PhysicalNetwork pNtwk, final ACLType aclType,
+             final Account ownerFinal, final String cidr, final boolean createVlan) throws InsufficientCapacityException,
+             ResourceAllocationException {
+         try {
+             return Transaction.execute(new TransactionCallbackWithException<Network,Exception>() {
+                 @Override
+                 public Network doInTransaction(TransactionStatus status) throws InsufficientCapacityException, ResourceAllocationException {
+                     Account owner = ownerFinal;
+                     Boolean subdomainAccess = subdomainAccessFinal;
 -                    
 -                    Long sharedDomainId = null;
 -                    if (isDomainSpecific) {
 -                        if (domainId != null) {
 -                            sharedDomainId = domainId;
 -                        } else {
 -                            sharedDomainId = _domainMgr.getDomain(Domain.ROOT_DOMAIN).getId();
 -                            subdomainAccess = true;
 -                        }
 -                    }
 -            
 -                    // default owner to system if network has aclType=Domain
 -                    if (aclType == ACLType.Domain) {
 -                        owner = _accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM);
 -                    }
 -            
 -                    //Create guest network
 -                    Network network = null;
 -                    if (vpcId != null) {
 -                        if (!_configMgr.isOfferingForVpc(ntwkOff)){
 -                            throw new InvalidParameterValueException("Network offering can't be used for VPC networks");
 -                        }
 -            
 -                        if(aclId != null){
 -                            NetworkACL acl = _networkACLDao.findById(aclId);
 -                            if(acl == null){
 -                                throw new InvalidParameterValueException("Unable to find specified NetworkACL");
 -                            }
 -            
 -                            if(aclId != NetworkACL.DEFAULT_DENY && aclId != NetworkACL.DEFAULT_ALLOW) {
 -                                //ACL is not default DENY/ALLOW
 -                                // ACL should be associated with a VPC
 -                                if(!vpcId.equals(acl.getVpcId())){
 -                                    throw new InvalidParameterValueException("ACL: "+aclId+" do not belong to the VPC");
 -                                }
 -                            }
 -                        }
 -                        network = _vpcMgr.createVpcGuestNetwork(networkOfferingId, name, displayText, gateway, cidr, vlanId,
 -                                networkDomain, owner, sharedDomainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId, aclId, caller, displayNetwork);
 -                    } else {
 -                        if (_configMgr.isOfferingForVpc(ntwkOff)){
 -                            throw new InvalidParameterValueException("Network offering can be used for VPC networks only");
 -                        }
 -                        if (ntwkOff.getInternalLb()) {
 -                            throw new InvalidParameterValueException("Internal Lb can be enabled on vpc networks only");
 -                        }
 -            
 -                        network = _networkMgr.createGuestNetwork(networkOfferingId, name, displayText, gateway, cidr, vlanId,
 -                        		networkDomain, owner, sharedDomainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId,
 -                        		ip6Gateway, ip6Cidr, displayNetwork, isolatedPvlan);
 -                    }
 -            
 -                    if (caller.getType() == Account.ACCOUNT_TYPE_ADMIN && createVlan) {
 -                        // Create vlan ip range
 -                        _configMgr.createVlanAndPublicIpRange(pNtwk.getDataCenterId(), network.getId(), physicalNetworkId,
 -                                false, null, startIP, endIP, gateway, netmask, vlanId, null, startIPv6, endIPv6, ip6Gateway, ip6Cidr);
 +
 +        Long sharedDomainId = null;
 +        if (isDomainSpecific) {
 +            if (domainId != null) {
 +                sharedDomainId = domainId;
 +            } else {
 +                sharedDomainId = _domainMgr.getDomain(Domain.ROOT_DOMAIN).getId();
 +                subdomainAccess = true;
 +            }
 +        }
 +
 +        // default owner to system if network has aclType=Domain
 +        if (aclType == ACLType.Domain) {
 +            owner = _accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM);
 +        }
 +
 +        //Create guest network
 +        Network network = null;
 +        if (vpcId != null) {
 +            if (!_configMgr.isOfferingForVpc(ntwkOff)){
 +                throw new InvalidParameterValueException("Network offering can't be used for VPC networks");
 +            }
 +
 +            if(aclId != null){
 +                NetworkACL acl = _networkACLDao.findById(aclId);
 +                if(acl == null){
 +                    throw new InvalidParameterValueException("Unable to find specified NetworkACL");
 +                }
 +
 +                if(aclId != NetworkACL.DEFAULT_DENY && aclId != NetworkACL.DEFAULT_ALLOW) {
 +                    //ACL is not default DENY/ALLOW
 +                    // ACL should be associated with a VPC
 +                    if(!vpcId.equals(acl.getVpcId())){
 +                        throw new InvalidParameterValueException("ACL: "+aclId+" do not belong to the VPC");
                      }
 +                }
 +            }
 +            network = _vpcMgr.createVpcGuestNetwork(networkOfferingId, name, displayText, gateway, cidr, vlanId,
 +                    networkDomain, owner, sharedDomainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId, aclId, caller, displayNetwork);
 +        } else {
 +            if (_configMgr.isOfferingForVpc(ntwkOff)){
 +                throw new InvalidParameterValueException("Network offering can be used for VPC networks only");
 +            }
 +            if (ntwkOff.getInternalLb()) {
 +                throw new InvalidParameterValueException("Internal Lb can be enabled on vpc networks only");
 +            }
 +
 +            network = _networkMgr.createGuestNetwork(networkOfferingId, name, displayText, gateway, cidr, vlanId,
 +            		networkDomain, owner, sharedDomainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId,
 +            		ip6Gateway, ip6Cidr, displayNetwork, isolatedPvlan);
 +        }
 +
 +        if (_accountMgr.isRootAdmin(caller.getId()) && createVlan) {
 +            // Create vlan ip range
 +            _configMgr.createVlanAndPublicIpRange(pNtwk.getDataCenterId(), network.getId(), physicalNetworkId,
 +                    false, null, startIP, endIP, gateway, netmask, vlanId, null, startIPv6, endIPv6, ip6Gateway, ip6Cidr);
 +        }
- 
-         txn.commit();
- 
-         // if the network offering has persistent set to true, implement the network
-         if ( ntwkOff.getIsPersistent() ) {
-             try {
-                 if ( network.getState() == Network.State.Setup ) {
-                     s_logger.debug("Network id=" + network.getId() + " is already provisioned");
                      return network;
                  }
-                 DeployDestination dest = new DeployDestination(zone, null, null, null);
-                 UserVO callerUser = _userDao.findById(CallContext.current().getCallingUserId());
-                 Journal journal = new Journal.LogJournal("Implementing " + network, s_logger);
-                 ReservationContext context = new ReservationContextImpl(UUID.randomUUID().toString(), journal, callerUser, caller);
-                 s_logger.debug("Implementing network " + network + " as a part of network provision for persistent network");
-                 Pair<? extends NetworkGuru, ? extends Network> implementedNetwork = _networkMgr.implementNetwork(network.getId(), dest, context);
-                 if (implementedNetwork.first() == null) {
-                     s_logger.warn("Failed to provision the network " + network);
-                 }
-                 network = implementedNetwork.second();
-             } catch (ResourceUnavailableException ex) {
-                 s_logger.warn("Failed to implement persistent guest network " + network + "due to ", ex);
-                 CloudRuntimeException e = new CloudRuntimeException("Failed to implement persistent guest network");
-                 e.addProxyObject(network.getUuid(), "networkId");
-                 throw e;
-             }
+             });
+         } catch (Exception e) {
+             ExceptionUtil.rethrowRuntime(e);
+             ExceptionUtil.rethrow(e, InsufficientCapacityException.class);
+             ExceptionUtil.rethrow(e, ResourceAllocationException.class);
+             throw new IllegalStateException(e);
          }
-         return network;
      }
  
      @Override
@@@ -2199,29 -2234,31 +2234,31 @@@
  
          if (networkOfferingId != null) {
              if (networkOfferingChanged) {
-                 Transaction txn = Transaction.currentTxn();
-                 txn.start();
+                 Transaction.execute(new TransactionCallbackNoReturn() {
+                     @Override
+                     public void doInTransactionWithoutResult(TransactionStatus status) {
 -                        network.setNetworkOfferingId(networkOfferingId);
 -                        _networksDao.update(networkId, network, newSvcProviders);
 -                        // get all nics using this network
 -                        // log remove usage events for old offering
 -                        // log assign usage events for new offering
 -                        List<NicVO> nics = _nicDao.listByNetworkId(networkId);
 -                        for (NicVO nic : nics) {
 -                            long vmId = nic.getInstanceId();
 -                            VMInstanceVO vm = _vmDao.findById(vmId);
 -                            if (vm == null) {
 -                                s_logger.error("Vm for nic " + nic.getId() + " not found with Vm Id:" + vmId);
 -                                continue;
 -                            }
 -                            long isDefault = (nic.isDefaultNic()) ? 1 : 0;
 -                            String nicIdString = Long.toString(nic.getId());
 -                            UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_OFFERING_REMOVE, vm.getAccountId(), vm.getDataCenterId(),
 -                                    vm.getId(), nicIdString, oldNetworkOfferingId, null, isDefault, VirtualMachine.class.getName(), vm.getUuid());
 -                            UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_OFFERING_ASSIGN, vm.getAccountId(), vm.getDataCenterId(),
 -                                    vm.getId(), nicIdString, networkOfferingId, null, isDefault, VirtualMachine.class.getName(), vm.getUuid());
 -                        }
 +                network.setNetworkOfferingId(networkOfferingId);
 +                _networksDao.update(networkId, network, newSvcProviders);
 +                // get all nics using this network
 +                // log remove usage events for old offering
 +                // log assign usage events for new offering
 +                List<NicVO> nics = _nicDao.listByNetworkId(networkId);
 +                for (NicVO nic : nics) {
 +                    long vmId = nic.getInstanceId();
 +                    VMInstanceVO vm = _vmDao.findById(vmId);
 +                    if (vm == null) {
 +                        s_logger.error("Vm for nic " + nic.getId() + " not found with Vm Id:" + vmId);
 +                        continue;
 +                    }
 +                    long isDefault = (nic.isDefaultNic()) ? 1 : 0;
 +                    String nicIdString = Long.toString(nic.getId());
 +                    UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_OFFERING_REMOVE, vm.getAccountId(), vm.getDataCenterId(),
 +                            vm.getId(), nicIdString, oldNetworkOfferingId, null, isDefault, VirtualMachine.class.getName(), vm.getUuid());
 +                    UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_OFFERING_ASSIGN, vm.getAccountId(), vm.getDataCenterId(),
 +                            vm.getId(), nicIdString, networkOfferingId, null, isDefault, VirtualMachine.class.getName(), vm.getUuid());
 +                }
-                 txn.commit();
+                     }
+                 });
              }   else {
                  network.setNetworkOfferingId(networkOfferingId);
                  _networksDao.update(networkId, network, _networkMgr.finalizeServicesAndProvidersForNetwork(_entityMgr.findById(NetworkOffering.class, networkOfferingId), network.getPhysicalNetworkId()));
@@@ -2443,39 -2480,42 +2480,42 @@@
              }
          }
  
-         Transaction txn = Transaction.currentTxn();
          try {
-             txn.start();
+             final BroadcastDomainRange broadcastDomainRangeFinal = broadcastDomainRange;
+             return Transaction.execute(new TransactionCallback<PhysicalNetworkVO>() {
+                 @Override
+                 public PhysicalNetworkVO doInTransaction(TransactionStatus status) {
 -                    // Create the new physical network in the database
 -                    long id = _physicalNetworkDao.getNextInSequence(Long.class, "id");
 +            // Create the new physical network in the database
 +            long id = _physicalNetworkDao.getNextInSequence(Long.class, "id");
-             PhysicalNetworkVO pNetwork = new PhysicalNetworkVO(id, zoneId, vnetRange, networkSpeed, domainId, broadcastDomainRange, name);
+                     PhysicalNetworkVO pNetwork = new PhysicalNetworkVO(id, zoneId, vnetRange, networkSpeed, domainId, broadcastDomainRangeFinal, name);
 -                    pNetwork.setTags(tags);
 -                    pNetwork.setIsolationMethods(isolationMethods);
 +            pNetwork.setTags(tags);
 +            pNetwork.setIsolationMethods(isolationMethods);
  
 -                    pNetwork = _physicalNetworkDao.persist(pNetwork);
 +            pNetwork = _physicalNetworkDao.persist(pNetwork);
  
 -                    // Add vnet entries for the new zone if zone type is Advanced
 -                    if (vnetRange != null) {
 -                        addOrRemoveVnets(vnetRange.split(","), pNetwork);
 -                    }
 +            // Add vnet entries for the new zone if zone type is Advanced
 +            if (vnetRange != null) {
 +                addOrRemoveVnets(vnetRange.split(","), pNetwork);
 +            }
 +
 +            // add VirtualRouter as the default network service provider
 +            addDefaultVirtualRouterToPhysicalNetwork(pNetwork.getId());
  
 -                    // add VirtualRouter as the default network service provider
 -                    addDefaultVirtualRouterToPhysicalNetwork(pNetwork.getId());
 +            // add security group provider to the physical network
 +            addDefaultSecurityGroupProviderToPhysicalNetwork(pNetwork.getId());
  
 -                    // add security group provider to the physical network
 -                    addDefaultSecurityGroupProviderToPhysicalNetwork(pNetwork.getId());
 +            // add VPCVirtualRouter as the defualt network service provider
 +            addDefaultVpcVirtualRouterToPhysicalNetwork(pNetwork.getId());
  
 -                    // add VPCVirtualRouter as the defualt network service provider
 -                    addDefaultVpcVirtualRouterToPhysicalNetwork(pNetwork.getId());
 +            // add baremetal as the defualt network service provider
 +            addDefaultBaremetalProvidersToPhysicalNetwork(pNetwork.getId());
  
 -                    // add baremetal as the defualt network service provider
 -                    addDefaultBaremetalProvidersToPhysicalNetwork(pNetwork.getId());
 +            //Add Internal Load Balancer element as a default network service provider
 +            addDefaultInternalLbProviderToPhysicalNetwork(pNetwork.getId());
  
-             txn.commit();
 -                    //Add Internal Load Balancer element as a default network service provider
 -                    addDefaultInternalLbProviderToPhysicalNetwork(pNetwork.getId());
 -                    
 -                    return pNetwork;
 +            return pNetwork;
+                 }
+             });
          } catch (Exception ex) {
              s_logger.warn("Exception: ", ex);
              throw new CloudRuntimeException("Fail to create a physical network");
@@@ -2609,22 -2649,27 +2649,27 @@@
              }
              network.setVnet(comaSeperatedStingOfVnetRanges);
  
-             Transaction txn = Transaction.currentTxn();
-             txn.start();
-             if (addVnets != null) {
-                 s_logger.debug("Adding vnet range " + addVnets.toString()+ " for the physicalNetwork id= " + network.getId() + " and zone id=" + network.getDataCenterId()
+             final List<String> addVnetsFinal = addVnets;
+             final List<String> removeVnetsFinal = removeVnets;
+             Transaction.execute(new TransactionCallbackNoReturn() {
+                 @Override
+                 public void doInTransactionWithoutResult(TransactionStatus status) {
+                     if (addVnetsFinal != null) {
+                         s_logger.debug("Adding vnet range " + addVnetsFinal.toString()+ " for the physicalNetwork id= " + network.getId() + " and zone id=" + network.getDataCenterId()
 -                                + " as a part of updatePhysicalNetwork call");
 -                        //add vnet takes a list of strings to be added. each string is a vnet.
 +                        + " as a part of updatePhysicalNetwork call");
 +                //add vnet takes a list of strings to be added. each string is a vnet.
-                 _dcDao.addVnet(network.getDataCenterId(), network.getId(), addVnets);
+                         _dcDao.addVnet(network.getDataCenterId(), network.getId(), addVnetsFinal);
 -                    }
 +            }
-             if (removeVnets != null) {
-                 s_logger.debug("removing vnet range " + removeVnets.toString()+ " for the physicalNetwork id= " + network.getId() + " and zone id=" + network.getDataCenterId()
+                     if (removeVnetsFinal != null) {
+                         s_logger.debug("removing vnet range " + removeVnetsFinal.toString()+ " for the physicalNetwork id= " + network.getId() + " and zone id=" + network.getDataCenterId()
 -                                + " as a part of updatePhysicalNetwork call");
 -                        //deleteVnets  takes a list of strings to be removed. each string is a vnet.
 +                        + " as a part of updatePhysicalNetwork call");
 +                //deleteVnets  takes a list of strings to be removed. each string is a vnet.
-                 _datacneter_vnet.deleteVnets(txn, network.getDataCenterId(), network.getId(), removeVnets);
+                         _datacneter_vnet.deleteVnets(TransactionLegacy.currentTxn(), network.getDataCenterId(), network.getId(), removeVnetsFinal);
 -                    }
 -                    _physicalNetworkDao.update(network.getId(), network);
 +            }
 +            _physicalNetworkDao.update(network.getId(), network);
-             txn.commit();
+                 }
+             });
+ 
              _physicalNetworkDao.releaseFromLockTable(network.getId());
          }
      }
@@@ -2778,48 -2840,47 +2840,47 @@@
  
          checkIfPhysicalNetworkIsDeletable(physicalNetworkId);
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+         return Transaction.execute(new TransactionCallback<Boolean>() {
+             @Override
+             public Boolean doInTransaction(TransactionStatus status) {
 -                // delete vlans for this zone
 -                List<VlanVO> vlans = _vlanDao.listVlansByPhysicalNetworkId(physicalNetworkId);
 -                for (VlanVO vlan : vlans) {
 -                    _vlanDao.remove(vlan.getId());
 -                }
 -        
 -                // Delete networks
 -                List<NetworkVO> networks = _networksDao.listByPhysicalNetwork(physicalNetworkId);
 -                if (networks != null && !networks.isEmpty()) {
 -                    for (NetworkVO network : networks) {
 -                        _networksDao.remove(network.getId());
 -                    }
 -                }
 -        
 -                // delete vnets
 -                _dcDao.deleteVnet(physicalNetworkId);
 -        
 -                // delete service providers
 -                List<PhysicalNetworkServiceProviderVO> providers = _pNSPDao.listBy(physicalNetworkId);
 -        
 -                for(PhysicalNetworkServiceProviderVO provider : providers){
 -                    try {
 -                        deleteNetworkServiceProvider(provider.getId());
 -                    }catch (ResourceUnavailableException e) {
 -                        s_logger.warn("Unable to complete destroy of the physical network provider: " + provider.getProviderName() + ", id: "+ provider.getId(), e);
 -                        return false;
 -                    } catch (ConcurrentOperationException e) {
 -                        s_logger.warn("Unable to complete destroy of the physical network provider: " + provider.getProviderName() + ", id: "+ provider.getId(), e);
 -                        return false;
 -                    }
 -                }
 -        
 -                // delete traffic types
 -                _pNTrafficTypeDao.deleteTrafficTypes(physicalNetworkId);
 -        
 +        // delete vlans for this zone
 +        List<VlanVO> vlans = _vlanDao.listVlansByPhysicalNetworkId(physicalNetworkId);
 +        for (VlanVO vlan : vlans) {
 +            _vlanDao.remove(vlan.getId());
 +        }
 +
 +        // Delete networks
 +        List<NetworkVO> networks = _networksDao.listByPhysicalNetwork(physicalNetworkId);
 +        if (networks != null && !networks.isEmpty()) {
 +            for (NetworkVO network : networks) {
 +                _networksDao.remove(network.getId());
 +            }
 +        }
 +
 +        // delete vnets
 +        _dcDao.deleteVnet(physicalNetworkId);
 +
 +        // delete service providers
 +        List<PhysicalNetworkServiceProviderVO> providers = _pNSPDao.listBy(physicalNetworkId);
 +
 +        for(PhysicalNetworkServiceProviderVO provider : providers){
 +            try {
 +                deleteNetworkServiceProvider(provider.getId());
 +            }catch (ResourceUnavailableException e) {
 +                s_logger.warn("Unable to complete destroy of the physical network provider: " + provider.getProviderName() + ", id: "+ provider.getId(), e);
 +                return false;
 +            } catch (ConcurrentOperationException e) {
 +                s_logger.warn("Unable to complete destroy of the physical network provider: " + provider.getProviderName() + ", id: "+ provider.getId(), e);
 +                return false;
 +            }
 +        }
 +
 +        // delete traffic types
 +        _pNTrafficTypeDao.deleteTrafficTypes(physicalNetworkId);
 +
-         boolean success = _physicalNetworkDao.remove(physicalNetworkId);
- 
-         txn.commit();
- 
-         return success;
+                 return _physicalNetworkDao.remove(physicalNetworkId);
+             }
+         });
      }
  
      @DB
@@@ -3861,50 -3912,59 +3912,59 @@@
              throw new InvalidParameterValueException("unsupported type of broadcastUri specified: " + broadcastUriString);
          }
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
- 
+         final NetworkOfferingVO ntwkOffFinal = ntwkOff; 
+         try {
+             return Transaction.execute(new TransactionCallbackWithException<Network,Exception>() {
+                 @Override
+                 public Network doInTransaction(TransactionStatus status) throws ResourceAllocationException, InsufficientCapacityException {
 -                    //lock datacenter as we need to get mac address seq from there
 -                    DataCenterVO dc = _dcDao.lockRow(pNtwk.getDataCenterId(), true);
 -            
 -                    //check if we need to create guest network
 -                    Network privateNetwork = _networksDao.getPrivateNetwork(uriString, cidr,
 +        //lock datacenter as we need to get mac address seq from there
 +        DataCenterVO dc = _dcDao.lockRow(pNtwk.getDataCenterId(), true);
 +
 +        //check if we need to create guest network
 +        Network privateNetwork = _networksDao.getPrivateNetwork(uriString, cidr,
-                 networkOwnerId, pNtwk.getDataCenterId(), null);
+                             networkOwnerId, pNtwk.getDataCenterId(), networkOfferingId);
 -                    if (privateNetwork == null) {
 -                        //create Guest network
 +        if (privateNetwork == null) {
 +            //create Guest network
-             privateNetwork = _networkMgr.createGuestNetwork(ntwkOff.getId(), networkName, displayText, gateway, cidr, uriString,
+                         privateNetwork = _networkMgr.createGuestNetwork(ntwkOffFinal.getId(), networkName, displayText, gateway, cidr, uriString,
 -                                null, owner, null, pNtwk, pNtwk.getDataCenterId(), ACLType.Account, null, vpcId, null, null, true, null);
 -                        s_logger.debug("Created private network " + privateNetwork);
 -                    } else {
 -                        s_logger.debug("Private network already exists: " + privateNetwork);
 -                        //Do not allow multiple private gateways with same Vlan within a VPC
 -                        if(vpcId.equals(privateNetwork.getVpcId())){
 -                            throw new InvalidParameterValueException("Private network for the vlan: " + uriString + " and cidr  "+ cidr +"  already exists " +
 -                                    "for Vpc "+vpcId+" in zone " + _entityMgr.findById(DataCenter.class, pNtwk.getDataCenterId()).getName());
 -                        }
 -                    }
 -            
 -                    //add entry to private_ip_address table
 -                    PrivateIpVO privateIp = _privateIpDao.findByIpAndSourceNetworkIdAndVpcId(privateNetwork.getId(), startIp, vpcId);
 -                    if (privateIp != null) {
 -                        throw new InvalidParameterValueException("Private ip address " + startIp + " already used for private gateway" +
 -                                " in zone " + _entityMgr.findById(DataCenter.class, pNtwk.getDataCenterId()).getName());
 -                    }
 -            
 -                    Long mac = dc.getMacAddress();
 -                    Long nextMac = mac + 1;
 -                    dc.setMacAddress(nextMac);
 -            
 -                    privateIp = new PrivateIpVO(startIp, privateNetwork.getId(), nextMac, vpcId, sourceNat);
 -                    _privateIpDao.persist(privateIp);
 -            
 -                    _dcDao.update(dc.getId(), dc);
 -            
 -                    s_logger.debug("Private network " + privateNetwork + " is created");
 -            
 -                    return privateNetwork;
 -                }
 +                    null, owner, null, pNtwk, pNtwk.getDataCenterId(), ACLType.Account, null, vpcId, null, null, true, null);
 +            s_logger.debug("Created private network " + privateNetwork);
 +        } else {
 +            s_logger.debug("Private network already exists: " + privateNetwork);
 +            //Do not allow multiple private gateways with same Vlan within a VPC
 +            if(vpcId.equals(privateNetwork.getVpcId())){
 +                throw new InvalidParameterValueException("Private network for the vlan: " + uriString + " and cidr  "+ cidr +"  already exists " +
 +                        "for Vpc "+vpcId+" in zone " + _entityMgr.findById(DataCenter.class, pNtwk.getDataCenterId()).getName());
 +            }
 +        }
 +
 +        //add entry to private_ip_address table
 +        PrivateIpVO privateIp = _privateIpDao.findByIpAndSourceNetworkIdAndVpcId(privateNetwork.getId(), startIp, vpcId);
 +        if (privateIp != null) {
 +            throw new InvalidParameterValueException("Private ip address " + startIp + " already used for private gateway" +
 +                    " in zone " + _entityMgr.findById(DataCenter.class, pNtwk.getDataCenterId()).getName());
 +        }
 +
 +        Long mac = dc.getMacAddress();
 +        Long nextMac = mac + 1;
 +        dc.setMacAddress(nextMac);
 +
 +        privateIp = new PrivateIpVO(startIp, privateNetwork.getId(), nextMac, vpcId, sourceNat);
 +        _privateIpDao.persist(privateIp);
 +
 +        _dcDao.update(dc.getId(), dc);
 +
-         txn.commit();
 +        s_logger.debug("Private network " + privateNetwork + " is created");
 +
 +        return privateNetwork;
 +    }
+             });
+         } catch (Exception e) {
+             ExceptionUtil.rethrowRuntime(e);
+             ExceptionUtil.rethrow(e, ResourceAllocationException.class);
+             ExceptionUtil.rethrow(e, InsufficientCapacityException.class);
+             throw new IllegalStateException(e);
+         }
+     }
  
  
      private NetworkOfferingVO findSystemNetworkOffering(String offeringName) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/network/firewall/FirewallManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/firewall/FirewallManagerImpl.java
index 195f93e,ccceb8d..89f24c6
--- a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java
+++ b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java
@@@ -222,26 -229,28 +229,28 @@@ public class FirewallManagerImpl extend
                  domainId = network.getDomainId();
          }
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
- 
+         final Long accountIdFinal = accountId;
+         final Long domainIdFinal = domainId;
+         return Transaction.execute(new TransactionCallbackWithException<FirewallRuleVO,NetworkRuleConflictException>() {
+             @Override
+             public FirewallRuleVO doInTransaction(TransactionStatus status) throws NetworkRuleConflictException {
 -                FirewallRuleVO newRule = new FirewallRuleVO(xId, ipAddrId, portStart, portEnd, protocol.toLowerCase(), networkId,
 +        FirewallRuleVO newRule = new FirewallRuleVO(xId, ipAddrId, portStart, portEnd, protocol.toLowerCase(), networkId,
-                 accountId, domainId, Purpose.Firewall, sourceCidrList, icmpCode, icmpType, relatedRuleId, trafficType);
+                         accountIdFinal, domainIdFinal, Purpose.Firewall, sourceCidrList, icmpCode, icmpType, relatedRuleId, trafficType);
 -                newRule.setType(type);
 -                newRule = _firewallDao.persist(newRule);
 -        
 -                if (type == FirewallRuleType.User)
 -                    detectRulesConflict(newRule);
 -        
 -                if (!_firewallDao.setStateToAdd(newRule)) {
 -                    throw new CloudRuntimeException("Unable to update the state to add for " + newRule);
 -                }
 -                CallContext.current().setEventDetails("Rule Id: " + newRule.getId());
 -                
 -                return newRule;
 -            }
 +        newRule.setType(type);
 +        newRule = _firewallDao.persist(newRule);
 +
 +        if (type == FirewallRuleType.User)
 +            detectRulesConflict(newRule);
 +
 +        if (!_firewallDao.setStateToAdd(newRule)) {
 +            throw new CloudRuntimeException("Unable to update the state to add for " + newRule);
 +        }
 +        CallContext.current().setEventDetails("Rule Id: " + newRule.getId());
 +
-         txn.commit();
- 
 +        return newRule;
 +    }
+         });
+     }
  
      @Override
      public Pair<List<? extends FirewallRule>, Integer> listFirewallRules(ListFirewallRulesCmd cmd) {
@@@ -739,28 -738,29 +738,29 @@@
              _accountMgr.checkAccess(caller, null, true, rule);
          }
  
-         Transaction txn = Transaction.currentTxn();
+         Transaction.execute(new TransactionCallbackNoReturn() {
+             @Override
+             public void doInTransactionWithoutResult(TransactionStatus status) {
 -                boolean generateUsageEvent = false;
 +        boolean generateUsageEvent = false;
  
-         txn.start();
 -                if (rule.getState() == State.Staged) {
 -                    if (s_logger.isDebugEnabled()) {
 -                        s_logger.debug("Found a rule that is still in stage state so just removing it: " + rule);
 -                    }
 -                    removeRule(rule);
 -                    generateUsageEvent = true;
 -                } else if (rule.getState() == State.Add || rule.getState() == State.Active) {
 -                    rule.setState(State.Revoke);
 -                    _firewallDao.update(rule.getId(), rule);
 -                    generateUsageEvent = true;
 -                }
 +        if (rule.getState() == State.Staged) {
 +            if (s_logger.isDebugEnabled()) {
 +                s_logger.debug("Found a rule that is still in stage state so just removing it: " + rule);
 +            }
 +            removeRule(rule);
 +            generateUsageEvent = true;
 +        } else if (rule.getState() == State.Add || rule.getState() == State.Active) {
 +            rule.setState(State.Revoke);
 +            _firewallDao.update(rule.getId(), rule);
 +            generateUsageEvent = true;
 +        }
  
 -                if (generateUsageEvent && needUsageEvent) {
 -                    UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NET_RULE_DELETE, rule.getAccountId(), 0, rule.getId(),
 -                            null, rule.getClass().getName(), rule.getUuid());
 -                }
 +        if (generateUsageEvent && needUsageEvent) {
 +            UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NET_RULE_DELETE, rule.getAccountId(), 0, rule.getId(),
 +                    null, rule.getClass().getName(), rule.getUuid());
 +        }
- 
-         txn.commit();
+             }
+         });
      }
  
      @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/network/vpc/VpcManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/vpc/VpcManagerImpl.java
index 6d3223e,6e0b54d..0b9d306
--- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java
+++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java
@@@ -206,50 -212,50 +212,50 @@@ public class VpcManagerImpl extends Man
      @DB
      public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
          //configure default vpc offering
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
-         
+         Transaction.execute(new TransactionCallbackNoReturn() {
+             @Override
+             public void doInTransactionWithoutResult(TransactionStatus status) {
 -                if (_vpcOffDao.findByUniqueName(VpcOffering.defaultVPCOfferingName) == null) {
 -                    s_logger.debug("Creating default VPC offering " + VpcOffering.defaultVPCOfferingName);
 -                    
 -                    Map<Service, Set<Provider>> svcProviderMap = new HashMap<Service, Set<Provider>>();
 -                    Set<Provider> defaultProviders = new HashSet<Provider>();
 -                    defaultProviders.add(Provider.VPCVirtualRouter);
 -                    for (Service svc : getSupportedServices()) {
 -                        if (svc == Service.Lb) {
 -                            Set<Provider> lbProviders = new HashSet<Provider>();
 -                            lbProviders.add(Provider.VPCVirtualRouter);
 -                            lbProviders.add(Provider.InternalLbVm);
 -                            svcProviderMap.put(svc, lbProviders);
 -                        } else {
 -                            svcProviderMap.put(svc, defaultProviders);
 -                        }
 -                    }
 -                    createVpcOffering(VpcOffering.defaultVPCOfferingName, VpcOffering.defaultVPCOfferingName, svcProviderMap,
 -                            true, State.Enabled);
 +        if (_vpcOffDao.findByUniqueName(VpcOffering.defaultVPCOfferingName) == null) {
 +            s_logger.debug("Creating default VPC offering " + VpcOffering.defaultVPCOfferingName);
 +            
 +            Map<Service, Set<Provider>> svcProviderMap = new HashMap<Service, Set<Provider>>();
 +            Set<Provider> defaultProviders = new HashSet<Provider>();
 +            defaultProviders.add(Provider.VPCVirtualRouter);
 +            for (Service svc : getSupportedServices()) {
 +                if (svc == Service.Lb) {
 +                    Set<Provider> lbProviders = new HashSet<Provider>();
 +                    lbProviders.add(Provider.VPCVirtualRouter);
 +                    lbProviders.add(Provider.InternalLbVm);
 +                    svcProviderMap.put(svc, lbProviders);
 +                } else {
 +                    svcProviderMap.put(svc, defaultProviders);
                  }
 -        
 -                //configure default vpc offering with Netscaler as LB Provider
 -                if (_vpcOffDao.findByUniqueName(VpcOffering.defaultVPCNSOfferingName ) == null) {
 -                    s_logger.debug("Creating default VPC offering with Netscaler as LB Provider" + VpcOffering.defaultVPCNSOfferingName);
 -                    Map<Service, Set<Provider>> svcProviderMap = new HashMap<Service, Set<Provider>>();
 -                    Set<Provider> defaultProviders = new HashSet<Provider>();
 -                    defaultProviders.add(Provider.VPCVirtualRouter);
 -                    for (Service svc : getSupportedServices()) {
 -                        if (svc == Service.Lb) {
 -                            Set<Provider> lbProviders = new HashSet<Provider>();
 -                            lbProviders.add(Provider.Netscaler);
 -                            lbProviders.add(Provider.InternalLbVm);
 -                            svcProviderMap.put(svc, lbProviders);
 -                        } else {
 -                            svcProviderMap.put(svc, defaultProviders);
 -                        }
 -                    }
 -                    createVpcOffering(VpcOffering.defaultVPCNSOfferingName, VpcOffering.defaultVPCNSOfferingName,
 -                            svcProviderMap, false, State.Enabled);
 +            }
 +            createVpcOffering(VpcOffering.defaultVPCOfferingName, VpcOffering.defaultVPCOfferingName, svcProviderMap,
 +                    true, State.Enabled);
 +        }
 +
 +        //configure default vpc offering with Netscaler as LB Provider
 +        if (_vpcOffDao.findByUniqueName(VpcOffering.defaultVPCNSOfferingName ) == null) {
 +            s_logger.debug("Creating default VPC offering with Netscaler as LB Provider" + VpcOffering.defaultVPCNSOfferingName);
 +            Map<Service, Set<Provider>> svcProviderMap = new HashMap<Service, Set<Provider>>();
 +            Set<Provider> defaultProviders = new HashSet<Provider>();
 +            defaultProviders.add(Provider.VPCVirtualRouter);
 +            for (Service svc : getSupportedServices()) {
 +                if (svc == Service.Lb) {
 +                    Set<Provider> lbProviders = new HashSet<Provider>();
 +                    lbProviders.add(Provider.Netscaler);
 +                    lbProviders.add(Provider.InternalLbVm);
 +                    svcProviderMap.put(svc, lbProviders);
 +                } else {
 +                    svcProviderMap.put(svc, defaultProviders);
                  }
              }
 +            createVpcOffering(VpcOffering.defaultVPCNSOfferingName, VpcOffering.defaultVPCNSOfferingName,
 +                    svcProviderMap, false, State.Enabled);
 +        }
- 
-         txn.commit();
++            }
+         });
          
          Map<String, String> configs = _configDao.getConfiguration(params);
          String value = configs.get(Config.VpcCleanupInterval.key());
@@@ -375,37 -381,39 +381,39 @@@
  
      
      @DB
-     protected VpcOffering createVpcOffering(String name, String displayText, Map<Network.Service,
-             Set<Network.Provider>> svcProviderMap, boolean isDefault, State state) {
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+     protected VpcOffering createVpcOffering(final String name, final String displayText, final Map<Network.Service,
+             Set<Network.Provider>> svcProviderMap, final boolean isDefault, final State state) {
+         return Transaction.execute(new TransactionCallback<VpcOffering>() {
+             @Override
+             public VpcOffering doInTransaction(TransactionStatus status) {
 -                // create vpc offering object
 -                VpcOfferingVO offering  = new VpcOfferingVO(name, displayText, isDefault, null);
 -
 -                if (state != null) {
 -                    offering.setState(state);
 -                }
 -                s_logger.debug("Adding vpc offering " + offering);
 -                offering = _vpcOffDao.persist(offering);
 -                // populate services and providers
 -                if (svcProviderMap != null) {
 -                    for (Network.Service service : svcProviderMap.keySet()) {
 -                        Set<Provider> providers = svcProviderMap.get(service);
 -                        if (providers != null && !providers.isEmpty()) {
 -                            for (Network.Provider provider : providers) {
 -                                VpcOfferingServiceMapVO offService = new VpcOfferingServiceMapVO(offering.getId(), service, provider);
 -                                _vpcOffSvcMapDao.persist(offService);
 -                                s_logger.trace("Added service for the vpc offering: " + offService + " with provider " + provider.getName());
 -                            }
 -                        } else {
 -                            throw new InvalidParameterValueException("Provider is missing for the VPC offering service " + service.getName());
 -                        }
 +        // create vpc offering object
 +        VpcOfferingVO offering  = new VpcOfferingVO(name, displayText, isDefault, null);
 +        
 +        if (state != null) {
 +            offering.setState(state);
 +        }
 +        s_logger.debug("Adding vpc offering " + offering);
 +        offering = _vpcOffDao.persist(offering);
 +        // populate services and providers
 +        if (svcProviderMap != null) {
 +            for (Network.Service service : svcProviderMap.keySet()) {
 +                Set<Provider> providers = svcProviderMap.get(service);
 +                if (providers != null && !providers.isEmpty()) {
 +                    for (Network.Provider provider : providers) {
 +                        VpcOfferingServiceMapVO offService = new VpcOfferingServiceMapVO(offering.getId(), service, provider);
 +                        _vpcOffSvcMapDao.persist(offService);
 +                        s_logger.trace("Added service for the vpc offering: " + offService + " with provider " + provider.getName());
                      }
 +                } else {
 +                    throw new InvalidParameterValueException("Provider is missing for the VPC offering service " + service.getName());
                  }
 -
 -                return offering;
              }
 +        }
-         txn.commit();
 +
 +        return offering;
 +    }
+         });
+     }
      
      @Override
      public Vpc getActiveVpc(long vpcId) {
@@@ -635,9 -643,9 +643,9 @@@
  
      
      @DB
-     protected Vpc createVpc(long zoneId, long vpcOffId, Account vpcOwner, String vpcName, String displayText, String cidr,
-             String networkDomain) {
+     protected Vpc createVpc(final long zoneId, final long vpcOffId, final Account vpcOwner, final String vpcName, final String displayText, final String cidr,
+             final String networkDomain) {
 -
 +        
          //Validate CIDR
          if (!NetUtils.isValidCIDR(cidr)) {
              throw new InvalidParameterValueException("Invalid CIDR specified " + cidr);
@@@ -657,22 -665,23 +665,23 @@@
                              + "and the hyphen ('-'); can't start or end with \"-\"");
          }
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+         return Transaction.execute(new TransactionCallback<VpcVO>() {
+             @Override
+             public VpcVO doInTransaction(TransactionStatus status) {
 -                VpcVO vpc = new VpcVO (zoneId, vpcName, displayText, vpcOwner.getId(), vpcOwner.getDomainId(), vpcOffId, cidr,
 -                        networkDomain);
 -                vpc = _vpcDao.persist(vpc, finalizeServicesAndProvidersForVpc(zoneId, vpcOffId));
 -                _resourceLimitMgr.incrementResourceCount(vpcOwner.getId(), ResourceType.vpc);
 +        VpcVO vpc = new VpcVO (zoneId, vpcName, displayText, vpcOwner.getId(), vpcOwner.getDomainId(), vpcOffId, cidr,
 +                networkDomain);
 +        vpc = _vpcDao.persist(vpc, finalizeServicesAndProvidersForVpc(zoneId, vpcOffId));
 +        _resourceLimitMgr.incrementResourceCount(vpcOwner.getId(), ResourceType.vpc);
-         txn.commit();
  
 -                s_logger.debug("Created VPC " + vpc);
 +        s_logger.debug("Created VPC " + vpc);
  
 -                return vpc;
 -            }
 +        return vpc;
 +    }
+         });
+     }
  
-     private Map<String, String> finalizeServicesAndProvidersForVpc(long zoneId, long offeringId) {
-         Map<String, String> svcProviders = new HashMap<String, String>();
-         Map<String, List<String>> providerSvcs = new HashMap<String, List<String>>();
+     private Map<String, List<String>> finalizeServicesAndProvidersForVpc(long zoneId, long offeringId) {
+         Map<String, List<String>> svcProviders = new HashMap<String, List<String>>();
          List<VpcOfferingServiceMapVO> servicesMap = _vpcOffSvcMapDao.listByVpcOffId(offeringId);
  
          for (VpcOfferingServiceMapVO serviceMap : servicesMap) {
@@@ -695,13 -698,15 +698,15 @@@
                  throw new InvalidParameterValueException("Provider " + provider +
                          " should be enabled in at least one physical network of the zone specified");
              }
 -            
 +
-             svcProviders.put(service, provider);
-             List<String> l = providerSvcs.get(provider);
-             if (l == null) {
-                 providerSvcs.put(provider, l = new ArrayList<String>());
+             List<String> providers = null;
+             if (svcProviders.get(service) == null) {
+                 providers = new ArrayList<String>();
+             } else {
+                 providers = svcProviders.get(service);
              }
-             l.add(service);
+             providers.add(provider);
+             svcProviders.put(service, providers);
          }
  
          return svcProviders;
@@@ -740,16 -745,18 +745,18 @@@
          //mark VPC as inactive
          if (vpc.getState() != Vpc.State.Inactive) {
              s_logger.debug("Updating VPC " + vpc + " with state " + Vpc.State.Inactive + " as a part of vpc delete");
-             VpcVO vpcVO = _vpcDao.findById(vpc.getId());
+             final VpcVO vpcVO = _vpcDao.findById(vpc.getId());
              vpcVO.setState(Vpc.State.Inactive);
              
-             Transaction txn = Transaction.currentTxn();
-             txn.start();
+             Transaction.execute(new TransactionCallbackNoReturn() {
+                 @Override
+                 public void doInTransactionWithoutResult(TransactionStatus status) {
 -                    _vpcDao.update(vpc.getId(), vpcVO);
 -
 -                    //decrement resource count
 -                    _resourceLimitMgr.decrementResourceCount(vpc.getAccountId(), ResourceType.vpc);
 +            _vpcDao.update(vpc.getId(), vpcVO);
 +            
 +            //decrement resource count
 +            _resourceLimitMgr.decrementResourceCount(vpc.getAccountId(), ResourceType.vpc);
-             txn.commit();
+                 }
+             });
          }
          
          //shutdown VPC
@@@ -1145,71 -1152,72 +1152,72 @@@
      }
  
      @DB
-     protected void validateNewVpcGuestNetwork(String cidr, String gateway, Account networkOwner, Vpc vpc, String networkDomain) {
+     protected void validateNewVpcGuestNetwork(final String cidr, final String gateway, final Account networkOwner, final Vpc vpc, final String networkDomain) {
          
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+         Transaction.execute(new TransactionCallbackNoReturn() {
+             @Override
+             public void doInTransactionWithoutResult(TransactionStatus status) {
 -                Vpc locked = _vpcDao.acquireInLockTable(vpc.getId());
 -                if (locked == null) {
 -                    throw new CloudRuntimeException("Unable to acquire lock on " + vpc);
 -                }
 +        Vpc locked = _vpcDao.acquireInLockTable(vpc.getId());
 +        if (locked == null) {
 +            throw new CloudRuntimeException("Unable to acquire lock on " + vpc);
 +        }
 +        
 +        try {
 +            //check number of active networks in vpc
 +            if (_ntwkDao.countVpcNetworks(vpc.getId()) >= _maxNetworks) {
 +                throw new CloudRuntimeException("Number of networks per VPC can't extend "
 +                        + _maxNetworks + "; increase it using global config " + Config.VpcMaxNetworks);
 +            }
 +            
 +            
 +            //1) CIDR is required
 +            if (cidr == null) {
 +                throw new InvalidParameterValueException("Gateway/netmask are required when create network for VPC");
 +            }
 +            
 +            //2) Network cidr should be within vpcCidr
 +            if (!NetUtils.isNetworkAWithinNetworkB(cidr, vpc.getCidr())) {
 +                throw new InvalidParameterValueException("Network cidr " + cidr + " is not within vpc " + vpc + " cidr");
 +            }
 +            
 +            //3) Network cidr shouldn't cross the cidr of other vpc network cidrs
 +            List<? extends Network> ntwks = _ntwkDao.listByVpc(vpc.getId());
 +            for (Network ntwk : ntwks) {
 +                assert (cidr != null) : "Why the network cidr is null when it belongs to vpc?";
                  
 -                try {
 -                    //check number of active networks in vpc
 -                    if (_ntwkDao.countVpcNetworks(vpc.getId()) >= _maxNetworks) {
 -                        throw new CloudRuntimeException("Number of networks per VPC can't extend "
 -                                + _maxNetworks + "; increase it using global config " + Config.VpcMaxNetworks);
 -                    }
 -                    
 -                    
 -                    //1) CIDR is required
 -                    if (cidr == null) {
 -                        throw new InvalidParameterValueException("Gateway/netmask are required when create network for VPC");
 -                    }
 -                    
 -                    //2) Network cidr should be within vpcCidr
 -                    if (!NetUtils.isNetworkAWithinNetworkB(cidr, vpc.getCidr())) {
 -                        throw new InvalidParameterValueException("Network cidr " + cidr + " is not within vpc " + vpc + " cidr");
 -                    }
 -                    
 -                    //3) Network cidr shouldn't cross the cidr of other vpc network cidrs
 -                    List<? extends Network> ntwks = _ntwkDao.listByVpc(vpc.getId());
 -                    for (Network ntwk : ntwks) {
 -                        assert (cidr != null) : "Why the network cidr is null when it belongs to vpc?";
 -                        
 -                        if (NetUtils.isNetworkAWithinNetworkB(ntwk.getCidr(), cidr)
 -                                || NetUtils.isNetworkAWithinNetworkB(cidr, ntwk.getCidr())) {
 -                            throw new InvalidParameterValueException("Network cidr " + cidr + " crosses other network cidr " + ntwk +
 -                                    " belonging to the same vpc " + vpc);
 -                        }
 -                    }
 -                    
 -                    //4) vpc and network should belong to the same owner
 -                    if (vpc.getAccountId() != networkOwner.getId()) {
 -                        throw new InvalidParameterValueException("Vpc " + vpc + " owner is different from the network owner "
 -                                + networkOwner);
 -                    }
 -                    
 -                    //5) network domain should be the same as VPC's
 -                    if (!networkDomain.equalsIgnoreCase(vpc.getNetworkDomain())) {
 -                        throw new InvalidParameterValueException("Network domain of the new network should match network" +
 -                        		" domain of vpc " + vpc);
 -                    }
 -                    
 -                    //6) gateway should never be equal to the cidr subnet
 -                    if (NetUtils.getCidrSubNet(cidr).equalsIgnoreCase(gateway)) {
 -                        throw new InvalidParameterValueException("Invalid gateway specified. It should never be equal to the cidr subnet value");
 -                    }
 -                } finally {
 -                    s_logger.debug("Releasing lock for " + locked);
 -                    _vpcDao.releaseFromLockTable(locked.getId());
 +                if (NetUtils.isNetworkAWithinNetworkB(ntwk.getCidr(), cidr)
 +                        || NetUtils.isNetworkAWithinNetworkB(cidr, ntwk.getCidr())) {
 +                    throw new InvalidParameterValueException("Network cidr " + cidr + " crosses other network cidr " + ntwk +
 +                            " belonging to the same vpc " + vpc);
                  }
              }
 +            
 +            //4) vpc and network should belong to the same owner
 +            if (vpc.getAccountId() != networkOwner.getId()) {
 +                throw new InvalidParameterValueException("Vpc " + vpc + " owner is different from the network owner "
 +                        + networkOwner);
 +            }
 +            
 +            //5) network domain should be the same as VPC's
 +            if (!networkDomain.equalsIgnoreCase(vpc.getNetworkDomain())) {
 +                throw new InvalidParameterValueException("Network domain of the new network should match network" +
 +                		" domain of vpc " + vpc);
 +            }
 +            
 +            //6) gateway should never be equal to the cidr subnet
 +            if (NetUtils.getCidrSubNet(cidr).equalsIgnoreCase(gateway)) {
 +                throw new InvalidParameterValueException("Invalid gateway specified. It should never be equal to the cidr subnet value");
 +            }
- 
-             txn.commit();
 +        } finally {
 +            s_logger.debug("Releasing lock for " + locked);
 +            _vpcDao.releaseFromLockTable(locked.getId());
 +        }
 +    }
+         });
+     }
  
  
-     protected List<VpcProvider> getVpcElements() {
+     public List<VpcProvider> getVpcElements() {
          if (vpcElements == null) {
              vpcElements = new ArrayList<VpcProvider>();
              vpcElements.add((VpcProvider)_ntwkModel.getElementImplementingProvider(Provider.VPCVirtualRouter.getName()));
@@@ -1392,66 -1400,79 +1400,79 @@@
          if (physNet == null) {
              physNet = _entityMgr.findById(PhysicalNetwork.class,physicalNetworkId);
          }
-         Long dcId = physNet.getDataCenterId();
+         final Long dcId = physNet.getDataCenterId();
          
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+         final Long physicalNetworkIdFinal = physicalNetworkId;
+         final PhysicalNetwork physNetFinal = physNet;
+         VpcGatewayVO gatewayVO = null;
+         try {
+             gatewayVO = Transaction.execute(new TransactionCallbackWithException<VpcGatewayVO,Exception>() {
+                 @Override
+                 public VpcGatewayVO doInTransaction(TransactionStatus status) throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException {
 -                    s_logger.debug("Creating Private gateway for VPC " + vpc);
 -                    //1) create private network unless it is existing and lswitch'd
 -                    Network privateNtwk = null;
 -                    if (BroadcastDomainType.getSchemeValue(BroadcastDomainType.fromString(broadcastUri)) == BroadcastDomainType.Lswitch) {
 -                        String cidr = NetUtils.ipAndNetMaskToCidr(gateway, netmask);
 -            
 -                        privateNtwk = _ntwkDao.getPrivateNetwork(broadcastUri, cidr,
 -                                gatewayOwnerId, dcId, networkOfferingId);
 -                        s_logger.info("found and using existing network for vpc " + vpc + ": " + broadcastUri);
 -                    }
 -                    if (privateNtwk == null) {
 -                        s_logger.info("creating new network for vpc " + vpc + " using broadcast uri: " + broadcastUri);
 -                        String networkName = "vpc-" + vpc.getName() + "-privateNetwork";
 +        s_logger.debug("Creating Private gateway for VPC " + vpc);
 +        //1) create private network unless it is existing and lswitch'd
 +        Network privateNtwk = null;
 +        if (BroadcastDomainType.getSchemeValue(BroadcastDomainType.fromString(broadcastUri)) == BroadcastDomainType.Lswitch) {
 +            String cidr = NetUtils.ipAndNetMaskToCidr(gateway, netmask);
 +
 +            privateNtwk = _ntwkDao.getPrivateNetwork(broadcastUri, cidr,
 +                    gatewayOwnerId, dcId, networkOfferingId);
 +            s_logger.info("found and using existing network for vpc " + vpc + ": " + broadcastUri);
 +        }
 +        if (privateNtwk == null) {
 +            s_logger.info("creating new network for vpc " + vpc + " using broadcast uri: " + broadcastUri);
 +            String networkName = "vpc-" + vpc.getName() + "-privateNetwork";
-             privateNtwk = _ntwkSvc.createPrivateNetwork(networkName, networkName, physicalNetworkId, 
+                         privateNtwk = _ntwkSvc.createPrivateNetwork(networkName, networkName, physicalNetworkIdFinal, 
 -                            broadcastUri, ipAddress, null, gateway, netmask, gatewayOwnerId, vpcId, isSourceNat, networkOfferingId);
 -                    } else { // create the nic/ip as createPrivateNetwork doesn''t do that work for us now
 +                broadcastUri, ipAddress, null, gateway, netmask, gatewayOwnerId, vpcId, isSourceNat, networkOfferingId);
 +        } else { // create the nic/ip as createPrivateNetwork doesn''t do that work for us now
-             DataCenterVO dc = _dcDao.lockRow(physNet.getDataCenterId(), true);
+                         DataCenterVO dc = _dcDao.lockRow(physNetFinal.getDataCenterId(), true);
 -            
 -                        //add entry to private_ip_address table
 -                        PrivateIpVO privateIp = _privateIpDao.findByIpAndSourceNetworkId(privateNtwk.getId(), ipAddress);
 -                        if (privateIp != null) {
 -                            throw new InvalidParameterValueException("Private ip address " + ipAddress + " already used for private gateway" +
 -                                    " in zone " + _entityMgr.findById(DataCenter.class,dcId).getName());
 -                        }
 -            
 -                        Long mac = dc.getMacAddress();
 -                        Long nextMac = mac + 1;
 -                        dc.setMacAddress(nextMac);
 -            
 -                        privateIp = new PrivateIpVO(ipAddress, privateNtwk.getId(), nextMac, vpcId, true);
 -                        _privateIpDao.persist(privateIp);
 -            
 -                        _dcDao.update(dc.getId(), dc);
 -                    }
 -            
 -                    long networkAclId = NetworkACL.DEFAULT_DENY;
 -                    if (aclId != null) {
 -                        NetworkACLVO aclVO = _networkAclDao.findById(aclId);
 -                        if ( aclVO == null) {
 -                            throw new InvalidParameterValueException("Invalid network acl id passed ");
 -                        }
 -                        if ((aclVO.getVpcId() != vpcId) && !(aclId == NetworkACL.DEFAULT_DENY || aclId == NetworkACL.DEFAULT_ALLOW)) {
 -                            throw new InvalidParameterValueException("Private gateway and network acl are not in the same vpc");
 -                        }
 -            
 -                        networkAclId = aclId;
 -                    }
 -            
 -                    //2) create gateway entry
 -                    VpcGatewayVO gatewayVO = new VpcGatewayVO(ipAddress, VpcGateway.Type.Private, vpcId, privateNtwk.getDataCenterId(),
 -                            privateNtwk.getId(), broadcastUri, gateway, netmask, vpc.getAccountId(), vpc.getDomainId(), isSourceNat, networkAclId);
 -                    _vpcGatewayDao.persist(gatewayVO);
 -                    
 -                    s_logger.debug("Created vpc gateway entry " + gatewayVO);
 -                    
 +
 +            //add entry to private_ip_address table
 +            PrivateIpVO privateIp = _privateIpDao.findByIpAndSourceNetworkId(privateNtwk.getId(), ipAddress);
 +            if (privateIp != null) {
 +                throw new InvalidParameterValueException("Private ip address " + ipAddress + " already used for private gateway" +
 +                        " in zone " + _entityMgr.findById(DataCenter.class,dcId).getName());
 +            }
 +
 +            Long mac = dc.getMacAddress();
 +            Long nextMac = mac + 1;
 +            dc.setMacAddress(nextMac);
 +
 +            privateIp = new PrivateIpVO(ipAddress, privateNtwk.getId(), nextMac, vpcId, true);
 +            _privateIpDao.persist(privateIp);
 +
 +            _dcDao.update(dc.getId(), dc);
 +        }
 +
 +        long networkAclId = NetworkACL.DEFAULT_DENY;
 +        if (aclId != null) {
 +            NetworkACLVO aclVO = _networkAclDao.findById(aclId);
 +            if ( aclVO == null) {
 +                throw new InvalidParameterValueException("Invalid network acl id passed ");
 +            }
 +            if ((aclVO.getVpcId() != vpcId) && !(aclId == NetworkACL.DEFAULT_DENY || aclId == NetworkACL.DEFAULT_ALLOW)) {
 +                throw new InvalidParameterValueException("Private gateway and network acl are not in the same vpc");
 +            }
 +
 +            networkAclId = aclId;
 +        }
 +
 +        //2) create gateway entry
 +        VpcGatewayVO gatewayVO = new VpcGatewayVO(ipAddress, VpcGateway.Type.Private, vpcId, privateNtwk.getDataCenterId(),
 +                privateNtwk.getId(), broadcastUri, gateway, netmask, vpc.getAccountId(), vpc.getDomainId(), isSourceNat, networkAclId);
 +        _vpcGatewayDao.persist(gatewayVO);
 +        
 +        s_logger.debug("Created vpc gateway entry " + gatewayVO);
 +        
-         txn.commit();
+                     return gatewayVO;
+                 }
+             });
+         } catch (Exception e) {
+             ExceptionUtil.rethrowRuntime(e);
+             ExceptionUtil.rethrow(e, InsufficientCapacityException.class);
+             ExceptionUtil.rethrow(e, ResourceAllocationException.class);
+             throw new IllegalStateException(e);
+         }
          
          return getVpcPrivateGateway(gatewayVO.getId());
      }
@@@ -1509,18 -1528,22 +1528,22 @@@
          }
  
          try {
+             Transaction.execute(new TransactionCallbackNoReturn() {
+                 @Override
+                 public void doInTransactionWithoutResult(TransactionStatus status) {
 -                    //don't allow to remove gateway when there are static routes associated with it
 -                    long routeCount = _staticRouteDao.countRoutesByGateway(gatewayVO.getId());
 -                    if (routeCount > 0) {
 -                        throw new CloudRuntimeException("Can't delete private gateway " + gatewayVO + " as it has " + routeCount +
 -                                " static routes applied. Remove the routes first");
 -                    }
 -
 -                    gatewayVO.setState(VpcGateway.State.Deleting);
 -                    _vpcGatewayDao.update(gatewayVO.getId(), gatewayVO);
 -                    s_logger.debug("Marked gateway " + gatewayVO + " with state " + VpcGateway.State.Deleting);
 +            //don't allow to remove gateway when there are static routes associated with it
 +            long routeCount = _staticRouteDao.countRoutesByGateway(gatewayVO.getId());
 +            if (routeCount > 0) {
 +                throw new CloudRuntimeException("Can't delete private gateway " + gatewayVO + " as it has " + routeCount +
 +                        " static routes applied. Remove the routes first");
 +            }
 +            
 +            gatewayVO.setState(VpcGateway.State.Deleting);
 +            _vpcGatewayDao.update(gatewayVO.getId(), gatewayVO);
 +            s_logger.debug("Marked gateway " + gatewayVO + " with state " + VpcGateway.State.Deleting);
+                 }
+             });
 -
 +            
-             txn.commit();
  
              //1) delete the gateway on the backend
              PrivateGateway gateway = getVpcPrivateGateway(gatewayId);
@@@ -1555,27 -1578,31 +1578,31 @@@
              deleteNetwork = false;
          }
          
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
-         
+         //TODO: Clean this up, its bad.  There is a DB transaction wrapping calls to NetworkElements (destroyNetwork will
+         // call network elements).
+         final boolean deleteNetworkFinal = deleteNetwork;
+         Transaction.execute(new TransactionCallbackNoReturn() {
+             @Override
+             public void doInTransactionWithoutResult(TransactionStatus status) {
 -                PrivateIpVO ip = _privateIpDao.findByIpAndVpcId(gateway.getVpcId(), gateway.getIp4Address());
 -                if (ip != null) {
 -                    _privateIpDao.remove(ip.getId());
 -                    s_logger.debug("Deleted private ip " + ip);
 -                }
 -                
 +        PrivateIpVO ip = _privateIpDao.findByIpAndVpcId(gateway.getVpcId(), gateway.getIp4Address());
 +        if (ip != null) {
 +            _privateIpDao.remove(ip.getId());
 +            s_logger.debug("Deleted private ip " + ip);
 +        }
 +        
-         if (deleteNetwork) {
+                 if (deleteNetworkFinal) {
 -                    User callerUser = _accountMgr.getActiveUser(CallContext.current().getCallingUserId());
 -                    Account owner = _accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM);
 -                    ReservationContext context = new ReservationContextImpl(null, null, callerUser, owner);
 -                    _ntwkMgr.destroyNetwork(networkId, context);
 -                    s_logger.debug("Deleted private network id=" + networkId);
 -                }
 -                
 -                _vpcGatewayDao.remove(gateway.getId());
 -                s_logger.debug("Deleted private gateway " + gateway);
 +            User callerUser = _accountMgr.getActiveUser(CallContext.current().getCallingUserId());
 +            Account owner = _accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM);
 +            ReservationContext context = new ReservationContextImpl(null, null, callerUser, owner);
 +            _ntwkMgr.destroyNetwork(networkId, context);
 +            s_logger.debug("Deleted private network id=" + networkId);
 +        }
 +        
 +        _vpcGatewayDao.remove(gateway.getId());
 +        s_logger.debug("Deleted private gateway " + gateway);
+             }
+         });
          
-         txn.commit();
          return true;
      }
  
@@@ -1740,12 -1767,14 +1767,14 @@@
          s_logger.debug("Found " + routes.size() + " to revoke for the vpc " + vpcId);
          if (!routes.isEmpty()) {
              //mark all of them as revoke
-             Transaction txn = Transaction.currentTxn();
-             txn.start();
+             Transaction.execute(new TransactionCallbackNoReturn() {
+                 @Override
+                 public void doInTransactionWithoutResult(TransactionStatus status) {
 -                    for (StaticRouteVO route : routes) {
 -                        markStaticRouteForRevoke(route, caller);
 -                    }
 +            for (StaticRouteVO route : routes) {
 +                markStaticRouteForRevoke(route, caller);
 +            }
-             txn.commit();
+                 }
+             });
              return applyStaticRoutes(vpcId);
          }
          
@@@ -1794,24 -1823,24 +1823,24 @@@
              throw new InvalidParameterValueException("The static gateway cidr overlaps with one of the blacklisted routes of the zone the VPC belongs to");
          }
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
-         
+         return Transaction.execute(new TransactionCallbackWithException<StaticRouteVO, NetworkRuleConflictException>() {
+             @Override
+             public StaticRouteVO doInTransaction(TransactionStatus status) throws NetworkRuleConflictException {
 -                StaticRouteVO newRoute = new StaticRouteVO(gateway.getId(), cidr, vpc.getId(), vpc.getAccountId(), vpc.getDomainId());
 -                s_logger.debug("Adding static route " + newRoute);
 -                newRoute = _staticRouteDao.persist(newRoute);
 -                
 -                detectRoutesConflict(newRoute);
 +        StaticRouteVO newRoute = new StaticRouteVO(gateway.getId(), cidr, vpc.getId(), vpc.getAccountId(), vpc.getDomainId());
 +        s_logger.debug("Adding static route " + newRoute);
 +        newRoute = _staticRouteDao.persist(newRoute);
          
 -                if (!_staticRouteDao.setStateToAdd(newRoute)) {
 -                    throw new CloudRuntimeException("Unable to update the state to add for " + newRoute);
 -                }
 -                CallContext.current().setEventDetails("Static route Id: " + newRoute.getId());
 -                
 -                return newRoute;
 -            }
 +        detectRoutesConflict(newRoute);
 +
 +        if (!_staticRouteDao.setStateToAdd(newRoute)) {
 +            throw new CloudRuntimeException("Unable to update the state to add for " + newRoute);
 +        }
 +        CallContext.current().setEventDetails("Static route Id: " + newRoute.getId());
 +        
-         txn.commit();
- 
 +        return newRoute;
 +    }
+         });
+     }
  
      protected boolean isCidrBlacklisted(String cidr, long zoneId) {
          String routesStr = NetworkOrchestrationService.GuestDomainSuffix.valueIn(zoneId);
@@@ -1952,17 -1981,19 +1981,19 @@@
                      return;
                  }
  
-                 Transaction txn = null;
                  try {
-                     txn = Transaction.open(Transaction.CLOUD_DB);
- 
+                     Transaction.execute(new TransactionCallbackWithExceptionNoReturn<Exception>() {
+                         @Override
+                         public void doInTransactionWithoutResult(TransactionStatus status) throws Exception {
 -                            // Cleanup inactive VPCs
 -                            List<VpcVO> inactiveVpcs = _vpcDao.listInactiveVpcs();
 -                            s_logger.info("Found " + inactiveVpcs.size() + " removed VPCs to cleanup");
 -                            for (VpcVO vpc : inactiveVpcs) {
 -                                s_logger.debug("Cleaning up " + vpc);
 -                                destroyVpc(vpc, _accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM), User.UID_SYSTEM);
 -                            }
 +                    // Cleanup inactive VPCs
 +                    List<VpcVO> inactiveVpcs = _vpcDao.listInactiveVpcs();
 +                    s_logger.info("Found " + inactiveVpcs.size() + " removed VPCs to cleanup");
 +                    for (VpcVO vpc : inactiveVpcs) {
 +                        s_logger.debug("Cleaning up " + vpc);
 +                        destroyVpc(vpc, _accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM), User.UID_SYSTEM);
 +                    }
+                         }
+                     });
                  } catch (Exception e) {
                      s_logger.error("Exception ", e);
                  } finally {
@@@ -2010,17 -2038,20 +2038,20 @@@
  
          s_logger.debug("Associating ip " + ipToAssoc + " to vpc " + vpc);
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+         final boolean isSourceNatFinal = isSourceNat; 
+         Transaction.execute(new TransactionCallbackNoReturn() {
+             @Override
+             public void doInTransactionWithoutResult(TransactionStatus status) {
 -                IPAddressVO ip = _ipAddressDao.findById(ipId);
 -                //update ip address with networkId
 -                ip.setVpcId(vpcId);
 +        IPAddressVO ip = _ipAddressDao.findById(ipId);
 +        //update ip address with networkId
 +        ip.setVpcId(vpcId);
-         ip.setSourceNat(isSourceNat);
+                 ip.setSourceNat(isSourceNatFinal);
 -                _ipAddressDao.update(ipId, ip);
 +        _ipAddressDao.update(ipId, ip);
  
 -                //mark ip as allocated
 -                _ipAddrMgr.markPublicIpAsAllocated(ip);
 +        //mark ip as allocated
 +        _ipAddrMgr.markPublicIpAsAllocated(ip);
-         txn.commit();
+             }
+         });
  
          s_logger.debug("Successfully assigned ip " + ipToAssoc + " to vpc " + vpc);
  


[19/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
Dashboard UI: Clean up layout

-Remove borders from dashboard items to enhance clarity

-Fix layout of events/alerts


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

Branch: refs/heads/rbac
Commit: f1eaa975b8ea25ba589d0a1594afa9d5fa7ffed6
Parents: 7695fff
Author: Brian Federle <br...@citrix.com>
Authored: Tue Oct 29 15:10:24 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Tue Oct 29 15:10:24 2013 -0700

----------------------------------------------------------------------
 ui/css/cloudstack3.css | 96 ++++++++++++++++++++-------------------------
 1 file changed, 43 insertions(+), 53 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f1eaa975/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index 1ae631c..67cdc54 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -4093,7 +4093,7 @@ Dialogs*/
 /**** Head*/
 .dashboard.admin .dashboard-container.head {
   width: 766px;
-  height: 290px;
+  height: 331px;
   margin: 9px 0 0;
   float: left;
 }
@@ -4103,7 +4103,7 @@ Dialogs*/
   padding: 4px 4px 8px;
   width: 100%;
   float: left;
-  margin: 0 0 9px;
+  margin: 0;
   color: #FFFFFF;
 }
 
@@ -4153,7 +4153,7 @@ Dialogs*/
 /**** Charts / stats*/
 .dashboard.admin .zone-stats {
   width: 774px;
-  height: 274px;
+  height: 348px;
   overflow: auto;
   overflow-x: hidden;
   /*+placement:shift 0px -11px;*/
@@ -4164,20 +4164,16 @@ Dialogs*/
 
 .dashboard.admin .zone-stats ul {
   width: 796px;
-  /*+placement:shift -1px 0px;*/
+  /*+placement:shift -2px 11px;*/
   position: relative;
-  left: -1px;
-  top: 0px;
+  left: -2px;
+  top: 11px;
 }
 
 .dashboard.admin .zone-stats ul li {
-  background: #FFFFFF url(../images/bg-gradients.png) repeat-x 0px -1244px;
-  width: 387px;
-  font-size: 11px;
-  border: 1px solid #BDBDBD;
-  border-left: none;
-  border-top: none;
-  height: 73px;
+  width: 388px;
+  font-size: 14px;
+  height: 79px;
   float: left;
   position: absolute;
   position: relative;
@@ -4195,28 +4191,41 @@ Dialogs*/
 }
 
 .dashboard.admin .zone-stats ul li .label {
-  width: 138px;
+  width: 111px;
   float: left;
-  padding: 22px 0px 0 10px;
+  font-weight: 100;
+  border-bottom: 1px solid #E2E2E2;
+  margin: 5px 0 0 22px;
+  padding: 22px 0 7px;
 }
 
 .dashboard.admin .zone-stats ul li .info {
   float: left;
-  width: 120px;
+  width: 151px;
+  white-space: nowrap;
   margin: 12px 0 0;
   color: #636363;
 }
 
 .dashboard.admin .zone-stats ul li .info .name {
   font-weight: bold;
+  margin-top: 8px;
+  margin-bottom: 9px;
+  font-size: 12px;
+  font-weight: 100;
+  /*[empty]color:;*/
 }
 
 .dashboard.admin .zone-stats ul li .pie-chart-container {
-  width: 95px;
+  width: 91px;
   height: 69px;
   overflow: hidden;
   float: left;
   position: relative;
+  /*+placement:shift -8px 7px;*/
+  position: relative;
+  left: -8px;
+  top: 7px;
 }
 
 .dashboard.admin .zone-stats ul li .pie-chart-container .percent-label {
@@ -4343,7 +4352,7 @@ Dialogs*/
 .dashboard.admin .dashboard-container.sub.alerts {
   float: left;
   margin: 0 12px 0 0;
-  height: 313px;
+  height: 270px;
   overflow: hidden;
   position: relative;
 }
@@ -4354,7 +4363,7 @@ Dialogs*/
 
 .dashboard.admin .dashboard-container.sub.alerts ul {
   width: 368px;
-  height: 274px;
+  height: 234px;
   overflow: auto;
   overflow-x: hidden;
   position: relative;
@@ -4362,33 +4371,19 @@ Dialogs*/
 }
 
 .dashboard.admin .dashboard-container.sub.alerts ul li {
-  display: block;
-  width: 358px;
-  height: 42px;
-  color: #000000;
-  background: url(../images/bg-gradients.png) 0px -48px;
+  background: #F0F0F0;
+  float: left;
   border: 1px solid #D4D0D0;
-  clear: both;
-  /*+placement:shift 0px 15px;*/
-  position: relative;
-  left: 0px;
-  top: 15px;
-  /*+border-radius:5px;*/
-  -moz-border-radius: 5px;
-  -webkit-border-radius: 5px;
-  -khtml-border-radius: 5px;
-  border-radius: 5px;
-  border-radius: 5px 5px 5px 5px;
-  margin: 0px 0 12px;
-  /*[empty]color:;*/
-  padding: 0;
+  /*+border-radius:3px;*/
+  -moz-border-radius: 3px;
+  -webkit-border-radius: 3px;
+  -khtml-border-radius: 3px;
+  border-radius: 3px;
+  margin: 9px;
+  padding: 8px;
 }
 
 .dashboard.admin .dashboard-container.sub.alerts ul li .content {
-  height: 43px;
-  padding: 0 0px 0 63px;
-  margin: 0;
-  background: url(../images/icons.png) no-repeat -601px -428px;
 }
 
 .dashboard.admin .dashboard-container.sub.alerts ul li {
@@ -4396,8 +4391,10 @@ Dialogs*/
 
 .dashboard.admin .dashboard-container.sub.alerts ul li span.title {
   font-weight: bold;
-  font-size: 11px;
-  margin: 7px 0 0;
+  font-size: 14px;
+  font-weight: 100;
+  color: #266E9A;
+  margin: 3px 0 5px;
   /*+text-shadow:0px 1px #FFFFFF;*/
   -moz-text-shadow: 0px 1px #FFFFFF;
   -webkit-text-shadow: 0px 1px #FFFFFF;
@@ -4407,16 +4404,9 @@ Dialogs*/
 }
 
 .dashboard.admin .dashboard-container.sub.alerts ul li p {
-  display: block;
-  clear: both;
-  font-size: 11px;
   float: left;
-  height: 10px;
-  max-width: 287px;
-  margin-top: 1px;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
+  margin: 4px 0px 0px;
+  color: #252525;
 }
 
 .dashboard.admin .dashboard-container.sub.alerts ul li p br {


[05/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
CLOUDSTACK-4988: when listTemplates call is executed by regular user, but templateFilter=community is passed in, return public templates of subdomains


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

Branch: refs/heads/rbac
Commit: e7685f816ad7e97a54d05e77fa5a90c841406514
Parents: 7e269e3
Author: Alena Prokharchyk <al...@citrix.com>
Authored: Tue Oct 29 10:45:42 2013 -0700
Committer: Alena Prokharchyk <al...@citrix.com>
Committed: Tue Oct 29 10:58:53 2013 -0700

----------------------------------------------------------------------
 server/src/com/cloud/api/query/QueryManagerImpl.java | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e7685f81/server/src/com/cloud/api/query/QueryManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java
index 0e3f7c9..51ee249 100644
--- a/server/src/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/com/cloud/api/query/QueryManagerImpl.java
@@ -2883,7 +2883,8 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
                     }
 
                     // get all child domain ID's
-                    if (_accountMgr.isAdmin(account.getType())) {
+                    if (_accountMgr.isAdmin(account.getType()) 
+                            || (templateFilter == TemplateFilter.featured || templateFilter == TemplateFilter.community)) {
                         List<DomainVO> allChildDomains = _domainDao.findAllChildren(accountDomain.getPath(),
                                 accountDomain.getId());
                         for (DomainVO childDomain : allChildDomains) {


[08/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
CLOUDSTACK: 2238 - Automation - Adding non contiguous VLAN ranges feature test cases

Signed-off-by: SrikanteswaraRao Talluri <ta...@apache.org>


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

Branch: refs/heads/rbac
Commit: 8a6694b396500897a3d5ce3f292864f2c5c2530f
Parents: 1972d61
Author: Gaurav Aradhye <ga...@clogeny.com>
Authored: Tue Sep 24 02:30:22 2013 -0400
Committer: SrikanteswaraRao Talluri <ta...@apache.org>
Committed: Tue Oct 29 23:44:06 2013 +0530

----------------------------------------------------------------------
 .../component/test_non_contiguous_vlan.py       | 446 +++++++++++++++++++
 1 file changed, 446 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8a6694b3/test/integration/component/test_non_contiguous_vlan.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_non_contiguous_vlan.py b/test/integration/component/test_non_contiguous_vlan.py
new file mode 100644
index 0000000..5ef1ec7
--- /dev/null
+++ b/test/integration/component/test_non_contiguous_vlan.py
@@ -0,0 +1,446 @@
+# 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.
+
+""" P1 tests for Non contiguous VLAN ranges
+
+    Test Plan: https://cwiki.apache.org/confluence/download/attachments/30760993/Non-Contiguous_VLAN_Ranges_TestPlan.xlsx
+
+    Issue Link: https://issues.apache.org/jira/browse/CLOUDSTACK-2238
+
+    Feature Specifications: https://cwiki.apache.org/confluence/display/CLOUDSTACK/Support+non-contiguous+VLAN+ranges
+"""
+
+#Import local modules
+from marvin.cloudstackTestCase import *
+from marvin.cloudstackAPI import *
+from marvin.cloudstackTestCase import cloudstackTestCase
+from marvin.integration.lib.base import Account
+from marvin.integration.lib.base import PhysicalNetwork
+from marvin.integration.lib.common import *
+from nose.plugins.attrib import attr
+
+class Services():
+    def __init__(self):
+        self.services = {
+
+            "vlan":             {
+                                 "partial_range": ["",""],
+                                 "full_range": "",
+                                },
+            "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",
+                                },
+            "virtual_machine":  {
+                                 "displayname": "testserver",
+                                 "username": "root",     # VM creds for SSH
+                                 "password": "password",
+                                 "ssh_port": 22,
+                                 "hypervisor": 'XenServer',
+                                 "privateport": 22,
+                                 "publicport": 22,
+                                 "protocol": 'TCP',
+                                },
+            "service_offering": {
+                                 "name": "Tiny Instance",
+                                 "displaytext": "Tiny Instance",
+                                 "cpunumber": 1,
+                                 "cpuspeed": 100,    # in MHz
+                                 "memory": 128,      # In MBs
+                                },
+
+            "ostype":            'CentOS 5.6 (64-bit)',
+                        }
+
+
+@attr(tags = ["simulator", "advanced"])
+class TestNonContiguousVLANRanges(cloudstackTestCase):
+    """
+    Test to add non contiguous vlan ranges into existing physical network
+    """
+    @classmethod
+    def setUpClass(cls):
+        cls.api_client = super(TestNonContiguousVLANRanges, cls).getClsTestClient().getApiClient()
+        cls.services = Services().services
+        # Get Zone, pod, domain
+        cls.zone = get_zone(cls.api_client, cls.services)
+        cls.pod = get_pod(cls.api_client, cls.zone.id, cls.services)
+        cls.domain = get_domain(cls.api_client, cls.services)
+
+        cls.service_offering = ServiceOffering.create(
+                                    cls.api_client,
+                                    cls.services["service_offering"]
+                                    )
+
+        cls.template = get_template(
+                            cls.api_client,
+                            cls.zone.id,
+                            cls.services["ostype"]
+                            )
+
+        cls.services["virtual_machine"]["template"] = cls.template.id
+        cls.services["virtual_machine"]["zoneid"] = cls.zone.id
+
+        cls._cleanup = [cls.service_offering]
+
+        return
+
+    @classmethod
+    def tearDownClass(cls):
+        try:
+            cleanup_resources(cls.api_client, cls._cleanup)
+        except Exception as e:
+            raise Exception("Warning: Exception during cleanup : %s" % e)
+
+    def setUp(self):
+        self.apiclient = self.testClient.getApiClient()
+        self.vlan = self.services["vlan"]
+        self.apiClient = self.testClient.getApiClient()
+
+        self.setNonContiguousVlanIds(self.apiclient, self.zone.id)
+
+        self.cleanup = []
+
+    def tearDown(self):
+        """
+        Teardown to update a physical network and shrink its vlan
+        Cleanup all used resource
+        """
+        self.physicalnetwork.update(self.apiClient, id = self.physicalnetworkid, vlan=self.existingvlan)
+
+        try:
+            cleanup_resources(self.apiclient, self.cleanup)
+        except Exception as e:
+            raise Exception("Warning: Exception during cleanup : %s" % e)
+
+    def setNonContiguousVlanIds(self, apiclient, zoneid):
+        """
+        Form the non contiguous ranges based on currently assigned range in physical network
+        """
+
+        NonContigVlanIdsAcquired = False
+
+        list_physical_networks_response = PhysicalNetwork.list(
+            apiclient,
+            zoneid=zoneid
+        )
+        assert isinstance(list_physical_networks_response, list)
+        assert len(list_physical_networks_response) > 0, "No physical networks found in zone %s" % zoneid
+
+        for physical_network in list_physical_networks_response:
+
+            self.physicalnetwork = physical_network
+            self.physicalnetworkid = physical_network.id
+            self.existingvlan = physical_network.vlan
+
+            vlans = xsplit(self.existingvlan, ['-', ','])
+
+            assert len(vlans) > 0
+            assert int(vlans[0]) < int(vlans[-1]), "VLAN range  %s was improperly split" % self.existingvlan
+
+            # Keep some gap between existing vlan and the new vlans which we are going to add
+            # So that they are non contiguous
+
+            non_contig_end_vlan_id = int(vlans[-1]) + 6
+            non_contig_start_vlan_id = int(vlans[0]) - 6
+
+            # Form ranges which are consecutive to existing ranges but not immediately contiguous
+            # There should be gap in between existing range and new non contiguous ranage
+
+            # If you can't add range after existing range, because it's crossing 4095, then
+            # select VLAN ids before the existing range such that they are greater than 0, and
+            # then add this non contiguoud range
+
+            if non_contig_end_vlan_id < 4095:
+
+                self.vlan["partial_range"][0] = str(non_contig_end_vlan_id - 4) + '-' + str(non_contig_end_vlan_id - 3)
+                self.vlan["partial_range"][1] = str(non_contig_end_vlan_id - 1) + '-' + str(non_contig_end_vlan_id)
+                self.vlan["full_range"] = str(non_contig_end_vlan_id - 4) + '-' + str(non_contig_end_vlan_id)
+                NonContigVlanIdsAcquired = True
+
+            elif non_contig_start_vlan_id > 0:
+
+                self.vlan["partial_range"][0] = str(non_contig_start_vlan_id) + '-' + str(non_contig_start_vlan_id + 1)
+                self.vlan["partial_range"][1] = str(non_contig_start_vlan_id + 3) + '-' + str(non_contig_start_vlan_id + 4)
+                self.vlan["full_range"] = str(non_contig_start_vlan_id) + '-' + str(non_contig_start_vlan_id + 4)
+                NonContigVlanIdsAcquired = True
+
+            else:
+               NonContigVlanIdsAcquired = False
+
+            # If failed to get relevant vlan ids, continue to next physical network
+            # else break from loop as we have hot the non contiguous vlan ids for the test purpose
+
+            if not NonContigVlanIdsAcquired:
+                continue
+            else:
+                break
+
+        # If even through looping from all existing physical networks, failed to get relevant non
+        # contiguous vlan ids, then fail the test case
+
+        if not NonContigVlanIdsAcquired:
+            self.fail("Failed to set non contiguous vlan ids to test. Free some ids from \
+                        from existing physical networks at extreme ends")
+
+        return
+
+    def validatePhysicalNetworkVlan(self, physicalNetworkId, vlan):
+        """Validate whether the physical network has the updated vlan
+
+        params:
+
+        @physicalNetworkId: The id of physical network which needs to be validated
+        @vlan: vlan with which physical network was updated. This should match with the vlan of listed
+               physical network
+
+        Raise Exception if not matched
+        """
+
+        self.debug("Listing physical networks with id: %s" % physicalNetworkId)
+
+        physicalnetworks = PhysicalNetwork.list(self.apiclient, id=physicalNetworkId)
+
+        self.assertTrue(isinstance(physicalnetworks, list), "PhysicalNetwork.list should return a \
+                        valid list object")
+
+        self.assertTrue(len(physicalnetworks) > 0, "physical networks list should not be empty")
+
+        self.debug("Checking if physical network vlan matches with the passed vlan")
+
+        vlans = xsplit(vlan,[','])
+
+        for virtualLan in vlans:
+            self.assert_(physicalnetworks[0].vlan.find(virtualLan) != -1, "vlan range %s \
+                        is not present in physical network: %s" % (virtualLan, physicalNetworkId))
+
+        return
+
+    @attr(tags = ["simulator", "advanced"])
+    def test_01_add_non_contiguous_ranges(self):
+        """
+        Test adding different non contiguous vlan ranges
+        """
+        # 1. Add new non contiguous vlan-range in addition to existing range
+        # 2. Add another non contiguous range
+        # 3. Both the ranges should get added successfully
+
+        vlan1 = self.existingvlan + "," + self.vlan["partial_range"][0]
+        updatePhysicalNetworkResponse = self.physicalnetwork.update(self.apiClient, id = self.physicalnetworkid, vlan = vlan1)
+
+        self.assert_(updatePhysicalNetworkResponse is not None,
+            msg="couldn't add non contiguous range in the physical network with vlan %s"%vlan1)
+
+        self.debug("Verifying the VLAN of the updated physical network: %s, It should match with \
+                    the passed vlan: %s" % (self.physicalnetworkid,vlan1))
+
+        self.validatePhysicalNetworkVlan(self.physicalnetworkid, vlan1)
+
+        vlan2 = vlan1 + "," + self.vlan["partial_range"][1]
+        updatePhysicalNetworkResponse2 = self.physicalnetwork.update(self.apiClient, id = self.physicalnetworkid, vlan = vlan2)
+
+        self.assert_(updatePhysicalNetworkResponse2 is not None,
+            msg="couldn't add non contiguous range in the physical network with vlan %s"%vlan2)
+
+        self.debug("Verifying the VLAN of the updated physical network: %s, It should match with \
+                    the passed vlan: %s" % (self.physicalnetworkid,vlan2))
+
+        self.validatePhysicalNetworkVlan(self.physicalnetworkid, vlan2)
+
+        return
+
+    @attr(tags = ["simulator", "advanced"])
+    def test_02_add_existing_vlan_range(self):
+        """
+        Test adding same non contiguous range twice
+        """
+        # 1. Add non contiguous range to existing range
+        # 2. Add the same range again
+        # 3. It should get added successfully
+
+        vlan1 = self.existingvlan+","+self.vlan["partial_range"][0]
+        self.physicalnetwork.update(self.apiClient, id = self.physicalnetworkid, vlan = vlan1)
+
+        self.debug("Updating physical network with same vlan range" )
+        self.physicalnetwork.update(self.apiClient, id = self.physicalnetworkid, vlan = vlan1)
+
+        self.debug("Verifying the VLAN of the updated physical network: %s, It should match with \
+                    the passed vlan: %s" % (self.physicalnetworkid,vlan1))
+
+        self.validatePhysicalNetworkVlan(self.physicalnetworkid, vlan1)
+
+        return
+
+    @attr(tags = ["simulator", "advanced"])
+    def test_03_extend_contiguous_range(self):
+        """
+        Test adding non contiguous range and extend it
+        """
+
+        # 1. Add new non contiguous range
+        # 2. Add new range which extends previously added range
+        # 3. Newly added range should get extended successfully
+
+        vlan1 = self.existingvlan + "," + self.vlan["partial_range"][0]
+        self.physicalnetwork.update(self.apiClient, id = self.physicalnetworkid, vlan = vlan1)
+
+        vlan2 = vlan1 + "," + self.vlan["full_range"]
+        updatePhysicalNetworkResponse = self.physicalnetwork.update(self.apiClient, id = self.physicalnetworkid, vlan = vlan2)
+
+        self.assert_(updatePhysicalNetworkResponse is not None,
+            msg="couldn't extend the physical network with vlan %s"%vlan2)
+
+        extendedvlan = self.existingvlan + "," + self.vlan["full_range"]
+
+        self.debug("Verifying the VLAN of the updated physical network: %s, It should match with \
+                    the extended vlan: %s" % (self.physicalnetworkid, extendedvlan))
+
+        self.validatePhysicalNetworkVlan(self.physicalnetworkid, extendedvlan)
+
+        return
+
+    @attr(tags = ["simulator", "advanced"])
+    def test_04_remove_unused_range(self):
+        """
+        Test removing unused vlan range
+        """
+        # 1. Add new non contiguous range to existing vlan range
+        # 2. Remove unused vlan range
+        # 3. Unused vlan range should gte removed successfully
+
+        vlan1 = self.existingvlan+","+self.vlan["partial_range"][0]
+        self.physicalnetwork.update(self.apiClient, id = self.physicalnetworkid, vlan = vlan1)
+
+        vlan2 = vlan1+","+self.vlan["partial_range"][1]
+        self.physicalnetwork.update(self.apiClient, id = self.physicalnetworkid, vlan = vlan2)
+
+        self.debug("Removing vlan : %s" % self.vlan["partial_range"][1])
+
+        self.physicalnetwork.update(self.apiClient, id = self.physicalnetworkid, vlan = vlan1)
+
+        physicalnetworks = PhysicalNetwork.list(self.apiclient, id=self.physicalnetworkid)
+
+        self.assertTrue(isinstance(physicalnetworks, list), "PhysicalNetwork.list should return a \
+                        valid list object")
+
+        self.assertTrue(len(physicalnetworks) > 0, "physical networks list should not be empty")
+
+        vlanranges= physicalnetworks[0].vlan
+
+        self.assert_(vlanranges.find(self.vlan["partial_range"][1]) == -1, "vlan range is not removed")
+
+        return
+
+    @attr(tags = ["simulator", "advanced"])
+    def test_05_remove_used_range(self):
+        """
+        Test removing used vlan range
+        """
+        # 1. If vlan id from existing range is in use, try to delete this range and add different range,
+        #    this operation should fail
+        # 2. If any of existing vlan id is not in use, delete this range and add new vlan range
+        # 3. Use a vlan id from this new range by deploying an instance which
+        #    will create a network with vlan id from this range
+        # 4. Now try to remove this vlan range
+        # 5. Vlan range should not get removed, should throw error
+
+        vlans = xsplit(self.existingvlan, ['-', ','])
+        vlanstartid = int(vlans[0])
+        vlanendid = int(vlans[1])
+
+        networks = list_networks(self.apiclient)
+        existingvlaninuse = False
+
+
+        # Check if any of the vlan id from existing range is in use
+        if isinstance(networks,list) and len(networks) > 0:
+
+            self.debug("networks: %s" % networks)
+
+            vlansinuse = [network for network in networks if network.vlan and (vlanstartid <= int(network.vlan) <= vlanendid)]
+
+            self.debug("Total no. of vlans in use : %s" % len(vlansinuse))
+
+            if len(vlansinuse) > 0:
+                existingvlaninuse = True
+            else:
+                existingvlaninuse = False
+
+        vlan1 = self.vlan["partial_range"][0]
+
+        # If existing vlan id is in use, then try to delete this range, the operation should fail
+        # This serves the test case purpose, hence test case has completed successfully
+        if existingvlaninuse:
+            self.debug("Trying to remove existing vlan in use, This should fail")
+            with self.assertRaises(Exception) as e:
+                self.physicalnetwork.update(self.apiClient, id = self.physicalnetworkid, vlan = vlan1)
+
+            self.debug("operation failed with exception: %s" % e.exception)
+
+        # If any of the existing vlan id is not in use, then add new range and deploy an instance which
+        # will create a network using vlan id from this new range, hence now the new range is in use
+        # Now try to delete this new range and add another range, operation should fail
+        # This serves the test case purpose, hence test case has completed successfully
+        else:
+
+            self.debug("No vlan in use, hence adding a new vlan and using it by deploying an instance")
+
+            self.physicalnetwork.update(self.apiClient, id = self.physicalnetworkid, vlan = vlan1)
+
+            self.debug("Verifying the VLAN of the updated physical network: %s, It should match with \
+                    the passed vlan: %s" % (self.physicalnetworkid,vlan1))
+
+            self.validatePhysicalNetworkVlan(self.physicalnetworkid, vlan1)
+
+            account = Account.create(
+                            self.apiclient,
+                            self.services["account"],
+                            domainid=self.domain.id
+                            )
+
+            self.debug("Deploying instance in the account: %s" %
+                                                account.name)
+
+            self.virtual_machine = VirtualMachine.create(
+                                    self.apiclient,
+                                    self.services["virtual_machine"],
+                                    accountid=account.name,
+                                    domainid=account.domainid,
+                                    serviceofferingid=self.service_offering.id,
+                                    mode=self.zone.networktype
+                                )
+
+            self.debug("Deployed instance in account: %s" %
+                                                    account.name)
+
+
+
+            self.debug("Trying to remove vlan range : %s , This should fail" % self.vlan["partial_range"][0])
+
+            with self.assertRaises(Exception) as e:
+                self.physicalnetwork.update(self.apiClient, id = self.physicalnetworkid, vlan = self.existingvlan)
+
+            self.debug("operation failed with exception: %s" % e.exception)
+
+            account.delete(self.apiclient)
+
+        return


[21/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
CLOUDSTACK-4976
     merge createVmFromTemplate in XSFP1 to CitrixResourceBase instead of fixing one bug in two different place.

Anthony


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

Branch: refs/heads/rbac
Commit: 4f8781f681b9dde979521b384e52f3c195f37dfe
Parents: 8a37f40
Author: Anthony Xu <an...@citrix.com>
Authored: Tue Oct 29 14:01:46 2013 -0700
Committer: Anthony Xu <an...@citrix.com>
Committed: Tue Oct 29 15:20:49 2013 -0700

----------------------------------------------------------------------
 .../xen/resource/CitrixResourceBase.java        | 135 ++++++++++++-------
 .../xen/resource/XenServer56FP1Resource.java    | 133 ------------------
 2 files changed, 86 insertions(+), 182 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4f8781f6/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 6c1efe7..3323a15 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
@@ -174,6 +174,7 @@ import com.cloud.agent.api.to.VolumeTO;
 import com.cloud.exception.InternalErrorException;
 import com.cloud.host.Host.Type;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.hypervisor.xen.resource.CitrixHelper;
 import com.cloud.network.HAProxyConfigurator;
 import com.cloud.network.LoadBalancerConfigurator;
 import com.cloud.network.Networks;
@@ -1249,69 +1250,108 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
 
         return vbd;
     }
+    
+
+    public long getStaticMax(String os, boolean b, long dynamicMinRam, long dynamicMaxRam){
+        return dynamicMaxRam;
+    }
+
+    public long getStaticMin(String os, boolean b, long dynamicMinRam, long dynamicMaxRam){
+        return dynamicMinRam;
+    }
 
     protected VM createVmFromTemplate(Connection conn, VirtualMachineTO vmSpec, Host host) throws XenAPIException, XmlRpcException {
         String guestOsTypeName = getGuestOsType(vmSpec.getOs(), vmSpec.getBootloader() == BootloaderType.CD);
-        if ( guestOsTypeName == null ) {
-            String msg =  " Hypervisor " + this.getClass().getName() + " doesn't support guest OS type " + vmSpec.getOs()
-                    + ". you can choose 'Other install media' to run it as HVM";
-            s_logger.warn(msg);
-            throw new CloudRuntimeException(msg);
-        }
         Set<VM> templates = VM.getByNameLabel(conn, guestOsTypeName);
         assert templates.size() == 1 : "Should only have 1 template but found " + templates.size();
-        if (!templates.iterator().hasNext()) {
-            throw new CloudRuntimeException("No matching OS type found for starting a [" + vmSpec.getOs()
-                    + "] VM on host " + host.getHostname(conn));
-        }
         VM template = templates.iterator().next();
-        VM vm = template.createClone(conn, vmSpec.getName());
-        VM.Record vmr = vm.getRecord(conn);
-        if (s_logger.isDebugEnabled()) {
-            s_logger.debug("Created VM " + vmr.uuid + " for " + vmSpec.getName());
+
+        VM.Record vmr = template.getRecord(conn);
+        vmr.affinity = host;
+        vmr.otherConfig.remove("disks");
+        vmr.otherConfig.remove("default_template");
+        vmr.otherConfig.remove("mac_seed");
+        vmr.isATemplate = false;
+        vmr.nameLabel = vmSpec.getName();
+        vmr.actionsAfterCrash = Types.OnCrashBehaviour.DESTROY;
+        vmr.actionsAfterShutdown = Types.OnNormalExit.DESTROY;
+
+        if (isDmcEnabled(conn, host) && vmSpec.isEnableDynamicallyScaleVm()) {
+            //scaling is allowed
+            vmr.memoryStaticMin = getStaticMin(vmSpec.getOs(), vmSpec.getBootloader() == BootloaderType.CD, vmSpec.getMinRam(), vmSpec.getMaxRam());
+            vmr.memoryStaticMax = getStaticMax(vmSpec.getOs(), vmSpec.getBootloader() == BootloaderType.CD, vmSpec.getMinRam(), vmSpec.getMaxRam());
+            vmr.memoryDynamicMin = vmSpec.getMinRam();
+            vmr.memoryDynamicMax = vmSpec.getMaxRam();
+        } else {
+            //scaling disallowed, set static memory target
+            if (vmSpec.isEnableDynamicallyScaleVm() && !isDmcEnabled(conn, host)) {
+                s_logger.warn("Host "+ host.getHostname(conn) +" does not support dynamic scaling, so the vm " + vmSpec.getName() + " is not dynamically scalable");
+            }
+            vmr.memoryStaticMin = vmSpec.getMinRam();
+            vmr.memoryStaticMax = vmSpec.getMaxRam();
+            vmr.memoryDynamicMin = vmSpec.getMinRam();
+            vmr.memoryDynamicMax = vmSpec.getMaxRam();
         }
 
-        for (Console console : vmr.consoles) {
-            console.destroy(conn);
+        if (guestOsTypeName.toLowerCase().contains("windows")) {
+            vmr.VCPUsMax = (long) vmSpec.getCpus();
+        } else {
+            vmr.VCPUsMax = 32L;
         }
 
-        vm.setIsATemplate(conn, false);
-        vm.setAffinity(conn, host);
-        vm.removeFromOtherConfig(conn, "disks");
-        vm.setNameLabel(conn, vmSpec.getName());
-        setMemory(conn, vm, vmSpec.getMinRam(),vmSpec.getMaxRam());
-        vm.setVCPUsMax(conn, (long)vmSpec.getCpus());
-        vm.setVCPUsAtStartup(conn, (long)vmSpec.getCpus());
+        Map<String, String> details = vmSpec.getDetails();
+        if ( details != null ) {
+            String timeoffset = details.get("timeoffset");
+            if (timeoffset != null) {
+                Map<String, String> platform = vmr.platform;
+                platform.put("timeoffset", timeoffset);
+                vmr.platform = platform;
+            }
+
+            String coresPerSocket = details.get("cpu.corespersocket");
+            if (coresPerSocket != null) {
+                Map<String, String> platform = vmr.platform;
+                platform.put("cores-per-socket", coresPerSocket);
+                vmr.platform = platform;
+            }            
+        }
+
+        vmr.VCPUsAtStartup = (long) vmSpec.getCpus();
+        vmr.consoles.clear();
+
+        VM vm = VM.create(conn, vmr);
+        if (s_logger.isDebugEnabled()) {
+            s_logger.debug("Created VM " + vm.getUuid(conn) + " for " + vmSpec.getName());
+        }
 
         Map<String, String> vcpuParams = new HashMap<String, String>();
 
         Integer speed = vmSpec.getMinSpeed();
         if (speed != null) {
 
-            int cpuWeight = _maxWeight; //cpu_weight
-            long utilization = 0; // max CPU cap, default is unlimited
+            int cpuWeight = _maxWeight; // cpu_weight
+            int utilization = 0; // max CPU cap, default is unlimited
 
-            // weight based allocation
-            cpuWeight = (int)((speed*0.99) / _host.speed * _maxWeight);
+            // weight based allocation, CPU weight is calculated per VCPU
+            cpuWeight = (int) ((speed * 0.99) / _host.speed * _maxWeight);
             if (cpuWeight > _maxWeight) {
                 cpuWeight = _maxWeight;
             }
 
             if (vmSpec.getLimitCpuUse()) {
-                utilization = ((long)speed * 100 * vmSpec.getCpus()) / _host.speed ;
+                // CPU cap is per VM, so need to assign cap based on the number of vcpus
+                utilization = (int) ((speed * 0.99 * vmSpec.getCpus()) / _host.speed * 100);
             }
 
             vcpuParams.put("weight", Integer.toString(cpuWeight));
-            vcpuParams.put("cap", Long.toString(utilization));
+            vcpuParams.put("cap", Integer.toString(utilization));
+
         }
 
         if (vcpuParams.size() > 0) {
             vm.setVCPUsParams(conn, vcpuParams);
         }
 
-        vm.setActionsAfterCrash(conn, Types.OnCrashBehaviour.DESTROY);
-        vm.setActionsAfterShutdown(conn, Types.OnNormalExit.DESTROY);
-
         String bootArgs = vmSpec.getBootArgs();
         if (bootArgs != null && bootArgs.length() > 0) {
             String pvargs = vm.getPVArgs(conn);
@@ -1324,36 +1364,32 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
 
         if (!(guestOsTypeName.startsWith("Windows") || guestOsTypeName.startsWith("Citrix") || guestOsTypeName.startsWith("Other"))) {
             if (vmSpec.getBootloader() == BootloaderType.CD) {
-                DiskTO [] disks = vmSpec.getDisks();
+                DiskTO[] disks = vmSpec.getDisks();
                 for (DiskTO disk : disks) {
-                    Volume.Type type = disk.getType();
-                    if (type == Volume.Type.ISO) {
-                        TemplateObjectTO tmpl = (TemplateObjectTO)disk.getData();
-                        String osType = tmpl.getGuestOsType();
-                        if (tmpl.getFormat() == ImageFormat.ISO && osType != null ) {
-                            String isoGuestOsName = getGuestOsType(osType, vmSpec.getBootloader() == BootloaderType.CD);
-                            if (!isoGuestOsName.equals(guestOsTypeName)) {
-                                vmSpec.setBootloader(BootloaderType.PyGrub);
-                            }
-                        }
+                    if (disk.getType() == Volume.Type.ISO ) {
+                    	TemplateObjectTO iso = (TemplateObjectTO)disk.getData();
+                    	String osType = iso.getGuestOsType();
+                    	if (osType != null) {
+                    		String isoGuestOsName = getGuestOsType(osType, vmSpec.getBootloader() == BootloaderType.CD);
+                    		if (!isoGuestOsName.equals(guestOsTypeName)) {
+                    			vmSpec.setBootloader(BootloaderType.PyGrub);
+                    		}
+                    	}
                     }
                 }
             }
             if (vmSpec.getBootloader() == BootloaderType.CD) {
                 vm.setPVBootloader(conn, "eliloader");
-                Map<String, String> otherConfig = vm.getOtherConfig(conn);
-                if ( ! vm.getOtherConfig(conn).containsKey("install-repository") ) {
-                    otherConfig.put( "install-repository", "cdrom");
+                if (!vm.getOtherConfig(conn).containsKey("install-repository")) {
+                    vm.addToOtherConfig(conn, "install-repository", "cdrom");
                 }
-                vm.setOtherConfig(conn, otherConfig);
-            } else if (vmSpec.getBootloader() == BootloaderType.PyGrub ){
+            } else if (vmSpec.getBootloader() == BootloaderType.PyGrub) {
                 vm.setPVBootloader(conn, "pygrub");
             } else {
                 vm.destroy(conn);
                 throw new CloudRuntimeException("Unable to handle boot loader type: " + vmSpec.getBootloader());
             }
         }
-
         try {
             finalizeVmMetaData(vm, conn, vmSpec);
         } catch ( Exception e) {
@@ -1361,6 +1397,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
         }
         return vm;
     }
+ 
     
     protected void finalizeVmMetaData(VM vm, Connection conn, VirtualMachineTO vmSpec) throws Exception {
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4f8781f6/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java
index 4a9b526..9c65a03 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java
@@ -152,139 +152,6 @@ public class XenServer56FP1Resource extends XenServer56Resource {
         return dynamicMinRam;
     }
 
-    @Override
-    protected VM createVmFromTemplate(Connection conn, VirtualMachineTO vmSpec, Host host) throws XenAPIException, XmlRpcException {
-        String guestOsTypeName = getGuestOsType(vmSpec.getOs(), vmSpec.getBootloader() == BootloaderType.CD);
-        Set<VM> templates = VM.getByNameLabel(conn, guestOsTypeName);
-        assert templates.size() == 1 : "Should only have 1 template but found " + templates.size();
-        VM template = templates.iterator().next();
-
-        VM.Record vmr = template.getRecord(conn);
-        vmr.affinity = host;
-        vmr.otherConfig.remove("disks");
-        vmr.otherConfig.remove("default_template");
-        vmr.otherConfig.remove("mac_seed");
-        vmr.isATemplate = false;
-        vmr.nameLabel = vmSpec.getName();
-        vmr.actionsAfterCrash = Types.OnCrashBehaviour.DESTROY;
-        vmr.actionsAfterShutdown = Types.OnNormalExit.DESTROY;
-
-        if (isDmcEnabled(conn, host) && vmSpec.isEnableDynamicallyScaleVm()) {
-            //scaling is allowed
-            vmr.memoryStaticMin = getStaticMin(vmSpec.getOs(), vmSpec.getBootloader() == BootloaderType.CD, vmSpec.getMinRam(), vmSpec.getMaxRam());
-            vmr.memoryStaticMax = getStaticMax(vmSpec.getOs(), vmSpec.getBootloader() == BootloaderType.CD, vmSpec.getMinRam(), vmSpec.getMaxRam());
-            vmr.memoryDynamicMin = vmSpec.getMinRam();
-            vmr.memoryDynamicMax = vmSpec.getMaxRam();
-        } else {
-            //scaling disallowed, set static memory target
-            if (vmSpec.isEnableDynamicallyScaleVm() && !isDmcEnabled(conn, host)) {
-                s_logger.warn("Host "+ host.getHostname(conn) +" does not support dynamic scaling, so the vm " + vmSpec.getName() + " is not dynamically scalable");
-            }
-            vmr.memoryStaticMin = vmSpec.getMinRam();
-            vmr.memoryStaticMax = vmSpec.getMaxRam();
-            vmr.memoryDynamicMin = vmSpec.getMinRam();
-            vmr.memoryDynamicMax = vmSpec.getMaxRam();
-        }
-
-        if (guestOsTypeName.toLowerCase().contains("windows")) {
-            vmr.VCPUsMax = (long) vmSpec.getCpus();
-        } else {
-            vmr.VCPUsMax = 32L;
-        }
-
-        Map<String, String> details = vmSpec.getDetails();
-        if ( details != null ) {
-            String timeoffset = details.get("timeoffset");
-            if (timeoffset != null) {
-                Map<String, String> platform = vmr.platform;
-                platform.put("timeoffset", timeoffset);
-                vmr.platform = platform;
-            }
-
-            String coresPerSocket = details.get("cpu.corespersocket");
-            if (coresPerSocket != null) {
-                Map<String, String> platform = vmr.platform;
-                platform.put("cores-per-socket", coresPerSocket);
-                vmr.platform = platform;
-            }            
-        }
-
-        vmr.VCPUsAtStartup = (long) vmSpec.getCpus();
-        vmr.consoles.clear();
-
-        VM vm = VM.create(conn, vmr);
-        if (s_logger.isDebugEnabled()) {
-            s_logger.debug("Created VM " + vm.getUuid(conn) + " for " + vmSpec.getName());
-        }
-
-        Map<String, String> vcpuParams = new HashMap<String, String>();
-
-        Integer speed = vmSpec.getMinSpeed();
-        if (speed != null) {
-
-            int cpuWeight = _maxWeight; // cpu_weight
-            int utilization = 0; // max CPU cap, default is unlimited
-
-            // weight based allocation, CPU weight is calculated per VCPU
-            cpuWeight = (int) ((speed * 0.99) / _host.speed * _maxWeight);
-            if (cpuWeight > _maxWeight) {
-                cpuWeight = _maxWeight;
-            }
-
-            if (vmSpec.getLimitCpuUse()) {
-                // CPU cap is per VM, so need to assign cap based on the number of vcpus
-                utilization = (int) ((speed * 0.99 * vmSpec.getCpus()) / _host.speed * 100);
-            }
-
-            vcpuParams.put("weight", Integer.toString(cpuWeight));
-            vcpuParams.put("cap", Integer.toString(utilization));
-
-        }
-
-        if (vcpuParams.size() > 0) {
-            vm.setVCPUsParams(conn, vcpuParams);
-        }
-
-        String bootArgs = vmSpec.getBootArgs();
-        if (bootArgs != null && bootArgs.length() > 0) {
-            String pvargs = vm.getPVArgs(conn);
-            pvargs = pvargs + vmSpec.getBootArgs().replaceAll(" ", "%");
-            if (s_logger.isDebugEnabled()) {
-                s_logger.debug("PV args are " + pvargs);
-            }
-            vm.setPVArgs(conn, pvargs);
-        }
-
-        if (!(guestOsTypeName.startsWith("Windows") || guestOsTypeName.startsWith("Citrix") || guestOsTypeName.startsWith("Other"))) {
-            if (vmSpec.getBootloader() == BootloaderType.CD) {
-                DiskTO[] disks = vmSpec.getDisks();
-                for (DiskTO disk : disks) {
-                    if (disk.getType() == Volume.Type.ISO ) {
-                    	TemplateObjectTO iso = (TemplateObjectTO)disk.getData();
-                    	String osType = iso.getGuestOsType();
-                    	if (osType != null) {
-                    		String isoGuestOsName = getGuestOsType(osType, vmSpec.getBootloader() == BootloaderType.CD);
-                    		if (!isoGuestOsName.equals(guestOsTypeName)) {
-                    			vmSpec.setBootloader(BootloaderType.PyGrub);
-                    		}
-                    	}
-                    }
-                }
-            }
-            if (vmSpec.getBootloader() == BootloaderType.CD) {
-                vm.setPVBootloader(conn, "eliloader");
-                if (!vm.getOtherConfig(conn).containsKey("install-repository")) {
-                    vm.addToOtherConfig(conn, "install-repository", "cdrom");
-                }
-            } else if (vmSpec.getBootloader() == BootloaderType.PyGrub) {
-                vm.setPVBootloader(conn, "pygrub");
-            } else {
-                vm.destroy(conn);
-                throw new CloudRuntimeException("Unable to handle boot loader type: " + vmSpec.getBootloader());
-            }
-        }
-        return vm;
-    }
 
     /**
      * When Dynamic Memory Control (DMC) is enabled -


[40/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
Revert "fixed m2eclipse error" because it breaks packaging

This reverts commit 5bcd8280fdd1e9039a6bf6c4c4fd43b8b49f938e.


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

Branch: refs/heads/rbac
Commit: 9d2271d115f400f467017eb4af6fa2d7ebe5b77e
Parents: 25d4333
Author: Hugo Trippaers <ht...@schubergphilis.com>
Authored: Wed Oct 30 20:17:59 2013 +0100
Committer: Hugo Trippaers <ht...@schubergphilis.com>
Committed: Wed Oct 30 20:17:59 2013 +0100

----------------------------------------------------------------------
 agent/pom.xml                            | 139 +++++++++++++-------------
 plugins/hypervisors/kvm/pom.xml          |  62 ++++++------
 plugins/user-authenticators/ldap/pom.xml | 128 ++++++++++++------------
 usage/pom.xml                            | 138 +++++++++++++------------
 4 files changed, 230 insertions(+), 237 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9d2271d1/agent/pom.xml
----------------------------------------------------------------------
diff --git a/agent/pom.xml b/agent/pom.xml
index ec1ddde..1413322 100644
--- a/agent/pom.xml
+++ b/agent/pom.xml
@@ -46,75 +46,74 @@
     </dependency>    
   </dependencies>
   <build>
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <artifactId>maven-antrun-plugin</artifactId>
-          <executions>
-            <execution>
-              <id>generate-resource</id>
-              <phase>generate-resources</phase>
-              <goals>
-                <goal>run</goal>
-              </goals>
-              <configuration>
-                <target>
-                  <copy todir="${basedir}/target/transformed">
-                    <fileset dir="${basedir}/conf">
-                      <include name="agent.properties" />
-                    </fileset>
-                  </copy>
-                  <copy overwrite="true"
-                    todir="${basedir}/target/transformed">
-                    <fileset dir="${basedir}/conf">
-                      <include name="*.in" />
-                    </fileset>
-                    <globmapper from="*.in" to="*" />
-                    <filterchain>
-                      <filterreader
-                        classname="org.apache.tools.ant.filters.ReplaceTokens">
-                        <param type="propertiesfile"
-                          value="${cs.replace.properties}" />
-                      </filterreader>
-                    </filterchain>
-                  </copy>
-                  <copy overwrite="true"
-                    todir="${basedir}/target/transformed">
-                    <fileset dir="${basedir}/bindir">
-                      <include name="*.in" />
-                    </fileset>
-                    <globmapper from="*.in" to="*" />
-                    <filterchain>
-                      <filterreader
-                        classname="org.apache.tools.ant.filters.ReplaceTokens">
-                        <param type="propertiesfile"
-                           value="${cs.replace.properties}" />
-                      </filterreader>
-                    </filterchain>
-                  </copy>
-                </target>
-              </configuration>
-            </execution>
-          </executions>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-dependency-plugin</artifactId>
-          <executions>
-            <execution>
-              <id>copy-dependencies</id>
-              <phase>package</phase>
-              <goals>
-                <goal>copy-dependencies</goal>
-              </goals>
-              <configuration>
-                <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
-                <includeScope>runtime</includeScope>
-              </configuration>
-            </execution>
-          </executions>
-        </plugin>
-      </plugins>
-    </pluginManagement>
+    <plugins>
+      <plugin>
+        <artifactId>maven-antrun-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>generate-resource</id>
+            <phase>generate-resources</phase>
+            <goals>
+              <goal>run</goal>
+            </goals>
+            <configuration>
+              <target>
+                <copy
+                  todir="${basedir}/target/transformed">
+                  <fileset dir="${basedir}/conf">
+                    <include name="agent.properties" />
+                  </fileset>
+                </copy>
+                <copy overwrite="true"
+                  todir="${basedir}/target/transformed">
+                  <fileset dir="${basedir}/conf">
+                    <include name="*.in" />
+                  </fileset>
+                  <globmapper from="*.in" to="*" />
+                  <filterchain>
+                    <filterreader
+                      classname="org.apache.tools.ant.filters.ReplaceTokens">
+                      <param type="propertiesfile"
+                        value="${cs.replace.properties}" />
+                    </filterreader>
+                  </filterchain>
+                </copy>
+                <copy overwrite="true"
+                  todir="${basedir}/target/transformed">
+                  <fileset dir="${basedir}/bindir">
+                    <include name="*.in" />
+                  </fileset>
+                  <globmapper from="*.in" to="*" />
+                  <filterchain>
+                    <filterreader
+                      classname="org.apache.tools.ant.filters.ReplaceTokens">
+                      <param type="propertiesfile"
+                        value="${cs.replace.properties}" />
+                    </filterreader>
+                  </filterchain>
+                </copy>
+              </target>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>copy-dependencies</id>
+            <phase>package</phase>
+            <goals>
+              <goal>copy-dependencies</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
+              <includeScope>runtime</includeScope>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
   </build>
 </project>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9d2271d1/plugins/hypervisors/kvm/pom.xml
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/pom.xml b/plugins/hypervisors/kvm/pom.xml
index 0c0001f..e279621 100644
--- a/plugins/hypervisors/kvm/pom.xml
+++ b/plugins/hypervisors/kvm/pom.xml
@@ -58,37 +58,35 @@
     <defaultGoal>install</defaultGoal>
     <sourceDirectory>src</sourceDirectory>
     <testSourceDirectory>test</testSourceDirectory>
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-dependency-plugin</artifactId>
-          <version>2.5.1</version>
-          <executions>
-            <execution>
-              <id>copy-dependencies</id>
-              <phase>package</phase>
-              <goals>
-                <goal>copy-dependencies</goal>
-              </goals>
-              <configuration>
-                <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
-                <includeScope>runtime</includeScope>
-              </configuration>
-            </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>
-    </pluginManagement>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <version>2.5.1</version>
+        <executions>
+          <execution>
+            <id>copy-dependencies</id>
+            <phase>package</phase>
+            <goals>
+              <goal>copy-dependencies</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
+              <includeScope>runtime</includeScope>
+            </configuration>
+          </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/9d2271d1/plugins/user-authenticators/ldap/pom.xml
----------------------------------------------------------------------
diff --git a/plugins/user-authenticators/ldap/pom.xml b/plugins/user-authenticators/ldap/pom.xml
index 5ecb45c..1f9dea0 100644
--- a/plugins/user-authenticators/ldap/pom.xml
+++ b/plugins/user-authenticators/ldap/pom.xml
@@ -20,78 +20,76 @@
   </parent>
 
   <build>
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <groupId>org.codehaus.gmaven</groupId>
-          <artifactId>gmaven-plugin</artifactId>
-          <version>1.3</version>
-          <configuration>
-            <providerSelection>1.7</providerSelection>
-          </configuration>
-          <executions>
-            <execution>
-              <goals>
-                <goal>compile</goal>
-                <goal>testCompile</goal>
-              </goals>
-              <configuration>
-                <sources>
-                  <fileset>
-                    <directory>test/groovy</directory>
-                    <includes>
-                      <include>**/*.groovy</include>
-                    </includes>
-                  </fileset>
-                </sources>
-              </configuration>
-            </execution>
-          </executions>
-          <dependencies>
-            <dependency>
-              <groupId>org.codehaus.gmaven.runtime</groupId>
-              <artifactId>gmaven-runtime-1.7</artifactId>
-              <version>1.3</version>
-              <exclusions>
-                <exclusion>
-                  <groupId>org.codehaus.groovy</groupId>
-                  <artifactId>groovy-all</artifactId>
-                </exclusion>
-              </exclusions>
-            </dependency>
-            <dependency>
-              <groupId>org.codehaus.groovy</groupId>
-              <artifactId>groovy-all</artifactId>
-              <version>2.0.5</version>
-            </dependency>
-          </dependencies>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-surefire-plugin</artifactId>
-          <configuration>
-            <includes>
-              <include>**/*Spec*</include>
-            </includes>
-          </configuration>
-        </plugin>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.gmaven</groupId>
+        <artifactId>gmaven-plugin</artifactId>
+        <version>1.3</version>
+        <configuration>
+          <providerSelection>1.7</providerSelection>
+        </configuration>
+        <executions>
+          <execution>
+            <goals>
+              <goal>compile</goal>
+              <goal>testCompile</goal>
+            </goals>
+            <configuration>
+              <sources>
+                <fileset>
+                  <directory>test/groovy</directory>
+                  <includes>
+                    <include>**/*.groovy</include>
+                  </includes>
+                </fileset>
+              </sources>
+            </configuration>
+          </execution>
+        </executions>
+        <dependencies>
+          <dependency>
+            <groupId>org.codehaus.gmaven.runtime</groupId>
+            <artifactId>gmaven-runtime-1.7</artifactId>
+            <version>1.3</version>
+            <exclusions>
+              <exclusion>
+                <groupId>org.codehaus.groovy</groupId>
+                <artifactId>groovy-all</artifactId>
+              </exclusion>
+            </exclusions>
+          </dependency>
+          <dependency>
+            <groupId>org.codehaus.groovy</groupId>
+            <artifactId>groovy-all</artifactId>
+            <version>2.0.5</version>
+          </dependency>
+        </dependencies>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <includes>
+            <include>**/*Spec*</include>
+          </includes>
+        </configuration>
+      </plugin>
 
-        <plugin>
-          <groupId>com.btmatthews.maven.plugins</groupId>
-          <artifactId>ldap-maven-plugin</artifactId>
-          <version>1.1.0</version>
-          <configuration>
-            <monitorPort>11389</monitorPort>
+      <plugin>
+        <groupId>com.btmatthews.maven.plugins</groupId>
+        <artifactId>ldap-maven-plugin</artifactId>
+        <version>1.1.0</version>
+        <configuration>
+          <monitorPort>11389</monitorPort>
             <monitorKey>ldap</monitorKey>
             <daemon>false</daemon>
             <rootDn>dc=cloudstack,dc=org</rootDn>
             <ldapPort>10389</ldapPort>
             <ldifFile>test/resources/cloudstack.org.ldif</ldifFile>
-          </configuration>
-        </plugin>
+        </configuration>
+      </plugin>
 
-      </plugins>
-    </pluginManagement>
+    </plugins>
   </build>
 
   <dependencies>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9d2271d1/usage/pom.xml
----------------------------------------------------------------------
diff --git a/usage/pom.xml b/usage/pom.xml
index 19929d6..04d1630 100644
--- a/usage/pom.xml
+++ b/usage/pom.xml
@@ -51,76 +51,74 @@
         <directory>resources</directory>
       </resource>
     </resources>
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-surefire-plugin</artifactId>
-          <configuration>
-            <excludes>
-              <exclude>com/cloud/usage/UsageManagerTest.java</exclude>
-            </excludes>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-dependency-plugin</artifactId>
-          <executions>
-            <execution>
-              <id>copy-dependencies</id>
-              <phase>package</phase>
-              <goals>
-                <goal>copy-dependencies</goal>
-              </goals>
-              <configuration>
-                <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
-                <includeScope>runtime</includeScope>
-              </configuration>
-            </execution>
-          </executions>
-        </plugin>
-        <plugin>
-          <artifactId>maven-antrun-plugin</artifactId>
-          <executions>
-            <execution>
-              <id>generate-resource</id>
-              <phase>generate-resources</phase>
-              <goals>
-                <goal>run</goal>
-              </goals>
-              <configuration>
-                <target>
-                  <copy overwrite="true" todir="${basedir}/target/transformed">
-                    <fileset dir="${basedir}/../client/tomcatconf">
-                      <include name="**/db.properties.in" />
-                    </fileset>
-                    <globmapper from="*.in" to="*" />
-                    <filterchain>
-                      <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
-                        <param type="propertiesfile" value="${cs.replace.properties}" />
-                      </filterreader>
-                    </filterchain>
-                  </copy>
-                </target>
-                <target>
-                  <copy overwrite="true" todir="${basedir}/target/transformed">
-                    <fileset dir="${basedir}/conf">
-                      <include name="*.in" />
-                    </fileset>
-                    <globmapper from="*.in" to="*" />
-                    <filterchain>
-                      <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
-                        <param type="propertiesfile" value="${cs.replace.properties}" />
-                      </filterreader>
-                    </filterchain>
-                  </copy>
-                </target>
-              </configuration>
-            </execution>
-          </executions>
-        </plugin>
-      </plugins>
-    </pluginManagement>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <excludes>
+            <exclude>com/cloud/usage/UsageManagerTest.java</exclude>
+          </excludes>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>copy-dependencies</id>
+            <phase>package</phase>
+            <goals>
+              <goal>copy-dependencies</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
+              <includeScope>runtime</includeScope>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <artifactId>maven-antrun-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>generate-resource</id>
+            <phase>generate-resources</phase>
+            <goals>
+              <goal>run</goal>
+            </goals>
+            <configuration>
+              <target>
+                <copy overwrite="true" todir="${basedir}/target/transformed">
+                  <fileset dir="${basedir}/../client/tomcatconf">
+                    <include name="**/db.properties.in" />
+                  </fileset>
+                  <globmapper from="*.in" to="*" />
+                  <filterchain>
+                    <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
+                      <param type="propertiesfile" value="${cs.replace.properties}" />
+                    </filterreader>
+                  </filterchain>
+                </copy>
+              </target>
+              <target>
+                <copy overwrite="true" todir="${basedir}/target/transformed">
+                  <fileset dir="${basedir}/conf">
+                    <include name="*.in" />
+                  </fileset>
+                  <globmapper from="*.in" to="*" />
+                  <filterchain>
+                    <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
+                      <param type="propertiesfile" value="${cs.replace.properties}" />
+                    </filterreader>
+                  </filterchain>
+                </copy>
+              </target>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
   </build>
   <profiles>
     <profile>


[23/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
CLOUDSTACK-4758: UI > VM wizard > step 2 > show Root Disk Size field when listing is templates, hide Root Disk Size field when listing is ISOs.


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

Branch: refs/heads/rbac
Commit: 1d1f5850795b5bd9ffc316576fed9197d89e0d1d
Parents: 5bcd828
Author: Jessica Wang <je...@apache.org>
Authored: Tue Oct 29 15:19:09 2013 -0700
Committer: Jessica Wang <je...@apache.org>
Committed: Tue Oct 29 15:22:10 2013 -0700

----------------------------------------------------------------------
 ui/scripts/instanceWizard.js | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1d1f5850/ui/scripts/instanceWizard.js
----------------------------------------------------------------------
diff --git a/ui/scripts/instanceWizard.js b/ui/scripts/instanceWizard.js
index 484b18c..d2cde2f 100644
--- a/ui/scripts/instanceWizard.js
+++ b/ui/scripts/instanceWizard.js
@@ -238,8 +238,12 @@
                         templates: templatesObj,
                         hypervisors: hypervisorObjs
                     },
-                    customHidden: function(args) {
-                        return true;
+                    customHidden: function(args) {                        
+                        if (selectedTemplate == 'select-template') {
+                            return false; //show Root Disk Size field
+                        } else { //selectedTemplate == 'select-iso'
+                        	return true;  //hide Root Disk Size field
+                        }                       
                     }
                 });
             },


[07/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
Adding missing test cases: Snapshots Improvement


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

Branch: refs/heads/rbac
Commit: 1972d6121db6bbc21e5db35ab9787f98ed10527e
Parents: 9c57e13
Author: Gaurav Aradhye <ga...@clogeny.com>
Authored: Wed Sep 18 00:33:03 2013 -0400
Committer: SrikanteswaraRao Talluri <ta...@apache.org>
Committed: Tue Oct 29 23:42:38 2013 +0530

----------------------------------------------------------------------
 .../component/test_snapshots_improvement.py     | 693 +++++++++++++++++++
 tools/marvin/marvin/asyncJobMgr.py              |   4 +-
 2 files changed, 695 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1972d612/test/integration/component/test_snapshots_improvement.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_snapshots_improvement.py b/test/integration/component/test_snapshots_improvement.py
new file mode 100644
index 0000000..190db55
--- /dev/null
+++ b/test/integration/component/test_snapshots_improvement.py
@@ -0,0 +1,693 @@
+# 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.
+
+""" P1 tests for Snapshots Improvements
+"""
+# Import Local Modules
+from nose.plugins.attrib import attr
+from marvin.cloudstackTestCase import cloudstackTestCase, unittest
+from marvin.integration.lib.utils import (random_gen)
+from marvin.integration.lib.base import (
+                                        Account,
+                                        ServiceOffering,
+                                        VirtualMachine,
+                                        Snapshot,
+                                        Template,
+                                        Volume,
+                                        DiskOffering
+                                        )
+from marvin.integration.lib.common import (get_domain,
+                                        get_zone,
+                                        get_template,
+                                        cleanup_resources,
+                                        list_snapshots
+                                        )
+from marvin.cloudstackAPI import (createSnapshot,
+                                  createVolume,
+                                  createTemplate,
+                                  listOsTypes,
+                                  stopVirtualMachine
+                                  )
+from marvin.integration.lib.utils import is_snapshot_on_nfs
+
+
+class Services:
+    def __init__(self):
+        self.services = {
+                        "service_offering": {
+                                    "name": "Tiny Instance",
+                                    "displaytext": "Tiny Instance",
+                                    "cpunumber": 1,
+                                    "cpuspeed": 200,    # in MHz
+                                    "memory": 256,    # In MBs
+                        },
+                         "service_offering2": {
+                                    "name": "Med Instance",
+                                    "displaytext": "Med Instance",
+                                    "cpunumber": 1,
+                                    "cpuspeed": 1000,    # In MHz
+                                    "memory": 1024,    # In MBs
+                        },
+                        "disk_offering": {
+                                    "displaytext": "Small Disk",
+                                    "name": "Small Disk",
+                                    "disksize": 1,
+                                    "storagetype": "shared",
+                        },
+                        "disk_offering2": {
+                                    "displaytext": "Med Disk",
+                                    "name": "Med Disk",
+                                    "disksize": 5,
+                                    "storagetype": "shared",
+                        },
+                        "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",
+                        },
+                        "virtual_machine": {
+                                    "displayname": "TestVM",
+                                    "username": "root",
+                                    "password": "password",
+                                    "ssh_port": 22,
+                                    "hypervisor": 'XenServer',
+                                    "privateport": 22,
+                                    "publicport": 22,
+                                    "protocol": 'TCP',
+                        },
+                        "template": {
+                                    "displaytext": "Public Template",
+                                    "name": "Public template",
+                                    "ostype": 'CentOS 5.3 (64-bit)',
+                                    "isfeatured": True,
+                                    "ispublic": True,
+                                    "isextractable": True,
+                                    "templatefilter": 'self',
+                        },
+                        "volume": {
+                                   "diskname": "TestDiskServ",
+                                   "size": 1,    # GBs
+                        },
+                        "diskdevice": "/dev/xvda",
+                        "rootdisk": "/dev/xvda",
+
+                        "mount_dir": "/mnt/tmp",
+                        "sub_dir": "test",
+                        "sub_lvl_dir1": "test1",
+                        "sub_lvl_dir2": "test2",
+                        "random_data": "random.data",
+
+                        "ostype": 'CentOS 5.3 (64-bit)',
+                        "NumberOfThreads": 1,
+                        "sleep": 60,
+                        "timeout": 10,
+                        "mode": 'advanced',
+                        # Networking mode: Advanced, Basic
+                }
+
+class TestSnapshotOnRootVolume(cloudstackTestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        cls.api_client = super(TestSnapshotOnRootVolume,
+                               cls).getClsTestClient().getApiClient()
+        cls.services = Services().services
+        cls.domain = get_domain(cls.api_client, cls.services)
+        cls.zone = get_zone(cls.api_client, cls.services)
+        cls.template = get_template(
+                                    cls.api_client,
+                                    cls.zone.id,
+                                    cls.services["ostype"])
+        cls.account = Account.create(cls.api_client,
+                                     cls.services["account"],
+                                     domainid=cls.domain.id)
+        # pdb.set_trace()
+        cls.service_offering = ServiceOffering.create(
+                                            cls.api_client,
+                                            cls.services["service_offering"])
+        cls.disk_offering = DiskOffering.create(
+                                    cls.api_client,
+                                    cls.services["disk_offering"],
+                                    domainid=cls.domain.id)
+        cls.service_offering2 = ServiceOffering.create(
+                                            cls.api_client,
+                                            cls.services["service_offering2"])
+        cls.disk_offering2 = DiskOffering.create(
+                                    cls.api_client,
+                                    cls.services["disk_offering2"],
+                                    domainid=cls.domain.id)
+
+        cls._cleanup = [cls.account,
+                        cls.service_offering,
+                        cls.disk_offering,
+                        cls.service_offering2,
+                        cls.disk_offering2]
+
+    @classmethod
+    def tearDownClass(cls):
+        try:
+            # Cleanup resources used
+            cleanup_resources(cls.api_client, cls._cleanup)
+        except Exception as e:
+            raise Exception("Warning: Exception during cleanup : %s" % e)
+        return
+
+    def setUp(self):
+        self.apiclient = self.testClient.getApiClient()
+        self.dbclient = self.testClient.getDbConnection()
+        self.cleanup = []
+        return
+
+    def tearDown(self):
+        try:
+            # Clean up, terminate the created instance, volumes and snapshots
+            cleanup_resources(self.apiclient, self.cleanup)
+        except Exception as e:
+            raise Exception("Warning: Exception during cleanup : %s" % e)
+        return
+
+    @attr(tags=["advanced", "basic"])
+    def test_01_snapshot_on_rootVolume(self):
+        """Test create VM with default cent os template and create snapshot
+            on root disk of the vm
+        """
+        # Validate the following
+        # 1. Deploy a Linux VM using default CentOS template, use small service
+        #    offering, disk offering
+        # 2. Create snapshot on the root disk of this newly cteated vm
+        # 3. listSnapshots should list the snapshot that was created.
+        # 4. verify that secondary storage NFS share contains the reqd
+        # volume under /secondary/snapshots/$accountid/$volumeid/$snapshot_uuid
+        # 5. verify backup_snap_id was non null in the `snapshots` table
+
+        # Create virtual machine with small systerm offering and disk offering
+        new_virtual_machine = VirtualMachine.create(
+                                    self.apiclient,
+                                    self.services["virtual_machine"],
+                                    templateid=self.template.id,
+                                    zoneid=self.zone.id,
+                                    accountid=self.account.name,
+                                    domainid=self.account.domainid,
+                                    serviceofferingid=self.service_offering.id,
+                                    diskofferingid=self.disk_offering.id,
+                                )
+        self.debug("Virtual machine got created with id: %s" %
+                                                    new_virtual_machine.id)
+        list_virtual_machine_response = VirtualMachine.list(
+                                                    self.apiclient,
+                                                    id=new_virtual_machine.id)
+        self.assertEqual(isinstance(list_virtual_machine_response, list),
+                         True,
+                         "Check listVirtualMachines returns a valid list")
+
+        self.assertNotEqual(len(list_virtual_machine_response),
+                            0,
+                            "Check listVirtualMachines response")
+        self.cleanup.append(new_virtual_machine)
+
+        # Getting root volume id of the vm created above
+        list_volume_response = Volume.list(
+                                self.apiclient,
+                                virtualmachineid=list_virtual_machine_response[0].id,
+                                type="ROOT",
+                                account=self.account.name,
+                                domainid=self.account.domainid)
+
+        self.assertEqual(isinstance(list_volume_response, list),
+                         True,
+                         "Check listVolumes returns a valid list")
+        self.assertNotEqual(len(list_volume_response),
+                            0,
+                            "Check listVolumes response")
+        self.debug(
+            "Snapshot will be created on the volume with voluem id: %s" %
+                                                    list_volume_response[0].id)
+
+        # Perform snapshot on the root volume
+        root_volume_snapshot = Snapshot.create(
+                                        self.apiclient,
+                                       volume_id=list_volume_response[0].id)
+        self.debug("Created snapshot: %s for vm: %s" % (
+                                        root_volume_snapshot.id,
+                                        list_virtual_machine_response[0].id))
+        list_snapshot_response = Snapshot.list(
+                                        self.apiclient,
+                                        id=root_volume_snapshot.id,
+                                        account=self.account.name,
+                                        domainid=self.account.domainid)
+        self.assertEqual(isinstance(list_snapshot_response, list),
+                         True,
+                         "Check listSnapshots returns a valid list")
+
+        self.assertNotEqual(len(list_snapshot_response),
+                            0,
+                            "Check listSnapshots response")
+        # Verify Snapshot state
+        self.assertEqual(
+                            list_snapshot_response[0].state in [
+                                                                'BackedUp',
+                                                                'CreatedOnPrimary'
+                                                                ],
+                            True,
+                            "Snapshot state is not as expected. It is %s" %
+                            list_snapshot_response[0].state
+                        )
+
+        self.assertEqual(
+                list_snapshot_response[0].volumeid,
+                list_volume_response[0].id,
+                "Snapshot volume id is not matching with the vm's volume id")
+        self.cleanup.append(root_volume_snapshot)
+
+        # Below code is to verify snapshots in the backend and in db.
+        # Verify backup_snap_id field in the snapshots table for the snapshot created, it should not be null
+
+        self.debug("select id, removed, backup_snap_id from snapshots where uuid = '%s';" % root_volume_snapshot.id)
+        qryresult = self.dbclient.execute("select id, removed, backup_snap_id from snapshots where uuid = '%s';" % root_volume_snapshot.id)
+        self.assertNotEqual(len(qryresult), 0, "Check sql query to return snapshots list")
+        snapshot_qry_response = qryresult[0]
+        snapshot_id = snapshot_qry_response[0]
+        is_removed = snapshot_qry_response[1]
+        backup_snap_id = snapshot_qry_response[2]
+        self.assertNotEqual(is_removed, "NULL", "Snapshot is removed from CS, please check the logs")
+        msg = "Backup snapshot id is set to null for the backedup snapshot :%s" % snapshot_id
+        self.assertNotEqual(backup_snap_id, "NULL", msg )
+
+        # Check if the snapshot is present on the secondary storage
+        self.assertTrue(is_snapshot_on_nfs(self.apiclient, self.dbclient, self.config, self.zone.id, root_volume_snapshot.id))
+
+        return
+
+class TestCreateSnapshot(cloudstackTestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        cls.api_client = super(
+                               TestCreateSnapshot,
+                               cls).getClsTestClient().getApiClient()
+        cls.services = Services().services
+        # Get Zone, Domain and templates
+        cls.domain = get_domain(cls.api_client, cls.services)
+        cls.zone = get_zone(cls.api_client, cls.services)
+
+        cls.template = get_template(
+                            cls.api_client,
+                            cls.zone.id,
+                            cls.services["ostype"]
+                            )
+
+        cls.services["virtual_machine"]["zoneid"] = cls.zone.id
+
+        # Create VMs, NAT Rules etc
+        cls.service_offering = ServiceOffering.create(
+                                            cls.api_client,
+                                            cls.services["service_offering"]
+                                            )
+        cls._cleanup = [
+                        cls.service_offering,
+                        ]
+        return
+
+    @classmethod
+    def tearDownClass(cls):
+        try:
+            # Cleanup resources used
+            cleanup_resources(cls.api_client, cls._cleanup)
+        except Exception as e:
+            raise Exception("Warning: Exception during cleanup : %s" % e)
+        return
+
+    def setUp(self):
+        self.apiclient = self.testClient.getApiClient()
+        self.dbclient = self.testClient.getDbConnection()
+
+        self.account = Account.create(
+                            self.apiclient,
+                            self.services["account"],
+                            domainid=self.domain.id
+                            )
+        self.cleanup = [self.account, ]
+        return
+
+    def tearDown(self):
+        try:
+            # Clean up, terminate the created instance, volumes and snapshots
+            cleanup_resources(self.apiclient, self.cleanup)
+        except Exception as e:
+            raise Exception("Warning: Exception during cleanup : %s" % e)
+        return
+
+    def create_VM(self, host_id=None):
+        try:
+            self.debug('Creating VM for account=%s' %
+                                            self.account.name)
+            vm = VirtualMachine.create(
+                                    self.apiclient,
+                                    self.services["virtual_machine"],
+                                    templateid=self.template.id,
+                                    accountid=self.account.name,
+                                    domainid=self.account.domainid,
+                                    serviceofferingid=self.service_offering.id,
+                                    hostid=host_id,
+                                    mode=self.services["mode"]
+                                    )
+            self.debug('Created VM=%s in account=%s' %
+                                        (vm.id, self.account.name))
+            return vm
+        except Exception as e:
+            self.fail('Unable to deploy VM in a account=%s - %s' %
+                                                (self.account.name, e))
+
+    def stop_VM(self, virtual_machine):
+        """ Return Stop Virtual Machine command"""
+
+        cmd = stopVirtualMachine.stopVirtualMachineCmd()
+        cmd.id = virtual_machine.id
+        return cmd
+
+    def create_Snapshot_On_Root_Disk(self, virtual_machine):
+        try:
+            volumes = Volume.list(
+                                  self.apiclient,
+                                  virtualmachineid=virtual_machine.id,
+                                  type='ROOT',
+                                  listall=True
+                                  )
+            self.assertEqual(
+                            isinstance(volumes, list),
+                            True,
+                            "Check list response returns a valid list"
+                        )
+            volume = volumes[0]
+
+            cmd = createSnapshot.createSnapshotCmd()
+            cmd.volumeid = volume.id
+            cmd.account = self.account.name
+            cmd.domainid = self.account.domainid
+            return cmd
+        except Exception as e:
+            self.fail('Unable to create new job for snapshot: %s' % e)
+
+    def create_Template_from_Snapshot(self, snapshot):
+        try:
+            self.debug("Creating template from snapshot: %s" % snapshot.name)
+
+            cmd = createTemplate.createTemplateCmd()
+            cmd.displaytext = self.services["template"]["displaytext"]
+            cmd.name = "-".join([self.services["template"]["name"],
+                                 random_gen()])
+
+            ncmd = listOsTypes.listOsTypesCmd()
+            ncmd.description = self.services["template"]["ostype"]
+            ostypes = self.apiclient.listOsTypes(ncmd)
+
+            if not isinstance(ostypes, list):
+                raise Exception(
+                    "Unable to find Ostype id with desc: %s" %
+                                        self.services["template"]["ostype"])
+            cmd.ostypeid = ostypes[0].id
+            cmd.snapshotid = snapshot.id
+
+            return cmd
+        except Exception as e:
+            self.fail("Failed to create template from snapshot: %s - %s" %
+                                                        (snapshot.name, e))
+
+    def create_Volume_from_Snapshot(self, snapshot):
+        try:
+            self.debug("Creating volume from snapshot: %s" % snapshot.name)
+
+            cmd = createVolume.createVolumeCmd()
+            cmd.name = "-".join([
+                                self.services["volume"]["diskname"],
+                                random_gen()])
+            cmd.snapshotid = snapshot.id
+            cmd.zoneid = self.zone.id
+            cmd.size = self.services["volume"]["size"]
+            cmd.account = self.account.name
+            cmd.domainid = self.account.domainid
+            return cmd
+        except Exception as e:
+            self.fail("Failed to create volume from snapshot: %s - %s" %
+                                                        (snapshot.name, e))
+
+    def create_Snapshot_VM(self):
+        """Creates a virtual machine and take a snapshot on root disk
+
+            1. Create a virtual machine
+            2. SSH into virtual machine
+            3. Create dummy folders on the ROOT disk of the virtual machine
+            4. Take a snapshot of ROOT disk"""
+
+        jobs = []
+        self.debug("Deploying VM for account: %s" % self.account.name)
+        for i in range(self.services["NumberOfThreads"]):
+            vm = self.create_VM()
+
+            self.debug("Create snapshot on ROOT disk")
+            jobs.append(self.create_Snapshot_On_Root_Disk(vm))
+
+        # Submit snapshot job at one go
+        self.testClient.submitCmdsAndWait(jobs)
+        return
+
+    def create_Snaphot_Stop_VM(self):
+        """Creates a snapshot on ROOT disk while vm is in stopping state
+
+            1. Create a virtual machine
+            2. SSH into virtual machine
+            3. Create dummy folders on the ROOT disk of the virtual machine
+            4. Create snapshot on ROOT disk
+            5. Stop virtual machine while snapshots are taken on ROOT disk"""
+
+
+        jobs = []
+        self.debug("Deploying VM for account: %s" % self.account.name)
+        for i in range(self.services["NumberOfThreads"]):
+            vm = self.create_VM()
+
+            self.debug("Create thread to stop virtual machine: %s" % vm.name)
+            jobs.append(self.stop_VM(vm))
+
+            self.debug("Create snapshot on ROOT disk")
+            jobs.append(self.create_Snapshot_On_Root_Disk(vm))
+
+        self.debug("Running concurrent migration jobs in account: %s" %
+                                                    self.account.name)
+        # Submit snapshot job at one go
+        self.testClient.submitCmdsAndWait(jobs)
+
+        return
+
+    def get_Snapshots_For_Account(self, account, domainid):
+        try:
+            snapshots = list_snapshots(
+                                      self.apiclient,
+                                      account=account,
+                                      domainid=domainid,
+                                      listall=True,
+                                      key='type',
+                                      value='manual'
+                                      )
+            self.debug("List Snapshots result : %s" % snapshots)
+            self.assertEqual(
+                             isinstance(snapshots, list),
+                             True,
+                             "List snapshots shall return a valid list"
+                             )
+            return snapshots
+        except Exception as e:
+            self.fail("Failed to fetch snapshots for account: %s - %s" %
+                                                                (account, e))
+
+    def verify_Snapshots(self):
+        try:
+            self.debug("Listing snapshots for accout : %s" % self.account.name)
+            snapshots = self.get_Snapshots_For_Account(
+                                            self.account.name,
+                                            self.account.domainid)
+            self.assertEqual(
+                    len(snapshots),
+                    int(self.services["NumberOfThreads"]),
+                    "No of snapshots should equal to no of threads spawned"
+                 )
+        except Exception as e:
+            self.fail("Failed to verify snapshots created: %s" % e)
+
+    @attr(speed="slow")
+    @attr(tags=["advanced", "advancedns"])
+    @attr(configuration='concurrent.snapshots.threshold.perhost')
+    def test_01_concurrent_snapshots_live_migrate(self):
+        """Test perform concurrent snapshots and migrate the vm from one host
+            to another
+
+            1.Configure the concurrent.snapshots.threshold.perhost=3
+            2.Deploy a Linux VM using default CentOS template, use small
+            service offering, disk offering
+            3.Perform snapshot on the root disk of this newly created VMs"""
+
+        # Validate the following
+        # a. Check all snapshots jobs are running concurrently on backgrounds
+        # b. listSnapshots should list this newly created snapshot.
+
+        self.debug("Create virtual machine and snapshot on ROOT disk volume")
+        self.create_Snapshot_VM()
+
+        self.debug("Verify whether snapshots were created properly or not?")
+        self.verify_Snapshots()
+        return
+
+    @attr(speed="slow")
+    @attr(tags=["advanced", "advancedns"])
+    @attr(configuration='concurrent.snapshots.threshold.perhost')
+    def test_02_stop_vm_concurrent_snapshots(self):
+        """Test stop running VM while performing concurrent snapshot on volume
+
+            1.Configure the concurrent.snapshots.threshold.perhost=3
+            2.Deploy a Linux VM using default CentOS template, use small
+            service offering, disk offering
+            3.Perform snapshot on root disk of this newly created VM
+            4.stop the running Vms while snapshot on volume in progress
+        """
+
+        # Validate the following
+        # a. check all snapshots jobs are running concurrently on back grounds
+        # b. listSnapshots should list this newly created snapshot.
+
+        self.debug("Create virtual machine and snapshot on ROOT disk volume")
+        self.create_Snaphot_Stop_VM()
+
+        self.debug("Verify whether snapshots were created properly or not?")
+        self.verify_Snapshots()
+        return
+
+    @attr(speed="slow")
+    @attr(tags=["advanced", "advancedns"])
+    @attr(configuration='concurrent.snapshots.threshold.perhost')
+    def test_03_concurrent_snapshots_create_template(self):
+        """Test while parent concurrent snapshot job in progress,create
+            template from completed snapshot
+
+            1.Configure the concurrent.snapshots.threshold.perhost=3
+            2.Deploy a Linux VM using default CentOS template, use small
+            service offering, disk offering
+            3.Perform snapshot on root disk of this newly created VMs(10 vms)
+            4.while parent concurrent snapshot job in progress,create template
+            from completed snapshot"""
+
+        # Validate the following
+        # a.Able to create Template from snapshots
+        # b.check all snapshots jobs are running concurrently on back grounds
+        # c.listSnapshots should list this newly created snapshot.
+
+        self.debug("Create virtual machine and snapshot on ROOT disk")
+        self.create_Snapshot_VM()
+
+        self.debug("Verify whether snapshots were created properly or not?")
+        self.verify_Snapshots()
+
+        self.debug("Fetch the list of snapshots belong to account: %s" %
+                                                    self.account.name)
+        snapshots = self.get_Snapshots_For_Account(
+                                                self.account.name,
+                                                self.account.domainid)
+        jobs = []
+        for snapshot in snapshots:
+            self.debug("Create a template from snapshot: %s" % snapshot.name)
+            jobs.append(self.create_Template_from_Snapshot(snapshot))
+
+        # Verify IO usage by submitting the concurrent jobs
+        self.testClient.submitCmdsAndWait(jobs)
+
+        self.debug("Verifying if templates are created properly or not?")
+        templates = Template.list(
+                            self.apiclient,
+                            templatefilter=self.services["template"]["templatefilter"],
+                            account=self.account.name,
+                            domainid=self.account.domainid,
+                            listall=True)
+        self.assertNotEqual(templates,
+                            None,
+                            "Check if result exists in list item call")
+        for template in templates:
+            self.assertEqual(template.isready,
+                         True,
+                        "Check new template state in list templates call")
+
+        self.debug("Test completed successfully.")
+        return
+
+    @attr(speed="slow")
+    @attr(tags=["advanced", "advancedns"])
+    @attr(configuration='concurrent.snapshots.threshold.perhost')
+    def test_04_concurrent_snapshots_create_volume(self):
+        """Test while parent concurrent snapshot job in progress,create volume
+            from completed snapshot
+
+            1.Configure the concurrent.snapshots.threshold.perhost=3
+            2.Deploy a Linux VM using default CentOS template, use small
+            service offering, disk offering.
+            3.Perform snapshot on root disk of this newly created VM
+            4.while parent concurrent snapshot job in progress,create volume
+            from completed snapshot"""
+
+        # Validate the following
+        # a.Able to create Volume from snapshots
+        # b.check all snapshots jobs are running concurrently on back grounds
+        # c.listSnapshots should list this newly created snapshot.
+
+        self.debug("Create virtual machine and snapshot on ROOT disk thread")
+        self.create_Snapshot_VM()
+
+        self.debug("Verify whether snapshots were created properly or not?")
+        self.verify_Snapshots()
+
+        self.debug("Fetch the list of snapshots belong to account: %s" %
+                                                    self.account.name)
+        snapshots = self.get_Snapshots_For_Account(
+                                                self.account.name,
+                                                self.account.domainid)
+        jobs = []
+        for snapshot in snapshots:
+            self.debug("Create a volume from snapshot: %s" % snapshot.name)
+            jobs.append(self.create_Volume_from_Snapshot(snapshot))
+
+        # Verify IO usage by submitting the concurrent jobs
+        self.testClient.submitCmdsAndWait(jobs)
+
+        self.debug("Verifying if volume created properly or not?")
+        volumes = Volume.list(self.apiclient,
+                              account=self.account.name,
+                              domainid=self.account.domainid,
+                              listall=True,
+                              type='ROOT')
+
+        self.assertNotEqual(volumes,
+                            None,
+                            "Check if result exists in list item call")
+        for volume in volumes:
+            self.debug("Volume: %s, state: %s" % (volume.name, volume.state))
+            self.assertEqual(volume.state,
+                         "Ready",
+                         "Check new volume state in list volumes call")
+
+        self.debug("Test completed successfully.")
+        return

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1972d612/tools/marvin/marvin/asyncJobMgr.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/asyncJobMgr.py b/tools/marvin/marvin/asyncJobMgr.py
index 25818a6..0d7939c 100644
--- a/tools/marvin/marvin/asyncJobMgr.py
+++ b/tools/marvin/marvin/asyncJobMgr.py
@@ -81,14 +81,14 @@ class workThread(threading.Thread):
             if cmd.isAsync == "false":
                 jobstatus.startTime = datetime.datetime.now()
 
-                result = self.connection.make_request(cmd)
+                result = self.connection.marvin_request(cmd)
                 jobstatus.result = result
                 jobstatus.endTime = datetime.datetime.now()
                 jobstatus.duration =\
                     time.mktime(jobstatus.endTime.timetuple()) - time.mktime(
                         jobstatus.startTime.timetuple())
             else:
-                result = self.connection.make_request(cmd, None, True)
+                result = self.connection.marvin_request(cmd)
                 if result is None:
                     jobstatus.status = False
                 else:


[04/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
Update layout of header bar

-Move notifications to top

-Better alignment of logo


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

Branch: refs/heads/rbac
Commit: 7e269e3770d0dd632c4a7fa18db670bab209ee39
Parents: d9e9e0d
Author: Brian Federle <br...@citrix.com>
Authored: Tue Oct 29 10:56:05 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Tue Oct 29 10:56:05 2013 -0700

----------------------------------------------------------------------
 ui/css/cloudstack3.css | 46 +++++++++++++++++++++++++++++----------------
 1 file changed, 30 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7e269e37/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index 7345221..b6d7079 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -2219,14 +2219,18 @@ div.detail-group.actions td {
   height: 47px;
   margin: auto;
   background: url(../images/logo.png) no-repeat 0 center;
+  /*+placement:shift 0px 2px;*/
+  position: relative;
+  left: 0px;
+  top: 2px;
 }
 
 #header div.controls {
   width: 1024px;
   height: 48px;
   position: relative;
-  margin: 8px auto;
-  padding-top: 14px;
+  margin: 9px auto 8px;
+  padding-top: 13px;
   /*+border-radius:4px 4px 0 0;*/
   -moz-border-radius: 4px 4px 0 0;
   -webkit-border-radius: 4px 4px 0 0;
@@ -2259,16 +2263,28 @@ div.detail-group.actions td {
 
 #header div.notifications {
   background: transparent;
+  float: right;
   height: 18px;
   padding: 1px 0 0;
-  margin: 8px 36px 0 29px;
+  /*+placement:shift -174px -54px;*/
+  position: relative;
+  left: -174px;
+  top: -54px;
+}
+
+#header div.notifications:after {
+  content: "|";
+  /*+placement:shift 28px 7px;*/
+  position: relative;
+  left: 28px;
+  top: 7px;
 }
 
 #header div.notifications span {
   position: relative;
   top: 6px;
   left: 7px;
-  font-weight: bold;
+  font-weight: 100;
 }
 
 #header div.notifications:hover {
@@ -2332,7 +2348,7 @@ div.detail-group.actions td {
   text-align: center;
   height: 12px;
   overflow: hidden;
-  font-weight: bold;
+  font-weight: normal;
   /*+text-shadow:0px -1px 1px #464646;*/
   -moz-text-shadow: 0px -1px 1px #464646;
   -webkit-text-shadow: 0px -1px 1px #464646;
@@ -9043,7 +9059,7 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
 .project-switcher {
   float: left;
   width: 223px;
-  padding: 9px 17px 0 0;
+  padding: 9px 17px 0 19px;
   /*+border-radius:4px;*/
   -moz-border-radius: 4px;
   -webkit-border-radius: 4px;
@@ -11556,24 +11572,19 @@ div.ui-dialog div.autoscaler div.field-group div.form-container form div.form-it
 .region-switcher {
   display: inline-block;
   position: relative;
-  background: url(../images/bg-gradients.png) repeat-x 0px -867px;
-  border: 1px solid #5E5E5E;
   /*+border-radius:4px;*/
   -moz-border-radius: 4px;
   -webkit-border-radius: 4px;
   -khtml-border-radius: 4px;
   border-radius: 4px;
-  border-top: 1px solid #717171;
-  border-bottom: 1px solid #FFFFFF;
   height: 28px;
   float: left;
   margin: 5px 13px 0 0;
   cursor: pointer;
-  /*+box-shadow:inset 0px 1px 1px #000000;*/
-  -moz-box-shadow: inset 0px 1px 1px #000000;
-  -webkit-box-shadow: inset 0px 1px 1px #000000;
-  -o-box-shadow: inset 0px 1px 1px #000000;
-  box-shadow: inset 0px 1px 1px #000000;
+  /*+placement:shift 27px 1px;*/
+  position: relative;
+  left: 27px;
+  top: 1px;
 }
 
 .region-selector {
@@ -11711,8 +11722,11 @@ div.ui-dialog div.autoscaler div.field-group div.form-container form div.form-it
   font-weight: bold;
   max-width: 67px;
   overflow: hidden;
-  text-overflow: ellipsis;
   white-space: nowrap;
+  /*+placement:shift -1px 0px;*/
+  position: relative;
+  left: -1px;
+  top: 0px;
 }
 
 .region-switcher:hover,


[42/50] [abbrv] Merge branch 'master' into rbac.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/org/apache/cloudstack/acl/AclServiceImpl.java
----------------------------------------------------------------------
diff --cc server/src/org/apache/cloudstack/acl/AclServiceImpl.java
index ccd3bf0,0000000..c7badd0
mode 100644,000000..100644
--- a/server/src/org/apache/cloudstack/acl/AclServiceImpl.java
+++ b/server/src/org/apache/cloudstack/acl/AclServiceImpl.java
@@@ -1,666 -1,0 +1,692 @@@
 +// 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 org.apache.cloudstack.acl;
 +
 +import java.util.ArrayList;
 +import java.util.HashMap;
 +import java.util.HashSet;
 +import java.util.List;
 +import java.util.Set;
 +
 +import javax.ejb.Local;
 +import javax.inject.Inject;
 +
 +import org.apache.log4j.Logger;
 +
 +import org.apache.cloudstack.acl.SecurityChecker.AccessType;
 +import org.apache.cloudstack.acl.dao.AclApiPermissionDao;
 +import org.apache.cloudstack.acl.dao.AclEntityPermissionDao;
 +import org.apache.cloudstack.acl.dao.AclGroupAccountMapDao;
 +import org.apache.cloudstack.acl.dao.AclGroupDao;
 +import org.apache.cloudstack.acl.dao.AclGroupRoleMapDao;
 +import org.apache.cloudstack.acl.dao.AclRoleDao;
 +import org.apache.cloudstack.acl.dao.AclRolePermissionDao;
 +import org.apache.cloudstack.api.Identity;
 +import org.apache.cloudstack.context.CallContext;
 +
 +import com.cloud.domain.Domain;
 +import com.cloud.event.ActionEvent;
 +import com.cloud.event.EventTypes;
 +import com.cloud.exception.InvalidParameterValueException;
 +import com.cloud.exception.PermissionDeniedException;
 +import com.cloud.storage.Snapshot;
 +import com.cloud.storage.Volume;
 +import com.cloud.template.VirtualMachineTemplate;
 +import com.cloud.user.Account;
 +import com.cloud.user.AccountManager;
 +import com.cloud.user.dao.AccountDao;
 +import com.cloud.uservm.UserVm;
 +import com.cloud.utils.Pair;
 +import com.cloud.utils.component.Manager;
 +import com.cloud.utils.component.ManagerBase;
 +import com.cloud.utils.db.DB;
 +import com.cloud.utils.db.EntityManager;
 +import com.cloud.utils.db.GenericSearchBuilder;
 +import com.cloud.utils.db.JoinBuilder.JoinType;
 +import com.cloud.utils.db.SearchBuilder;
 +import com.cloud.utils.db.SearchCriteria;
 +import com.cloud.utils.db.SearchCriteria.Op;
 +import com.cloud.utils.db.Transaction;
++import com.cloud.utils.db.TransactionCallback;
++import com.cloud.utils.db.TransactionCallbackNoReturn;
++import com.cloud.utils.db.TransactionStatus;
 +
 +@Local(value = {AclService.class})
 +public class AclServiceImpl extends ManagerBase implements AclService, Manager {
 +
 +    public static final Logger s_logger = Logger.getLogger(AclServiceImpl.class);
 +    private String _name;
 +
 +    @Inject
 +    AccountManager _accountMgr;
 +
 +    @Inject
 +    AccountDao _accountDao;
 +
 +    @Inject
 +    AclRoleDao _aclRoleDao;
 +
 +    @Inject
 +    AclGroupDao _aclGroupDao;
 +
 +    @Inject
 +    EntityManager _entityMgr;
 +
 +    @Inject
 +    AclGroupRoleMapDao _aclGroupRoleMapDao;
 +
 +    @Inject
 +    AclGroupAccountMapDao _aclGroupAccountMapDao;
 +
 +    @Inject
 +    AclApiPermissionDao _apiPermissionDao;
 +
 +    @Inject
 +    AclRolePermissionDao _rolePermissionDao;
 +
 +    @Inject
 +    AclEntityPermissionDao _entityPermissionDao;
 +
 +    public static HashMap<String, Class> entityClassMap = new HashMap<String, Class>();
 +
 +    static {
 +        entityClassMap.put("VirtualMachine", UserVm.class);
 +        entityClassMap.put("Volume", Volume.class);
 +        entityClassMap.put("Template", VirtualMachineTemplate.class);
 +        entityClassMap.put("Snapshot", Snapshot.class);
 +        // To be filled in later depending on the entity permission grant scope
 +    }
 +
 +    @DB
 +    @Override
 +    @ActionEvent(eventType = EventTypes.EVENT_ACL_ROLE_CREATE, eventDescription = "Creating Acl Role", create = true)
-     public AclRole createAclRole(Long domainId, String aclRoleName, String description, Long parentRoleId) {
++    public AclRole createAclRole(Long domainId, final String aclRoleName, final String description, final Long parentRoleId) {
 +        Account caller = CallContext.current().getCallingAccount();
 +        if (domainId == null) {
 +            domainId = caller.getDomainId();
 +        }
 +        if (!_accountMgr.isRootAdmin(caller.getAccountId())) {
 +            // domain admin can only create role for his domain
 +            if (caller.getDomainId() != domainId.longValue()) {
 +                throw new PermissionDeniedException("Can't create acl role in domain " + domainId + ", permission denied");
 +            }
 +        }
 +        // check if the role is already existing
 +        AclRole ro = _aclRoleDao.findByName(domainId, aclRoleName);
 +        if (ro != null) {
 +            throw new InvalidParameterValueException(
 +                    "Unable to create acl role with name " + aclRoleName
 +                            + " already exisits for domain " + domainId);
 +        }
 +
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
-         AclRoleVO rvo = new AclRoleVO(aclRoleName, description);
-         rvo.setDomainId(domainId);
-         AclRole role = _aclRoleDao.persist(rvo);
-         if (parentRoleId != null) {
-             // copy parent role permissions
-             List<AclRolePermissionVO> perms = _rolePermissionDao.listByRole(parentRoleId);
-             if (perms != null) {
-                 for (AclRolePermissionVO perm : perms) {
-                     perm.setAclRoleId(role.getId());
-                     _rolePermissionDao.persist(perm);
++        final long domain_id = domainId;
++        AclRole role = Transaction.execute(new TransactionCallback<AclRole>() {
++            @Override
++            public AclRole doInTransaction(TransactionStatus status) {
++                AclRoleVO rvo = new AclRoleVO(aclRoleName, description);
++                rvo.setDomainId(domain_id);
++                AclRole role = _aclRoleDao.persist(rvo);
++                if (parentRoleId != null) {
++                    // copy parent role permissions
++                    List<AclRolePermissionVO> perms = _rolePermissionDao.listByRole(parentRoleId);
++                    if (perms != null) {
++                        for (AclRolePermissionVO perm : perms) {
++                            perm.setAclRoleId(role.getId());
++                            _rolePermissionDao.persist(perm);
++                        }
++                    }
 +                }
++                return role;
 +            }
-         }
-         txn.commit();
++        });
++                
 +
 +        return role;
 +    }
 +
 +    @DB
 +    @Override
 +    @ActionEvent(eventType = EventTypes.EVENT_ACL_ROLE_DELETE, eventDescription = "Deleting Acl Role")
-     public boolean deleteAclRole(long aclRoleId) {
++    public boolean deleteAclRole(final long aclRoleId) {
 +        Account caller = CallContext.current().getCallingAccount();
 +        // get the Acl Role entity
-         AclRole role = _aclRoleDao.findById(aclRoleId);
++        final AclRole role = _aclRoleDao.findById(aclRoleId);
 +        if (role == null) {
 +            throw new InvalidParameterValueException("Unable to find acl role: " + aclRoleId
 +                    + "; failed to delete acl role.");
 +        }
 +        // check permissions
 +        _accountMgr.checkAccess(caller, null, true, role);
 +
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
-         // remove this role related entry in acl_group_role_map
-         List<AclGroupRoleMapVO> groupRoleMap = _aclGroupRoleMapDao.listByRoleId(role.getId());
-         if (groupRoleMap != null) {
-             for (AclGroupRoleMapVO gr : groupRoleMap) {
-                 _aclGroupRoleMapDao.remove(gr.getId());
-             }
-         }
++        Transaction.execute(new TransactionCallbackNoReturn() {
++            @Override
++            public void doInTransactionWithoutResult(TransactionStatus status) {
++                // remove this role related entry in acl_group_role_map
++                List<AclGroupRoleMapVO> groupRoleMap = _aclGroupRoleMapDao.listByRoleId(role.getId());
++                if (groupRoleMap != null) {
++                    for (AclGroupRoleMapVO gr : groupRoleMap) {
++                        _aclGroupRoleMapDao.remove(gr.getId());
++                    }
++                }
 +
-         // remove this role related entry in acl_api_permission table
-         List<AclApiPermissionVO> roleApiMap = _apiPermissionDao.listByRoleId(role.getId());
-         if (roleApiMap != null) {
-             for (AclApiPermissionVO roleApi : roleApiMap) {
-                 _apiPermissionDao.remove(roleApi.getId());
-             }
-         }
++                // remove this role related entry in acl_api_permission table
++                List<AclApiPermissionVO> roleApiMap = _apiPermissionDao.listByRoleId(role.getId());
++                if (roleApiMap != null) {
++                    for (AclApiPermissionVO roleApi : roleApiMap) {
++                        _apiPermissionDao.remove(roleApi.getId());
++                    }
++                }
 +
-         // remove this role from acl_role table
-         _aclRoleDao.remove(aclRoleId);
-         txn.commit();
++                // remove this role from acl_role table
++                _aclRoleDao.remove(aclRoleId);
++            }
++        });
 +
 +        return true;
 +    }
 +
 +
 +    @DB
 +    @Override
 +    @ActionEvent(eventType = EventTypes.EVENT_ACL_ROLE_GRANT, eventDescription = "Granting permission to Acl Role")
-     public AclRole grantApiPermissionToAclRole(long aclRoleId, List<String> apiNames) {
++    public AclRole grantApiPermissionToAclRole(final long aclRoleId, final List<String> apiNames) {
 +        Account caller = CallContext.current().getCallingAccount();
 +        // get the Acl Role entity
 +        AclRole role = _aclRoleDao.findById(aclRoleId);
 +        if (role == null) {
 +            throw new InvalidParameterValueException("Unable to find acl role: " + aclRoleId
 +                    + "; failed to grant permission to role.");
 +        }
 +        // check permissions
 +        _accountMgr.checkAccess(caller, null, true, role);
 +
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
-         // add entries in acl_api_permission table
-         for (String api : apiNames) {
-             AclApiPermissionVO perm = _apiPermissionDao.findByRoleAndApi(aclRoleId, api);
-             if (perm == null) {
-                 // not there already
-                 perm = new AclApiPermissionVO(aclRoleId, api);
-                 _apiPermissionDao.persist(perm);
++        Transaction.execute(new TransactionCallbackNoReturn() {
++            @Override
++            public void doInTransactionWithoutResult(TransactionStatus status) {
++                // add entries in acl_api_permission table
++                for (String api : apiNames) {
++                    AclApiPermissionVO perm = _apiPermissionDao.findByRoleAndApi(aclRoleId, api);
++                    if (perm == null) {
++                        // not there already
++                        perm = new AclApiPermissionVO(aclRoleId, api);
++                        _apiPermissionDao.persist(perm);
++                    }
++                }
 +            }
-         }
-         txn.commit();
++        });
++            
 +        return role;
 +
 +    }
 +
 +    @DB
 +    @Override
 +    @ActionEvent(eventType = EventTypes.EVENT_ACL_ROLE_REVOKE, eventDescription = "Revoking permission from Acl Role")
-     public AclRole revokeApiPermissionFromAclRole(long aclRoleId, List<String> apiNames) {
++    public AclRole revokeApiPermissionFromAclRole(final long aclRoleId, final List<String> apiNames) {
 +        Account caller = CallContext.current().getCallingAccount();
 +        // get the Acl Role entity
 +        AclRole role = _aclRoleDao.findById(aclRoleId);
 +        if (role == null) {
 +            throw new InvalidParameterValueException("Unable to find acl role: " + aclRoleId
 +                    + "; failed to revoke permission from role.");
 +        }
 +        // check permissions
 +        _accountMgr.checkAccess(caller, null, true, role);
 +
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
-         // remove entries from acl_api_permission table
-         for (String api : apiNames) {
-             AclApiPermissionVO perm = _apiPermissionDao.findByRoleAndApi(aclRoleId, api);
-             if (perm != null) {
-                 // not removed yet
-                 _apiPermissionDao.remove(perm.getId());
++        Transaction.execute(new TransactionCallbackNoReturn() {
++            @Override
++            public void doInTransactionWithoutResult(TransactionStatus status) {
++                // remove entries from acl_api_permission table
++                for (String api : apiNames) {
++                    AclApiPermissionVO perm = _apiPermissionDao.findByRoleAndApi(aclRoleId, api);
++                    if (perm != null) {
++                        // not removed yet
++                        _apiPermissionDao.remove(perm.getId());
++                    }
++                }
 +            }
-         }
-         txn.commit();
++        });
 +        return role;
 +    }
 +
 +    @DB
 +    @Override
 +    @ActionEvent(eventType = EventTypes.EVENT_ACL_GROUP_GRANT, eventDescription = "Granting entity permission to Acl Group")
 +    public AclGroup grantEntityPermissionToAclGroup(long aclGroupId, String entityType, long entityId, AccessType accessType) {
 +        Account caller = CallContext.current().getCallingAccount();
 +        // get the Acl Group entity
 +        AclGroup group = _aclGroupDao.findById(aclGroupId);
 +        if (group == null) {
 +            throw new InvalidParameterValueException("Unable to find acl group: " + aclGroupId
 +                    + "; failed to grant permission to group.");
 +        }
 +        // check permissions
 +        _accountMgr.checkAccess(caller, null, true, group);
 +
 +        // get the entity and check permission
 +        Class entityClass = entityClassMap.get(entityType);
 +        if (entityClass == null) {
 +            throw new InvalidParameterValueException("Entity type " + entityType + " permission granting is not supported yet");
 +        }
 +        ControlledEntity entity = (ControlledEntity)_entityMgr.findById(entityClass, entityId);
 +        if (entity == null) {
 +            throw new InvalidParameterValueException("Unable to find entity " + entityType + " by id: " + entityId);
 +        }
 +        _accountMgr.checkAccess(caller,null, true, entity);
 +        
 +        // add entry in acl_entity_permission table
 +        AclEntityPermissionVO perm = _entityPermissionDao.findByGroupAndEntity(aclGroupId, entityType, entityId, accessType);
 +        if (perm == null) {
 +            // not there already
 +            String entityUuid = String.valueOf(entityId);
 +            if (entity instanceof Identity) {
 +                entityUuid = ((Identity)entity).getUuid();
 +            }
 +            perm = new AclEntityPermissionVO(aclGroupId, entityType, entityId, entityUuid, accessType, true);
 +            _entityPermissionDao.persist(perm);
 +        }
 +        return group;
 +
 +    }
 +
 +    @DB
 +    @Override
 +    @ActionEvent(eventType = EventTypes.EVENT_ACL_GROUP_REVOKE, eventDescription = "Revoking entity permission from Acl Group")
 +    public AclGroup revokeEntityPermissionFromAclGroup(long aclGroupId, String entityType, long entityId, AccessType accessType) {
 +        Account caller = CallContext.current().getCallingAccount();
 +        // get the Acl Group entity
 +        AclGroup group = _aclGroupDao.findById(aclGroupId);
 +        if (group == null) {
 +            throw new InvalidParameterValueException("Unable to find acl group: " + aclGroupId
 +                    + "; failed to revoke permission from group.");
 +        }
 +        // check permissions
 +        _accountMgr.checkAccess(caller, null, true, group);
 +
 +        // get the entity and check permission
 +        Class entityClass = entityClassMap.get(entityType);
 +        if (entityClass == null) {
 +            throw new InvalidParameterValueException("Entity type " + entityType + " permission revoke is not supported yet");
 +        }
 +        ControlledEntity entity = (ControlledEntity)_entityMgr.findById(entityClass, entityId);
 +        if (entity == null) {
 +            throw new InvalidParameterValueException("Unable to find entity " + entityType + " by id: " + entityId);
 +        }
 +        _accountMgr.checkAccess(caller, null, true, entity);
 +
 +        // remove entry from acl_entity_permission table
 +        AclEntityPermissionVO perm = _entityPermissionDao.findByGroupAndEntity(aclGroupId, entityType, entityId, accessType);
 +        if (perm != null) {
 +            // not removed yet
 +            _entityPermissionDao.remove(perm.getId());
 +        }
 +        return group;
 +    }
 +
 +    @DB
 +    @Override
 +    @ActionEvent(eventType = EventTypes.EVENT_ACL_GROUP_UPDATE, eventDescription = "Adding roles to acl group")
-     public AclGroup addAclRolesToGroup(List<Long> roleIds, Long groupId) {
-         Account caller = CallContext.current().getCallingAccount();
++    public AclGroup addAclRolesToGroup(final List<Long> roleIds, final Long groupId) {
++        final Account caller = CallContext.current().getCallingAccount();
 +        // get the Acl Group entity
 +        AclGroup group = _aclGroupDao.findById(groupId);
 +        if (group == null) {
 +            throw new InvalidParameterValueException("Unable to find acl group: " + groupId
 +                    + "; failed to add roles to acl group.");
 +        }
 +        // check group permissions
 +        _accountMgr.checkAccess(caller, null, true, group);
 + 
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
-         // add entries in acl_group_role_map table
-         for (Long roleId : roleIds) {
-             // check role permissions
-             AclRole role = _aclRoleDao.findById(roleId);
-             if ( role == null ){
-                 throw new InvalidParameterValueException("Unable to find acl role: " + roleId
-                         + "; failed to add roles to acl group.");
-             }
-             _accountMgr.checkAccess(caller,null, true, role);
-             
-             AclGroupRoleMapVO grMap = _aclGroupRoleMapDao.findByGroupAndRole(groupId, roleId);
-             if (grMap == null) {
-                 // not there already
-                 grMap = new AclGroupRoleMapVO(groupId, roleId);
-                 _aclGroupRoleMapDao.persist(grMap);
++        Transaction.execute(new TransactionCallbackNoReturn() {
++            @Override
++            public void doInTransactionWithoutResult(TransactionStatus status) {
++                // add entries in acl_group_role_map table
++                for (Long roleId : roleIds) {
++                    // check role permissions
++                    AclRole role = _aclRoleDao.findById(roleId);
++                    if (role == null) {
++                        throw new InvalidParameterValueException("Unable to find acl role: " + roleId
++                                + "; failed to add roles to acl group.");
++                    }
++                    _accountMgr.checkAccess(caller, null, true, role);
++
++                    AclGroupRoleMapVO grMap = _aclGroupRoleMapDao.findByGroupAndRole(groupId, roleId);
++                    if (grMap == null) {
++                        // not there already
++                        grMap = new AclGroupRoleMapVO(groupId, roleId);
++                        _aclGroupRoleMapDao.persist(grMap);
++                    }
++                }
 +            }
-         }
-         txn.commit();
++        });
++
 +        return group;
 +    }
 +
 +    @DB
 +    @Override
 +    @ActionEvent(eventType = EventTypes.EVENT_ACL_GROUP_UPDATE, eventDescription = "Removing roles from acl group")
-     public AclGroup removeAclRolesFromGroup(List<Long> roleIds, Long groupId) {
-         Account caller = CallContext.current().getCallingAccount();
++    public AclGroup removeAclRolesFromGroup(final List<Long> roleIds, final Long groupId) {
++        final Account caller = CallContext.current().getCallingAccount();
 +        // get the Acl Group entity
 +        AclGroup group = _aclGroupDao.findById(groupId);
 +        if (group == null) {
 +            throw new InvalidParameterValueException("Unable to find acl group: " + groupId
 +                    + "; failed to remove roles from acl group.");
 +        }
 +        // check group permissions
 +        _accountMgr.checkAccess(caller, null, true, group);
 +
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
-         // add entries in acl_group_role_map table
-         for (Long roleId : roleIds) {
-             // check role permissions
-             AclRole role = _aclRoleDao.findById(roleId);
-             if (role == null) {
-                 throw new InvalidParameterValueException("Unable to find acl role: " + roleId
-                         + "; failed to add roles to acl group.");
-             }
-             _accountMgr.checkAccess(caller, null, true, role);
- 
-             AclGroupRoleMapVO grMap = _aclGroupRoleMapDao.findByGroupAndRole(groupId, roleId);
-             if (grMap != null) {
-                 // not removed yet
-                 _aclGroupRoleMapDao.remove(grMap.getId());
++        Transaction.execute(new TransactionCallbackNoReturn() {
++            @Override
++            public void doInTransactionWithoutResult(TransactionStatus status) {
++                // add entries in acl_group_role_map table
++                for (Long roleId : roleIds) {
++                    // check role permissions
++                    AclRole role = _aclRoleDao.findById(roleId);
++                    if (role == null) {
++                        throw new InvalidParameterValueException("Unable to find acl role: " + roleId
++                                + "; failed to add roles to acl group.");
++                    }
++                    _accountMgr.checkAccess(caller, null, true, role);
++
++                    AclGroupRoleMapVO grMap = _aclGroupRoleMapDao.findByGroupAndRole(groupId, roleId);
++                    if (grMap != null) {
++                        // not removed yet
++                        _aclGroupRoleMapDao.remove(grMap.getId());
++                    }
++                }
 +            }
-         }
-         txn.commit();
++        });
 +        return group;
 +    }
 +
 +    @DB
 +    @Override
 +    @ActionEvent(eventType = EventTypes.EVENT_ACL_GROUP_UPDATE, eventDescription = "Adding accounts to acl group")
-     public AclGroup addAccountsToGroup(List<Long> acctIds, Long groupId) {
-         Account caller = CallContext.current().getCallingAccount();
++    public AclGroup addAccountsToGroup(final List<Long> acctIds, final Long groupId) {
++        final Account caller = CallContext.current().getCallingAccount();
 +        // get the Acl Group entity
 +        AclGroup group = _aclGroupDao.findById(groupId);
 +        if (group == null) {
 +            throw new InvalidParameterValueException("Unable to find acl group: " + groupId
 +                    + "; failed to add accounts to acl group.");
 +        }
 +        // check group permissions
 +        _accountMgr.checkAccess(caller, null, true, group);
 +
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
-         // add entries in acl_group_account_map table
-         for (Long acctId : acctIds) {
-             // check account permissions
-             Account account = _accountDao.findById(acctId);
-             if (account == null) {
-                 throw new InvalidParameterValueException("Unable to find account: " + acctId
-                         + "; failed to add account to acl group.");
-             }
-             _accountMgr.checkAccess(caller, null, true, account);
- 
-             AclGroupAccountMapVO grMap = _aclGroupAccountMapDao.findByGroupAndAccount(groupId, acctId);
-             if (grMap == null) {
-                 // not there already
-                 grMap = new AclGroupAccountMapVO(groupId, acctId);
-                 _aclGroupAccountMapDao.persist(grMap);
++        Transaction.execute(new TransactionCallbackNoReturn() {
++            @Override
++            public void doInTransactionWithoutResult(TransactionStatus status) {
++                // add entries in acl_group_account_map table
++                for (Long acctId : acctIds) {
++                    // check account permissions
++                    Account account = _accountDao.findById(acctId);
++                    if (account == null) {
++                        throw new InvalidParameterValueException("Unable to find account: " + acctId
++                                + "; failed to add account to acl group.");
++                    }
++                    _accountMgr.checkAccess(caller, null, true, account);
++
++                    AclGroupAccountMapVO grMap = _aclGroupAccountMapDao.findByGroupAndAccount(groupId, acctId);
++                    if (grMap == null) {
++                        // not there already
++                        grMap = new AclGroupAccountMapVO(groupId, acctId);
++                        _aclGroupAccountMapDao.persist(grMap);
++                    }
++                }
 +            }
-         }
-         txn.commit();
++        });
 +        return group;
 +    }
 +
 +    @DB
 +    @Override
 +    @ActionEvent(eventType = EventTypes.EVENT_ACL_GROUP_UPDATE, eventDescription = "Removing accounts from acl group")
-     public AclGroup removeAccountsFromGroup(List<Long> acctIds, Long groupId) {
-         Account caller = CallContext.current().getCallingAccount();
++    public AclGroup removeAccountsFromGroup(final List<Long> acctIds, final Long groupId) {
++        final Account caller = CallContext.current().getCallingAccount();
 +        // get the Acl Group entity
 +        AclGroup group = _aclGroupDao.findById(groupId);
 +        if (group == null) {
 +            throw new InvalidParameterValueException("Unable to find acl group: " + groupId
 +                    + "; failed to remove accounts from acl group.");
 +        }
 +        // check group permissions
 +        _accountMgr.checkAccess(caller, null, true, group);
 +
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
-         // remove entries from acl_group_account_map table
-         for (Long acctId : acctIds) {
-             // check account permissions
-             Account account = _accountDao.findById(acctId);
-             if (account == null) {
-                 throw new InvalidParameterValueException("Unable to find account: " + acctId
-                         + "; failed to add account to acl group.");
-             }
-             _accountMgr.checkAccess(caller, null, true, account);
- 
-             AclGroupAccountMapVO grMap = _aclGroupAccountMapDao.findByGroupAndAccount(groupId, acctId);
-             if (grMap != null) {
-                 // not removed yet
-                 _aclGroupAccountMapDao.remove(grMap.getId());
++        Transaction.execute(new TransactionCallbackNoReturn() {
++            @Override
++            public void doInTransactionWithoutResult(TransactionStatus status) {
++                // remove entries from acl_group_account_map table
++                for (Long acctId : acctIds) {
++                    // check account permissions
++                    Account account = _accountDao.findById(acctId);
++                    if (account == null) {
++                        throw new InvalidParameterValueException("Unable to find account: " + acctId
++                                + "; failed to add account to acl group.");
++                    }
++                    _accountMgr.checkAccess(caller, null, true, account);
++
++                    AclGroupAccountMapVO grMap = _aclGroupAccountMapDao.findByGroupAndAccount(groupId, acctId);
++                    if (grMap != null) {
++                        // not removed yet
++                        _aclGroupAccountMapDao.remove(grMap.getId());
++                    }
++                }
 +            }
-         }
-         txn.commit();
++        });
 +        return group;
 +    }
 +
 +    @DB
 +    @Override
 +    @ActionEvent(eventType = EventTypes.EVENT_ACL_GROUP_CREATE, eventDescription = "Creating Acl Group", create = true)
 +    public AclGroup createAclGroup(Long domainId, String aclGroupName, String description) {
 +        Account caller = CallContext.current().getCallingAccount();
 +        if (domainId == null) {
 +            domainId = caller.getDomainId(); // use caller's domain id
 +        }
 +        if (!_accountMgr.isRootAdmin(caller.getAccountId())) {
 +            // domain admin can only create role for his domain
 +            if (caller.getDomainId() != domainId.longValue()) {
 +                throw new PermissionDeniedException("Can't create acl group in domain " + domainId + ", permission denied");
 +            }
 +        }
 +        // check if the role is already existing
 +        AclGroup grp = _aclGroupDao.findByName(domainId, aclGroupName);
 +        if (grp != null) {
 +            throw new InvalidParameterValueException(
 +                    "Unable to create acl group with name " + aclGroupName
 +                            + " already exisits for domain " + domainId);
 +        }
 +        AclGroupVO rvo = new AclGroupVO(aclGroupName, description);
 +        rvo.setDomainId(domainId);
 +
 +        return _aclGroupDao.persist(rvo);
 +    }
 +
 +    @DB
 +    @Override
 +    @ActionEvent(eventType = EventTypes.EVENT_ACL_GROUP_DELETE, eventDescription = "Deleting Acl Group")
-     public boolean deleteAclGroup(Long aclGroupId) {
++    public boolean deleteAclGroup(final Long aclGroupId) {
 +        Account caller = CallContext.current().getCallingAccount();
 +        // get the Acl Role entity
-         AclGroup grp = _aclGroupDao.findById(aclGroupId);
++        final AclGroup grp = _aclGroupDao.findById(aclGroupId);
 +        if (grp == null) {
 +            throw new InvalidParameterValueException("Unable to find acl group: " + aclGroupId
 +                    + "; failed to delete acl group.");
 +        }
 +        // check permissions
 +        _accountMgr.checkAccess(caller, null, true, grp);
 +
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
-         // remove this group related entry in acl_group_role_map
-         List<AclGroupRoleMapVO> groupRoleMap = _aclGroupRoleMapDao.listByGroupId(grp.getId());
-         if (groupRoleMap != null) {
-             for (AclGroupRoleMapVO gr : groupRoleMap) {
-                 _aclGroupRoleMapDao.remove(gr.getId());
-             }
-         }
++        Transaction.execute(new TransactionCallbackNoReturn() {
++            @Override
++            public void doInTransactionWithoutResult(TransactionStatus status) {
++                // remove this group related entry in acl_group_role_map
++                List<AclGroupRoleMapVO> groupRoleMap = _aclGroupRoleMapDao.listByGroupId(grp.getId());
++                if (groupRoleMap != null) {
++                    for (AclGroupRoleMapVO gr : groupRoleMap) {
++                        _aclGroupRoleMapDao.remove(gr.getId());
++                    }
++                }
 +
-         // remove this group related entry in acl_group_account table
-         List<AclGroupAccountMapVO> groupAcctMap = _aclGroupAccountMapDao.listByGroupId(grp.getId());
-         if (groupAcctMap != null) {
-             for (AclGroupAccountMapVO grpAcct : groupAcctMap) {
-                 _aclGroupAccountMapDao.remove(grpAcct.getId());
-             }
-         }
++                // remove this group related entry in acl_group_account table
++                List<AclGroupAccountMapVO> groupAcctMap = _aclGroupAccountMapDao.listByGroupId(grp.getId());
++                if (groupAcctMap != null) {
++                    for (AclGroupAccountMapVO grpAcct : groupAcctMap) {
++                        _aclGroupAccountMapDao.remove(grpAcct.getId());
++                    }
++                }
 +
-         // remove this group from acl_group table
-         _aclGroupDao.remove(aclGroupId);
-         txn.commit();
++                // remove this group from acl_group table
++                _aclGroupDao.remove(aclGroupId);
++            }
++        });
 +
 +        return true;
 +    }
 +
 +    @Override
 +    public List<AclRole> getAclRoles(long accountId) {
 +
 +        // static roles of the account
 +        SearchBuilder<AclGroupAccountMapVO> groupSB = _aclGroupAccountMapDao.createSearchBuilder();
 +        groupSB.and("account", groupSB.entity().getAccountId(), Op.EQ);
 +
 +        GenericSearchBuilder<AclGroupRoleMapVO, Long> roleSB = _aclGroupRoleMapDao.createSearchBuilder(Long.class);
-         roleSB.selectField(roleSB.entity().getAclRoleId());
++        roleSB.selectFields(roleSB.entity().getAclRoleId());
 +        roleSB.join("accountgroupjoin", groupSB, groupSB.entity().getAclGroupId(), roleSB.entity().getAclGroupId(),
 +                JoinType.INNER);
 +        roleSB.done();
 +        SearchCriteria<Long> roleSc = roleSB.create();
 +        roleSc.setJoinParameters("accountgroupjoin", "account", accountId);
 +
 +        List<Long> roleIds = _aclGroupRoleMapDao.customSearch(roleSc, null);
 +
 +        SearchBuilder<AclRoleVO> sb = _aclRoleDao.createSearchBuilder();
 +        sb.and("ids", sb.entity().getId(), Op.IN);
 +        SearchCriteria<AclRoleVO> sc = sb.create();
 +        sc.setParameters("ids", roleIds.toArray(new Object[roleIds.size()]));
 +        List<AclRoleVO> roles = _aclRoleDao.customSearch(sc, null);
 +
 +        return new ArrayList<AclRole>(roles);
 +    }
 +
 +    @Override
 +    public AclRolePermission getAclRolePermission(long accountId, String entityType, AccessType accessType) {
 +        List<AclRole> roles = getAclRoles(accountId);
 +        AclRolePermission curPerm = null;
 +        for (AclRole role : roles) {
 +            AclRolePermission perm = _rolePermissionDao.findByRoleEntityAndPermission(role.getId(), entityType, accessType, true);
 +            if (perm == null)
 +                continue;
 +            if (curPerm == null) {
 +                curPerm = perm;
 +            } else if (perm.getScope().greaterThan(curPerm.getScope())) {
 +                // pick the more relaxed allowed permission
 +                curPerm = perm;
 +            }
 +        }
 +
 +        return curPerm;
 +    }
 +
 +    @Override
 +    public List<AclGroup> getAclGroups(long accountId) {
 +
 +        GenericSearchBuilder<AclGroupAccountMapVO, Long> groupSB = _aclGroupAccountMapDao.createSearchBuilder(Long.class);
-         groupSB.selectField(groupSB.entity().getAclGroupId());
++        groupSB.selectFields(groupSB.entity().getAclGroupId());
 +        groupSB.and("account", groupSB.entity().getAccountId(), Op.EQ);
 +        SearchCriteria<Long> groupSc = groupSB.create();
 +
 +        List<Long> groupIds = _aclGroupAccountMapDao.customSearch(groupSc, null);
 +
 +        SearchBuilder<AclGroupVO> sb = _aclGroupDao.createSearchBuilder();
 +        sb.and("ids", sb.entity().getId(), Op.IN);
 +        SearchCriteria<AclGroupVO> sc = sb.create();
 +        sc.setParameters("ids", groupIds.toArray(new Object[groupIds.size()]));
 +        List<AclGroupVO> groups = _aclGroupDao.search(sc, null);
 +
 +        return new ArrayList<AclGroup>(groups);
 +    }
 +
 +    @Override
 +    public Pair<List<Long>, List<Long>> getAclEntityPermission(long accountId, String entityType, AccessType accessType) {
 +        List<AclGroup> groups = getAclGroups(accountId);
 +        if (groups == null || groups.size() == 0) {
 +            return new Pair<List<Long>, List<Long>>(new ArrayList<Long>(), new ArrayList<Long>());
 +        }
 +        Set<Long> allowedIds = new HashSet<Long>();
 +        Set<Long> deniedIds = new HashSet<Long>();
 +        for (AclGroup grp : groups) {
 +            // get allowed id  and denied list for each group
 +            List<Long> allowedIdList = _entityPermissionDao.findEntityIdByGroupAndPermission(grp.getId(), entityType, accessType, true);
 +            if (allowedIdList != null) {
 +                allowedIds.addAll(allowedIdList);
 +            }
 +            List<Long> deniedIdList = _entityPermissionDao.findEntityIdByGroupAndPermission(grp.getId(), entityType, accessType, false);
 +            if (deniedIdList != null) {
 +                deniedIds.addAll(deniedIdList);
 +            }
 +        }
 +        return new Pair<List<Long>, List<Long>>(new ArrayList<Long>(allowedIds), new ArrayList<Long>(deniedIds))
 +        ;
 +    }
 +
 +    @Override
 +    public boolean isAPIAccessibleForRoles(String apiName, List<AclRole> roles) {
 +
 +        boolean accessible = false;
 +
 +        List<Long> roleIds = new ArrayList<Long>();
 +        for (AclRole role : roles) {
 +            roleIds.add(role.getId());
 +        }
 +
 +        SearchBuilder<AclApiPermissionVO> sb = _apiPermissionDao.createSearchBuilder();
 +        sb.and("apiName", sb.entity().getApiName(), Op.EQ);
 +        sb.and("roleId", sb.entity().getAclRoleId(), Op.IN);
 +
 +        SearchCriteria<AclApiPermissionVO> sc = sb.create();
 +        sc.setParameters("roleId", roleIds.toArray(new Object[roleIds.size()]));
 +
 +        List<AclApiPermissionVO> permissions = _apiPermissionDao.customSearch(sc, null);
 +
 +        if (permissions != null && !permissions.isEmpty()) {
 +            accessible = true;
 +        }
 +
 +        return accessible;
 +    }
 +
 +    @Override
 +    public List<AclRole> getEffectiveRoles(Account caller, ControlledEntity entity) {
 +
 +        // Get the static Roles of the Caller
 +        List<AclRole> roles = getAclRoles(caller.getId());
 +
 +        // add any dynamic roles w.r.t the entity
 +        if (caller.getId() == entity.getAccountId()) {
 +            // The caller owns the entity
 +            AclRole owner = _aclRoleDao.findByName(Domain.ROOT_DOMAIN, "RESOURCE_OWNER");
 +            roles.add(owner);
 +        }
 +
 +        return roles;
 +    }
 +
 +}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/org/apache/cloudstack/affinity/AffinityGroupServiceImpl.java
----------------------------------------------------------------------
diff --cc server/src/org/apache/cloudstack/affinity/AffinityGroupServiceImpl.java
index 9343b22,b7b51c9..ebcdc60
--- a/server/src/org/apache/cloudstack/affinity/AffinityGroupServiceImpl.java
+++ b/server/src/org/apache/cloudstack/affinity/AffinityGroupServiceImpl.java
@@@ -159,9 -166,9 +166,9 @@@ public class AffinityGroupServiceImpl e
                      "Unable to create affinity group, no Affinity Group Types configured");
          }
  
-         AffinityGroupProcessor processor = typeProcessorMap.get(affinityGroupType);
+         final AffinityGroupProcessor processor = typeProcessorMap.get(affinityGroupType);
  
 -        if (processor.isAdminControlledGroup() && !_accountMgr.isRootAdmin(caller.getType())) {
 +        if (processor.isAdminControlledGroup() && !_accountMgr.isRootAdmin(caller.getId())) {
              throw new PermissionDeniedException("Cannot create the affinity group");
          }
  
@@@ -210,21 -217,26 +217,26 @@@
                      + affinityGroupName + " already exisits under the domain.");
          }
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
-         
-         AffinityGroupVO group = new AffinityGroupVO(affinityGroupName, affinityGroupType, description, owner.getDomainId(),
-                 owner.getId(), aclType);
+         final Account ownerFinal = owner;
+         final ControlledEntity.ACLType aclTypeFinal = aclType;
+         AffinityGroupVO group = Transaction.execute(new TransactionCallback<AffinityGroupVO>() {
+             @Override
+             public AffinityGroupVO doInTransaction(TransactionStatus status) {
+                 AffinityGroupVO group = new AffinityGroupVO(affinityGroupName, affinityGroupType, description, ownerFinal.getDomainId(),
+                         ownerFinal.getId(), aclTypeFinal);
 -                _affinityGroupDao.persist(group);
 +        _affinityGroupDao.persist(group);
  
-         if (domainId != null && aclType == ACLType.Domain) {
+                 if (domainId != null && aclTypeFinal == ACLType.Domain) {
 -                    boolean subDomainAccess = false;
 -                    subDomainAccess = processor.subDomainAccess();
 -                    AffinityGroupDomainMapVO domainMap = new AffinityGroupDomainMapVO(group.getId(), domainId, subDomainAccess);
 -                    _affinityGroupDomainMapDao.persist(domainMap);
 -                }
 +            boolean subDomainAccess = false;
 +            subDomainAccess = processor.subDomainAccess();
 +            AffinityGroupDomainMapVO domainMap = new AffinityGroupDomainMapVO(group.getId(), domainId, subDomainAccess);
 +            _affinityGroupDomainMapDao.persist(domainMap);
 +        }
  
-         txn.commit();
+                 return group;
+             }
+         });
+         
  
          if (s_logger.isDebugEnabled()) {
              s_logger.debug("Created affinity group =" + affinityGroupName);
@@@ -265,35 -277,38 +277,38 @@@
          // check permissions
          _accountMgr.checkAccess(caller, AccessType.ModifyEntry, true, group);
  
-         final Transaction txn = Transaction.currentTxn();
-         txn.start();
+         final Long affinityGroupIdFinal = affinityGroupId;
+         Transaction.execute(new TransactionCallbackNoReturn() {
+             @Override
+             public void doInTransactionWithoutResult(TransactionStatus status) {
  
-         group = _affinityGroupDao.lockRow(affinityGroupId, true);
+                 AffinityGroupVO group = _affinityGroupDao.lockRow(affinityGroupIdFinal, true);
 -                if (group == null) {
 +        if (group == null) {
-             throw new InvalidParameterValueException("Unable to find affinity group by id " + affinityGroupId);
+                     throw new InvalidParameterValueException("Unable to find affinity group by id " + affinityGroupIdFinal);
 -                }
 -        
 +        }
 +
-         List<AffinityGroupVMMapVO> affinityGroupVmMap = _affinityGroupVMMapDao.listByAffinityGroup(affinityGroupId);
+                 List<AffinityGroupVMMapVO> affinityGroupVmMap = _affinityGroupVMMapDao.listByAffinityGroup(affinityGroupIdFinal);
 -                if (!affinityGroupVmMap.isEmpty()) {
 -                    SearchBuilder<AffinityGroupVMMapVO> listByAffinityGroup = _affinityGroupVMMapDao.createSearchBuilder();
 -                    listByAffinityGroup.and("affinityGroupId", listByAffinityGroup.entity().getAffinityGroupId(),
 -                            SearchCriteria.Op.EQ);
 -                    listByAffinityGroup.done();
 -                    SearchCriteria<AffinityGroupVMMapVO> sc = listByAffinityGroup.create();
 +        if (!affinityGroupVmMap.isEmpty()) {
 +            SearchBuilder<AffinityGroupVMMapVO> listByAffinityGroup = _affinityGroupVMMapDao.createSearchBuilder();
 +            listByAffinityGroup.and("affinityGroupId", listByAffinityGroup.entity().getAffinityGroupId(),
 +                    SearchCriteria.Op.EQ);
 +            listByAffinityGroup.done();
 +            SearchCriteria<AffinityGroupVMMapVO> sc = listByAffinityGroup.create();
-             sc.setParameters("affinityGroupId", affinityGroupId);
+                     sc.setParameters("affinityGroupId", affinityGroupIdFinal);
 -        
 -                    _affinityGroupVMMapDao.lockRows(sc, null, true);
 -                    _affinityGroupVMMapDao.remove(sc);
 -                }
 -        
 -                // call processor to handle the group delete
 -                AffinityGroupProcessor processor = getAffinityGroupProcessorForType(group.getType());
 -                if (processor != null) {
 -                    processor.handleDeleteGroup(group);
 -                }
 -        
 +
 +            _affinityGroupVMMapDao.lockRows(sc, null, true);
 +            _affinityGroupVMMapDao.remove(sc);
 +        }
 +
 +        // call processor to handle the group delete
 +        AffinityGroupProcessor processor = getAffinityGroupProcessorForType(group.getType());
 +        if (processor != null) {
 +            processor.handleDeleteGroup(group);
 +        }
 +
-         _affinityGroupDao.expunge(affinityGroupId);
-         txn.commit();
+                 _affinityGroupDao.expunge(affinityGroupIdFinal);
+             }
+         });
  
          if (s_logger.isDebugEnabled()) {
              s_logger.debug("Deleted affinity group id=" + affinityGroupId);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/setup/db/db/schema-421to430.sql
----------------------------------------------------------------------
diff --cc setup/db/db/schema-421to430.sql
index 0000000,803f1d9..5d7ba4c
mode 000000,100644..100644
--- a/setup/db/db/schema-421to430.sql
+++ b/setup/db/db/schema-421to430.sql
@@@ -1,0 -1,483 +1,666 @@@
+ -- 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.
+ 
+ --;
+ -- Schema upgrade from 4.2.0 to 4.3.0;
+ --;
+ 
+ -- Disable foreign key checking
+ SET foreign_key_checks = 0;
+ 
+ ALTER TABLE `cloud`.`async_job` ADD COLUMN `related` CHAR(40) NOT NULL;
+ ALTER TABLE `cloud`.`async_job` DROP COLUMN `session_key`;
+ ALTER TABLE `cloud`.`async_job` DROP COLUMN `job_cmd_originator`;
+ ALTER TABLE `cloud`.`async_job` DROP COLUMN `callback_type`;
+ ALTER TABLE `cloud`.`async_job` DROP COLUMN `callback_address`;
+ 
+ ALTER TABLE `cloud`.`async_job` ADD COLUMN `job_type` VARCHAR(32);
+ ALTER TABLE `cloud`.`async_job` ADD COLUMN `job_dispatcher` VARCHAR(64);
+ ALTER TABLE `cloud`.`async_job` ADD COLUMN `job_executing_msid` bigint;
+ ALTER TABLE `cloud`.`async_job` ADD COLUMN `job_pending_signals` int(10) NOT NULL DEFAULT 0;
+ 
+ ALTER TABLE `cloud`.`network_offerings` ADD COLUMN `keep_alive_enabled` int(1) unsigned NOT NULL DEFAULT 1 COMMENT 'true if connection should be reset after requests.';
+ 
+ ALTER TABLE `cloud`.`vm_instance` ADD COLUMN `power_state` VARCHAR(74) DEFAULT 'PowerUnknown';
+ ALTER TABLE `cloud`.`vm_instance` ADD COLUMN `power_state_update_time` DATETIME;
+ ALTER TABLE `cloud`.`vm_instance` ADD COLUMN `power_state_update_count` INT DEFAULT 0;
+ ALTER TABLE `cloud`.`vm_instance` ADD COLUMN `power_host` bigint unsigned;
+ ALTER TABLE `cloud`.`vm_instance` ADD CONSTRAINT `fk_vm_instance__power_host` FOREIGN KEY (`power_host`) REFERENCES `cloud`.`host`(`id`);
+ 
+ DROP TABLE IF EXISTS `cloud`.`vm_snapshot_details`;
+ CREATE TABLE `cloud`.`vm_snapshot_details` (
+   `id` bigint unsigned UNIQUE NOT NULL,
+   `vm_snapshot_id` bigint unsigned NOT NULL,
+   `name` varchar(255) NOT NULL,
+   `value` varchar(255) NOT NULL,
+   PRIMARY KEY (`id`)
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+ 
+ CREATE TABLE `cloud`.`vm_work_job` (
+   `id` bigint unsigned UNIQUE NOT NULL,
+   `step` char(32) NOT NULL COMMENT 'state',
+   `vm_type` char(32) NOT NULL COMMENT 'type of vm',
+   `vm_instance_id` bigint unsigned NOT NULL COMMENT 'vm instance',
+   PRIMARY KEY (`id`),
+   CONSTRAINT `fk_vm_work_job__instance_id` FOREIGN KEY (`vm_instance_id`) REFERENCES `vm_instance`(`id`) ON DELETE CASCADE,
+   INDEX `i_vm_work_job__vm`(`vm_type`, `vm_instance_id`),
+   INDEX `i_vm_work_job__step`(`step`)
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+ 
+ CREATE TABLE `cloud`.`async_job_journal` (
+   `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
+   `job_id` bigint unsigned NOT NULL,
+   `journal_type` varchar(32),
+   `journal_text` varchar(1024) COMMENT 'journal descriptive informaton',
+   `journal_obj` varchar(1024) COMMENT 'journal strutural information, JSON encoded object',
+   `created` datetime NOT NULL COMMENT 'date created',
+   PRIMARY KEY (`id`),
+   CONSTRAINT `fk_async_job_journal__job_id` FOREIGN KEY (`job_id`) REFERENCES `async_job`(`id`) ON DELETE CASCADE
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+ 
+ CREATE TABLE `cloud`.`async_job_join_map` (
+   `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
+   `job_id` bigint unsigned NOT NULL,
+   `join_job_id` bigint unsigned NOT NULL,
+   `join_status` int NOT NULL,
+   `join_result` varchar(1024),
+   `join_msid` bigint,
+   `complete_msid` bigint,
+   `sync_source_id` bigint COMMENT 'upper-level job sync source info before join',
+   `wakeup_handler` varchar(64),
+   `wakeup_dispatcher` varchar(64),
+   `wakeup_interval` bigint NOT NULL DEFAULT 3000 COMMENT 'wakeup interval in seconds',
+   `created` datetime NOT NULL,
+   `last_updated` datetime,
+   `next_wakeup` datetime,
+   `expiration` datetime,
+   PRIMARY KEY (`id`),
+   CONSTRAINT `fk_async_job_join_map__job_id` FOREIGN KEY (`job_id`) REFERENCES `async_job`(`id`) ON DELETE CASCADE,
+   CONSTRAINT `fk_async_job_join_map__join_job_id` FOREIGN KEY (`join_job_id`) REFERENCES `async_job`(`id`),
+   CONSTRAINT `fk_async_job_join_map__join` UNIQUE (`job_id`, `join_job_id`),
+   INDEX `i_async_job_join_map__join_job_id`(`join_job_id`),
+   INDEX `i_async_job_join_map__created`(`created`),
+   INDEX `i_async_job_join_map__last_updated`(`last_updated`),
+   INDEX `i_async_job_join_map__next_wakeup`(`next_wakeup`),
+   INDEX `i_async_job_join_map__expiration`(`expiration`)
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+ 
+ ALTER TABLE `cloud`.`configuration` ADD COLUMN `default_value` VARCHAR(4095) COMMENT 'Default value for a configuration parameter';
+ ALTER TABLE `cloud`.`configuration` ADD COLUMN `updated` datetime COMMENT 'Time this was updated by the server. null means this row is obsolete.';
+ ALTER TABLE `cloud`.`configuration` ADD COLUMN `scope` VARCHAR(255) DEFAULT NULL COMMENT 'Can this parameter be scoped';
+ ALTER TABLE `cloud`.`configuration` ADD COLUMN `is_dynamic` TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Can the parameter be change dynamically without restarting the server';
+ 
+ UPDATE `cloud`.`configuration` SET `default_value` = `value`;
+ 
+ #Upgrade the offerings and template table to have actual remove and states
+ ALTER TABLE `cloud`.`disk_offering` ADD COLUMN `state` CHAR(40) NOT NULL DEFAULT 'Active' COMMENT 'state for disk offering';
+ 
+ UPDATE `cloud`.`disk_offering` SET `state`='Inactive' WHERE `removed` IS NOT NULL;
+ UPDATE `cloud`.`disk_offering` SET `removed`=NULL;
+ 
+ UPDATE `cloud`.`vm_template` SET `state`='Inactive' WHERE `removed` IS NOT NULL;
+ UPDATE `cloud`.`vm_template` SET `state`='Active' WHERE `removed` IS NULL;
+ UPDATE `cloud`.`vm_template` SET `removed`=NULL;
+ 
+ ALTER TABLE `cloud`.`remote_access_vpn` MODIFY COLUMN `network_id` bigint unsigned;
+ ALTER TABLE `cloud`.`remote_access_vpn` ADD COLUMN `vpc_id` bigint unsigned default NULL;
+ 
+ DROP VIEW IF EXISTS `cloud`.`disk_offering_view`;
+ CREATE VIEW `cloud`.`disk_offering_view` AS
+     select
+         disk_offering.id,
+         disk_offering.uuid,
+         disk_offering.name,
+         disk_offering.display_text,
+         disk_offering.disk_size,
+         disk_offering.min_iops,
+         disk_offering.max_iops,
+         disk_offering.created,
+         disk_offering.tags,
+         disk_offering.customized,
+         disk_offering.customized_iops,
+         disk_offering.removed,
+         disk_offering.use_local_storage,
+         disk_offering.system_use,
+         disk_offering.bytes_read_rate,
+         disk_offering.bytes_write_rate,
+         disk_offering.iops_read_rate,
+         disk_offering.iops_write_rate,
+         disk_offering.sort_key,
+         disk_offering.type,
+ 		disk_offering.display_offering,
+         domain.id domain_id,
+         domain.uuid domain_uuid,
+         domain.name domain_name,
+         domain.path domain_path
+     from
+         `cloud`.`disk_offering`
+             left join
+         `cloud`.`domain` ON disk_offering.domain_id = domain.id
+ 	where
+ 		disk_offering.state='ACTIVE';
+ 
+ DROP VIEW IF EXISTS `cloud`.`service_offering_view`;
+ CREATE VIEW `cloud`.`service_offering_view` AS
+     select 
+         service_offering.id,
+         disk_offering.uuid,
+         disk_offering.name,
+         disk_offering.display_text,
+         disk_offering.created,
+         disk_offering.tags,
+         disk_offering.removed,
+         disk_offering.use_local_storage,
+         disk_offering.system_use,
+         disk_offering.bytes_read_rate,
+         disk_offering.bytes_write_rate,
+         disk_offering.iops_read_rate,
+         disk_offering.iops_write_rate,
+         service_offering.cpu,
+         service_offering.speed,
+         service_offering.ram_size,
+         service_offering.nw_rate,
+         service_offering.mc_rate,
+         service_offering.ha_enabled,
+         service_offering.limit_cpu_use,
+         service_offering.host_tag,
+         service_offering.default_use,
+         service_offering.vm_type,
+         service_offering.sort_key,
+         service_offering.is_volatile,
+         service_offering.deployment_planner,
+         domain.id domain_id,
+         domain.uuid domain_uuid,
+         domain.name domain_name,
+         domain.path domain_path
+     from
+         `cloud`.`service_offering`
+             inner join
+         `cloud`.`disk_offering` ON service_offering.id = disk_offering.id
+             left join
+         `cloud`.`domain` ON disk_offering.domain_id = domain.id
+ 	where
+ 		disk_offering.state='Active';
+ 		
+ DROP VIEW IF EXISTS `cloud`.`template_view`;
+ CREATE VIEW `cloud`.`template_view` AS
+     select 
+         vm_template.id,
+         vm_template.uuid,
+         vm_template.unique_name,
+         vm_template.name,
+         vm_template.public,
+         vm_template.featured,
+         vm_template.type,
+         vm_template.hvm,
+         vm_template.bits,
+         vm_template.url,
+         vm_template.format,
+         vm_template.created,
+         vm_template.checksum,
+         vm_template.display_text,
+         vm_template.enable_password,
+         vm_template.dynamically_scalable,
+         vm_template.guest_os_id,
+         guest_os.uuid guest_os_uuid,
+         guest_os.display_name guest_os_name,
+         vm_template.bootable,
+         vm_template.prepopulate,
+         vm_template.cross_zones,
+         vm_template.hypervisor_type,
+         vm_template.extractable,
+         vm_template.template_tag,
+         vm_template.sort_key,
+         vm_template.removed,
+         vm_template.enable_sshkey,
+         source_template.id source_template_id,
+         source_template.uuid source_template_uuid,
+         account.id account_id,
+         account.uuid account_uuid,
+         account.account_name account_name,
+         account.type account_type,
+         domain.id domain_id,
+         domain.uuid domain_uuid,
+         domain.name domain_name,
+         domain.path domain_path,
+         projects.id project_id,
+         projects.uuid project_uuid,
+         projects.name project_name,        
+         data_center.id data_center_id,
+         data_center.uuid data_center_uuid,
+         data_center.name data_center_name,
+         launch_permission.account_id lp_account_id,
+         template_store_ref.store_id,
+ 		image_store.scope as store_scope,
+         template_store_ref.state,
+         template_store_ref.download_state,
+         template_store_ref.download_pct,
+         template_store_ref.error_str,
+         template_store_ref.size,
+         template_store_ref.destroyed,
+         template_store_ref.created created_on_store,
+         vm_template_details.name detail_name,
+         vm_template_details.value detail_value,
+         resource_tags.id tag_id,
+         resource_tags.uuid tag_uuid,
+         resource_tags.key tag_key,
+         resource_tags.value tag_value,
+         resource_tags.domain_id tag_domain_id,
+         resource_tags.account_id tag_account_id,
+         resource_tags.resource_id tag_resource_id,
+         resource_tags.resource_uuid tag_resource_uuid,
+         resource_tags.resource_type tag_resource_type,
+         resource_tags.customer tag_customer,
+ 		CONCAT(vm_template.id, '_', IFNULL(data_center.id, 0)) as temp_zone_pair
+     from
+         `cloud`.`vm_template`
+             inner join
+         `cloud`.`guest_os` ON guest_os.id = vm_template.guest_os_id        
+             inner join
+         `cloud`.`account` ON account.id = vm_template.account_id
+             inner join
+         `cloud`.`domain` ON domain.id = account.domain_id
+             left join
+         `cloud`.`projects` ON projects.project_account_id = account.id    
+             left join
+         `cloud`.`vm_template_details` ON vm_template_details.template_id = vm_template.id         
+             left join
+         `cloud`.`vm_template` source_template ON source_template.id = vm_template.source_template_id    
+             left join
+         `cloud`.`template_store_ref` ON template_store_ref.template_id = vm_template.id and template_store_ref.store_role = 'Image'
+             left join
+         `cloud`.`image_store` ON image_store.removed is NULL AND template_store_ref.store_id is not NULL AND image_store.id = template_store_ref.store_id 
+         	left join
+         `cloud`.`template_zone_ref` ON template_zone_ref.template_id = vm_template.id AND template_store_ref.store_id is NULL AND template_zone_ref.removed is null    
+             left join
+         `cloud`.`data_center` ON (image_store.data_center_id = data_center.id OR template_zone_ref.zone_id = data_center.id)
+             left join
+         `cloud`.`launch_permission` ON launch_permission.template_id = vm_template.id
+             left join
+         `cloud`.`resource_tags` ON resource_tags.resource_id = vm_template.id
+             and (resource_tags.resource_type = 'Template' or resource_tags.resource_type='ISO')
+     where
 -        vm_template.state='Active';
++        vm_template.state='Active';	
++        
++-- ACL DB schema        
++CREATE TABLE `cloud`.`acl_group` (
++  `id` bigint unsigned NOT NULL UNIQUE auto_increment,
++  `name` varchar(255) NOT NULL,
++  `description` varchar(255) default NULL,
++  `uuid` varchar(40),
++  `domain_id` bigint unsigned NOT NULL,  
++  `removed` datetime COMMENT 'date the group was removed',
++  `created` datetime COMMENT 'date the group was created',
++  PRIMARY KEY  (`id`),
++  INDEX `i_acl_group__removed`(`removed`),
++  CONSTRAINT `uc_acl_group__uuid` UNIQUE (`uuid`)  
++) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
++
++CREATE TABLE `cloud`.`acl_group_account_map` (
++  `id` bigint unsigned NOT NULL auto_increment,
++  `group_id` bigint unsigned NOT NULL,
++  `account_id` bigint unsigned NOT NULL,
++  `removed` datetime COMMENT 'date the account was removed from the group',
++  `created` datetime COMMENT 'date the account was assigned to the group',  
++  PRIMARY KEY  (`id`),
++  CONSTRAINT `fk_acl_group_vm_map__group_id` FOREIGN KEY(`group_id`) REFERENCES `acl_group` (`id`) ON DELETE CASCADE,
++  CONSTRAINT `fk_acl_group_vm_map__account_id` FOREIGN KEY(`account_id`) REFERENCES `account` (`id`) ON DELETE CASCADE
++) ENGINE=InnoDB DEFAULT CHARSET=utf8;        
++
++CREATE TABLE `cloud`.`acl_role` (
++  `id` bigint unsigned NOT NULL UNIQUE auto_increment,
++  `name` varchar(255) NOT NULL,
++  `description` varchar(255) default NULL,  
++  `uuid` varchar(40),
++  `domain_id` bigint unsigned NOT NULL,
++  `removed` datetime COMMENT 'date the role was removed',
++  `created` datetime COMMENT 'date the role was created',
++  `role_type` varchar(64) DEFAULT 'Static' COMMENT 'Static or Dynamic',
++  PRIMARY KEY  (`id`),
++  INDEX `i_acl_role__removed`(`removed`),
++  CONSTRAINT `uc_acl_role__uuid` UNIQUE (`uuid`)  
++) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
++
++CREATE TABLE `cloud`.`acl_group_role_map` (
++  `id` bigint unsigned NOT NULL auto_increment,
++  `group_id` bigint unsigned NOT NULL,
++  `role_id` bigint unsigned NOT NULL,
++  `removed` datetime COMMENT 'date the role was revoked from the group',
++  `created` datetime COMMENT 'date the role was granted to the group',   
++  PRIMARY KEY  (`id`),
++  CONSTRAINT `fk_acl_group_role_map__group_id` FOREIGN KEY(`group_id`) REFERENCES `acl_group` (`id`) ON DELETE CASCADE,
++  CONSTRAINT `fk_acl_group_role_map__role_id` FOREIGN KEY(`role_id`) REFERENCES `acl_role` (`id`) ON DELETE CASCADE
++) ENGINE=InnoDB DEFAULT CHARSET=utf8;        
++
++
++INSERT IGNORE INTO `cloud`.`acl_role` (id, name, description, uuid, domain_id, created, role_type) VALUES (1, 'NORMAL', 'Domain user role', UUID(), 1, Now(), 'Static');
++INSERT IGNORE INTO `cloud`.`acl_role` (id, name, description, uuid, domain_id, created, role_type) VALUES (2, 'ADMIN', 'Root admin role', UUID(), 1, Now(), 'Static');
++INSERT IGNORE INTO `cloud`.`acl_role` (id, name, description, uuid, domain_id, created, role_type) VALUES (3, 'DOMAIN_ADMIN', 'Domain admin role', UUID(), 1, Now(), 'Static');
++INSERT IGNORE INTO `cloud`.`acl_role` (id, name, description, uuid, domain_id, created, role_type) VALUES (4, 'RESOURCE_DOMAIN_ADMIN', 'Resource domain admin role', UUID(), 1, Now(), 'Static');
++INSERT IGNORE INTO `cloud`.`acl_role` (id, name, description, uuid, domain_id, created, role_type) VALUES (5, 'READ_ONLY_ADMIN', 'Read only admin role', UUID(), 1, Now(), 'Static');
++INSERT IGNORE INTO `cloud`.`acl_role` (id, name, description, uuid, domain_id, created, role_type) VALUES (6, 'RESOURCE_OWNER', 'Resource owner role', UUID(), 1, Now(), 'Dynamic');
++
++INSERT IGNORE INTO `cloud`.`acl_group` (id, name, description, uuid, domain_id, created) VALUES (1, 'NORMAL', 'Domain user group', UUID(), 1, Now());
++INSERT IGNORE INTO `cloud`.`acl_group` (id, name, description, uuid, domain_id, created) VALUES (2, 'ADMIN', 'Root admin group', UUID(), 1, Now());
++INSERT IGNORE INTO `cloud`.`acl_group` (id, name, description, uuid, domain_id, created) VALUES (3, 'DOMAIN_ADMIN', 'Domain admin group', UUID(), 1, Now());
++INSERT IGNORE INTO `cloud`.`acl_group` (id, name, description, uuid, domain_id, created) VALUES (4, 'RESOURCE_DOMAIN_ADMIN', 'Resource domain admin group', UUID(), 1, Now());
++INSERT IGNORE INTO `cloud`.`acl_group` (id, name, description, uuid, domain_id, created) VALUES (5, 'READ_ONLY_ADMIN', 'Read only admin group', UUID(), 1, Now());
++
++CREATE TABLE `cloud`.`acl_api_permission` (
++  `id` bigint unsigned NOT NULL UNIQUE auto_increment,
++  `role_id` bigint unsigned NOT NULL,
++  `api` varchar(255) NOT NULL,
++  `removed` datetime COMMENT 'date the permission was revoked',
++  `created` datetime COMMENT 'date the permission was granted',  
++  PRIMARY KEY  (`id`),
++  CONSTRAINT `fk_acl_api_permission__role_id` FOREIGN KEY(`role_id`) REFERENCES `acl_role` (`id`) ON DELETE CASCADE
++) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+ 
++CREATE TABLE `cloud`.`acl_entity_permission` (
++  `id` bigint unsigned NOT NULL UNIQUE auto_increment,
++  `group_id` bigint unsigned NOT NULL,
++  `entity_type` varchar(100) NOT NULL,
++  `entity_id` bigint unsigned NOT NULL,
++  `entity_uuid` varchar(40),  
++  `access_type` varchar(40) NOT NULL,
++  `permission` int(1) unsigned NOT NULL COMMENT '1 allowed, 0 for denied',
++  `removed` datetime COMMENT 'date the permission was revoked',
++  `created` datetime COMMENT 'date the permission was granted',   
++  PRIMARY KEY  (`id`),
++  CONSTRAINT `fk_acl_entity_permission__group_id` FOREIGN KEY(`group_id`) REFERENCES `acl_group` (`id`) ON DELETE CASCADE
++) ENGINE=InnoDB DEFAULT CHARSET=utf8;
++
++CREATE TABLE `cloud`.`acl_role_permission` (
++  `id` bigint unsigned NOT NULL UNIQUE auto_increment,
++  `role_id` bigint unsigned NOT NULL,
++  `entity_type` varchar(100) NOT NULL,
++  `access_type` varchar(40) NOT NULL,
++  `scope` varchar(100) NOT NULL,
++  `permission` int(1) unsigned NOT NULL COMMENT '1 allowed, 0 for denied',
++  PRIMARY KEY  (`id`),
++  CONSTRAINT `fk_acl_role_permission___role_id` FOREIGN KEY(`role_id`) REFERENCES `acl_role` (`id`) ON DELETE CASCADE
++) ENGINE=InnoDB DEFAULT CHARSET=utf8;
++
++
++INSERT IGNORE INTO `cloud`.`acl_role_permission` (role_id, entity_type, access_type, scope, permission) VALUES (6, '*', 'CreateEntry', 'ACCOUNT', 1);
++INSERT IGNORE INTO `cloud`.`acl_role_permission` (role_id, entity_type, access_type, scope, permission) VALUES (6, '*', 'ListEntry', 'ACCOUNT', 1);
++INSERT IGNORE INTO `cloud`.`acl_role_permission` (role_id, entity_type, access_type, scope, permission) VALUES (6, '*', 'ModifyEntry', 'ACCOUNT', 1);
++INSERT IGNORE INTO `cloud`.`acl_role_permission` (role_id, entity_type, access_type, scope, permission) VALUES (6, '*', 'DeleteEntry', 'ACCOUNT', 1);
++INSERT IGNORE INTO `cloud`.`acl_role_permission` (role_id, entity_type, access_type, scope, permission) VALUES (6, '*', 'OperateEntry', 'ACCOUNT', 1);
++INSERT IGNORE INTO `cloud`.`acl_role_permission` (role_id, entity_type, access_type, scope, permission) VALUES (3, '*', 'CreateEntry', 'DOMAIN', 1);
++INSERT IGNORE INTO `cloud`.`acl_role_permission` (role_id, entity_type, access_type, scope, permission) VALUES (3, '*', 'ListEntry', 'DOMAIN', 1);
++INSERT IGNORE INTO `cloud`.`acl_role_permission` (role_id, entity_type, access_type, scope, permission) VALUES (3, '*', 'ModifyEntry', 'DOMAIN', 1);
++INSERT IGNORE INTO `cloud`.`acl_role_permission` (role_id, entity_type, access_type, scope, permission) VALUES (3, '*', 'DeleteEntry', 'DOMAIN', 1);
++INSERT IGNORE INTO `cloud`.`acl_role_permission` (role_id, entity_type, access_type, scope, permission) VALUES (3, '*', 'OperateEntry', 'DOMAIN', 1);
++INSERT IGNORE INTO `cloud`.`acl_role_permission` (role_id, entity_type, access_type, scope, permission) VALUES (2, '*', 'CreateEntry', 'REGION', 1);
++INSERT IGNORE INTO `cloud`.`acl_role_permission` (role_id, entity_type, access_type, scope, permission) VALUES (2, '*', 'ListEntry', 'REGION', 1);
++INSERT IGNORE INTO `cloud`.`acl_role_permission` (role_id, entity_type, access_type, scope, permission) VALUES (2, '*', 'ModifyEntry', 'REGION', 1);
++INSERT IGNORE INTO `cloud`.`acl_role_permission` (role_id, entity_type, access_type, scope, permission) VALUES (2, '*', 'DeleteEntry', 'REGION', 1);
++INSERT IGNORE INTO `cloud`.`acl_role_permission` (role_id, entity_type, access_type, scope, permission) VALUES (2, '*', 'OperateEntry', 'REGION', 1);
++INSERT IGNORE INTO `cloud`.`acl_role_permission` (role_id, entity_type, access_type, scope, permission) VALUES (1, '*', 'CreateEntry', 'ACCOUNT', 1);
++INSERT IGNORE INTO `cloud`.`acl_role_permission` (role_id, entity_type, access_type, scope, permission) VALUES (1, '*', 'ListEntry', 'ACCOUNT', 1);
++INSERT IGNORE INTO `cloud`.`acl_role_permission` (role_id, entity_type, access_type, scope, permission) VALUES (1, '*', 'ModifyEntry', 'ACCOUNT', 1);
++INSERT IGNORE INTO `cloud`.`acl_role_permission` (role_id, entity_type, access_type, scope, permission) VALUES (1, '*', 'DeleteEntry', 'ACCOUNT', 1);
++INSERT IGNORE INTO `cloud`.`acl_role_permission` (role_id, entity_type, access_type, scope, permission) VALUES (1, '*', 'OperateEntry', 'ACCOUNT', 1);
++
++DROP VIEW IF EXISTS `cloud`.`acl_role_view`;
++CREATE VIEW `cloud`.`acl_role_view` AS
++    select 
++        acl_role.id id,
++        acl_role.uuid uuid,        
++        acl_role.name name,
++        acl_role.description description,
++        acl_role.removed removed,
++        acl_role.created created,
++        domain.id domain_id,
++        domain.uuid domain_uuid,
++        domain.name domain_name,
++        domain.path domain_path,
++        acl_api_permission.api api_name
++    from
++        `cloud`.`acl_role`
++            inner join
++        `cloud`.`domain` ON acl_role.domain_id = domain.id
++            left join
++        `cloud`.`acl_api_permission` ON acl_role.id = acl_api_permission.role_id;
++ 
++ 
++DROP VIEW IF EXISTS `cloud`.`acl_group_view`;
++CREATE VIEW `cloud`.`acl_group_view` AS
++    select 
++        acl_group.id id,
++        acl_group.uuid uuid,        
++        acl_group.name name,
++        acl_group.description description,
++        acl_group.removed removed,
++        acl_group.created created,
++        domain.id domain_id,
++        domain.uuid domain_uuid,
++        domain.name domain_name,
++        domain.path domain_path,
++        acl_role.id role_id,
++        acl_role.uuid role_uuid,
++        acl_role.name role_name,
++        account.id account_id,
++        account.uuid account_uuid,
++        account.account_name account_name,
++        acl_entity_permission.entity_id entity_id,
++        acl_entity_permission.entity_uuid entity_uuid,
++        acl_entity_permission.entity_type entity_type,
++        acl_entity_permission.access_type access_type
++    from
++        `cloud`.`acl_group`
++            inner join
++        `cloud`.`domain` ON acl_group.domain_id = domain.id
++            left join
++        `cloud`.`acl_group_role_map` on acl_group.id = acl_group_role_map.group_id  
++            left join         
++        `cloud`.`acl_role` on acl_group_role_map.role_id = acl_role.id    
++            left join
++        `cloud`.`acl_group_account_map` ON acl_group.id = acl_group_account_map.group_id
++            left join
++        `cloud`.`account` ON acl_group_account_map.account_id = account.id
++            left join
++         `cloud`.`acl_entity_permission` ON acl_group.id = acl_entity_permission.group_id;                         
++ 
+ DROP VIEW IF EXISTS `cloud`.`volume_view`;
+ CREATE VIEW `cloud`.`volume_view` AS
+     select
+         volumes.id,
+         volumes.uuid,
+         volumes.name,
+         volumes.device_id,
+         volumes.volume_type,
+         volumes.size,
+         volumes.min_iops,
+         volumes.max_iops,
+         volumes.created,
+         volumes.state,
+         volumes.attached,
+         volumes.removed,
+         volumes.pod_id,
 -	volumes.display_volume,
++        volumes.display_volume,
+         volumes.format,
 -	volumes.path,
++        volumes.path,
+         account.id account_id,
+         account.uuid account_uuid,
+         account.account_name account_name,
+         account.type account_type,
+         domain.id domain_id,
+         domain.uuid domain_uuid,
+         domain.name domain_name,
+         domain.path domain_path,
+         projects.id project_id,
+         projects.uuid project_uuid,
+         projects.name project_name,
+         data_center.id data_center_id,
+         data_center.uuid data_center_uuid,
+         data_center.name data_center_name,
 -	data_center.networktype data_center_type,
++        data_center.networktype data_center_type,
+         vm_instance.id vm_id,
+         vm_instance.uuid vm_uuid,
+         vm_instance.name vm_name,
+         vm_instance.state vm_state,
+         vm_instance.vm_type,
+         user_vm.display_name vm_display_name,
+         volume_store_ref.size volume_store_size,
+         volume_store_ref.download_pct,
+         volume_store_ref.download_state,
+         volume_store_ref.error_str,
+         volume_store_ref.created created_on_store,
+         disk_offering.id disk_offering_id,
+         disk_offering.uuid disk_offering_uuid,
+         disk_offering.name disk_offering_name,
+         disk_offering.display_text disk_offering_display_text,
+         disk_offering.use_local_storage,
+         disk_offering.system_use,
+         disk_offering.bytes_read_rate,
+         disk_offering.bytes_write_rate,
+         disk_offering.iops_read_rate,
+         disk_offering.iops_write_rate,
+         storage_pool.id pool_id,
+         storage_pool.uuid pool_uuid,
+         storage_pool.name pool_name,
+         cluster.hypervisor_type,
+         vm_template.id template_id,
+         vm_template.uuid template_uuid,
+         vm_template.extractable,
+         vm_template.type template_type,
+         resource_tags.id tag_id,
+         resource_tags.uuid tag_uuid,
+         resource_tags.key tag_key,
+         resource_tags.value tag_value,
+         resource_tags.domain_id tag_domain_id,
+         resource_tags.account_id tag_account_id,
+         resource_tags.resource_id tag_resource_id,
+         resource_tags.resource_uuid tag_resource_uuid,
+         resource_tags.resource_type tag_resource_type,
+         resource_tags.customer tag_customer,
+         async_job.id job_id,
+         async_job.uuid job_uuid,
+         async_job.job_status job_status,
+         async_job.account_id job_account_id
+     from
+         `cloud`.`volumes`
+             inner join
+         `cloud`.`account` ON volumes.account_id = account.id
+             inner join
+         `cloud`.`domain` ON volumes.domain_id = domain.id
+             left join
+         `cloud`.`projects` ON projects.project_account_id = account.id
+             left join
+         `cloud`.`data_center` ON volumes.data_center_id = data_center.id
+             left join
+         `cloud`.`vm_instance` ON volumes.instance_id = vm_instance.id
+             left join
+         `cloud`.`user_vm` ON user_vm.id = vm_instance.id
+             left join
+         `cloud`.`volume_store_ref` ON volumes.id = volume_store_ref.volume_id
+             left join
+         `cloud`.`disk_offering` ON volumes.disk_offering_id = disk_offering.id
+             left join
+         `cloud`.`storage_pool` ON volumes.pool_id = storage_pool.id
+             left join
+         `cloud`.`cluster` ON storage_pool.cluster_id = cluster.id
+             left join
+         `cloud`.`vm_template` ON volumes.template_id = vm_template.id OR volumes.iso_id = vm_template.id
+             left join
+         `cloud`.`resource_tags` ON resource_tags.resource_id = volumes.id
+             and resource_tags.resource_type = 'Volume'
+             left join
+         `cloud`.`async_job` ON async_job.instance_id = volumes.id
+             and async_job.instance_type = 'Volume'
+             and async_job.job_status = 0;
 -            
++
++
+ DROP VIEW IF EXISTS `cloud`.`storage_pool_view`;
+ CREATE VIEW `cloud`.`storage_pool_view` AS
+     select
+         storage_pool.id,
+         storage_pool.uuid,
+         storage_pool.name,
+         storage_pool.status,
+         storage_pool.path,
+         storage_pool.pool_type,
+         storage_pool.host_address,
+         storage_pool.created,
+         storage_pool.removed,
+         storage_pool.capacity_bytes,
+         storage_pool.capacity_iops,
+         storage_pool.scope,
+         storage_pool.hypervisor,
+         storage_pool.storage_provider_name,
+         cluster.id cluster_id,
+         cluster.uuid cluster_uuid,
+         cluster.name cluster_name,
+         cluster.cluster_type,
+         data_center.id data_center_id,
+         data_center.uuid data_center_uuid,
+         data_center.name data_center_name,
+         data_center.networktype data_center_type,
+         host_pod_ref.id pod_id,
+         host_pod_ref.uuid pod_uuid,
+         host_pod_ref.name pod_name,
+         storage_pool_details.name tag,
+         op_host_capacity.used_capacity disk_used_capacity,
+         op_host_capacity.reserved_capacity disk_reserved_capacity,
+         async_job.id job_id,
+         async_job.uuid job_uuid,
+         async_job.job_status job_status,
+         async_job.account_id job_account_id
+     from
+         `cloud`.`storage_pool`
+             left join
+         `cloud`.`cluster` ON storage_pool.cluster_id = cluster.id
+             left join
+         `cloud`.`data_center` ON storage_pool.data_center_id = data_center.id
+             left join
+         `cloud`.`host_pod_ref` ON storage_pool.pod_id = host_pod_ref.id
+             left join
+         `cloud`.`storage_pool_details` ON storage_pool_details.pool_id = storage_pool.id
+             and storage_pool_details.value = 'true'
+             left join
+         `cloud`.`op_host_capacity` ON storage_pool.id = op_host_capacity.host_id
+             and op_host_capacity.capacity_type = 3
+             left join
+         `cloud`.`async_job` ON async_job.instance_id = storage_pool.id
+             and async_job.instance_type = 'StoragePool'
+             and async_job.job_status = 0;
+             
+             
+             DROP TABLE IF EXISTS `cloud`.`vm_snapshot_details`;
+             
+ CREATE TABLE `cloud`.`firewall_rule_details` (
+   `id` bigint unsigned NOT NULL auto_increment,
+   `firewall_rule_id` bigint unsigned NOT NULL COMMENT 'Firewall rule id',
+   `name` varchar(255) NOT NULL,
+   `value` varchar(1024) NOT NULL,
+   `display` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'True if the detail can be displayed to the end user',
+   PRIMARY KEY (`id`),
+   CONSTRAINT `fk_firewall_rule_details__firewall_rule_id` FOREIGN KEY `fk_firewall_rule_details__firewall_rule_id`(`firewall_rule_id`) REFERENCES `firewall_rules`(`id`) ON DELETE CASCADE
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+ 
+ 
+ ALTER TABLE `cloud`.`data_center_details` ADD COLUMN `display` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'True if the detail can be displayed to the end user';
+ ALTER TABLE `cloud`.`network_details` CHANGE `display_detail` `display` tinyint(0) NOT NULL DEFAULT '0' COMMENT 'True if the detail can be displayed to the end user';
+ ALTER TABLE `cloud`.`vm_template_details` ADD COLUMN `display` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'True if the detail can be displayed to the end user';
+ ALTER TABLE `cloud`.`volume_details` CHANGE `display_detail` `display` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'True if the detail can be displayed to the end user';
+ ALTER TABLE `cloud`.`nic_details` CHANGE `display_detail` `display` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'True if the detail can be displayed to the end user';
+ ALTER TABLE `cloud`.`user_vm_details` CHANGE `display_detail` `display` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'True if the detail can be displayed to the end user';
+ ALTER TABLE `cloud`.`service_offering_details` ADD COLUMN `display` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'True if the detail can be displayed to the end user';
+ ALTER TABLE `cloud`.`storage_pool_details` ADD COLUMN `display` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'True if the detail can be displayed to the end user';
++

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/tools/apidoc/gen_toc.py
----------------------------------------------------------------------


[36/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
CLOUDSTACK-4932: bugfix : listNetworks API doesn't return VLAN ID (VNI)

Signed-off-by: ynojima <ma...@ynojima.net>
Signed-off-by: Toshiaki Hatano <ha...@haeena.net>


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

Branch: refs/heads/rbac
Commit: a6b6fa65facf83444262eb37ca65371a16900a04
Parents: 089026f
Author: ynojima <ma...@ynojima.net>
Authored: Tue Oct 22 21:09:27 2013 -0600
Committer: Toshiaki Hatano <ha...@haeena.net>
Committed: Thu Oct 31 00:37:04 2013 +0900

----------------------------------------------------------------------
 server/src/com/cloud/api/ApiResponseHelper.java | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a6b6fa65/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 155a563..de4cc66 100755
--- a/server/src/com/cloud/api/ApiResponseHelper.java
+++ b/server/src/com/cloud/api/ApiResponseHelper.java
@@ -2198,8 +2198,11 @@ public class ApiResponseHelper implements ResponseGenerator {
             String broadcastUri = network.getBroadcastUri().toString();
             response.setBroadcastUri(broadcastUri);
             String vlan = "N/A";
-            if (BroadcastDomainType.Vlan.scheme().equals(BroadcastDomainType.getSchemeValue(network.getBroadcastUri()))) {
-                vlan = BroadcastDomainType.getValue(network.getBroadcastUri());
+            switch (BroadcastDomainType.getSchemeValue(network.getBroadcastUri())){
+                case Vlan:
+                case Vxlan:
+                    vlan = BroadcastDomainType.getValue(network.getBroadcastUri());
+                    break;
             }
             // return vlan information only to Root admin
             response.setVlan(vlan);


[28/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
CLOUDSTACK-4758: UI > Create Compute Offering > add new field "Custom" checkbox > when it's checked, Number of CPU Cores/CPU/Memory field become non-required and hidden.


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

Branch: refs/heads/rbac
Commit: e0c0282d3ba3792c23996bd7ae9714dc70a5099c
Parents: 5e9320f
Author: Jessica Wang <je...@apache.org>
Authored: Tue Oct 29 15:52:04 2013 -0700
Committer: Jessica Wang <je...@apache.org>
Committed: Tue Oct 29 15:54:52 2013 -0700

----------------------------------------------------------------------
 ui/scripts/configuration.js | 33 +++++++++++++++++++++++++++++----
 1 file changed, 29 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e0c0282d/ui/scripts/configuration.js
----------------------------------------------------------------------
diff --git a/ui/scripts/configuration.js b/ui/scripts/configuration.js
index e76caaf..4280597 100644
--- a/ui/scripts/configuration.js
+++ b/ui/scripts/configuration.js
@@ -95,8 +95,15 @@
                                             });
                                         }
                                     },
+                                    isCustomized: {
+                                        label: 'Custom',                                       
+                                        isBoolean: true,
+                                        isReverse: true,
+                                        isChecked: false
+                                    },
                                     cpuNumber: {
                                         label: 'label.num.cpu.cores',
+                                        dependsOn: 'isCustomized',
                                         docID: 'helpComputeOfferingCPUCores',
                                         validation: {
                                             required: true,
@@ -105,6 +112,7 @@
                                     },
                                     cpuSpeed: {
                                         label: 'label.cpu.mhz',
+                                        dependsOn: 'isCustomized',
                                         docID: 'helpComputeOfferingCPUMHz',
                                         validation: {
                                             required: true,
@@ -113,6 +121,7 @@
                                     },
                                     memory: {
                                         label: 'label.memory.mb',
+                                        dependsOn: 'isCustomized',
                                         docID: 'helpComputeOfferingMemory',
                                         validation: {
                                             required: true,
@@ -280,11 +289,27 @@
                                     name: args.data.name,
                                     displaytext: args.data.description,
                                     storageType: args.data.storageType,
-                                    cpuNumber: args.data.cpuNumber,
-                                    cpuSpeed: args.data.cpuSpeed,
-                                    memory: args.data.memory
+                                    customized: (args.data.isCustomized == "on")                                    
                                 };
-
+                                
+                                //custom fields (begin)
+                                if (args.$form.find('.form-item[rel=cpuNumber]').css("display") != "none") {
+                                    $.extend(data, {
+                                    	cpuNumber: args.data.cpuNumber
+                                    });
+                                }
+                                if (args.$form.find('.form-item[rel=cpuSpeed]').css("display") != "none") {
+                                    $.extend(data, {
+                                    	cpuSpeed: args.data.cpuSpeed
+                                    });
+                                }
+                                if (args.$form.find('.form-item[rel=memory]').css("display") != "none") {
+                                    $.extend(data, {
+                                    	memory: args.data.memory
+                                    });
+                                }      
+                                //custom fields (end)
+                                
                                 if (args.data.deploymentPlanner != null && args.data.deploymentPlanner.length > 0) {
                                     $.extend(data, {
                                         deploymentplanner: args.data.deploymentPlanner


[43/50] [abbrv] Merge branch 'master' into rbac.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/usage/UsageServiceImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/usage/UsageServiceImpl.java
index c96e036,d16d36d..f7cfe31
--- a/server/src/com/cloud/usage/UsageServiceImpl.java
+++ b/server/src/com/cloud/usage/UsageServiceImpl.java
@@@ -153,14 -151,17 +154,17 @@@ public class UsageServiceImpl extends M
          } 
  
          boolean isAdmin = false;
+         boolean isDomainAdmin = false;
 - 
 +        
          //If accountId couldn't be found using accountName and domainId, get it from userContext
          if(accountId == null){
              accountId = caller.getId();
              //List records for all the accounts if the caller account is of type admin. 
              //If account_id or account_name is explicitly mentioned, list records for the specified account only even if the caller is of type admin
 -            if(caller.getType() == Account.ACCOUNT_TYPE_ADMIN){
 +            if (_accountService.isRootAdmin(caller.getId())) {
                  isAdmin = true;
+             } else if(caller.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN){
+                 isDomainAdmin = true;
              }
              s_logger.debug("Account details not available. Using userContext accountId: " + accountId);
          }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/user/AccountManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/user/AccountManagerImpl.java
index 03b51f4,27fd66a..a88b614
--- a/server/src/com/cloud/user/AccountManagerImpl.java
+++ b/server/src/com/cloud/user/AccountManagerImpl.java
@@@ -513,18 -483,20 +516,20 @@@ public class AccountManagerImpl extend
      }
  
      @DB
-     public void updateLoginAttempts(Long id, int attempts, boolean toDisable) {
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+     public void updateLoginAttempts(final Long id, final int attempts, final boolean toDisable) {
          try {
+             Transaction.execute(new TransactionCallbackNoReturn() {
+                 @Override
+                 public void doInTransactionWithoutResult(TransactionStatus status) {
 -                    UserAccountVO user = null;
 -                    user = _userAccountDao.lockRow(id, true);
 -                    user.setLoginAttempts(attempts);
 -                    if(toDisable) {
 -                        user.setState(State.disabled.toString());
 -                    }
 -                    _userAccountDao.update(id, user);
 +            UserAccountVO user = null;
 +            user = _userAccountDao.lockRow(id, true);
 +            user.setLoginAttempts(attempts);
 +            if(toDisable) {
 +                user.setState(State.disabled.toString());
 +            }
 +            _userAccountDao.update(id, user);
-              txn.commit();
+                 }
+             });
          } catch (Exception e) {
              s_logger.error("Failed to update login attempts for user with id " + id );
          }
@@@ -938,33 -906,35 +942,42 @@@
              }
          }
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+         final String accountNameFinal = accountName;
+         final Long domainIdFinal = domainId;
+         final String accountUUIDFinal = accountUUID;
+         Pair<Long, Account> pair = Transaction.execute(new TransactionCallback<Pair<Long, Account>>() {
+             @Override
+             public Pair<Long, Account> doInTransaction(TransactionStatus status) {
+                 // create account
+                 String accountUUID = accountUUIDFinal;
 -                if(accountUUID == null){
++                if (accountUUID == null) {
+                     accountUUID = UUID.randomUUID().toString();
+                 }
+                 AccountVO account = createAccount(accountNameFinal, accountType, domainIdFinal, networkDomain, details, accountUUID);
+                 long accountId = account.getId();
 -        
 +
-         // create account
-         if(accountUUID == null){
-             accountUUID = UUID.randomUUID().toString();
-         }
-         AccountVO account = createAccount(accountName, accountType, domainId, networkDomain, details, accountUUID);
-         long accountId = account.getId();
+                 // create the first user for the account
+                 UserVO user = createUser(accountId, userName, password, firstName, lastName, email, timezone, userUUID);
 -        
 +
-         // create the first user for the account
-         UserVO user = createUser(accountId, userName, password, firstName, lastName, email, timezone, userUUID);
+                 if (accountType == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) {
+                     // set registration token
+                     byte[] bytes = (domainIdFinal + accountNameFinal + userName + System.currentTimeMillis()).getBytes();
+                     String registrationToken = UUID.nameUUIDFromBytes(bytes).toString();
+                     user.setRegistrationToken(registrationToken);
+                 }
 +
-         if (accountType == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) {
-             // set registration token
-             byte[] bytes = (domainId + accountName + userName + System.currentTimeMillis()).getBytes();
-             String registrationToken = UUID.nameUUIDFromBytes(bytes).toString();
-             user.setRegistrationToken(registrationToken);
-         }
++                // create correct account and group association based on accountType
++                if (accountType != Account.ACCOUNT_TYPE_PROJECT) {
++                    AclGroupAccountMapVO grpAcct = new AclGroupAccountMapVO(accountType + 1, accountId);
++                    _aclGroupAccountDao.persist(grpAcct);
++                }
 +
-         // create correct account and group association based on accountType
-         if (accountType != Account.ACCOUNT_TYPE_PROJECT) {
-             AclGroupAccountMapVO grpAcct = new AclGroupAccountMapVO(accountType + 1, accountId);
-             _aclGroupAccountDao.persist(grpAcct);
-         }
+                 return new Pair<Long, Account>(user.getId(), account);
+             }
+         });
  
-         txn.commit();
+         long userId = pair.first();
+         Account account = pair.second();
  
          CallContext.current().putContextParameter(Account.class, account.getUuid());
  
@@@ -1198,15 -1168,18 +1211,18 @@@
  
          checkAccess(caller, null, true, account);
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
- 
+         boolean success = Transaction.execute(new TransactionCallback<Boolean>() {
+             @Override
+             public Boolean doInTransaction(TransactionStatus status) {
 -                boolean success = doSetUserStatus(userId, State.enabled);
 -        
 -                // make sure the account is enabled too
 -                success = success && enableAccount(user.getAccountId());
 -                
 +        boolean success = doSetUserStatus(userId, State.enabled);
 +
 +        // make sure the account is enabled too
 +        success = success && enableAccount(user.getAccountId());
 +
-         txn.commit();
+                 return success;
+             }
+         });
+ 
  
          if (success) {
              // whenever the user is successfully enabled, reset the login attempts to zero
@@@ -1488,16 -1461,19 +1504,19 @@@
              }
          }
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
- 
-         success = _accountDao.update(account.getId(), acctForUpdate);
+         final Account accountFinal = account;
+         success = Transaction.execute(new TransactionCallback<Boolean>() {
+             @Override
+             public Boolean doInTransaction(TransactionStatus status) {
+                 boolean success = _accountDao.update(accountFinal.getId(), acctForUpdate);
  
 -                if (details != null && success) {
 +        if (details != null && success) {
-             _accountDetailsDao.update(account.getId(), details);
+                     _accountDetailsDao.update(accountFinal.getId(), details);
 -                }
 +        }
  
-         txn.commit();
+                 return success;
+             }
+         });
  
          if (success) {
              CallContext.current().putContextParameter(Account.class, account.getUuid());
@@@ -1799,30 -1766,31 +1809,31 @@@
          }
  
          // Create the account
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
- 
+         return Transaction.execute(new TransactionCallback<AccountVO>() {
+             @Override
+             public AccountVO doInTransaction(TransactionStatus status) {
 -                AccountVO account = _accountDao.persist(new AccountVO(accountName, domainId, networkDomain, accountType, uuid));
 -        
 -                if (account == null) {
 -                    throw new CloudRuntimeException("Failed to create account name " + accountName + " in domain id=" + domainId);
 -                }
 -        
 -                Long accountId = account.getId();
 -        
 -                if (details != null) {
 -                    _accountDetailsDao.persist(accountId, details);
 -                }
 -        
 -                // Create resource count records for the account
 -                _resourceCountDao.createResourceCounts(accountId, ResourceLimit.ResourceOwnerType.Account);
 -        
 -                // Create default security group
 -                _networkGroupMgr.createDefaultSecurityGroup(accountId);
 +        AccountVO account = _accountDao.persist(new AccountVO(accountName, domainId, networkDomain, accountType, uuid));
  
 -                return account;
 -            }
 +        if (account == null) {
 +            throw new CloudRuntimeException("Failed to create account name " + accountName + " in domain id=" + domainId);
 +        }
 +
 +        Long accountId = account.getId();
 +
 +        if (details != null) {
 +            _accountDetailsDao.persist(accountId, details);
 +        }
 +
 +        // Create resource count records for the account
 +        _resourceCountDao.createResourceCounts(accountId, ResourceLimit.ResourceOwnerType.Account);
 +
 +        // Create default security group
 +        _networkGroupMgr.createDefaultSecurityGroup(accountId);
-         txn.commit();
 +
 +        return account;
 +    }
+         });
+     }
  
      protected UserVO createUser(long accountId, String userName, String password, String firstName, String lastName, String email, String timezone, String userUUID) {
          if (s_logger.isDebugEnabled()) {
@@@ -2071,12 -2039,14 +2082,14 @@@
          }
  
          // generate both an api key and a secret key, update the user table with the keys, return the keys to the user
-         String[] keys = new String[2];
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+         final String[] keys = new String[2];
+         Transaction.execute(new TransactionCallbackNoReturn() {
+             @Override
+             public void doInTransactionWithoutResult(TransactionStatus status) {
 -                keys[0] = createUserApiKey(userId);
 -                keys[1] = createUserSecretKey(userId);
 +        keys[0] = createUserApiKey(userId);
 +        keys[1] = createUserSecretKey(userId);
-         txn.commit();
+             }
+         });
  
          return keys;
      }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/user/DomainManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/user/DomainManagerImpl.java
index 58e8017,8416645..fa53b03
--- a/server/src/com/cloud/user/DomainManagerImpl.java
+++ b/server/src/com/cloud/user/DomainManagerImpl.java
@@@ -181,11 -192,16 +192,16 @@@ public class DomainManagerImpl extends 
              domainUUID = UUID.randomUUID().toString();
          }
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
-         DomainVO domain = _domainDao.create(new DomainVO(name, ownerId, parentId, networkDomain, domainUUID));
+         final String domainUUIDFinal = domainUUID;
+         DomainVO domain = Transaction.execute(new TransactionCallback<DomainVO>() {
+             @Override
+             public DomainVO doInTransaction(TransactionStatus status) {
+                 DomainVO domain = _domainDao.create(new DomainVO(name, ownerId, parentId, networkDomain, domainUUIDFinal));
 -                _resourceCountDao.createResourceCounts(domain.getId(), ResourceLimit.ResourceOwnerType.Domain);
 +        _resourceCountDao.createResourceCounts(domain.getId(), ResourceLimit.ResourceOwnerType.Domain);
-         txn.commit();
+                 return domain;
+             }
+         });
+ 
          CallContext.current().putContextParameter(Domain.class, domain.getUuid());
          return domain;
      }
@@@ -587,27 -603,28 +603,28 @@@
              }
          }
  
-         Transaction txn = Transaction.currentTxn();
- 
-         txn.start();
- 
+         Transaction.execute(new TransactionCallbackNoReturn() {
+             @Override
+             public void doInTransactionWithoutResult(TransactionStatus status) {
 -                if (domainName != null) {
 -                    String updatedDomainPath = getUpdatedDomainPath(domain.getPath(), domainName);
 -                    updateDomainChildren(domain, updatedDomainPath);
 -                    domain.setName(domainName);
 -                    domain.setPath(updatedDomainPath);
 -                }
 -        
 -                if (networkDomain != null) {
 -                    if (networkDomain.isEmpty()) {
 -                        domain.setNetworkDomain(null);
 -                    } else {
 -                        domain.setNetworkDomain(networkDomain);
 -                    }
 -                }
 -                _domainDao.update(domainId, domain);
 -                CallContext.current().putContextParameter(Domain.class, domain.getUuid());
 +        if (domainName != null) {
 +            String updatedDomainPath = getUpdatedDomainPath(domain.getPath(), domainName);
 +            updateDomainChildren(domain, updatedDomainPath);
 +            domain.setName(domainName);
 +            domain.setPath(updatedDomainPath);
 +        }
 +
 +        if (networkDomain != null) {
 +            if (networkDomain.isEmpty()) {
 +                domain.setNetworkDomain(null);
 +            } else {
 +                domain.setNetworkDomain(networkDomain);
 +            }
 +        }
 +        _domainDao.update(domainId, domain);
 +        CallContext.current().putContextParameter(Domain.class, domain.getUuid());
-         txn.commit();
+             }
+         });
+ 
  
          return _domainDao.findById(domainId);
  

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/vm/UserVmManager.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/vm/UserVmManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/vm/UserVmManagerImpl.java
index fb00f91,a0c7151..2f1c6c0
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@@ -68,10 -68,15 +69,15 @@@ import org.apache.cloudstack.engine.orc
  import org.apache.cloudstack.engine.service.api.OrchestrationService;
  import org.apache.cloudstack.engine.subsystem.api.storage.TemplateDataFactory;
  import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo;
++import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
++import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService;
++import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService.VolumeApiResult;
++import org.apache.cloudstack.framework.async.AsyncCallFuture;
  import org.apache.cloudstack.framework.config.ConfigKey;
  import org.apache.cloudstack.framework.config.Configurable;
  import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
  import org.apache.cloudstack.framework.jobs.AsyncJobManager;
+ import org.apache.cloudstack.managed.context.ManagedContextRunnable;
 -import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
 -import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService;
 -import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService.VolumeApiResult;
 -import org.apache.cloudstack.framework.async.AsyncCallFuture;
  import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
  import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
  import org.apache.cloudstack.storage.to.TemplateObjectTO;
@@@ -210,7 -220,7 +216,6 @@@ import com.cloud.template.VirtualMachin
  import com.cloud.user.Account;
  import com.cloud.user.AccountManager;
  import com.cloud.user.AccountService;
--import com.cloud.user.AccountVO;
  import com.cloud.user.ResourceLimitService;
  import com.cloud.user.SSHKeyPair;
  import com.cloud.user.SSHKeyPairVO;
@@@ -232,9 -242,17 +237,13 @@@ import com.cloud.utils.concurrency.Name
  import com.cloud.utils.crypt.RSAHelper;
  import com.cloud.utils.db.DB;
  import com.cloud.utils.db.EntityManager;
 -import com.cloud.utils.db.Filter;
  import com.cloud.utils.db.GlobalLock;
 -import com.cloud.utils.db.SearchBuilder;
  import com.cloud.utils.db.SearchCriteria;
 -import com.cloud.utils.db.TransactionCallback;
 -import com.cloud.utils.db.TransactionCallbackNoReturn;
 -import com.cloud.utils.db.SearchCriteria.Func;
  import com.cloud.utils.db.Transaction;
++import com.cloud.utils.db.TransactionCallbackNoReturn;
+ import com.cloud.utils.db.TransactionCallbackWithException;
+ import com.cloud.utils.db.TransactionCallbackWithExceptionNoReturn;
+ import com.cloud.utils.db.TransactionStatus;
  import com.cloud.utils.exception.CloudRuntimeException;
  import com.cloud.utils.exception.ExecutionException;
  import com.cloud.utils.fsm.NoTransitionException;
@@@ -1403,68 -1425,70 +1416,70 @@@ public class UserVmManagerImpl extends 
              s_logger.debug("Recovering vm " + vmId);
          }
  
-         Transaction txn = Transaction.currentTxn();
-         AccountVO account = null;
-         txn.start();
+         Transaction.execute(new TransactionCallbackWithExceptionNoReturn<ResourceAllocationException>() {
+             @Override
+             public void doInTransactionWithoutResult(TransactionStatus status) throws ResourceAllocationException {
 -        
 +
-         account = _accountDao.lockRow(vm.getAccountId(), true);
+                 Account account = _accountDao.lockRow(vm.getAccountId(), true);
 -        
 -                // if the account is deleted, throw error
 -                if (account.getRemoved() != null) {
 -                    throw new CloudRuntimeException(
 -                            "Unable to recover VM as the account is deleted");
 -                }
 -        
 -                // Get serviceOffering for Virtual Machine
 -                ServiceOfferingVO serviceOffering = _serviceOfferingDao.findById(vm.getServiceOfferingId());
 -        
 -                // First check that the maximum number of UserVMs, CPU and Memory limit for the given
 -                // accountId will not be exceeded
 -                resourceLimitCheck(account, new Long(serviceOffering.getCpu()), new Long(serviceOffering.getRamSize()));
 -        
 -                _haMgr.cancelDestroy(vm, vm.getHostId());
 -        
 -                try {
 -                    if (!_itMgr.stateTransitTo(vm,
 -                            VirtualMachine.Event.RecoveryRequested, null)) {
 -                        s_logger.debug("Unable to recover the vm because it is not in the correct state: "
 +
 +        // if the account is deleted, throw error
 +        if (account.getRemoved() != null) {
 +            throw new CloudRuntimeException(
 +                    "Unable to recover VM as the account is deleted");
 +        }
 +
 +        // Get serviceOffering for Virtual Machine
 +        ServiceOfferingVO serviceOffering = _serviceOfferingDao.findById(vm.getServiceOfferingId());
 +
 +        // First check that the maximum number of UserVMs, CPU and Memory limit for the given
 +        // accountId will not be exceeded
 +        resourceLimitCheck(account, new Long(serviceOffering.getCpu()), new Long(serviceOffering.getRamSize()));
 +
 +        _haMgr.cancelDestroy(vm, vm.getHostId());
 +
 +        try {
 +            if (!_itMgr.stateTransitTo(vm,
 +                    VirtualMachine.Event.RecoveryRequested, null)) {
 +                s_logger.debug("Unable to recover the vm because it is not in the correct state: "
 +                        + vmId);
 +                throw new InvalidParameterValueException(
 +                        "Unable to recover the vm because it is not in the correct state: "
                                  + vmId);
 -                        throw new InvalidParameterValueException(
 -                                "Unable to recover the vm because it is not in the correct state: "
 -                                        + vmId);
 -                    }
 -                } catch (NoTransitionException e) {
 -                    throw new InvalidParameterValueException(
 -                            "Unable to recover the vm because it is not in the correct state: "
 -                                    + vmId);
 -                }
 -        
 -                // Recover the VM's disks
 -                List<VolumeVO> volumes = _volsDao.findByInstance(vmId);
 -                for (VolumeVO volume : volumes) {
 -                    if (volume.getVolumeType().equals(Volume.Type.ROOT)) {
 -                        // Create an event
 -                        Long templateId = volume.getTemplateId();
 -                        Long diskOfferingId = volume.getDiskOfferingId();
 -                        Long offeringId = null;
 -                        if (diskOfferingId != null) {
 -                            DiskOfferingVO offering = _diskOfferingDao
 -                                    .findById(diskOfferingId);
 -                            if (offering != null
 -                                    && (offering.getType() == DiskOfferingVO.Type.Disk)) {
 -                                offeringId = offering.getId();
 -                            }
 -                        }
 -                        UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_CREATE, volume.getAccountId(),
 -                                volume.getDataCenterId(), volume.getId(), volume.getName(), offeringId, templateId,
 -                                volume.getSize(), Volume.class.getName(), volume.getUuid());
 +            }
 +        } catch (NoTransitionException e) {
 +            throw new InvalidParameterValueException(
 +                    "Unable to recover the vm because it is not in the correct state: "
 +                            + vmId);
 +        }
 +
 +        // Recover the VM's disks
 +        List<VolumeVO> volumes = _volsDao.findByInstance(vmId);
 +        for (VolumeVO volume : volumes) {
 +            if (volume.getVolumeType().equals(Volume.Type.ROOT)) {
 +                // Create an event
 +                Long templateId = volume.getTemplateId();
 +                Long diskOfferingId = volume.getDiskOfferingId();
 +                Long offeringId = null;
 +                if (diskOfferingId != null) {
 +                    DiskOfferingVO offering = _diskOfferingDao
 +                            .findById(diskOfferingId);
 +                    if (offering != null
 +                            && (offering.getType() == DiskOfferingVO.Type.Disk)) {
 +                        offeringId = offering.getId();
                      }
                  }
 -        
 -                //Update Resource Count for the given account
 -                resourceCountIncrement(account.getId(), new Long(serviceOffering.getCpu()),
 -                        new Long(serviceOffering.getRamSize()));
 +                UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_CREATE, volume.getAccountId(),
 +                        volume.getDataCenterId(), volume.getId(), volume.getName(), offeringId, templateId,
 +                        volume.getSize(), Volume.class.getName(), volume.getUuid());
 +            }
 +        }
 +
 +        //Update Resource Count for the given account
 +        resourceCountIncrement(account.getId(), new Long(serviceOffering.getCpu()),
 +                new Long(serviceOffering.getRamSize()));
-         txn.commit();
+             }
+         });
+ 
  
          return _vmDao.findById(vmId);
      }
@@@ -1773,28 -1791,11 +1782,11 @@@
                      "unable to find virtual machine with id " + id);
          }
  
-         ServiceOffering offering = _serviceOfferingDao.findById(vmInstance
-                 .getServiceOfferingId());
-         if (!offering.getOfferHA() && ha != null && ha) {
-             throw new InvalidParameterValueException(
-                     "Can't enable ha for the vm as it's created from the Service offering having HA disabled");
-         }
- 
          _accountMgr.checkAccess(CallContext.current().getCallingAccount(), null, true,
                  vmInstance);
 -        
 +
-         if (displayName == null) {
-             displayName = vmInstance.getDisplayName();
-         }
- 
-         if (ha == null) {
-             ha = vmInstance.isHaEnabled();
-         }
- 
-         if (isDisplayVmEnabled == null) {
-             isDisplayVmEnabled = vmInstance.isDisplayVm();
-         } else{
-             if(!_accountMgr.isRootAdmin(caller.getId())){
+         if (isDisplayVmEnabled != null) {
+             if(!_accountMgr.isRootAdmin(caller.getType())){
                  throw new PermissionDeniedException( "Cannot update parameter displayvm, only admin permitted ");
              }
          }
@@@ -1810,7 -1818,25 +1809,25 @@@
              throw new InvalidParameterValueException("Vm with id " + id
                      + " is not in the right state");
          }
 -        
 +
+         if (displayName == null) {
+             displayName = vm.getDisplayName();
+         }
+ 
+         if (ha == null) {
+             ha = vm.isHaEnabled();
+         }
+ 
+         ServiceOffering offering = _serviceOfferingDao.findById(vm.getServiceOfferingId());
+         if (!offering.getOfferHA() && ha) {
+             throw new InvalidParameterValueException(
+                     "Can't enable ha for the vm as it's created from the Service offering having HA disabled");
+         }
+         
+         if (isDisplayVmEnabled == null) {
+             isDisplayVmEnabled = vm.isDisplayVm();
+         }
+ 
          boolean updateUserdata = false;
          if (userData != null) {
              // check and replace newlines
@@@ -1819,26 -1845,15 +1836,15 @@@
              // update userData on domain router.
              updateUserdata = true;
          } else {
-             userData = vmInstance.getUserData();
+             userData = vm.getUserData();
          }
  
-         String description = "";
- 
-         if (displayName != null && !displayName.equals(vmInstance.getDisplayName())) {
-             description += "New display name: " + displayName + ". ";
+         if (isDynamicallyScalable == null) {
+             isDynamicallyScalable = vm.isDynamicallyScalable();
          }
 -        
 +
-         if (ha != vmInstance.isHaEnabled()) {
-             if (ha) {
-                 description += "Enabled HA. ";
-             } else {
-                 description += "Disabled HA. ";
-             }
-         }
          if (osTypeId == null) {
-             osTypeId = vmInstance.getGuestOSId();
-         } else {
-             description += "Changed Guest OS Type to " + osTypeId + ". ";
+             osTypeId = vm.getGuestOSId();
          }
  
          if (group != null) {
@@@ -2056,35 -2087,41 +2078,41 @@@
                          + userVmId);
              }
              try {
+                 final InstanceGroupVO groupFinal = group;
+                 Transaction.execute(new TransactionCallbackNoReturn() {
+                     @Override
+                     public void doInTransactionWithoutResult(TransactionStatus status) {
 -                        // don't let the group be deleted when we are assigning vm to
 -                        // it.
 +                // don't let the group be deleted when we are assigning vm to
 +                // it.
-                 InstanceGroupVO ngrpLock = _vmGroupDao.lockRow(group.getId(),
+                         InstanceGroupVO ngrpLock = _vmGroupDao.lockRow(groupFinal.getId(),
 -                                false);
 -                        if (ngrpLock == null) {
 -                            s_logger.warn("Failed to acquire lock on vm group id="
 +                        false);
 +                if (ngrpLock == null) {
 +                    s_logger.warn("Failed to acquire lock on vm group id="
-                             + group.getId() + " name=" + group.getName());
-                     txn.rollback();
-                     return false;
+                                     + groupFinal.getId() + " name=" + groupFinal.getName());
+                             throw new CloudRuntimeException("Failed to acquire lock on vm group id="
+                                     + groupFinal.getId() + " name=" + groupFinal.getName());
 -                        }
 -        
 -                        // Currently don't allow to assign a vm to more than one group
 -                        if (_groupVMMapDao.listByInstanceId(userVmId) != null) {
 -                            // Delete all mappings from group_vm_map table
 -                            List<InstanceGroupVMMapVO> groupVmMaps = _groupVMMapDao
 -                                    .listByInstanceId(userVmId);
 -                            for (InstanceGroupVMMapVO groupMap : groupVmMaps) {
 -                                SearchCriteria<InstanceGroupVMMapVO> sc = _groupVMMapDao
 -                                        .createSearchCriteria();
 -                                sc.addAnd("instanceId", SearchCriteria.Op.EQ,
 -                                        groupMap.getInstanceId());
 -                                _groupVMMapDao.expunge(sc);
 -                            }
 -                        }
 -                        InstanceGroupVMMapVO groupVmMapVO = new InstanceGroupVMMapVO(
 +                }
 +
 +                // Currently don't allow to assign a vm to more than one group
 +                if (_groupVMMapDao.listByInstanceId(userVmId) != null) {
 +                    // Delete all mappings from group_vm_map table
 +                    List<InstanceGroupVMMapVO> groupVmMaps = _groupVMMapDao
 +                            .listByInstanceId(userVmId);
 +                    for (InstanceGroupVMMapVO groupMap : groupVmMaps) {
 +                        SearchCriteria<InstanceGroupVMMapVO> sc = _groupVMMapDao
 +                                .createSearchCriteria();
 +                        sc.addAnd("instanceId", SearchCriteria.Op.EQ,
 +                                groupMap.getInstanceId());
 +                        _groupVMMapDao.expunge(sc);
 +                    }
 +                }
 +                InstanceGroupVMMapVO groupVmMapVO = new InstanceGroupVMMapVO(
-                         group.getId(), userVmId);
+                                 groupFinal.getId(), userVmId);
 -                        _groupVMMapDao.persist(groupVmMapVO);
 +                _groupVMMapDao.persist(groupVmMapVO);
  
-                 txn.commit();
+                     }
+                 });
+ 
                  return true;
              } finally {
                  if (userVm != null) {
@@@ -2459,7 -2496,11 +2487,11 @@@
              throw new PermissionDeniedException(
                      "The owner of vm to deploy is disabled: " + owner);
          }
+         VMTemplateVO template = _templateDao.findById(tmplt.getId());
+         if (template != null) {
+             _templateDao.loadDetails(template);
+         }
 -        
 +
          long accountId = owner.getId();
  
          assert !(requestedIps != null && (defaultIps.getIp4Address() != null || defaultIps.getIp6Address() != null)) : "requestedIp list and defaultNetworkIp should never be specified together";
@@@ -2749,121 -2790,139 +2781,139 @@@
              hypervisorType = template.getHypervisorType();
          }
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+         UserVmVO vm = commitUserVm(zone, template, hostName, displayName, owner, diskOfferingId, diskSize, userData,
+                 hypervisor, caller, isDisplayVmEnabled, keyboard, accountId, offering, isIso, sshPublicKey,
+                 networkNicMap, id, instanceName, uuidName, hypervisorType);
+ 
+         // Assign instance to the group
+         try {
+             if (group != null) {
+                 boolean addToGroup = addInstanceToGroup(Long.valueOf(id), group);
+                 if (!addToGroup) {
+                     throw new CloudRuntimeException(
+                             "Unable to assign Vm to the group " + group);
+                 }
+             }
+         } catch (Exception ex) {
+             throw new CloudRuntimeException("Unable to assign Vm to the group "
+                     + group);
+         }
+ 
+         _securityGroupMgr.addInstanceToGroups(vm.getId(), securityGroupIdList);
+ 
+         if (affinityGroupIdList != null && !affinityGroupIdList.isEmpty()) {
+             _affinityGroupVMMapDao.updateMap(vm.getId(), affinityGroupIdList);
+         }
+ 
+         return vm;
+     }
+ 
+     private UserVmVO commitUserVm(final DataCenter zone, final VirtualMachineTemplate template, final String hostName,
+             final String displayName, final Account owner, final Long diskOfferingId, final Long diskSize, final String userData,
+             final HypervisorType hypervisor, final Account caller, final Boolean isDisplayVmEnabled, final String keyboard, final long accountId,
+             final ServiceOfferingVO offering, final boolean isIso, final String sshPublicKey,
+             final LinkedHashMap<String, NicProfile> networkNicMap, final long id, final String instanceName, final String uuidName,
+             final HypervisorType hypervisorType) throws InsufficientCapacityException {
+         return Transaction.execute(new TransactionCallbackWithException<UserVmVO,InsufficientCapacityException>() {
+             @Override
+             public UserVmVO doInTransaction(TransactionStatus status) throws InsufficientCapacityException {
 -                UserVmVO vm = new UserVmVO(id, instanceName, displayName,
 -                        template.getId(), hypervisorType, template.getGuestOSId(),
 -                        offering.getOfferHA(), offering.getLimitCpuUse(),
 -                        owner.getDomainId(), owner.getId(), offering.getId(), userData,
 -                        hostName, diskOfferingId);
 -                vm.setUuid(uuidName);
 -                vm.setDynamicallyScalable(template.isDynamicallyScalable());
 -                if (sshPublicKey != null) {
 -                    vm.setDetail("SSH.PublicKey", sshPublicKey);
 -                }
 -        
 -                if (keyboard != null && !keyboard.isEmpty())
 -                    vm.setDetail(VmDetailConstants.KEYBOARD, keyboard);
 -        
 -                if (isIso) {
 -                    vm.setIsoId(template.getId());
 -                }
 -        
 -                if(isDisplayVmEnabled != null){
 -                    if(!_accountMgr.isRootAdmin(caller.getType())){
 -                        throw new PermissionDeniedException( "Cannot update parameter displayvm, only admin permitted ");
 -                    }
 -                    vm.setDisplayVm(isDisplayVmEnabled);
 -                }else {
 -                    vm.setDisplayVm(true);
 -                }
 -        
 -                // If hypervisor is vSphere, check for clone type setting.
 -                if (hypervisorType.equals(HypervisorType.VMware)) {
 -                    // retrieve clone flag.
 -                    UserVmCloneType cloneType = UserVmCloneType.linked;
 -                    String value = _configDao.getValue(Config.VmwareCreateFullClone.key());
 -                    if (value != null) {
 -                        if (Boolean.parseBoolean(value) == true)
 -                            cloneType = UserVmCloneType.full;
 -                    }
 -                    UserVmCloneSettingVO vmCloneSettingVO = new UserVmCloneSettingVO(id, cloneType.toString());
 -                    _vmCloneSettingDao.persist(vmCloneSettingVO);
 -                }
 -        
 -                long guestOSId = template.getGuestOSId();
 -                GuestOSVO guestOS = _guestOSDao.findById(guestOSId);
 -                long guestOSCategoryId = guestOS.getCategoryId();
 -                GuestOSCategoryVO guestOSCategory = _guestOSCategoryDao.findById(guestOSCategoryId);
 -        
 -        
 -                // If hypervisor is vSphere and OS is OS X, set special settings.
 -                if (hypervisorType.equals(HypervisorType.VMware)) {
 -                    if (guestOS.getDisplayName().toLowerCase().contains("apple mac os")){
 -                        vm.setDetail("smc.present", "TRUE");
 -                        vm.setDetail(VmDetailConstants.ROOK_DISK_CONTROLLER, "scsi");
 -                        vm.setDetail("firmware", "efi");
 -                        s_logger.info("guestOS is OSX : overwrite root disk controller to scsi, use smc and efi");
 -                    }
 -               }
 -        
 +        UserVmVO vm = new UserVmVO(id, instanceName, displayName,
 +                template.getId(), hypervisorType, template.getGuestOSId(),
 +                offering.getOfferHA(), offering.getLimitCpuUse(),
 +                owner.getDomainId(), owner.getId(), offering.getId(), userData,
 +                hostName, diskOfferingId);
 +        vm.setUuid(uuidName);
 +        vm.setDynamicallyScalable(template.isDynamicallyScalable());
 +        if (sshPublicKey != null) {
 +            vm.setDetail("SSH.PublicKey", sshPublicKey);
 +        }
 +
 +        if (keyboard != null && !keyboard.isEmpty())
 +            vm.setDetail(VmDetailConstants.KEYBOARD, keyboard);
 +
 +        if (isIso) {
 +            vm.setIsoId(template.getId());
 +        }
 +
 +        if(isDisplayVmEnabled != null){
 +            if(!_accountMgr.isRootAdmin(caller.getId())){
 +                throw new PermissionDeniedException( "Cannot update parameter displayvm, only admin permitted ");
 +            }
 +            vm.setDisplayVm(isDisplayVmEnabled);
 +        }else {
 +            vm.setDisplayVm(true);
 +        }
 +
 +        // If hypervisor is vSphere, check for clone type setting.
 +        if (hypervisorType.equals(HypervisorType.VMware)) {
 +            // retrieve clone flag.
 +            UserVmCloneType cloneType = UserVmCloneType.linked;
 +            String value = _configDao.getValue(Config.VmwareCreateFullClone.key());
 +            if (value != null) {
 +                if (Boolean.parseBoolean(value) == true)
 +                    cloneType = UserVmCloneType.full;
 +            }
 +            UserVmCloneSettingVO vmCloneSettingVO = new UserVmCloneSettingVO(id, cloneType.toString());
 +            _vmCloneSettingDao.persist(vmCloneSettingVO);
 +        }
 +
 +        long guestOSId = template.getGuestOSId();
 +        GuestOSVO guestOS = _guestOSDao.findById(guestOSId);
 +        long guestOSCategoryId = guestOS.getCategoryId();
 +        GuestOSCategoryVO guestOSCategory = _guestOSCategoryDao.findById(guestOSCategoryId);
 +
 +
 +        // If hypervisor is vSphere and OS is OS X, set special settings.
 +        if (hypervisorType.equals(HypervisorType.VMware)) {
 +            if (guestOS.getDisplayName().toLowerCase().contains("apple mac os")){
 +                vm.setDetail("smc.present", "TRUE");
 +                vm.setDetail(VmDetailConstants.ROOK_DISK_CONTROLLER, "scsi");
 +                vm.setDetail("firmware", "efi");
 +                s_logger.info("guestOS is OSX : overwrite root disk controller to scsi, use smc and efi");
 +            }
 +       }
 +
+                 Map<String, String> details = template.getDetails();
+                 if ( details != null && !details.isEmpty() ) {
+                     vm.details.putAll(details);
+                 }
+ 
 -                _vmDao.persist(vm);
 -                _vmDao.saveDetails(vm);
 -        
 -                s_logger.debug("Allocating in the DB for vm");
 -                DataCenterDeployment plan = new DataCenterDeployment(zone.getId());
 -        
 -                List<String> computeTags = new ArrayList<String>();
 -                computeTags.add(offering.getHostTag());
 -        
 -                List<String> rootDiskTags =	new ArrayList<String>();
 -                rootDiskTags.add(offering.getTags());
 -        
 -                if(isIso){
 +        _vmDao.persist(vm);
 +        _vmDao.saveDetails(vm);
 +
 +        s_logger.debug("Allocating in the DB for vm");
 +        DataCenterDeployment plan = new DataCenterDeployment(zone.getId());
 +
 +        List<String> computeTags = new ArrayList<String>();
 +        computeTags.add(offering.getHostTag());
 +
 +        List<String> rootDiskTags =	new ArrayList<String>();
 +        rootDiskTags.add(offering.getTags());
 +
 +        if(isIso){
-             VirtualMachineEntity vmEntity = _orchSrvc.createVirtualMachineFromScratch(vm.getUuid(), new Long(owner.getAccountId()).toString(), vm.getIsoId().toString(), hostName, displayName, hypervisor.name(), guestOSCategory.getName(), offering.getCpu(), offering.getSpeed(), offering.getRamSize(), diskSize,  computeTags, rootDiskTags, networkNicMap, plan);
+                     VirtualMachineEntity vmEntity = _orchSrvc.createVirtualMachineFromScratch(vm.getUuid(), Long.toString(owner.getAccountId()), vm.getIsoId().toString(), hostName, displayName, hypervisor.name(), guestOSCategory.getName(), offering.getCpu(), offering.getSpeed(), offering.getRamSize(), diskSize,  computeTags, rootDiskTags, networkNicMap, plan);
 -                }else {
 +        }else {
-             VirtualMachineEntity vmEntity = _orchSrvc.createVirtualMachine(vm.getUuid(), new Long(owner.getAccountId()).toString(), new Long(template.getId()).toString(), hostName, displayName, hypervisor.name(), offering.getCpu(),  offering.getSpeed(), offering.getRamSize(), diskSize, computeTags, rootDiskTags, networkNicMap, plan);
+                     VirtualMachineEntity vmEntity = _orchSrvc.createVirtualMachine(vm.getUuid(), Long.toString(owner.getAccountId()), Long.toString(template.getId()), hostName, displayName, hypervisor.name(), offering.getCpu(),  offering.getSpeed(), offering.getRamSize(), diskSize, computeTags, rootDiskTags, networkNicMap, plan);
 -                }
 -        
 -        
 -        
 -                if (s_logger.isDebugEnabled()) {
 -                    s_logger.debug("Successfully allocated DB entry for " + vm);
 -                }
 -                CallContext.current().setEventDetails("Vm Id: " + vm.getId());
 -        
 -                UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_CREATE, accountId, zone.getId(), vm.getId(),
 -                        vm.getHostName(), offering.getId(), template.getId(), hypervisorType.toString(),
 -                        VirtualMachine.class.getName(), vm.getUuid());
 -        
 -                //Update Resource Count for the given account
 -                resourceCountIncrement(accountId, new Long(offering.getCpu()),
 -                        new Long(offering.getRamSize()));
 -                return vm;
 -            }
 +        }
 +
 +
 +
 +        if (s_logger.isDebugEnabled()) {
 +            s_logger.debug("Successfully allocated DB entry for " + vm);
 +        }
 +        CallContext.current().setEventDetails("Vm Id: " + vm.getId());
 +
 +        UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_CREATE, accountId, zone.getId(), vm.getId(),
 +                vm.getHostName(), offering.getId(), template.getId(), hypervisorType.toString(),
 +                VirtualMachine.class.getName(), vm.getUuid());
 +
 +        //Update Resource Count for the given account
 +        resourceCountIncrement(accountId, new Long(offering.getCpu()),
 +                new Long(offering.getRamSize()));
- 
-         txn.commit();
- 
-         // Assign instance to the group
-         try {
-             if (group != null) {
-                 boolean addToGroup = addInstanceToGroup(Long.valueOf(id), group);
-                 if (!addToGroup) {
-                     throw new CloudRuntimeException(
-                             "Unable to assign Vm to the group " + group);
-                 }
-             }
-         } catch (Exception ex) {
-             throw new CloudRuntimeException("Unable to assign Vm to the group "
-                     + group);
-         }
- 
-         _securityGroupMgr.addInstanceToGroups(vm.getId(), securityGroupIdList);
- 
-         if (affinityGroupIdList != null && !affinityGroupIdList.isEmpty()) {
-             _affinityGroupVMMapDao.updateMap(vm.getId(), affinityGroupIdList);
-         }
- 
 +        return vm;
 +    }
+         });
+     }
  
      private void validateUserData(String userData, HTTPMethod httpmethod) {
          byte[] decodedUserData = null;
@@@ -3444,104 -3503,324 +3494,145 @@@
                  s_logger.warn("Error while collecting disk stats vm: " + userVm.getHostName() + " from host: " + host.getName() + "; details: " + diskStatsAnswer.getDetails());
                  return;
              }
-             Transaction txn = Transaction.open(Transaction.CLOUD_DB);
              try {
-                 txn.start();
-                 HashMap<String, List<VmDiskStatsEntry>> vmDiskStatsByName = diskStatsAnswer.getVmDiskStatsMap();
+                 final GetVmDiskStatsAnswer diskStatsAnswerFinal = diskStatsAnswer;
+                 Transaction.execute(new TransactionCallbackNoReturn() {
+                     @Override
+                     public void doInTransactionWithoutResult(TransactionStatus status) {
+                         HashMap<String, List<VmDiskStatsEntry>> vmDiskStatsByName = diskStatsAnswerFinal.getVmDiskStatsMap();
 -                        if (vmDiskStatsByName == null)
 -                            return;
 -                        List<VmDiskStatsEntry> vmDiskStats = vmDiskStatsByName.get(userVm.getInstanceName());
 -                        if (vmDiskStats == null)
 -                            return;
 -        
 -            	        for (VmDiskStatsEntry vmDiskStat:vmDiskStats) {
 -                                SearchCriteria<VolumeVO> sc_volume = _volsDao.createSearchCriteria();
 -                                sc_volume.addAnd("path", SearchCriteria.Op.EQ, vmDiskStat.getPath());
 -                                VolumeVO volume = _volsDao.search(sc_volume, null).get(0);
 -            	            VmDiskStatisticsVO previousVmDiskStats = _vmDiskStatsDao.findBy(userVm.getAccountId(), userVm.getDataCenterId(), userVm.getId(), volume.getId());
 -            	            VmDiskStatisticsVO vmDiskStat_lock = _vmDiskStatsDao.lock(userVm.getAccountId(), userVm.getDataCenterId(), userVm.getId(), volume.getId());
 -        
 -        	                if ((vmDiskStat.getIORead() == 0) && (vmDiskStat.getIOWrite() == 0) && (vmDiskStat.getBytesRead() == 0) && (vmDiskStat.getBytesWrite() == 0)) {
 -        	                    s_logger.debug("Read/Write of IO and Bytes are both 0. Not updating vm_disk_statistics");
 -        	                    continue;
 -        	                }
 -        
 -        	                if (vmDiskStat_lock == null) {
 -        	                    s_logger.warn("unable to find vm disk stats from host for account: " + userVm.getAccountId() + " with vmId: " + userVm.getId()+ " and volumeId:" + volume.getId());
 -        	                    continue;
 -        	                }
 -        
 -        	                if (previousVmDiskStats != null
 -        	                        && ((previousVmDiskStats.getCurrentIORead() != vmDiskStat_lock.getCurrentIORead())
 -        	                        || ((previousVmDiskStats.getCurrentIOWrite() != vmDiskStat_lock.getCurrentIOWrite())
 -        	                        || (previousVmDiskStats.getCurrentBytesRead() != vmDiskStat_lock.getCurrentBytesRead())
 -        	    	                || (previousVmDiskStats.getCurrentBytesWrite() != vmDiskStat_lock.getCurrentBytesWrite())))) {
 -        	                    s_logger.debug("vm disk stats changed from the time GetVmDiskStatsCommand was sent. " +
 -        	                            "Ignoring current answer. Host: " + host.getName() + " . VM: " + vmDiskStat.getVmName() +
 -        	                            " IO Read: " + vmDiskStat.getIORead() + " IO Write: " + vmDiskStat.getIOWrite() +
 -        	                            " Bytes Read: " + vmDiskStat.getBytesRead() + " Bytes Write: " + vmDiskStat.getBytesWrite());
 -        	                    continue;
 -        	                }
 -        
 -        	                if (vmDiskStat_lock.getCurrentIORead() > vmDiskStat.getIORead()) {
 -        	                    if (s_logger.isDebugEnabled()) {
 -        	                        s_logger.debug("Read # of IO that's less than the last one.  " +
 -        	                                "Assuming something went wrong and persisting it. Host: " + host.getName() + " . VM: " + vmDiskStat.getVmName() +
 -        	                                " Reported: " + vmDiskStat.getIORead() + " Stored: " + vmDiskStat_lock.getCurrentIORead());
 -        	                    }
 -        	                    vmDiskStat_lock.setNetIORead(vmDiskStat_lock.getNetIORead() + vmDiskStat_lock.getCurrentIORead());
 -        	                }
 -        	                vmDiskStat_lock.setCurrentIORead(vmDiskStat.getIORead());
 -        	                if (vmDiskStat_lock.getCurrentIOWrite() > vmDiskStat.getIOWrite()) {
 -        	                    if (s_logger.isDebugEnabled()) {
 -        	                        s_logger.debug("Write # of IO that's less than the last one.  " +
 -        	                                "Assuming something went wrong and persisting it. Host: " + host.getName() + " . VM: " + vmDiskStat.getVmName() +
 -        	                                " Reported: " + vmDiskStat.getIOWrite() + " Stored: " + vmDiskStat_lock.getCurrentIOWrite());
 -        	                    }
 -        	                    vmDiskStat_lock.setNetIOWrite(vmDiskStat_lock.getNetIOWrite() + vmDiskStat_lock.getCurrentIOWrite());
 -        	                }
 -        	                vmDiskStat_lock.setCurrentIOWrite(vmDiskStat.getIOWrite());
 -        	                if (vmDiskStat_lock.getCurrentBytesRead() > vmDiskStat.getBytesRead()) {
 -        	                    if (s_logger.isDebugEnabled()) {
 -        	                        s_logger.debug("Read # of Bytes that's less than the last one.  " +
 -        	                                "Assuming something went wrong and persisting it. Host: " + host.getName() + " . VM: " + vmDiskStat.getVmName() +
 -        	                                " Reported: " + vmDiskStat.getBytesRead() + " Stored: " + vmDiskStat_lock.getCurrentBytesRead());
 -        	                    }
 -        	                    vmDiskStat_lock.setNetBytesRead(vmDiskStat_lock.getNetBytesRead() + vmDiskStat_lock.getCurrentBytesRead());
 -        	                }
 -        	                vmDiskStat_lock.setCurrentBytesRead(vmDiskStat.getBytesRead());
 -        	                if (vmDiskStat_lock.getCurrentBytesWrite() > vmDiskStat.getBytesWrite()) {
 -        	                    if (s_logger.isDebugEnabled()) {
 -        	                        s_logger.debug("Write # of Bytes that's less than the last one.  " +
 -        	                                "Assuming something went wrong and persisting it. Host: " + host.getName() + " . VM: " + vmDiskStat.getVmName() +
 -        	                                " Reported: " + vmDiskStat.getBytesWrite() + " Stored: " + vmDiskStat_lock.getCurrentBytesWrite());
 -        	                    }
 -        	                    vmDiskStat_lock.setNetBytesWrite(vmDiskStat_lock.getNetBytesWrite() + vmDiskStat_lock.getCurrentBytesWrite());
 -        	                }
 -        	                vmDiskStat_lock.setCurrentBytesWrite(vmDiskStat.getBytesWrite());
 -        
 -        	                if (! _dailyOrHourly) {
 -        	                    //update agg bytes
 -        	                	vmDiskStat_lock.setAggIORead(vmDiskStat_lock.getNetIORead() + vmDiskStat_lock.getCurrentIORead());
 -        	                	vmDiskStat_lock.setAggIOWrite(vmDiskStat_lock.getNetIOWrite() + vmDiskStat_lock.getCurrentIOWrite());
 -        	                	vmDiskStat_lock.setAggBytesRead(vmDiskStat_lock.getNetBytesRead() + vmDiskStat_lock.getCurrentBytesRead());
 -        	                	vmDiskStat_lock.setAggBytesWrite(vmDiskStat_lock.getNetBytesWrite() + vmDiskStat_lock.getCurrentBytesWrite());
 -        	                }
 -        
 -        	                _vmDiskStatsDao.update(vmDiskStat_lock.getId(), vmDiskStat_lock);
 -        	        	}
 +                if (vmDiskStatsByName == null)
 +                    return;
 +                List<VmDiskStatsEntry> vmDiskStats = vmDiskStatsByName.get(userVm.getInstanceName());
 +                if (vmDiskStats == null)
 +		    return;
 +
 +	        for (VmDiskStatsEntry vmDiskStat:vmDiskStats) {
 +                    SearchCriteria<VolumeVO> sc_volume = _volsDao.createSearchCriteria();
 +                    sc_volume.addAnd("path", SearchCriteria.Op.EQ, vmDiskStat.getPath());
 +                    VolumeVO volume = _volsDao.search(sc_volume, null).get(0);
 +	            VmDiskStatisticsVO previousVmDiskStats = _vmDiskStatsDao.findBy(userVm.getAccountId(), userVm.getDataCenterId(), userVm.getId(), volume.getId());
 +	            VmDiskStatisticsVO vmDiskStat_lock = _vmDiskStatsDao.lock(userVm.getAccountId(), userVm.getDataCenterId(), userVm.getId(), volume.getId());
 +
 +	                if ((vmDiskStat.getIORead() == 0) && (vmDiskStat.getIOWrite() == 0) && (vmDiskStat.getBytesRead() == 0) && (vmDiskStat.getBytesWrite() == 0)) {
 +	                    s_logger.debug("Read/Write of IO and Bytes are both 0. Not updating vm_disk_statistics");
 +	                    continue;
 +	                }
 +
 +	                if (vmDiskStat_lock == null) {
 +	                    s_logger.warn("unable to find vm disk stats from host for account: " + userVm.getAccountId() + " with vmId: " + userVm.getId()+ " and volumeId:" + volume.getId());
 +	                    continue;
 +	                }
 +
 +	                if (previousVmDiskStats != null
 +	                        && ((previousVmDiskStats.getCurrentIORead() != vmDiskStat_lock.getCurrentIORead())
 +	                        || ((previousVmDiskStats.getCurrentIOWrite() != vmDiskStat_lock.getCurrentIOWrite())
 +	                        || (previousVmDiskStats.getCurrentBytesRead() != vmDiskStat_lock.getCurrentBytesRead())
 +	    	                || (previousVmDiskStats.getCurrentBytesWrite() != vmDiskStat_lock.getCurrentBytesWrite())))) {
 +	                    s_logger.debug("vm disk stats changed from the time GetVmDiskStatsCommand was sent. " +
 +	                            "Ignoring current answer. Host: " + host.getName() + " . VM: " + vmDiskStat.getVmName() +
 +	                            " IO Read: " + vmDiskStat.getIORead() + " IO Write: " + vmDiskStat.getIOWrite() +
 +	                            " Bytes Read: " + vmDiskStat.getBytesRead() + " Bytes Write: " + vmDiskStat.getBytesWrite());
 +	                    continue;
 +	                }
 +
 +	                if (vmDiskStat_lock.getCurrentIORead() > vmDiskStat.getIORead()) {
 +	                    if (s_logger.isDebugEnabled()) {
 +	                        s_logger.debug("Read # of IO that's less than the last one.  " +
 +	                                "Assuming something went wrong and persisting it. Host: " + host.getName() + " . VM: " + vmDiskStat.getVmName() +
 +	                                " Reported: " + vmDiskStat.getIORead() + " Stored: " + vmDiskStat_lock.getCurrentIORead());
 +	                    }
 +	                    vmDiskStat_lock.setNetIORead(vmDiskStat_lock.getNetIORead() + vmDiskStat_lock.getCurrentIORead());
 +	                }
 +	                vmDiskStat_lock.setCurrentIORead(vmDiskStat.getIORead());
 +	                if (vmDiskStat_lock.getCurrentIOWrite() > vmDiskStat.getIOWrite()) {
 +	                    if (s_logger.isDebugEnabled()) {
 +	                        s_logger.debug("Write # of IO that's less than the last one.  " +
 +	                                "Assuming something went wrong and persisting it. Host: " + host.getName() + " . VM: " + vmDiskStat.getVmName() +
 +	                                " Reported: " + vmDiskStat.getIOWrite() + " Stored: " + vmDiskStat_lock.getCurrentIOWrite());
 +	                    }
 +	                    vmDiskStat_lock.setNetIOWrite(vmDiskStat_lock.getNetIOWrite() + vmDiskStat_lock.getCurrentIOWrite());
 +	                }
 +	                vmDiskStat_lock.setCurrentIOWrite(vmDiskStat.getIOWrite());
 +	                if (vmDiskStat_lock.getCurrentBytesRead() > vmDiskStat.getBytesRead()) {
 +	                    if (s_logger.isDebugEnabled()) {
 +	                        s_logger.debug("Read # of Bytes that's less than the last one.  " +
 +	                                "Assuming something went wrong and persisting it. Host: " + host.getName() + " . VM: " + vmDiskStat.getVmName() +
 +	                                " Reported: " + vmDiskStat.getBytesRead() + " Stored: " + vmDiskStat_lock.getCurrentBytesRead());
 +	                    }
 +	                    vmDiskStat_lock.setNetBytesRead(vmDiskStat_lock.getNetBytesRead() + vmDiskStat_lock.getCurrentBytesRead());
 +	                }
 +	                vmDiskStat_lock.setCurrentBytesRead(vmDiskStat.getBytesRead());
 +	                if (vmDiskStat_lock.getCurrentBytesWrite() > vmDiskStat.getBytesWrite()) {
 +	                    if (s_logger.isDebugEnabled()) {
 +	                        s_logger.debug("Write # of Bytes that's less than the last one.  " +
 +	                                "Assuming something went wrong and persisting it. Host: " + host.getName() + " . VM: " + vmDiskStat.getVmName() +
 +	                                " Reported: " + vmDiskStat.getBytesWrite() + " Stored: " + vmDiskStat_lock.getCurrentBytesWrite());
 +	                    }
 +	                    vmDiskStat_lock.setNetBytesWrite(vmDiskStat_lock.getNetBytesWrite() + vmDiskStat_lock.getCurrentBytesWrite());
 +	                }
 +	                vmDiskStat_lock.setCurrentBytesWrite(vmDiskStat.getBytesWrite());
 +
 +	                if (! _dailyOrHourly) {
 +	                    //update agg bytes
 +	                	vmDiskStat_lock.setAggIORead(vmDiskStat_lock.getNetIORead() + vmDiskStat_lock.getCurrentIORead());
 +	                	vmDiskStat_lock.setAggIOWrite(vmDiskStat_lock.getNetIOWrite() + vmDiskStat_lock.getCurrentIOWrite());
 +	                	vmDiskStat_lock.setAggBytesRead(vmDiskStat_lock.getNetBytesRead() + vmDiskStat_lock.getCurrentBytesRead());
 +	                	vmDiskStat_lock.setAggBytesWrite(vmDiskStat_lock.getNetBytesWrite() + vmDiskStat_lock.getCurrentBytesWrite());
 +	                }
 +
 +	                _vmDiskStatsDao.update(vmDiskStat_lock.getId(), vmDiskStat_lock);
 +	        	}
- 	        	txn.commit();
+                     }
+                 });
              } catch (Exception e) {
-                 txn.rollback();
                  s_logger.warn("Unable to update vm disk statistics for vm: " + userVm.getId() + " from host: " + hostId, e);
-             } finally {
-                 txn.close();
              }
          }
      }
  
+     @Override
+     public UserVm expungeVm(long vmId) throws ResourceUnavailableException,
+     ConcurrentOperationException {
+         Account caller = CallContext.current().getCallingAccount();
+         Long userId = caller.getId();
+ 
+         // Verify input parameters
+         UserVmVO vm = _vmDao.findById(vmId);
+         if (vm == null) {
+             InvalidParameterValueException ex = new InvalidParameterValueException(
+                     "Unable to find a virtual machine with specified vmId");
+             ex.addProxyObject(String.valueOf(vmId), "vmId");
+             throw ex;
+         }
  
+         if (vm.getRemoved() != null) {
+             s_logger.trace("Vm id=" + vmId + " is already expunged");
+             return vm;
+         }
+ 
+         if ((vm.getState() != State.Destroyed) && (vm.getState() != State.Expunging)) {
+             CloudRuntimeException ex = new CloudRuntimeException(
+                     "Please destroy vm with specified vmId before expunge");
+             ex.addProxyObject(String.valueOf(vmId), "vmId");
+             throw ex;
+         }
+ 
+         _accountMgr.checkAccess(caller, null, true, vm);
+ 
+         boolean status;
+ 
+         status = expunge(vm, userId, caller);    
+         if (status) {
+             return  _vmDao.findByIdIncludingRemoved(vmId);
+         } else {
+             CloudRuntimeException ex = new CloudRuntimeException(
+                     "Failed to expunge vm with specified vmId");
+             ex.addProxyObject(String.valueOf(vmId), "vmId");
+             throw ex;
+         }
+ 
+     }
  
 -    @Override
 -    public Pair<List<UserVmJoinVO>, Integer> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive,
 -            List<Long> permittedAccounts, boolean listAll, ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags) {
 -        Filter searchFilter = new Filter(UserVmJoinVO.class, c.getOrderBy(), c.getAscending(), c.getOffset(), c.getLimit());
 -
 -        //first search distinct vm id by using query criteria and pagination
 -        SearchBuilder<UserVmJoinVO> sb = _vmJoinDao.createSearchBuilder();
 -        sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct ids
 -        _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
 -
 -        Object id = c.getCriteria(Criteria.ID);
 -        Object name = c.getCriteria(Criteria.NAME);
 -        Object state = c.getCriteria(Criteria.STATE);
 -        Object notState = c.getCriteria(Criteria.NOTSTATE);
 -        Object zone = c.getCriteria(Criteria.DATACENTERID);
 -        Object pod = c.getCriteria(Criteria.PODID);
 -        Object hostId = c.getCriteria(Criteria.HOSTID);
 -        Object hostName = c.getCriteria(Criteria.HOSTNAME);
 -        Object keyword = c.getCriteria(Criteria.KEYWORD);
 -        Object isAdmin = c.getCriteria(Criteria.ISADMIN);
 -        assert c.getCriteria(Criteria.IPADDRESS) == null : "We don't support search by ip address on VM any more.  If you see this assert, it means we have to find a different way to search by the nic table.";
 -        Object groupId = c.getCriteria(Criteria.GROUPID);
 -        Object networkId = c.getCriteria(Criteria.NETWORKID);
 -        Object hypervisor = c.getCriteria(Criteria.HYPERVISOR);
 -        Object storageId = c.getCriteria(Criteria.STORAGE_ID);
 -        Object templateId = c.getCriteria(Criteria.TEMPLATE_ID);
 -        Object isoId = c.getCriteria(Criteria.ISO_ID);
 -        Object vpcId = c.getCriteria(Criteria.VPC_ID);
 -
 -        sb.and("displayName", sb.entity().getDisplayName(),
 -                SearchCriteria.Op.LIKE);
 -        sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
 -        sb.and("name", sb.entity().getHostName(), SearchCriteria.Op.LIKE);
 -        sb.and("stateEQ", sb.entity().getState(), SearchCriteria.Op.EQ);
 -        sb.and("stateNEQ", sb.entity().getState(), SearchCriteria.Op.NEQ);
 -        sb.and("stateNIN", sb.entity().getState(), SearchCriteria.Op.NIN);
 -        sb.and("dataCenterId", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ);
 -        sb.and("podId", sb.entity().getPodId(), SearchCriteria.Op.EQ);
 -        sb.and("hypervisorType", sb.entity().getHypervisorType(), SearchCriteria.Op.EQ);
 -        sb.and("hostIdEQ", sb.entity().getHostId(), SearchCriteria.Op.EQ);
 -        sb.and("hostName", sb.entity().getHostName(), SearchCriteria.Op.LIKE);
 -        sb.and("templateId", sb.entity().getTemplateId(), SearchCriteria.Op.EQ);
 -        sb.and("isoId", sb.entity().getIsoId(), SearchCriteria.Op.EQ);
 -        sb.and("instanceGroupId", sb.entity().getInstanceGroupId(), SearchCriteria.Op.EQ);
 -
 -        if (groupId != null && (Long) groupId != -1) {
 -            sb.and("instanceGroupId", sb.entity().getInstanceGroupId(), SearchCriteria.Op.EQ);
 -        }
 -
 -        if (tags != null && !tags.isEmpty()) {
 -            for (int count=0; count < tags.size(); count++) {
 -                sb.or().op("key" + String.valueOf(count), sb.entity().getTagKey(), SearchCriteria.Op.EQ);
 -                sb.and("value" + String.valueOf(count), sb.entity().getTagValue(), SearchCriteria.Op.EQ);
 -                sb.cp();
 -            }
 -        }
 -
 -        if (networkId != null) {
 -            sb.and("networkId", sb.entity().getNetworkId(), SearchCriteria.Op.EQ);
 -        }
 -
 -        if(vpcId != null && networkId == null){
 -            sb.and("vpcId", sb.entity().getVpcId(), SearchCriteria.Op.EQ);
 -        }
 -
 -        if (storageId != null) {
 -            sb.and("poolId", sb.entity().getPoolId(), SearchCriteria.Op.EQ);
 -        }
 -
 -        // populate the search criteria with the values passed in
 -        SearchCriteria<UserVmJoinVO> sc = sb.create();
 -
 -        // building ACL condition
 -        _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
 -
 -        if (tags != null && !tags.isEmpty()) {
 -            int count = 0;
 -            for (String key : tags.keySet()) {
 -                sc.setParameters("key" + String.valueOf(count), key);
 -                sc.setParameters("value" + String.valueOf(count), tags.get(key));
 -                count++;
 -            }
 -        }
 -
 -        if (groupId != null && (Long)groupId != -1) {
 -            sc.setParameters("instanceGroupId", groupId);
 -        }
 -
 -        if (keyword != null) {
 -            SearchCriteria<UserVmJoinVO> ssc = _vmJoinDao.createSearchCriteria();
 -            ssc.addOr("displayName", SearchCriteria.Op.LIKE, "%" + keyword + "%");
 -            ssc.addOr("hostName", SearchCriteria.Op.LIKE, "%" + keyword + "%");
 -            ssc.addOr("instanceName", SearchCriteria.Op.LIKE, "%" + keyword
 -                    + "%");
 -            ssc.addOr("state", SearchCriteria.Op.EQ, keyword);
 -
 -            sc.addAnd("displayName", SearchCriteria.Op.SC, ssc);
 -        }
 -
 -        if (id != null) {
 -            sc.setParameters("id", id);
 -        }
 -
 -        if (templateId != null) {
 -            sc.setParameters("templateId", templateId);
 -        }
 -
 -        if (isoId != null) {
 -            sc.setParameters("isoId", isoId);
 -        }
 -
 -        if (networkId != null) {
 -            sc.setParameters("networkId", networkId);
 -        }
 -
 -        if(vpcId != null && networkId == null){
 -            sc.setParameters("vpcId", vpcId);
 -        }
 -
 -        if (name != null) {
 -            sc.setParameters("name", "%" + name + "%");
 -        }
 -
 -        if (state != null) {
 -            if (notState != null && (Boolean) notState == true) {
 -                sc.setParameters("stateNEQ", state);
 -            } else {
 -                sc.setParameters("stateEQ", state);
 -            }
 -        }
 -
 -        if (hypervisor != null) {
 -            sc.setParameters("hypervisorType", hypervisor);
 -        }
 -
 -        // Don't show Destroyed and Expunging vms to the end user
 -        if ((isAdmin != null) && ((Boolean) isAdmin != true)) {
 -            sc.setParameters("stateNIN", "Destroyed", "Expunging");
 -        }
 -
 -        if (zone != null) {
 -            sc.setParameters("dataCenterId", zone);
 -        }
 -        if (pod != null) {
 -            sc.setParameters("podId", pod);
 -
 -            if (state == null) {
 -                sc.setParameters("stateNEQ", "Destroyed");
 -            }
 -        }
 -
 -        if (hostId != null) {
 -            sc.setParameters("hostIdEQ", hostId);
 -        } else {
 -            if (hostName != null) {
 -                sc.setParameters("hostName", hostName);
 -            }
 -        }
 -
 -        if (storageId != null) {
 -            sc.setParameters("poolId", storageId);
 -        }
 -
 -        // search vm details by ids
 -        Pair<List<UserVmJoinVO>, Integer> uniqueVmPair =  _vmJoinDao.searchAndCount(sc, searchFilter);
 -        Integer count = uniqueVmPair.second();
 -        if ( count.intValue() == 0 ){
 -            // handle empty result cases
 -            return uniqueVmPair;
 -        }
 -        List<UserVmJoinVO> uniqueVms = uniqueVmPair.first();
 -        Long[] vmIds = new Long[uniqueVms.size()];
 -        int i = 0;
 -        for (UserVmJoinVO v : uniqueVms ){
 -            vmIds[i++] = v.getId();
 -        }
 -        List<UserVmJoinVO> vms = _vmJoinDao.searchByIds(vmIds);
 -        return new Pair<List<UserVmJoinVO>, Integer>(vms, count);
 -    }
  
      @Override
      public HypervisorType getHypervisorTypeOfUserVM(long vmId) {
@@@ -4233,55 -4512,57 +4324,57 @@@
          DomainVO domain = _domainDao.findById(cmd.getDomainId());
          _accountMgr.checkAccess(newAccount, domain);
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+         Transaction.execute(new TransactionCallbackNoReturn() {
+             @Override
+             public void doInTransactionWithoutResult(TransactionStatus status) {
 -                //generate destroy vm event for usage
 -                UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_DESTROY, vm.getAccountId(), vm.getDataCenterId(), vm.getId(),
 -                        vm.getHostName(), vm.getServiceOfferingId(), vm.getTemplateId(), vm.getHypervisorType().toString(),
 -                        VirtualMachine.class.getName(), vm.getUuid());
 -        
 -                // update resource counts for old account
 -                resourceCountDecrement(oldAccount.getAccountId(), new Long(offering.getCpu()),
 -                        new Long(offering.getRamSize()));
 -        
 -                // OWNERSHIP STEP 1: update the vm owner
 -                vm.setAccountId(newAccount.getAccountId());
 -                vm.setDomainId(cmd.getDomainId());
 -                _vmDao.persist(vm);
 -        
 -                // OS 2: update volume
 -                for (VolumeVO volume : volumes) {
 -                    UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_DELETE, volume.getAccountId(),
 -                            volume.getDataCenterId(), volume.getId(), volume.getName(), Volume.class.getName(), volume.getUuid());
 -                    _resourceLimitMgr.decrementResourceCount(oldAccount.getAccountId(), ResourceType.volume);
 -                    _resourceLimitMgr.decrementResourceCount(oldAccount.getAccountId(), ResourceType.primary_storage,
 -                            new Long(volume.getSize()));
 -                    volume.setAccountId(newAccount.getAccountId());
 -                    volume.setDomainId(newAccount.getDomainId());
 -                    _volsDao.persist(volume);
 -                    _resourceLimitMgr.incrementResourceCount(newAccount.getAccountId(), ResourceType.volume);
 -                    _resourceLimitMgr.incrementResourceCount(newAccount.getAccountId(), ResourceType.primary_storage,
 -                            new Long(volume.getSize()));
 -                    UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_CREATE, volume.getAccountId(),
 -                            volume.getDataCenterId(), volume.getId(), volume.getName(),
 -                            volume.getDiskOfferingId(), volume.getTemplateId(), volume.getSize(), Volume.class.getName(),
 -                            volume.getUuid());
 -                    //snapshots: mark these removed in db
 -                    List<SnapshotVO> snapshots = _snapshotDao.listByVolumeIdIncludingRemoved(volume.getId());
 -                    for (SnapshotVO snapshot: snapshots){
 -                        _snapshotDao.remove(snapshot.getId());
 -                    }
 -                }
 -        
 -                //update resource count of new account
 -                resourceCountIncrement(newAccount.getAccountId(), new Long(offering.getCpu()), new Long(offering.getRamSize()));
 -        
 -                //generate usage events to account for this change
 -                UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_CREATE, vm.getAccountId(), vm.getDataCenterId(), vm.getId(),
 -                        vm.getHostName(), vm.getServiceOfferingId(), vm.getTemplateId(), vm.getHypervisorType().toString(),
 -                        VirtualMachine.class.getName(), vm.getUuid());
 +        //generate destroy vm event for usage
 +        UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_DESTROY, vm.getAccountId(), vm.getDataCenterId(), vm.getId(),
 +                vm.getHostName(), vm.getServiceOfferingId(), vm.getTemplateId(), vm.getHypervisorType().toString(),
 +                VirtualMachine.class.getName(), vm.getUuid());
 +
 +        // update resource counts for old account
 +        resourceCountDecrement(oldAccount.getAccountId(), new Long(offering.getCpu()),
 +                new Long(offering.getRamSize()));
 +
 +        // OWNERSHIP STEP 1: update the vm owner
 +        vm.setAccountId(newAccount.getAccountId());
 +        vm.setDomainId(cmd.getDomainId());
 +        _vmDao.persist(vm);
 +
 +        // OS 2: update volume
 +        for (VolumeVO volume : volumes) {
 +            UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_DELETE, volume.getAccountId(),
 +                    volume.getDataCenterId(), volume.getId(), volume.getName(), Volume.class.getName(), volume.getUuid());
 +            _resourceLimitMgr.decrementResourceCount(oldAccount.getAccountId(), ResourceType.volume);
 +            _resourceLimitMgr.decrementResourceCount(oldAccount.getAccountId(), ResourceType.primary_storage,
 +                    new Long(volume.getSize()));
 +            volume.setAccountId(newAccount.getAccountId());
 +            volume.setDomainId(newAccount.getDomainId());
 +            _volsDao.persist(volume);
 +            _resourceLimitMgr.incrementResourceCount(newAccount.getAccountId(), ResourceType.volume);
 +            _resourceLimitMgr.incrementResourceCount(newAccount.getAccountId(), ResourceType.primary_storage,
 +                    new Long(volume.getSize()));
 +            UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_CREATE, volume.getAccountId(),
 +                    volume.getDataCenterId(), volume.getId(), volume.getName(),
 +                    volume.getDiskOfferingId(), volume.getTemplateId(), volume.getSize(), Volume.class.getName(),
 +                    volume.getUuid());
 +            //snapshots: mark these removed in db
 +            List<SnapshotVO> snapshots = _snapshotDao.listByVolumeIdIncludingRemoved(volume.getId());
 +            for (SnapshotVO snapshot: snapshots){
 +                _snapshotDao.remove(snapshot.getId());
 +            }
 +        }
 +
 +        //update resource count of new account
 +        resourceCountIncrement(newAccount.getAccountId(), new Long(offering.getCpu()), new Long(offering.getRamSize()));
 +
 +        //generate usage events to account for this change
 +        UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_CREATE, vm.getAccountId(), vm.getDataCenterId(), vm.getId(),
 +                vm.getHostName(), vm.getServiceOfferingId(), vm.getTemplateId(), vm.getHypervisorType().toString(),
 +                VirtualMachine.class.getName(), vm.getUuid());
+             }
+         });
  
-         txn.commit();
  
          VirtualMachine vmoi = _itMgr.findById(vm.getId());
          VirtualMachineProfileImpl vmOldProfile = new VirtualMachineProfileImpl(vmoi);


[32/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
CLOUDSTACK-4772: remove test tag for the test test_01_RouterStopCreateFW
Signed-off-by: SrikanteswaraRao Talluri <ta...@apache.org>


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

Branch: refs/heads/rbac
Commit: b13cc0d027a869f1e8eb36df290ddaec1f8a8bb7
Parents: 088ba84
Author: SrikanteswaraRao Talluri <ta...@apache.org>
Authored: Wed Oct 30 12:31:14 2013 +0530
Committer: SrikanteswaraRao Talluri <ta...@apache.org>
Committed: Wed Oct 30 12:33:48 2013 +0530

----------------------------------------------------------------------
 test/integration/component/test_routers.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b13cc0d0/test/integration/component/test_routers.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_routers.py b/test/integration/component/test_routers.py
index 8706a1e..b41cc6f 100644
--- a/test/integration/component/test_routers.py
+++ b/test/integration/component/test_routers.py
@@ -1110,7 +1110,7 @@ class TestRouterStopCreateFW(cloudstackTestCase):
         self.cleanup = []
         return
 
-    @attr(tags = ["advanced", "advancedns","test"])
+    @attr(tags = ["advanced", "advancedns"])
     def test_01_RouterStopCreateFW(self):
         """Test router stop create Firewall rule
         """


[06/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
Update layout of multi-wizards

-Change colors of progress bar

-Minor fixes to layout in zone wizard


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

Branch: refs/heads/rbac
Commit: 9c57e137ae4900c863cadcb1b95eab6ced3f99d2
Parents: e7685f8
Author: Brian Federle <br...@citrix.com>
Authored: Tue Oct 29 11:05:46 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Tue Oct 29 11:08:09 2013 -0700

----------------------------------------------------------------------
 ui/css/cloudstack3.css | 70 ++++++++++++++++++---------------------------
 1 file changed, 28 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9c57e137/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index b6d7079..a0cd3f8 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -5315,38 +5315,34 @@ label.error {
   float: left;
   width: 128px;
   height: 40px;
-  border: 1px solid #5B7084;
-  border-left: 1px solid #000000;
-  border-right: none;
-  background: url(../images/bg-gradients.png) 0px -261px;
   padding: 0 0px;
   position: relative;
 }
 
 .multi-wizard.instance-wizard .progress ul li {
-  width: 109px;
+  width: 102px;
+  margin-left: 8px;
 }
 
 .multi-wizard .progress ul li.first {
-  /*+border-radius:5px 0 0 5px;*/
-  -moz-border-radius: 5px 0 0 5px;
-  -webkit-border-radius: 5px 0 0 5px;
-  -khtml-border-radius: 5px 0 0 5px;
-  border-radius: 5px 0 0 5px;
+  /*+border-radius:5px;*/
+  -moz-border-radius: 5px;
+  -webkit-border-radius: 5px;
+  -khtml-border-radius: 5px;
+  border-radius: 5px;
 }
 
 .multi-wizard .progress ul li.last {
-  /*+border-radius:0 5px 5px 0;*/
-  -moz-border-radius: 0 5px 5px 0;
-  -webkit-border-radius: 0 5px 5px 0;
-  -khtml-border-radius: 0 5px 5px 0;
-  border-radius: 0 5px 5px 0;
-  border-right: 1px solid #5B7084;
 }
 
 .multi-wizard .progress ul li.active {
   background: url(../images/bg-gradients.png) 0px -221px;
   height: 40px;
+  /*+border-radius:5px;*/
+  -moz-border-radius: 5px;
+  -webkit-border-radius: 5px;
+  -khtml-border-radius: 5px;
+  border-radius: 5px;
 }
 
 .multi-wizard .progress ul li span {
@@ -5356,7 +5352,7 @@ label.error {
   left: 46px;
   top: 17px;
   text-align: left;
-  color: #656565;
+  color: #000000;
   /*+text-shadow:0px 1px 1px #FFFFFF;*/
   -moz-text-shadow: 0px 1px 1px #FFFFFF;
   -webkit-text-shadow: 0px 1px 1px #FFFFFF;
@@ -5370,6 +5366,7 @@ label.error {
 
 .multi-wizard.instance-wizard .progress ul li span {
   left: 26px;
+  top: 16px;
 }
 
 .multi-wizard .progress ul li span.multiline {
@@ -5386,10 +5383,11 @@ label.error {
   margin-top: -3px;
   background: url(../images/icons.png) no-repeat 0px -422px;
   z-index: 1000;
+  display: none;
 }
 
 .multi-wizard.instance-wizard .progress ul li span.arrow {
-  left: 27px;
+  left: 19px;
 }
 
 .multi-wizard .progress ul li.active span.arrow {
@@ -5399,16 +5397,11 @@ label.error {
 .multi-wizard .progress ul li span.number {
   width: auto;
   position: absolute;
-  top: 8px;
+  top: 7px;
   left: 26px;
   font-size: 27px;
   font-weight: bold;
-  color: #E8E8E8;
-  /*+text-shadow:0px -1px 1px #C2BDBD;*/
-  -moz-text-shadow: 0px -1px 1px #C2BDBD;
-  -webkit-text-shadow: 0px -1px 1px #C2BDBD;
-  -o-text-shadow: 0px -1px 1px #C2BDBD;
-  text-shadow: 0px -1px 1px #C2BDBD;
+  color: #000000;
   background: transparent;
 }
 
@@ -5418,7 +5411,7 @@ label.error {
 
 .multi-wizard.instance-wizard .progress ul li span.multiline {
   width: 79px;
-  left: 23px;
+  left: 26px;
 }
 
 .multi-wizard .progress ul li.active span {
@@ -5431,16 +5424,6 @@ label.error {
 }
 
 .multi-wizard .progress ul li.active span.number {
-  /*+opacity:26%;*/
-  filter: alpha(opacity=26);
-  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=26);
-  -moz-opacity: 0.26;
-  opacity: 0.26;
-  /*+text-shadow:0px -1px 1px #000000;*/
-  -moz-text-shadow: 0px -1px 1px #000000;
-  -webkit-text-shadow: 0px -1px 1px #000000;
-  -o-text-shadow: 0px -1px 1px #000000;
-  text-shadow: 0px -1px 1px #000000;
 }
 
 /*** Content*/
@@ -5874,7 +5857,7 @@ label.error {
 .multi-wizard .buttons .button.previous {
   background: #D6D6D6;
   color: #62798E;
-  margin-left: 12px;
+  margin-left: 27px;
 }
 
 .multi-wizard .buttons .button.previous:hover {
@@ -6357,10 +6340,10 @@ label.error {
 
 .multi-wizard.zone-wizard ul.subnav {
   text-align: left;
-  /*+placement:shift 13px 87px;*/
+  /*+placement:shift 30px 104px;*/
   position: relative;
-  left: 13px;
-  top: 87px;
+  left: 30px;
+  top: 104px;
   position: absolute;
   list-style: disc inside;
 }
@@ -6369,7 +6352,9 @@ label.error {
   float: left;
   padding: 0;
   font-size: 12px;
+  white-space: nowrap;
   text-transform: uppercase;
+  list-style: none;
   height: 20px;
   margin-right: 34px;
   color: #9A9A9A;
@@ -6485,7 +6470,7 @@ label.error {
 }
 
 .multi-wizard.zone-wizard .buttons {
-  top: 584px;
+  top: 609px;
 }
 
 .multi-wizard.zone-wizard .progress ul {
@@ -6493,7 +6478,8 @@ label.error {
 }
 
 .multi-wizard.zone-wizard .progress ul li {
-  width: 114px;
+  width: 107px;
+  margin-left: 7px;
   padding: 0 32px 0 0;
 }
 


[03/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
Update colors of UI dialogs


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

Branch: refs/heads/rbac
Commit: d9e9e0daad6caef91847da7a522a99abf42613a0
Parents: 591dcd1
Author: Brian Federle <br...@citrix.com>
Authored: Tue Oct 29 10:49:54 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Tue Oct 29 10:49:54 2013 -0700

----------------------------------------------------------------------
 ui/css/cloudstack3.css | 35 ++++++-----------------------------
 1 file changed, 6 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d9e9e0da/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index 2861e11..7345221 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -3571,20 +3571,15 @@ table tr.selected td.actions .action.disabled .icon {
 /*** Action icons
 Dialogs*/
 .ui-dialog {
-  background: #E9E9E9 url(../images/bg-dialog-body.png) repeat-x 0px 0px;
+  background: #FFFFFF;
   text-align: left;
-  /*+border-radius:7px;*/
-  -moz-border-radius: 7px;
-  -webkit-border-radius: 7px;
-  -khtml-border-radius: 7px;
-  border-radius: 7px;
-  border-radius: 7px 7px 7px 7px;
   /*+box-shadow:0px -4px 15px #4C4A4A;*/
   -moz-box-shadow: 0px -4px 15px #4C4A4A;
   -webkit-box-shadow: 0px -4px 15px #4C4A4A;
   -o-box-shadow: 0px -4px 15px #4C4A4A;
   box-shadow: 0px -4px 15px #4C4A4A;
   position: absolute;
+  padding: 15px;
 }
 
 .ui-dialog .ui-widget-content {
@@ -3719,8 +3714,8 @@ Dialogs*/
 }
 
 .ui-dialog-titlebar {
-  background: #4C5F70 url(../images/bg-dialog-header.png);
-  color: #FFFFFF;
+  background: #FFFFFF;
+  color: #000000;
   height: 33px;
   /*+border-radius:7px 7px 0 0;*/
   -moz-border-radius: 7px 7px 0 0;
@@ -3741,11 +3736,6 @@ Dialogs*/
   top: 9px;
   font-size: 14px;
   padding: 2px 0 5px 30px;
-  /*+text-shadow:0px -1px 1px #495968;*/
-  -moz-text-shadow: 0px -1px 1px #495968;
-  -webkit-text-shadow: 0px -1px 1px #495968;
-  -o-text-shadow: 0px -1px 1px #495968;
-  text-shadow: 0px -1px 1px #495968;
   background: url(../images/icons.png) no-repeat 0px -255px;
 }
 
@@ -3758,7 +3748,7 @@ Dialogs*/
 }
 
 .ui-dialog.create-form .ui-dialog-title {
-  background: url(../images/icons.png) no-repeat 0px -256px;
+  background: url(../images/icons.png) no-repeat 0px -255px;
 }
 
 .ui-dialog.confirm .ui-button {
@@ -3831,22 +3821,9 @@ Dialogs*/
 .ui-dialog div.form-container div.value input {
   width: 98%;
   font-size: 14px;
+  padding: 4px;
   background: #F6F6F6;
-  /*+border-radius:4px;*/
-  -moz-border-radius: 4px;
-  -webkit-border-radius: 4px;
-  -khtml-border-radius: 4px;
-  border-radius: 4px;
-  border-radius: 4px 4px 4px 4px;
   border: 1px solid #AFAFAF;
-  /*+box-shadow:inset 0px 1px #727272;*/
-  -moz-box-shadow: inset 0px 1px #727272;
-  -webkit-box-shadow: inset 0px 1px #727272;
-  -o-box-shadow: inset 0px 1px #727272;
-  box-shadow: inset 0px 1px #727272;
-  -moz-box-shadow: inset 0px 1px 0px #727272;
-  -webkit-box-shadow: inset 0px 1px 0px #727272;
-  -o-box-shadow: inset 0px 1px 0px #727272;
   float: left;
 }
 


[38/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
CLOUDSTACK-4758: Make root disk size a text field


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

Branch: refs/heads/rbac
Commit: 2189da6c720c14262b489c427721864cfabf2238
Parents: 8871cdc
Author: Brian Federle <br...@citrix.com>
Authored: Wed Oct 30 11:20:02 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Wed Oct 30 11:20:02 2013 -0700

----------------------------------------------------------------------
 ui/index.jsp | 11 ++---------
 1 file changed, 2 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2189da6c/ui/index.jsp
----------------------------------------------------------------------
diff --git a/ui/index.jsp b/ui/index.jsp
index db4d468..3325f75 100644
--- a/ui/index.jsp
+++ b/ui/index.jsp
@@ -164,17 +164,10 @@
                                         </div>
                                     </div>
 
-                                    <!-- Custom size slider -->
+                                    <!-- Root disk size -->
                                     <div class="section custom-size">
                                         <label><fmt:message key="label.root.disk.size"/></label>
-
-                                        <!-- Slider -->
-                                        <label class="size">1 GB</label>
-                                        <div class="slider custom-size"></div>
-                                        <label class="size max"><span></span> GB</label>
-
-                                        <input type="text" class="required digits" name="root-size" value="1" />
-                                        <label class="size">GB</label>
+                                        <input type="text" name="rootDiskSize" />
                                     </div>
                                 </div>
                             </div>


[22/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
fixed m2eclipse error


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

Branch: refs/heads/rbac
Commit: 5bcd8280fdd1e9039a6bf6c4c4fd43b8b49f938e
Parents: 4f8781f
Author: Anthony Xu <an...@citrix.com>
Authored: Tue Oct 29 15:19:15 2013 -0700
Committer: Anthony Xu <an...@citrix.com>
Committed: Tue Oct 29 15:20:49 2013 -0700

----------------------------------------------------------------------
 agent/pom.xml                            | 139 +++++++++++++-------------
 plugins/hypervisors/kvm/pom.xml          |  62 ++++++------
 plugins/user-authenticators/ldap/pom.xml | 128 ++++++++++++------------
 usage/pom.xml                            | 138 ++++++++++++-------------
 4 files changed, 237 insertions(+), 230 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5bcd8280/agent/pom.xml
----------------------------------------------------------------------
diff --git a/agent/pom.xml b/agent/pom.xml
index 1413322..ec1ddde 100644
--- a/agent/pom.xml
+++ b/agent/pom.xml
@@ -46,74 +46,75 @@
     </dependency>    
   </dependencies>
   <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-antrun-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>generate-resource</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-            <configuration>
-              <target>
-                <copy
-                  todir="${basedir}/target/transformed">
-                  <fileset dir="${basedir}/conf">
-                    <include name="agent.properties" />
-                  </fileset>
-                </copy>
-                <copy overwrite="true"
-                  todir="${basedir}/target/transformed">
-                  <fileset dir="${basedir}/conf">
-                    <include name="*.in" />
-                  </fileset>
-                  <globmapper from="*.in" to="*" />
-                  <filterchain>
-                    <filterreader
-                      classname="org.apache.tools.ant.filters.ReplaceTokens">
-                      <param type="propertiesfile"
-                        value="${cs.replace.properties}" />
-                    </filterreader>
-                  </filterchain>
-                </copy>
-                <copy overwrite="true"
-                  todir="${basedir}/target/transformed">
-                  <fileset dir="${basedir}/bindir">
-                    <include name="*.in" />
-                  </fileset>
-                  <globmapper from="*.in" to="*" />
-                  <filterchain>
-                    <filterreader
-                      classname="org.apache.tools.ant.filters.ReplaceTokens">
-                      <param type="propertiesfile"
-                        value="${cs.replace.properties}" />
-                    </filterreader>
-                  </filterchain>
-                </copy>
-              </target>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>copy-dependencies</id>
-            <phase>package</phase>
-            <goals>
-              <goal>copy-dependencies</goal>
-            </goals>
-            <configuration>
-              <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
-              <includeScope>runtime</includeScope>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <artifactId>maven-antrun-plugin</artifactId>
+          <executions>
+            <execution>
+              <id>generate-resource</id>
+              <phase>generate-resources</phase>
+              <goals>
+                <goal>run</goal>
+              </goals>
+              <configuration>
+                <target>
+                  <copy todir="${basedir}/target/transformed">
+                    <fileset dir="${basedir}/conf">
+                      <include name="agent.properties" />
+                    </fileset>
+                  </copy>
+                  <copy overwrite="true"
+                    todir="${basedir}/target/transformed">
+                    <fileset dir="${basedir}/conf">
+                      <include name="*.in" />
+                    </fileset>
+                    <globmapper from="*.in" to="*" />
+                    <filterchain>
+                      <filterreader
+                        classname="org.apache.tools.ant.filters.ReplaceTokens">
+                        <param type="propertiesfile"
+                          value="${cs.replace.properties}" />
+                      </filterreader>
+                    </filterchain>
+                  </copy>
+                  <copy overwrite="true"
+                    todir="${basedir}/target/transformed">
+                    <fileset dir="${basedir}/bindir">
+                      <include name="*.in" />
+                    </fileset>
+                    <globmapper from="*.in" to="*" />
+                    <filterchain>
+                      <filterreader
+                        classname="org.apache.tools.ant.filters.ReplaceTokens">
+                        <param type="propertiesfile"
+                           value="${cs.replace.properties}" />
+                      </filterreader>
+                    </filterchain>
+                  </copy>
+                </target>
+              </configuration>
+            </execution>
+          </executions>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-dependency-plugin</artifactId>
+          <executions>
+            <execution>
+              <id>copy-dependencies</id>
+              <phase>package</phase>
+              <goals>
+                <goal>copy-dependencies</goal>
+              </goals>
+              <configuration>
+                <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
+                <includeScope>runtime</includeScope>
+              </configuration>
+            </execution>
+          </executions>
+        </plugin>
+      </plugins>
+    </pluginManagement>
   </build>
 </project>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5bcd8280/plugins/hypervisors/kvm/pom.xml
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/pom.xml b/plugins/hypervisors/kvm/pom.xml
index e279621..0c0001f 100644
--- a/plugins/hypervisors/kvm/pom.xml
+++ b/plugins/hypervisors/kvm/pom.xml
@@ -58,35 +58,37 @@
     <defaultGoal>install</defaultGoal>
     <sourceDirectory>src</sourceDirectory>
     <testSourceDirectory>test</testSourceDirectory>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <version>2.5.1</version>
-        <executions>
-          <execution>
-            <id>copy-dependencies</id>
-            <phase>package</phase>
-            <goals>
-              <goal>copy-dependencies</goal>
-            </goals>
-            <configuration>
-              <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
-              <includeScope>runtime</includeScope>
-            </configuration>
-          </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>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-dependency-plugin</artifactId>
+          <version>2.5.1</version>
+          <executions>
+            <execution>
+              <id>copy-dependencies</id>
+              <phase>package</phase>
+              <goals>
+                <goal>copy-dependencies</goal>
+              </goals>
+              <configuration>
+                <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
+                <includeScope>runtime</includeScope>
+              </configuration>
+            </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>
+    </pluginManagement>
   </build>
 </project>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5bcd8280/plugins/user-authenticators/ldap/pom.xml
----------------------------------------------------------------------
diff --git a/plugins/user-authenticators/ldap/pom.xml b/plugins/user-authenticators/ldap/pom.xml
index 1f9dea0..5ecb45c 100644
--- a/plugins/user-authenticators/ldap/pom.xml
+++ b/plugins/user-authenticators/ldap/pom.xml
@@ -20,76 +20,78 @@
   </parent>
 
   <build>
-    <plugins>
-      <plugin>
-        <groupId>org.codehaus.gmaven</groupId>
-        <artifactId>gmaven-plugin</artifactId>
-        <version>1.3</version>
-        <configuration>
-          <providerSelection>1.7</providerSelection>
-        </configuration>
-        <executions>
-          <execution>
-            <goals>
-              <goal>compile</goal>
-              <goal>testCompile</goal>
-            </goals>
-            <configuration>
-              <sources>
-                <fileset>
-                  <directory>test/groovy</directory>
-                  <includes>
-                    <include>**/*.groovy</include>
-                  </includes>
-                </fileset>
-              </sources>
-            </configuration>
-          </execution>
-        </executions>
-        <dependencies>
-          <dependency>
-            <groupId>org.codehaus.gmaven.runtime</groupId>
-            <artifactId>gmaven-runtime-1.7</artifactId>
-            <version>1.3</version>
-            <exclusions>
-              <exclusion>
-                <groupId>org.codehaus.groovy</groupId>
-                <artifactId>groovy-all</artifactId>
-              </exclusion>
-            </exclusions>
-          </dependency>
-          <dependency>
-            <groupId>org.codehaus.groovy</groupId>
-            <artifactId>groovy-all</artifactId>
-            <version>2.0.5</version>
-          </dependency>
-        </dependencies>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <includes>
-            <include>**/*Spec*</include>
-          </includes>
-        </configuration>
-      </plugin>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.codehaus.gmaven</groupId>
+          <artifactId>gmaven-plugin</artifactId>
+          <version>1.3</version>
+          <configuration>
+            <providerSelection>1.7</providerSelection>
+          </configuration>
+          <executions>
+            <execution>
+              <goals>
+                <goal>compile</goal>
+                <goal>testCompile</goal>
+              </goals>
+              <configuration>
+                <sources>
+                  <fileset>
+                    <directory>test/groovy</directory>
+                    <includes>
+                      <include>**/*.groovy</include>
+                    </includes>
+                  </fileset>
+                </sources>
+              </configuration>
+            </execution>
+          </executions>
+          <dependencies>
+            <dependency>
+              <groupId>org.codehaus.gmaven.runtime</groupId>
+              <artifactId>gmaven-runtime-1.7</artifactId>
+              <version>1.3</version>
+              <exclusions>
+                <exclusion>
+                  <groupId>org.codehaus.groovy</groupId>
+                  <artifactId>groovy-all</artifactId>
+                </exclusion>
+              </exclusions>
+            </dependency>
+            <dependency>
+              <groupId>org.codehaus.groovy</groupId>
+              <artifactId>groovy-all</artifactId>
+              <version>2.0.5</version>
+            </dependency>
+          </dependencies>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <configuration>
+            <includes>
+              <include>**/*Spec*</include>
+            </includes>
+          </configuration>
+        </plugin>
 
-      <plugin>
-        <groupId>com.btmatthews.maven.plugins</groupId>
-        <artifactId>ldap-maven-plugin</artifactId>
-        <version>1.1.0</version>
-        <configuration>
-          <monitorPort>11389</monitorPort>
+        <plugin>
+          <groupId>com.btmatthews.maven.plugins</groupId>
+          <artifactId>ldap-maven-plugin</artifactId>
+          <version>1.1.0</version>
+          <configuration>
+            <monitorPort>11389</monitorPort>
             <monitorKey>ldap</monitorKey>
             <daemon>false</daemon>
             <rootDn>dc=cloudstack,dc=org</rootDn>
             <ldapPort>10389</ldapPort>
             <ldifFile>test/resources/cloudstack.org.ldif</ldifFile>
-        </configuration>
-      </plugin>
+          </configuration>
+        </plugin>
 
-    </plugins>
+      </plugins>
+    </pluginManagement>
   </build>
 
   <dependencies>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5bcd8280/usage/pom.xml
----------------------------------------------------------------------
diff --git a/usage/pom.xml b/usage/pom.xml
index 04d1630..19929d6 100644
--- a/usage/pom.xml
+++ b/usage/pom.xml
@@ -51,74 +51,76 @@
         <directory>resources</directory>
       </resource>
     </resources>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <excludes>
-            <exclude>com/cloud/usage/UsageManagerTest.java</exclude>
-          </excludes>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>copy-dependencies</id>
-            <phase>package</phase>
-            <goals>
-              <goal>copy-dependencies</goal>
-            </goals>
-            <configuration>
-              <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
-              <includeScope>runtime</includeScope>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <artifactId>maven-antrun-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>generate-resource</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-            <configuration>
-              <target>
-                <copy overwrite="true" todir="${basedir}/target/transformed">
-                  <fileset dir="${basedir}/../client/tomcatconf">
-                    <include name="**/db.properties.in" />
-                  </fileset>
-                  <globmapper from="*.in" to="*" />
-                  <filterchain>
-                    <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
-                      <param type="propertiesfile" value="${cs.replace.properties}" />
-                    </filterreader>
-                  </filterchain>
-                </copy>
-              </target>
-              <target>
-                <copy overwrite="true" todir="${basedir}/target/transformed">
-                  <fileset dir="${basedir}/conf">
-                    <include name="*.in" />
-                  </fileset>
-                  <globmapper from="*.in" to="*" />
-                  <filterchain>
-                    <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
-                      <param type="propertiesfile" value="${cs.replace.properties}" />
-                    </filterreader>
-                  </filterchain>
-                </copy>
-              </target>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <configuration>
+            <excludes>
+              <exclude>com/cloud/usage/UsageManagerTest.java</exclude>
+            </excludes>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-dependency-plugin</artifactId>
+          <executions>
+            <execution>
+              <id>copy-dependencies</id>
+              <phase>package</phase>
+              <goals>
+                <goal>copy-dependencies</goal>
+              </goals>
+              <configuration>
+                <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
+                <includeScope>runtime</includeScope>
+              </configuration>
+            </execution>
+          </executions>
+        </plugin>
+        <plugin>
+          <artifactId>maven-antrun-plugin</artifactId>
+          <executions>
+            <execution>
+              <id>generate-resource</id>
+              <phase>generate-resources</phase>
+              <goals>
+                <goal>run</goal>
+              </goals>
+              <configuration>
+                <target>
+                  <copy overwrite="true" todir="${basedir}/target/transformed">
+                    <fileset dir="${basedir}/../client/tomcatconf">
+                      <include name="**/db.properties.in" />
+                    </fileset>
+                    <globmapper from="*.in" to="*" />
+                    <filterchain>
+                      <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
+                        <param type="propertiesfile" value="${cs.replace.properties}" />
+                      </filterreader>
+                    </filterchain>
+                  </copy>
+                </target>
+                <target>
+                  <copy overwrite="true" todir="${basedir}/target/transformed">
+                    <fileset dir="${basedir}/conf">
+                      <include name="*.in" />
+                    </fileset>
+                    <globmapper from="*.in" to="*" />
+                    <filterchain>
+                      <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
+                        <param type="propertiesfile" value="${cs.replace.properties}" />
+                      </filterreader>
+                    </filterchain>
+                  </copy>
+                </target>
+              </configuration>
+            </execution>
+          </executions>
+        </plugin>
+      </plugins>
+    </pluginManagement>
   </build>
   <profiles>
     <profile>


[15/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
CLOUDSTACK-4908: UI for report CPU sockets

-Adds socket info for hypervisors on infrastructure chart

-Displays # of sockets, and # of hosts

-Currently only dummy data set to 0 for all info


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

Branch: refs/heads/rbac
Commit: bed42deb8835760e98a39902a698c38dbd17b414
Parents: f0a8aa7
Author: Brian Federle <br...@citrix.com>
Authored: Tue Oct 29 14:16:25 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Tue Oct 29 14:16:25 2013 -0700

----------------------------------------------------------------------
 .../classes/resources/messages.properties       |  1 +
 ui/dictionary.jsp                               |  1 +
 ui/index.jsp                                    |  5 ++++
 ui/scripts/system.js                            | 31 ++++++++++++++++++--
 ui/scripts/ui-custom/physicalResources.js       | 23 +++++++++++++++
 5 files changed, 59 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bed42deb/client/WEB-INF/classes/resources/messages.properties
----------------------------------------------------------------------
diff --git a/client/WEB-INF/classes/resources/messages.properties b/client/WEB-INF/classes/resources/messages.properties
index e5b06ec..3210aca 100644
--- a/client/WEB-INF/classes/resources/messages.properties
+++ b/client/WEB-INF/classes/resources/messages.properties
@@ -14,6 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+label.sockets=Sockets
 label.root.disk.size=Root disk size
 label.s3.nfs.server=S3 NFS Server
 label.s3.nfs.path=S3 NFS Path

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bed42deb/ui/dictionary.jsp
----------------------------------------------------------------------
diff --git a/ui/dictionary.jsp b/ui/dictionary.jsp
index f9fe088..35cba22 100644
--- a/ui/dictionary.jsp
+++ b/ui/dictionary.jsp
@@ -25,6 +25,7 @@ under the License.
 <% long now = System.currentTimeMillis(); %>
 <script language="javascript">
 dictionary = {
+'label.sockets': '<fmt:message key="label.sockets" />',
 'label.root.disk.size': '<fmt:message key="label.root.disk.size" />',
 'label.s3.nfs.path': '<fmt:message key="label.s3.nfs.path" />',
 'label.s3.nfs.server': '<fmt:message key="label.s3.nfs.server" />',

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bed42deb/ui/index.jsp
----------------------------------------------------------------------
diff --git a/ui/index.jsp b/ui/index.jsp
index eb8ad95..db4d468 100644
--- a/ui/index.jsp
+++ b/ui/index.jsp
@@ -1126,6 +1126,11 @@
                                   view-all-target="virtualRouters"><fmt:message key="label.view.all"/></span>
                         </li>
                     </ul>
+                    
+                    <div class="socket-info">
+                        <div class="title">Socket info</div>
+                        <ul></ul>
+                    </div>
                 </div>
             </div>
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bed42deb/ui/scripts/system.js
----------------------------------------------------------------------
diff --git a/ui/scripts/system.js b/ui/scripts/system.js
index 8d8c02c..479883c 100644
--- a/ui/scripts/system.js
+++ b/ui/scripts/system.js
@@ -364,7 +364,7 @@
                                         return total;
                                     };
 
-                                    complete($.extend(data, {
+                                    dataFns.socketInfo($.extend(data, {
                                         cpuCapacityTotal: capacityTotal(1, cloudStack.converters.convertHz),
                                         memCapacityTotal: capacityTotal(0, cloudStack.converters.convertBytes),
                                         storageCapacityTotal: capacityTotal(2, cloudStack.converters.convertBytes)
@@ -372,12 +372,39 @@
                                 }
                             });
                         } else {
-                            complete($.extend(data, {
+                            dataFns.socketInfo($.extend(data, {
                                 cpuCapacityTotal: cloudStack.converters.convertHz(0),
                                 memCapacityTotal: cloudStack.converters.convertBytes(0),
                                 storageCapacityTotal: cloudStack.converters.convertBytes(0)
                             }));
                         }
+                    },
+
+                    socketInfo: function(args) {
+                        complete($.extend(args.data, {
+                            socketInfo: [
+                                {
+                                    name: 'XenServer',
+                                    hosts: 0,
+                                    sockets: 0
+                                },
+                                {
+                                    name: 'VMware',
+                                    hosts: 0,
+                                    sockets: 0
+                                },
+                                {
+                                    name: 'KVM',
+                                    hosts: 0,
+                                    sockets: 0
+                                },
+                                {
+                                    name: 'Hyper-V',
+                                    hosts: 0,
+                                    sockets: 0
+                                }
+                            ]
+                        }));
                     }
                 };
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bed42deb/ui/scripts/ui-custom/physicalResources.js
----------------------------------------------------------------------
diff --git a/ui/scripts/ui-custom/physicalResources.js b/ui/scripts/ui-custom/physicalResources.js
index f1492eb..b41400a 100644
--- a/ui/scripts/ui-custom/physicalResources.js
+++ b/ui/scripts/ui-custom/physicalResources.js
@@ -38,6 +38,29 @@
                             var $elem = $dashboard.find('[data-item=' + key + ']');
                             $elem.hide().html(value).fadeIn();
                         });
+
+                        // Socket info
+                        var $socketInfo = $dashboard.find('.socket-info ul');  
+                        $(args.data.socketInfo).each(function() {
+                            var item = this;
+                            var name = item.name;
+                            var hosts = item.hosts;
+                            var sockets = item.sockets;
+
+                            var $li = $('<li>').append(
+                                $('<div>').addClass('name').html(name),
+                                $('<div>').addClass('hosts').append(
+                                    $('<div>').addClass('title').html(_l('label.hosts')),
+                                    $('<div>').addClass('value').html(hosts)
+                                ),
+                                $('<div>').addClass('sockets').append(
+                                    $('<div>').addClass('title').html(_l('label.sockets')),
+                                    $('<div>').addClass('value').html(sockets)
+                                )
+                            );
+
+                            $li.appendTo($socketInfo);
+                        });                        
                     }
                 }
             });


[46/50] [abbrv] Merge branch 'master' into rbac.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ef4d520/server/src/com/cloud/network/IpAddressManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/IpAddressManagerImpl.java
index 4c49247,8619ae1..2347a6e
--- a/server/src/com/cloud/network/IpAddressManagerImpl.java
+++ b/server/src/com/cloud/network/IpAddressManagerImpl.java
@@@ -609,28 -615,30 +615,30 @@@ public class IpAddressManagerImpl exten
  
      @DB
      @Override
-     public boolean releasePortableIpAddress(long addrId) {
-         Transaction txn = Transaction.currentTxn();
-         GlobalLock portableIpLock = GlobalLock.getInternLock("PortablePublicIpRange");
+     public boolean releasePortableIpAddress(final long addrId) {
+         final GlobalLock portableIpLock = GlobalLock.getInternLock("PortablePublicIpRange");
  
-         txn.start();
          try {
+             return Transaction.execute(new TransactionCallback<Boolean>() {
+                 @Override
+                 public Boolean doInTransaction(TransactionStatus status) {
 -                    portableIpLock.lock(5);
 -                    IPAddressVO ip = _ipAddressDao.findById(addrId);
 +            portableIpLock.lock(5);
 +            IPAddressVO ip = _ipAddressDao.findById(addrId);
  
 -                    // unassign portable IP
 -                    PortableIpVO portableIp = _portableIpDao.findByIpAddress(ip.getAddress().addr());
 -                    _portableIpDao.unassignIpAddress(portableIp.getId());
 +            // unassign portable IP
 +            PortableIpVO portableIp = _portableIpDao.findByIpAddress(ip.getAddress().addr());
 +            _portableIpDao.unassignIpAddress(portableIp.getId());
  
 -                    // removed the provisioned vlan
 -                    VlanVO vlan = _vlanDao.findById(ip.getVlanId());
 -                    _vlanDao.remove(vlan.getId());
 +            // removed the provisioned vlan
 +            VlanVO vlan = _vlanDao.findById(ip.getVlanId());
 +            _vlanDao.remove(vlan.getId());
  
 -                    // remove the provisioned public ip address
 -                    _ipAddressDao.remove(ip.getId());
 +            // remove the provisioned public ip address
 +            _ipAddressDao.remove(ip.getId());
  
-             txn.commit();
 -                    return true;
 +            return true;
+                 }
+             });
          } finally {
              portableIpLock.releaseRef();
          }
@@@ -649,135 -657,138 +657,138 @@@
      }
  
      @DB
-     public PublicIp fetchNewPublicIp(long dcId, Long podId, List<Long> vlanDbIds, Account owner, VlanType vlanUse, Long guestNetworkId, boolean sourceNat, boolean assign,
-         String requestedIp, boolean isSystem, Long vpcId) throws InsufficientAddressCapacityException {
+     public PublicIp fetchNewPublicIp(final long dcId, final Long podId, final List<Long> vlanDbIds, final Account owner, final VlanType vlanUse, final Long guestNetworkId, final boolean sourceNat, final boolean assign,
+             final String requestedIp, final boolean isSystem, final Long vpcId) throws InsufficientAddressCapacityException {
+         IPAddressVO addr = Transaction.execute(new TransactionCallbackWithException<IPAddressVO,InsufficientAddressCapacityException>() {
+             @Override
+             public IPAddressVO doInTransaction(TransactionStatus status) throws InsufficientAddressCapacityException {
 -                StringBuilder errorMessage = new StringBuilder("Unable to get ip adress in ");
 -                boolean fetchFromDedicatedRange = false;
 -                List<Long> dedicatedVlanDbIds = new ArrayList<Long>();
 -                List<Long> nonDedicatedVlanDbIds = new ArrayList<Long>();
 -
 -                SearchCriteria<IPAddressVO> sc = null;
 -                if (podId != null) {
 -                    sc = AssignIpAddressFromPodVlanSearch.create();
 -                    sc.setJoinParameters("podVlanMapSB", "podId", podId);
 -                    errorMessage.append(" pod id=" + podId);
 -                } else {
 -                    sc = AssignIpAddressSearch.create();
 -                    errorMessage.append(" zone id=" + dcId);
 -                }
 -
 -                // If owner has dedicated Public IP ranges, fetch IP from the dedicated range
 -                // Otherwise fetch IP from the system pool
 -                List<AccountVlanMapVO> maps = _accountVlanMapDao.listAccountVlanMapsByAccount(owner.getId());
 -                for (AccountVlanMapVO map : maps) {
 -                    if (vlanDbIds == null || vlanDbIds.contains(map.getVlanDbId()))
 -                        dedicatedVlanDbIds.add(map.getVlanDbId());
 -                }
 -                List<VlanVO> nonDedicatedVlans = _vlanDao.listZoneWideNonDedicatedVlans(dcId);
 -                for (VlanVO nonDedicatedVlan : nonDedicatedVlans) {
 -                    if (vlanDbIds == null || vlanDbIds.contains(nonDedicatedVlan.getId()))
 -                        nonDedicatedVlanDbIds.add(nonDedicatedVlan.getId());
 -                }
 -                if (dedicatedVlanDbIds != null && !dedicatedVlanDbIds.isEmpty()) {
 -                    fetchFromDedicatedRange = true;
 -                    sc.setParameters("vlanId", dedicatedVlanDbIds.toArray());
 -                    errorMessage.append(", vlanId id=" + dedicatedVlanDbIds.toArray());
 -                } else if (nonDedicatedVlanDbIds != null && !nonDedicatedVlanDbIds.isEmpty()) {
 -                    sc.setParameters("vlanId", nonDedicatedVlanDbIds.toArray());
 -                    errorMessage.append(", vlanId id=" + nonDedicatedVlanDbIds.toArray());
 -                } else {
 -                    if (podId != null) {
 -                        InsufficientAddressCapacityException ex = new InsufficientAddressCapacityException("Insufficient address capacity", Pod.class, podId);
 -                        ex.addProxyObject(ApiDBUtils.findPodById(podId).getUuid());
 -                        throw ex;
 -                    }
 -                    s_logger.warn(errorMessage.toString());
 -                    InsufficientAddressCapacityException ex = new InsufficientAddressCapacityException("Insufficient address capacity", DataCenter.class, dcId);
 -                    ex.addProxyObject(ApiDBUtils.findZoneById(dcId).getUuid());
 -                    throw ex;
 -                }
 +        StringBuilder errorMessage = new StringBuilder("Unable to get ip adress in ");
 +        boolean fetchFromDedicatedRange = false;
 +        List<Long> dedicatedVlanDbIds = new ArrayList<Long>();
 +        List<Long> nonDedicatedVlanDbIds = new ArrayList<Long>();
 +
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
 +        SearchCriteria<IPAddressVO> sc = null;
 +        if (podId != null) {
 +            sc = AssignIpAddressFromPodVlanSearch.create();
 +            sc.setJoinParameters("podVlanMapSB", "podId", podId);
 +            errorMessage.append(" pod id=" + podId);
 +        } else {
 +            sc = AssignIpAddressSearch.create();
 +            errorMessage.append(" zone id=" + dcId);
 +        }
 +
 +        // If owner has dedicated Public IP ranges, fetch IP from the dedicated range
 +        // Otherwise fetch IP from the system pool
 +        List<AccountVlanMapVO> maps = _accountVlanMapDao.listAccountVlanMapsByAccount(owner.getId());
 +        for (AccountVlanMapVO map : maps) {
 +            if (vlanDbIds == null || vlanDbIds.contains(map.getVlanDbId()))
 +                dedicatedVlanDbIds.add(map.getVlanDbId());
 +        }
 +        List<VlanVO> nonDedicatedVlans = _vlanDao.listZoneWideNonDedicatedVlans(dcId);
 +        for (VlanVO nonDedicatedVlan : nonDedicatedVlans) {
 +            if (vlanDbIds == null || vlanDbIds.contains(nonDedicatedVlan.getId()))
 +                nonDedicatedVlanDbIds.add(nonDedicatedVlan.getId());
 +        }
 +        if (dedicatedVlanDbIds != null && !dedicatedVlanDbIds.isEmpty()) {
 +            fetchFromDedicatedRange = true;
 +            sc.setParameters("vlanId", dedicatedVlanDbIds.toArray());
 +            errorMessage.append(", vlanId id=" + dedicatedVlanDbIds.toArray());
 +        } else if (nonDedicatedVlanDbIds != null && !nonDedicatedVlanDbIds.isEmpty()) {
 +            sc.setParameters("vlanId", nonDedicatedVlanDbIds.toArray());
 +            errorMessage.append(", vlanId id=" + nonDedicatedVlanDbIds.toArray());
 +        } else {
 +            if (podId != null) {
 +                InsufficientAddressCapacityException ex = new InsufficientAddressCapacityException("Insufficient address capacity", Pod.class, podId);
 +                ex.addProxyObject(ApiDBUtils.findPodById(podId).getUuid());
 +                throw ex;
 +            }
 +            s_logger.warn(errorMessage.toString());
 +            InsufficientAddressCapacityException ex = new InsufficientAddressCapacityException("Insufficient address capacity", DataCenter.class, dcId);
 +            ex.addProxyObject(ApiDBUtils.findZoneById(dcId).getUuid());
 +            throw ex;
 +        }
  
 -                sc.setParameters("dc", dcId);
 +        sc.setParameters("dc", dcId);
  
 -                DataCenter zone = _entityMgr.findById(DataCenter.class, dcId);
 +        DataCenter zone = _entityMgr.findById(DataCenter.class, dcId);
  
 -                // for direct network take ip addresses only from the vlans belonging to the network
 -                if (vlanUse == VlanType.DirectAttached) {
 -                    sc.setJoinParameters("vlan", "networkId", guestNetworkId);
 -                    errorMessage.append(", network id=" + guestNetworkId);
 -                }
 -                sc.setJoinParameters("vlan", "type", vlanUse);
 +        // for direct network take ip addresses only from the vlans belonging to the network
 +        if (vlanUse == VlanType.DirectAttached) {
 +            sc.setJoinParameters("vlan", "networkId", guestNetworkId);
 +            errorMessage.append(", network id=" + guestNetworkId);
 +        }
 +        sc.setJoinParameters("vlan", "type", vlanUse);
  
 -                if (requestedIp != null) {
 -                    sc.addAnd("address", SearchCriteria.Op.EQ, requestedIp);
 -                    errorMessage.append(": requested ip " + requestedIp + " is not available");
 -                }
 +        if (requestedIp != null) {
 +            sc.addAnd("address", SearchCriteria.Op.EQ, requestedIp);
 +            errorMessage.append(": requested ip " + requestedIp + " is not available");
 +        }
  
 -                Filter filter = new Filter(IPAddressVO.class, "vlanId", true, 0l, 1l);
 +        Filter filter = new Filter(IPAddressVO.class, "vlanId", true, 0l, 1l);
  
 -                List<IPAddressVO> addrs = _ipAddressDao.lockRows(sc, filter, true);
 +        List<IPAddressVO> addrs = _ipAddressDao.lockRows(sc, filter, true);
  
 -                // If all the dedicated IPs of the owner are in use fetch an IP from the system pool
 -                if (addrs.size() == 0 && fetchFromDedicatedRange) {
 -                    // Verify if account is allowed to acquire IPs from the system
 -                    boolean useSystemIps = UseSystemPublicIps.valueIn(owner.getId());
 -                    if (useSystemIps && nonDedicatedVlanDbIds != null && !nonDedicatedVlanDbIds.isEmpty()) {
 -                        fetchFromDedicatedRange = false;
 -                        sc.setParameters("vlanId", nonDedicatedVlanDbIds.toArray());
 -                        errorMessage.append(", vlanId id=" + nonDedicatedVlanDbIds.toArray());
 -                        addrs = _ipAddressDao.lockRows(sc, filter, true);
 -                    }
 -                }
 +        // If all the dedicated IPs of the owner are in use fetch an IP from the system pool
 +        if (addrs.size() == 0 && fetchFromDedicatedRange) {
 +            // Verify if account is allowed to acquire IPs from the system
 +            boolean useSystemIps = UseSystemPublicIps.valueIn(owner.getId());
 +            if (useSystemIps && nonDedicatedVlanDbIds != null && !nonDedicatedVlanDbIds.isEmpty()) {
 +                fetchFromDedicatedRange = false;
 +                sc.setParameters("vlanId", nonDedicatedVlanDbIds.toArray());
 +                errorMessage.append(", vlanId id=" + nonDedicatedVlanDbIds.toArray());
 +                addrs = _ipAddressDao.lockRows(sc, filter, true);
 +            }
 +        }
  
 -                if (addrs.size() == 0) {
 -                    if (podId != null) {
 -                        InsufficientAddressCapacityException ex = new InsufficientAddressCapacityException("Insufficient address capacity", Pod.class, podId);
 -                        // for now, we hardcode the table names, but we should ideally do a lookup for the tablename from the VO object.
 -                        ex.addProxyObject(ApiDBUtils.findPodById(podId).getUuid());
 -                        throw ex;
 -                    }
 -                    s_logger.warn(errorMessage.toString());
 -                    InsufficientAddressCapacityException ex = new InsufficientAddressCapacityException("Insufficient address capacity", DataCenter.class, dcId);
 -                    ex.addProxyObject(ApiDBUtils.findZoneById(dcId).getUuid());
 -                    throw ex;
 -                }
 +        if (addrs.size() == 0) {
 +            if (podId != null) {
 +                InsufficientAddressCapacityException ex = new InsufficientAddressCapacityException("Insufficient address capacity", Pod.class, podId);
 +                // for now, we hardcode the table names, but we should ideally do a lookup for the tablename from the VO object.
 +                ex.addProxyObject(ApiDBUtils.findPodById(podId).getUuid());
 +                throw ex;
 +            }
 +            s_logger.warn(errorMessage.toString());
 +            InsufficientAddressCapacityException ex = new InsufficientAddressCapacityException("Insufficient address capacity", DataCenter.class, dcId);
 +            ex.addProxyObject(ApiDBUtils.findZoneById(dcId).getUuid());
 +            throw ex;
 +        }
  
 -                assert (addrs.size() == 1) : "Return size is incorrect: " + addrs.size();
 +        assert (addrs.size() == 1) : "Return size is incorrect: " + addrs.size();
  
 -                if (!fetchFromDedicatedRange) {
 -                    // Check that the maximum number of public IPs for the given accountId will not be exceeded
 -                    try {
 -                        _resourceLimitMgr.checkResourceLimit(owner, ResourceType.public_ip);
 -                    } catch (ResourceAllocationException ex) {
 -                        s_logger.warn("Failed to allocate resource of type " + ex.getResourceType() + " for account " + owner);
 -                        throw new AccountLimitException("Maximum number of public IP addresses for account: " + owner.getAccountName() + " has been exceeded.");
 -                    }
 -                }
 +        if (!fetchFromDedicatedRange) {
 +            // Check that the maximum number of public IPs for the given accountId will not be exceeded
 +            try {
 +                _resourceLimitMgr.checkResourceLimit(owner, ResourceType.public_ip);
 +            } catch (ResourceAllocationException ex) {
 +                s_logger.warn("Failed to allocate resource of type " + ex.getResourceType() + " for account " + owner);
 +                throw new AccountLimitException("Maximum number of public IP addresses for account: " + owner.getAccountName() + " has been exceeded.");
 +            }
 +        }
  
 -                IPAddressVO addr = addrs.get(0);
 -                addr.setSourceNat(sourceNat);
 -                addr.setAllocatedTime(new Date());
 -                addr.setAllocatedInDomainId(owner.getDomainId());
 -                addr.setAllocatedToAccountId(owner.getId());
 -                addr.setSystem(isSystem);
 +        IPAddressVO addr = addrs.get(0);
 +        addr.setSourceNat(sourceNat);
 +        addr.setAllocatedTime(new Date());
 +        addr.setAllocatedInDomainId(owner.getDomainId());
 +        addr.setAllocatedToAccountId(owner.getId());
 +        addr.setSystem(isSystem);
  
 -                if (assign) {
 -                    markPublicIpAsAllocated(addr);
 -                } else {
 -                    addr.setState(IpAddress.State.Allocating);
 -                }
 -                addr.setState(assign ? IpAddress.State.Allocated : IpAddress.State.Allocating);
 +        if (assign) {
 +            markPublicIpAsAllocated(addr);
 +        } else {
 +            addr.setState(IpAddress.State.Allocating);
 +        }
 +        addr.setState(assign ? IpAddress.State.Allocated : IpAddress.State.Allocating);
  
 -                if (vlanUse != VlanType.DirectAttached) {
 -                    addr.setAssociatedWithNetworkId(guestNetworkId);
 -                    addr.setVpcId(vpcId);
 -                }
 +        if (vlanUse != VlanType.DirectAttached) {
 +            addr.setAssociatedWithNetworkId(guestNetworkId);
 +            addr.setVpcId(vpcId);
 +        }
  
 -                _ipAddressDao.update(addr.getId(), addr);
 +        _ipAddressDao.update(addr.getId(), addr);
  
-         txn.commit();
+                 return addr;
+             }
+         });
  
          if (vlanUse == VlanType.VirtualNetwork) {
              _firewallMgr.addSystemFirewallRules(addr, owner);
@@@ -792,40 -803,39 +803,39 @@@
  
          assert (addr.getState() == IpAddress.State.Allocating || addr.getState() == IpAddress.State.Free) : "Unable to transition from state " + addr.getState() + " to " +
                                                                                                              IpAddress.State.Allocated;
- 
-         Transaction txn = Transaction.currentTxn();
- 
+         Transaction.execute(new TransactionCallbackNoReturn() {
+             @Override
+             public void doInTransactionWithoutResult(TransactionStatus status) {
 -                Account owner = _accountMgr.getAccount(addr.getAllocatedToAccountId());
 -
 -                addr.setState(IpAddress.State.Allocated);
 -                _ipAddressDao.update(addr.getId(), addr);
 -
 -                // Save usage event
 -                if (owner.getAccountId() != Account.ACCOUNT_ID_SYSTEM) {
 -                    VlanVO vlan = _vlanDao.findById(addr.getVlanId());
 -
 -                    String guestType = vlan.getVlanType().toString();
 -
 -                    if (!isIpDedicated(addr)) {
 -                        UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NET_IP_ASSIGN,
 -                            owner.getId(),
 -                            addr.getDataCenterId(),
 -                            addr.getId(),
 -                            addr.getAddress().toString(),
 -                            addr.isSourceNat(),
 -                            guestType,
 -                            addr.getSystem(),
 -                            addr.getClass().getName(),
 -                            addr.getUuid());
 -                    }
 +        Account owner = _accountMgr.getAccount(addr.getAllocatedToAccountId());
 +
-         txn.start();
 +        addr.setState(IpAddress.State.Allocated);
 +        _ipAddressDao.update(addr.getId(), addr);
 +
 +        // Save usage event
 +        if (owner.getAccountId() != Account.ACCOUNT_ID_SYSTEM) {
 +            VlanVO vlan = _vlanDao.findById(addr.getVlanId());
 +
 +            String guestType = vlan.getVlanType().toString();
 +
 +            if (!isIpDedicated(addr)) {
 +                UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NET_IP_ASSIGN,
 +                    owner.getId(),
 +                    addr.getDataCenterId(),
 +                    addr.getId(),
 +                    addr.getAddress().toString(),
 +                    addr.isSourceNat(),
 +                    guestType,
 +                    addr.getSystem(),
 +                    addr.getClass().getName(),
 +                    addr.getUuid());
 +            }
-             // don't increment resource count for direct and dedicated ip addresses
-             if ((addr.getAssociatedWithNetworkId() != null || addr.getVpcId() != null) && !isIpDedicated(addr)) {
+ 
+                     if (updateIpResourceCount(addr)) {
 -                        _resourceLimitMgr.incrementResourceCount(owner.getId(), ResourceType.public_ip);
 -                    }
 -                }
 +                _resourceLimitMgr.incrementResourceCount(owner.getId(), ResourceType.public_ip);
 +            }
 +        }
- 
-         txn.commit();
+             }
+         });
      }
  
      private boolean isIpDedicated(IPAddressVO addr) {
@@@ -855,35 -865,38 +865,38 @@@
  
      @DB
      @Override
-     public PublicIp assignDedicateIpAddress(Account owner, Long guestNtwkId, Long vpcId, long dcId, boolean isSourceNat) throws ConcurrentOperationException,
+     public PublicIp assignDedicateIpAddress(Account owner, final Long guestNtwkId, final Long vpcId, final long dcId, final boolean isSourceNat) throws ConcurrentOperationException,
          InsufficientAddressCapacityException {
  
-         long ownerId = owner.getId();
+         final long ownerId = owner.getId();
  
          PublicIp ip = null;
-         Transaction txn = Transaction.currentTxn();
          try {
-             txn.start();
- 
-             owner = _accountDao.acquireInLockTable(ownerId);
+             ip = Transaction.execute(new TransactionCallbackWithException<PublicIp,InsufficientAddressCapacityException>() {
+                 @Override
+                 public PublicIp doInTransaction(TransactionStatus status) throws InsufficientAddressCapacityException {
+                     Account owner = _accountDao.acquireInLockTable(ownerId);
  
 -                    if (owner == null) {
 -                        // this ownerId comes from owner or type Account. See the class "AccountVO" and the annotations in that class
 -                        // to get the table name and field name that is queried to fill this ownerid.
 -                        ConcurrentOperationException ex = new ConcurrentOperationException("Unable to lock account");
 -                        throw ex;
 -                    }
 -                    if (s_logger.isDebugEnabled()) {
 -                        s_logger.debug("lock account " + ownerId + " is acquired");
 -                    }
 +            if (owner == null) {
 +                // this ownerId comes from owner or type Account. See the class "AccountVO" and the annotations in that class
 +                // to get the table name and field name that is queried to fill this ownerid.
 +                ConcurrentOperationException ex = new ConcurrentOperationException("Unable to lock account");
 +                throw ex;
 +            }
 +            if (s_logger.isDebugEnabled()) {
 +                s_logger.debug("lock account " + ownerId + " is acquired");
 +            }
  
-             ip = fetchNewPublicIp(dcId, null, null, owner, VlanType.VirtualNetwork, guestNtwkId, isSourceNat, false, null, false, vpcId);
+                     PublicIp ip = fetchNewPublicIp(dcId, null, null, owner, VlanType.VirtualNetwork, guestNtwkId, isSourceNat, false, null, false, vpcId);
 -                    IPAddressVO publicIp = ip.ip();
 +            IPAddressVO publicIp = ip.ip();
  
 -                    markPublicIpAsAllocated(publicIp);
 -                    _ipAddressDao.update(publicIp.getId(), publicIp);
 +            markPublicIpAsAllocated(publicIp);
 +            _ipAddressDao.update(publicIp.getId(), publicIp);
  
-             txn.commit();
+                     return ip;
+                 }
+             });
+ 
              return ip;
          } finally {
              if (owner != null) {
@@@ -977,13 -989,13 +989,13 @@@
  
      @DB
      @Override
-     public IpAddress allocateIp(Account ipOwner, boolean isSystem, Account caller, long callerUserId, DataCenter zone) throws ConcurrentOperationException,
+     public IpAddress allocateIp(final Account ipOwner, final boolean isSystem, Account caller, long callerUserId, final DataCenter zone) throws ConcurrentOperationException,
          ResourceAllocationException, InsufficientAddressCapacityException {
  
-         VlanType vlanType = VlanType.VirtualNetwork;
-         boolean assign = false;
+         final VlanType vlanType = VlanType.VirtualNetwork;
+         final boolean assign = false;
  
 -        if (Grouping.AllocationState.Disabled == zone.getAllocationState() && !_accountMgr.isRootAdmin(caller.getType())) {
 +        if (Grouping.AllocationState.Disabled == zone.getAllocationState() && !_accountMgr.isRootAdmin(caller.getId())) {
              // zone is of type DataCenter. See DataCenterVO.java.
              PermissionDeniedException ex = new PermissionDeniedException("Cannot perform this operation, " + "Zone is currently disabled");
              ex.addProxyObject(zone.getUuid(), "zoneId");
@@@ -1008,21 -1019,25 +1019,25 @@@
                  s_logger.debug("Associate IP address lock acquired");
              }
  
-             txn.start();
- 
-             ip = fetchNewPublicIp(zone.getId(), null, null, ipOwner, vlanType, null, false, assign, null, isSystem, null);
+             ip = Transaction.execute(new TransactionCallbackWithException<PublicIp,InsufficientAddressCapacityException>() {
+                 @Override
+                 public PublicIp doInTransaction(TransactionStatus status) throws InsufficientAddressCapacityException {
+                     PublicIp ip = fetchNewPublicIp(zone.getId(), null, null, ipOwner, vlanType, null, false, assign, null, isSystem, null);
  
 -                    if (ip == null) {
 -                        InsufficientAddressCapacityException ex = new InsufficientAddressCapacityException("Unable to find available public IP addresses", DataCenter.class, zone.getId());
 -                        ex.addProxyObject(ApiDBUtils.findZoneById(zone.getId()).getUuid());
 -                        throw ex;
 -                    }
 -                    CallContext.current().setEventDetails("Ip Id: " + ip.getId());
 -                    Ip ipAddress = ip.getAddress();
 +            if (ip == null) {
 +                InsufficientAddressCapacityException ex = new InsufficientAddressCapacityException("Unable to find available public IP addresses", DataCenter.class, zone.getId());
 +                ex.addProxyObject(ApiDBUtils.findZoneById(zone.getId()).getUuid());
 +                throw ex;
 +            }
 +            CallContext.current().setEventDetails("Ip Id: " + ip.getId());
 +            Ip ipAddress = ip.getAddress();
  
 -                    s_logger.debug("Got " + ipAddress + " to assign for account " + ipOwner.getId() + " in zone " + zone.getId());
 +            s_logger.debug("Got " + ipAddress + " to assign for account " + ipOwner.getId() + " in zone " + zone.getId());
  
-             txn.commit();
+                     return ip;
+                 }
+             });
+ 
          } finally {
              if (accountToLock != null) {
                  if (s_logger.isDebugEnabled()) {
@@@ -1048,64 -1061,68 +1061,68 @@@
          try {
              portableIpLock.lock(5);
  
-             txn.start();
+             ipaddr = Transaction.execute(new TransactionCallbackWithException<IPAddressVO,InsufficientAddressCapacityException>() {
+                 @Override
+                 public IPAddressVO doInTransaction(TransactionStatus status) throws InsufficientAddressCapacityException {
+                     PortableIpVO allocatedPortableIp;
  
 -                    List<PortableIpVO> portableIpVOs = _portableIpDao.listByRegionIdAndState(1, PortableIp.State.Free);
 -                    if (portableIpVOs == null || portableIpVOs.isEmpty()) {
 -                        InsufficientAddressCapacityException ex = new InsufficientAddressCapacityException("Unable to find available portable IP addresses", Region.class, new Long(1));
 -                        throw ex;
 -                    }
 -        
 -                    // allocate first portable IP to the user
 -                    allocatedPortableIp = portableIpVOs.get(0);
 -                    allocatedPortableIp.setAllocatedTime(new Date());
 -                    allocatedPortableIp.setAllocatedToAccountId(ipOwner.getAccountId());
 -                    allocatedPortableIp.setAllocatedInDomainId(ipOwner.getDomainId());
 -                    allocatedPortableIp.setState(PortableIp.State.Allocated);
 -                    _portableIpDao.update(allocatedPortableIp.getId(), allocatedPortableIp);
 -        
 -                    // To make portable IP available as a zone level resource we need to emulate portable IP's (which are
 -                    // provisioned at region level) as public IP provisioned in a zone. user_ip_address and vlan combo give the
 -                    // identity of a public IP in zone. Create entry for portable ip in these tables.
 -        
 -                    // provision portable IP range VLAN into the zone
 -                    long physicalNetworkId = _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(dcId, TrafficType.Public).getId();
 -                    Network network = _networkModel.getSystemNetworkByZoneAndTrafficType(dcId, TrafficType.Public);
 -                    String range = allocatedPortableIp.getAddress() + "-" + allocatedPortableIp.getAddress();
 -                    VlanVO vlan = new VlanVO(VlanType.VirtualNetwork,
 -                        allocatedPortableIp.getVlan(),
 -                        allocatedPortableIp.getGateway(),
 -                        allocatedPortableIp.getNetmask(),
 -                        dcId,
 -                        range,
 -                        network.getId(),
 -                        physicalNetworkId,
 -                        null,
 -                        null,
 -                        null);
 -                    vlan = _vlanDao.persist(vlan);
 -
 -                    // provision the portable IP in to user_ip_address table
 +            List<PortableIpVO> portableIpVOs = _portableIpDao.listByRegionIdAndState(1, PortableIp.State.Free);
 +            if (portableIpVOs == null || portableIpVOs.isEmpty()) {
 +                InsufficientAddressCapacityException ex = new InsufficientAddressCapacityException("Unable to find available portable IP addresses", Region.class, new Long(1));
 +                throw ex;
 +            }
 +
 +            // allocate first portable IP to the user
 +            allocatedPortableIp = portableIpVOs.get(0);
 +            allocatedPortableIp.setAllocatedTime(new Date());
 +            allocatedPortableIp.setAllocatedToAccountId(ipOwner.getAccountId());
 +            allocatedPortableIp.setAllocatedInDomainId(ipOwner.getDomainId());
 +            allocatedPortableIp.setState(PortableIp.State.Allocated);
 +            _portableIpDao.update(allocatedPortableIp.getId(), allocatedPortableIp);
 +
 +            // To make portable IP available as a zone level resource we need to emulate portable IP's (which are
 +            // provisioned at region level) as public IP provisioned in a zone. user_ip_address and vlan combo give the
 +            // identity of a public IP in zone. Create entry for portable ip in these tables.
 +
 +            // provision portable IP range VLAN into the zone
 +            long physicalNetworkId = _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(dcId, TrafficType.Public).getId();
 +            Network network = _networkModel.getSystemNetworkByZoneAndTrafficType(dcId, TrafficType.Public);
 +            String range = allocatedPortableIp.getAddress() + "-" + allocatedPortableIp.getAddress();
 +            VlanVO vlan = new VlanVO(VlanType.VirtualNetwork,
 +                allocatedPortableIp.getVlan(),
 +                allocatedPortableIp.getGateway(),
 +                allocatedPortableIp.getNetmask(),
 +                dcId,
 +                range,
 +                network.getId(),
 +                physicalNetworkId,
 +                null,
 +                null,
 +                null);
 +            vlan = _vlanDao.persist(vlan);
 +
 +            // provision the portable IP in to user_ip_address table
-             ipaddr = new IPAddressVO(new Ip(allocatedPortableIp.getAddress()), dcId, networkId, vpcID, physicalNetworkId, network.getId(), vlan.getId(), true);
+                     IPAddressVO ipaddr = new IPAddressVO(new Ip(allocatedPortableIp.getAddress()), dcId, networkId, vpcID, physicalNetworkId, network.getId(), vlan.getId(), true);
 -                    ipaddr.setState(State.Allocated);
 -                    ipaddr.setAllocatedTime(new Date());
 -                    ipaddr.setAllocatedInDomainId(ipOwner.getDomainId());
 -                    ipaddr.setAllocatedToAccountId(ipOwner.getId());
 -                    ipaddr = _ipAddressDao.persist(ipaddr);
 -
 -                    UsageEventUtils.publishUsageEvent(EventTypes.EVENT_PORTABLE_IP_ASSIGN,
 -                        ipaddr.getId(),
 -                        ipaddr.getDataCenterId(),
 -                        ipaddr.getId(),
 -                        ipaddr.getAddress().toString(),
 -                        ipaddr.isSourceNat(),
 -                        null,
 -                        ipaddr.getSystem(),
 -                        ipaddr.getClass().getName(),
 -                        ipaddr.getUuid());
 +            ipaddr.setState(State.Allocated);
 +            ipaddr.setAllocatedTime(new Date());
 +            ipaddr.setAllocatedInDomainId(ipOwner.getDomainId());
 +            ipaddr.setAllocatedToAccountId(ipOwner.getId());
 +            ipaddr = _ipAddressDao.persist(ipaddr);
 +
 +            UsageEventUtils.publishUsageEvent(EventTypes.EVENT_PORTABLE_IP_ASSIGN,
 +                ipaddr.getId(),
 +                ipaddr.getDataCenterId(),
 +                ipaddr.getId(),
 +                ipaddr.getAddress().toString(),
 +                ipaddr.isSourceNat(),
 +                null,
 +                ipaddr.getSystem(),
 +                ipaddr.getClass().getName(),
 +                ipaddr.getUuid());
  
-             txn.commit();
- 
+                     return ipaddr;
+                 }
+             });
          } finally {
              portableIpLock.unlock();
          }
@@@ -1413,39 -1439,42 +1439,42 @@@
          // If portable IP need to be transferred across the zones, then mark the entry corresponding to portable ip
          // in user_ip_address and vlan tables so as to emulate portable IP as provisioned in destination data center
          if (srcNetwork.getDataCenterId() != dstNetwork.getDataCenterId()) {
-             txn.start();
- 
+             Transaction.execute(new TransactionCallbackNoReturn() {
+                 @Override
+                 public void doInTransactionWithoutResult(TransactionStatus status) {
 -                    long physicalNetworkId = _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(dstNetwork.getDataCenterId(), TrafficType.Public).getId();
 -                    long publicNetworkId = _networkModel.getSystemNetworkByZoneAndTrafficType(dstNetwork.getDataCenterId(), TrafficType.Public).getId();
 -
 -                    ip.setDataCenterId(dstNetwork.getDataCenterId());
 -                    ip.setPhysicalNetworkId(physicalNetworkId);
 -                    ip.setSourceNetworkId(publicNetworkId);
 -                    _ipAddressDao.update(ipAddrId, ip);
 -
 -                    VlanVO vlan = _vlanDao.findById(ip.getVlanId());
 -                    vlan.setPhysicalNetworkId(physicalNetworkId);
 -                    vlan.setNetworkId(publicNetworkId);
 -                    vlan.setDataCenterId(dstNetwork.getDataCenterId());
 -                    _vlanDao.update(ip.getVlanId(), vlan);
 +            long physicalNetworkId = _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(dstNetwork.getDataCenterId(), TrafficType.Public).getId();
 +            long publicNetworkId = _networkModel.getSystemNetworkByZoneAndTrafficType(dstNetwork.getDataCenterId(), TrafficType.Public).getId();
 +
 +            ip.setDataCenterId(dstNetwork.getDataCenterId());
 +            ip.setPhysicalNetworkId(physicalNetworkId);
 +            ip.setSourceNetworkId(publicNetworkId);
 +            _ipAddressDao.update(ipAddrId, ip);
 +
 +            VlanVO vlan = _vlanDao.findById(ip.getVlanId());
 +            vlan.setPhysicalNetworkId(physicalNetworkId);
 +            vlan.setNetworkId(publicNetworkId);
 +            vlan.setDataCenterId(dstNetwork.getDataCenterId());
 +            _vlanDao.update(ip.getVlanId(), vlan);
- 
-             txn.commit();
+                 }
+             });
          }
  
          // associate portable IP with new network/VPC network
          associatePortableIPToGuestNetwork(ipAddrId, newNetworkId, false);
  
-         txn.start();
- 
+         Transaction.execute(new TransactionCallbackNoReturn() {
+             @Override
+             public void doInTransactionWithoutResult(TransactionStatus status) {
 -                if (dstNetwork.getVpcId() != null) {
 -                    ip.setVpcId(dstNetwork.getVpcId());
 -                } else {
 -                    ip.setVpcId(null);
 -                }
 +        if (dstNetwork.getVpcId() != null) {
 +            ip.setVpcId(dstNetwork.getVpcId());
 +        } else {
 +            ip.setVpcId(null);
 +        }
  
 -                _ipAddressDao.update(ipAddrId, ip);
 +        _ipAddressDao.update(ipAddrId, ip);
+             }
+         });
  
-         txn.commit();
  
          // trigger an action event for the transfer of portable IP across the networks, so that external entities
          // monitoring for this event can initiate the route advertisement for the availability of IP from the zoe
@@@ -1463,106 -1492,121 +1492,121 @@@
  
      @Override
      @DB
-     public boolean associateIpAddressListToAccount(long userId, long accountId, long zoneId, Long vlanId, Network guestNetwork) throws InsufficientCapacityException,
+     public boolean associateIpAddressListToAccount(long userId, final long accountId, final long zoneId, final Long vlanId, final Network guestNetworkFinal) throws InsufficientCapacityException,
          ConcurrentOperationException, ResourceUnavailableException, ResourceAllocationException {
-         Account owner = _accountMgr.getActiveAccountById(accountId);
-         boolean createNetwork = false;
+         final Account owner = _accountMgr.getActiveAccountById(accountId);
  
-         if (guestNetwork != null && guestNetwork.getTrafficType() != TrafficType.Guest) {
-             throw new InvalidParameterValueException("Network " + guestNetwork + " is not of a type " + TrafficType.Guest);
+         if (guestNetworkFinal != null && guestNetworkFinal.getTrafficType() != TrafficType.Guest) {
+             throw new InvalidParameterValueException("Network " + guestNetworkFinal + " is not of a type " + TrafficType.Guest);
          }
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
+         Ternary<Boolean,List<NetworkOfferingVO>, Network> pair = null;
+         try {
+             pair = Transaction.execute(new TransactionCallbackWithException<Ternary<Boolean,List<NetworkOfferingVO>, Network>,Exception>() {
+                 @Override
+                 public Ternary<Boolean,List<NetworkOfferingVO>, Network> doInTransaction(TransactionStatus status) throws InsufficientCapacityException, ResourceAllocationException {
+                     boolean createNetwork = false;
+                     Network guestNetwork = guestNetworkFinal;
  
 -                    if (guestNetwork == null) {
 -                        List<? extends Network> networks = getIsolatedNetworksWithSourceNATOwnedByAccountInZone(zoneId, owner);
 -                        if (networks.size() == 0) {
 -                            createNetwork = true;
 -                        } else if (networks.size() == 1) {
 -                            guestNetwork = networks.get(0);
 -                        } else {
 -                            throw new InvalidParameterValueException("Error, more than 1 Guest Isolated Networks with SourceNAT "
 -                                                                     + "service enabled found for this account, cannot assosiate the IP range, please provide the network ID");
 -                        }
 -                    }
 -            
 -                    // create new Virtual network (Isolated with SourceNAT) for the user if it doesn't exist
 -                    List<NetworkOfferingVO> requiredOfferings = _networkOfferingDao.listByAvailability(Availability.Required, false);
 -                    if (requiredOfferings.size() < 1) {
 -                        throw new CloudRuntimeException("Unable to find network offering with availability=" + Availability.Required +
 -                                                        " to automatically create the network as part of createVlanIpRange");
 -                    }
 -                    if (createNetwork) {
 -                        if (requiredOfferings.get(0).getState() == NetworkOffering.State.Enabled) {
 -                            long physicalNetworkId = _networkModel.findPhysicalNetworkId(zoneId, requiredOfferings.get(0).getTags(), requiredOfferings.get(0).getTrafficType());
 -                            // Validate physical network
 -                            PhysicalNetwork physicalNetwork = _physicalNetworkDao.findById(physicalNetworkId);
 -                            if (physicalNetwork == null) {
 -                                throw new InvalidParameterValueException("Unable to find physical network with id: " + physicalNetworkId + " and tag: " + requiredOfferings.get(0).getTags());
 -                            }
 -            
 -                            s_logger.debug("Creating network for account " + owner + " from the network offering id=" + requiredOfferings.get(0).getId() +
 -                                           " as a part of createVlanIpRange process");
 -                            guestNetwork = _networkMgr.createGuestNetwork(requiredOfferings.get(0).getId(),
 -                                owner.getAccountName() + "-network",
 -                                owner.getAccountName() + "-network",
 -                                null,
 -                                null,
 -                                null,
 -                                null,
 -                                owner,
 -                                null,
 -                                physicalNetwork,
 -                                zoneId,
 -                                ACLType.Account,
 -                                null,
 -                                null,
 -                                null,
 -                                null,
 -                                true,
 -                                null);
 -                            if (guestNetwork == null) {
 -                                s_logger.warn("Failed to create default Virtual network for the account " + accountId + "in zone " + zoneId);
 -                                throw new CloudRuntimeException("Failed to create a Guest Isolated Networks with SourceNAT " +
 -                                                                "service enabled as a part of createVlanIpRange, for the account " + accountId + "in zone " + zoneId);
 -                            }
 -                        } else {
 -                            throw new CloudRuntimeException("Required network offering id=" + requiredOfferings.get(0).getId() + " is not in " + NetworkOffering.State.Enabled);
 -                        }
 -                    }
 -            
 -                    // Check if there is a source nat ip address for this account; if not - we have to allocate one
 -                    boolean allocateSourceNat = false;
 -                    List<IPAddressVO> sourceNat = _ipAddressDao.listByAssociatedNetwork(guestNetwork.getId(), true);
 -                    if (sourceNat.isEmpty()) {
 -                        allocateSourceNat = true;
 -                    }
 -            
 -                    // update all ips with a network id, mark them as allocated and update resourceCount/usage
 -                    List<IPAddressVO> ips = _ipAddressDao.listByVlanId(vlanId);
 -                    boolean isSourceNatAllocated = false;
 -                    for (IPAddressVO addr : ips) {
 -                        if (addr.getState() != State.Allocated) {
 -                            if (!isSourceNatAllocated && allocateSourceNat) {
 -                                addr.setSourceNat(true);
 -                                isSourceNatAllocated = true;
 -                            } else {
 -                                addr.setSourceNat(false);
 -                            }
 -                            addr.setAssociatedWithNetworkId(guestNetwork.getId());
 -                            addr.setVpcId(guestNetwork.getVpcId());
 -                            addr.setAllocatedTime(new Date());
 -                            addr.setAllocatedInDomainId(owner.getDomainId());
 -                            addr.setAllocatedToAccountId(owner.getId());
 -                            addr.setSystem(false);
 -                            addr.setState(IpAddress.State.Allocating);
 -                            markPublicIpAsAllocated(addr);
 -                        }
 -                    }
 +        if (guestNetwork == null) {
 +            List<? extends Network> networks = getIsolatedNetworksWithSourceNATOwnedByAccountInZone(zoneId, owner);
 +            if (networks.size() == 0) {
 +                createNetwork = true;
 +            } else if (networks.size() == 1) {
 +                guestNetwork = networks.get(0);
 +            } else {
 +                throw new InvalidParameterValueException("Error, more than 1 Guest Isolated Networks with SourceNAT "
 +                                                         + "service enabled found for this account, cannot assosiate the IP range, please provide the network ID");
 +            }
 +        }
 +
 +        // create new Virtual network (Isolated with SourceNAT) for the user if it doesn't exist
 +        List<NetworkOfferingVO> requiredOfferings = _networkOfferingDao.listByAvailability(Availability.Required, false);
 +        if (requiredOfferings.size() < 1) {
 +            throw new CloudRuntimeException("Unable to find network offering with availability=" + Availability.Required +
 +                                            " to automatically create the network as part of createVlanIpRange");
 +        }
 +        if (createNetwork) {
 +            if (requiredOfferings.get(0).getState() == NetworkOffering.State.Enabled) {
 +                long physicalNetworkId = _networkModel.findPhysicalNetworkId(zoneId, requiredOfferings.get(0).getTags(), requiredOfferings.get(0).getTrafficType());
 +                // Validate physical network
 +                PhysicalNetwork physicalNetwork = _physicalNetworkDao.findById(physicalNetworkId);
 +                if (physicalNetwork == null) {
 +                    throw new InvalidParameterValueException("Unable to find physical network with id: " + physicalNetworkId + " and tag: " + requiredOfferings.get(0).getTags());
 +                }
 +
 +                s_logger.debug("Creating network for account " + owner + " from the network offering id=" + requiredOfferings.get(0).getId() +
 +                               " as a part of createVlanIpRange process");
 +                guestNetwork = _networkMgr.createGuestNetwork(requiredOfferings.get(0).getId(),
 +                    owner.getAccountName() + "-network",
 +                    owner.getAccountName() + "-network",
 +                    null,
 +                    null,
 +                    null,
 +                    null,
 +                    owner,
 +                    null,
 +                    physicalNetwork,
 +                    zoneId,
 +                    ACLType.Account,
 +                    null,
 +                    null,
 +                    null,
 +                    null,
 +                    true,
 +                    null);
 +                if (guestNetwork == null) {
 +                    s_logger.warn("Failed to create default Virtual network for the account " + accountId + "in zone " + zoneId);
 +                    throw new CloudRuntimeException("Failed to create a Guest Isolated Networks with SourceNAT " +
 +                                                    "service enabled as a part of createVlanIpRange, for the account " + accountId + "in zone " + zoneId);
 +                }
 +            } else {
 +                throw new CloudRuntimeException("Required network offering id=" + requiredOfferings.get(0).getId() + " is not in " + NetworkOffering.State.Enabled);
 +            }
 +        }
 +
 +        // Check if there is a source nat ip address for this account; if not - we have to allocate one
 +        boolean allocateSourceNat = false;
 +        List<IPAddressVO> sourceNat = _ipAddressDao.listByAssociatedNetwork(guestNetwork.getId(), true);
 +        if (sourceNat.isEmpty()) {
 +            allocateSourceNat = true;
 +        }
 +
 +        // update all ips with a network id, mark them as allocated and update resourceCount/usage
 +        List<IPAddressVO> ips = _ipAddressDao.listByVlanId(vlanId);
 +        boolean isSourceNatAllocated = false;
 +        for (IPAddressVO addr : ips) {
 +            if (addr.getState() != State.Allocated) {
 +                if (!isSourceNatAllocated && allocateSourceNat) {
 +                    addr.setSourceNat(true);
 +                    isSourceNatAllocated = true;
 +                } else {
 +                    addr.setSourceNat(false);
 +                }
 +                addr.setAssociatedWithNetworkId(guestNetwork.getId());
 +                addr.setVpcId(guestNetwork.getVpcId());
 +                addr.setAllocatedTime(new Date());
 +                addr.setAllocatedInDomainId(owner.getDomainId());
 +                addr.setAllocatedToAccountId(owner.getId());
 +                addr.setSystem(false);
 +                addr.setState(IpAddress.State.Allocating);
 +                markPublicIpAsAllocated(addr);
 +            }
 +        }
+                     return new Ternary<Boolean,List<NetworkOfferingVO>, Network>(createNetwork, requiredOfferings, guestNetwork);
+                 }
+             });
+         } catch (Exception e1) {
+             ExceptionUtil.rethrowRuntime(e1);
+             ExceptionUtil.rethrow(e1, InsufficientCapacityException.class);
+             ExceptionUtil.rethrow(e1, ResourceAllocationException.class);
+             throw new IllegalStateException(e1);
+         }
  
-         txn.commit();
+         boolean createNetwork = pair.first();
+         List<NetworkOfferingVO> requiredOfferings = pair.second();
+         Network guestNetwork = pair.third();
 -        
 +
          // if the network offering has persistent set to true, implement the network
          if (createNetwork && requiredOfferings.get(0).getIsPersistent()) {
              DataCenter zone = _dcDao.findById(zoneId);
@@@ -1602,36 -1644,36 +1644,36 @@@
          }
  
          if (ip.getState() != State.Releasing) {
-             txn.start();
- 
-             // don't decrement resource count for direct and dedicated ips
-             if (ip.getAssociatedWithNetworkId() != null && !isIpDedicated(ip)) {
+             return Transaction.execute(new TransactionCallback<IPAddressVO>() {
+                 @Override
+                 public IPAddressVO doInTransaction(TransactionStatus status) {
+                     if (updateIpResourceCount(ip)) {
 -                        _resourceLimitMgr.decrementResourceCount(_ipAddressDao.findById(addrId).getAllocatedToAccountId(), ResourceType.public_ip);
 -                    }
 +                _resourceLimitMgr.decrementResourceCount(_ipAddressDao.findById(addrId).getAllocatedToAccountId(), ResourceType.public_ip);
 +            }
 +
 +            // Save usage event
 +            if (ip.getAllocatedToAccountId() != null && ip.getAllocatedToAccountId() != Account.ACCOUNT_ID_SYSTEM) {
 +                VlanVO vlan = _vlanDao.findById(ip.getVlanId());
 +
 +                String guestType = vlan.getVlanType().toString();
 +                if (!isIpDedicated(ip)) {
 +                    String eventType = ip.isPortable() ? EventTypes.EVENT_PORTABLE_IP_RELEASE : EventTypes.EVENT_NET_IP_RELEASE;
 +                    UsageEventUtils.publishUsageEvent(eventType,
 +                        ip.getAllocatedToAccountId(),
 +                        ip.getDataCenterId(),
 +                        addrId,
 +                        ip.getAddress().addr(),
 +                        ip.isSourceNat(),
 +                        guestType,
 +                        ip.getSystem(),
 +                        ip.getClass().getName(),
 +                        ip.getUuid());
 +                }
 +            }
  
-             ip = _ipAddressDao.markAsUnavailable(addrId);
- 
-             txn.commit();
 -                    // Save usage event
 -                    if (ip.getAllocatedToAccountId() != null && ip.getAllocatedToAccountId() != Account.ACCOUNT_ID_SYSTEM) {
 -                        VlanVO vlan = _vlanDao.findById(ip.getVlanId());
 -
 -                        String guestType = vlan.getVlanType().toString();
 -                        if (!isIpDedicated(ip)) {
 -                            String eventType = ip.isPortable() ? EventTypes.EVENT_PORTABLE_IP_RELEASE : EventTypes.EVENT_NET_IP_RELEASE;
 -                            UsageEventUtils.publishUsageEvent(eventType,
 -                                ip.getAllocatedToAccountId(),
 -                                ip.getDataCenterId(),
 -                                addrId,
 -                                ip.getAddress().addr(),
 -                                ip.isSourceNat(),
 -                                guestType,
 -                                ip.getSystem(),
 -                                ip.getClass().getName(),
 -                                ip.getUuid());
 -                        }
 -                    }
 -        
+                     return _ipAddressDao.markAsUnavailable(addrId);
+                 }
+             });
          }
  
          return ip;
@@@ -1811,73 -1858,73 +1858,73 @@@
  
      @Override
      @DB
-     public void allocateDirectIp(NicProfile nic, DataCenter dc, VirtualMachineProfile vm, Network network, String requestedIpv4, String requestedIpv6)
+     public void allocateDirectIp(final NicProfile nic, final DataCenter dc, final VirtualMachineProfile vm, final Network network, final String requestedIpv4, final String requestedIpv6)
          throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException {
+         Transaction.execute(new TransactionCallbackWithExceptionNoReturn<InsufficientAddressCapacityException>() {
+             @Override
+             public void doInTransactionWithoutResult(TransactionStatus status) throws InsufficientAddressCapacityException {
 -                //This method allocates direct ip for the Shared network in Advance zones
 -                boolean ipv4 = false;
 -
 -                if (network.getGateway() != null) {
 -                    if (nic.getIp4Address() == null) {
 -                        ipv4 = true;
 -                        PublicIp ip = null;
 -
 -                        //Get ip address from the placeholder and don't allocate a new one
 -                        if (requestedIpv4 != null && vm.getType() == VirtualMachine.Type.DomainRouter) {
 -                            Nic placeholderNic = _networkModel.getPlaceholderNicForRouter(network, null);
 -                            if (placeholderNic != null) {
 -                                IPAddressVO userIp = _ipAddressDao.findByIpAndSourceNetworkId(network.getId(), placeholderNic.getIp4Address());
 -                                ip = PublicIp.createFromAddrAndVlan(userIp, _vlanDao.findById(userIp.getVlanId()));
 -                                s_logger.debug("Nic got an ip address " + placeholderNic.getIp4Address() + " stored in placeholder nic for the network " + network);
 -                            }
 -                        }
 -
 -                        if (ip == null) {
 -                            ip = assignPublicIpAddress(dc.getId(), null, vm.getOwner(), VlanType.DirectAttached, network.getId(), requestedIpv4, false);
 -                        }
 -
 -                        nic.setIp4Address(ip.getAddress().toString());
 -                        nic.setGateway(ip.getGateway());
 -                        nic.setNetmask(ip.getNetmask());
 -                        nic.setIsolationUri(IsolationType.Vlan.toUri(ip.getVlanTag()));
 -                        //nic.setBroadcastType(BroadcastDomainType.Vlan);
 -                        //nic.setBroadcastUri(BroadcastDomainType.Vlan.toUri(ip.getVlanTag()));
 -                        nic.setBroadcastType(network.getBroadcastDomainType());
 -                        nic.setBroadcastUri(network.getBroadcastUri());
 -                        nic.setFormat(AddressFormat.Ip4);
 -                        nic.setReservationId(String.valueOf(ip.getVlanTag()));
 -                        nic.setMacAddress(ip.getMacAddress());
 +        //This method allocates direct ip for the Shared network in Advance zones
 +        boolean ipv4 = false;
 +
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
- 
 +        if (network.getGateway() != null) {
 +            if (nic.getIp4Address() == null) {
 +                ipv4 = true;
 +                PublicIp ip = null;
 +
 +                //Get ip address from the placeholder and don't allocate a new one
 +                if (requestedIpv4 != null && vm.getType() == VirtualMachine.Type.DomainRouter) {
 +                    Nic placeholderNic = _networkModel.getPlaceholderNicForRouter(network, null);
 +                    if (placeholderNic != null) {
 +                        IPAddressVO userIp = _ipAddressDao.findByIpAndSourceNetworkId(network.getId(), placeholderNic.getIp4Address());
 +                        ip = PublicIp.createFromAddrAndVlan(userIp, _vlanDao.findById(userIp.getVlanId()));
 +                        s_logger.debug("Nic got an ip address " + placeholderNic.getIp4Address() + " stored in placeholder nic for the network " + network);
                      }
 -                    nic.setDns1(dc.getDns1());
 -                    nic.setDns2(dc.getDns2());
                  }
  
 -                //FIXME - get ipv6 address from the placeholder if it's stored there
 -                if (network.getIp6Gateway() != null) {
 -                    if (nic.getIp6Address() == null) {
 -                        UserIpv6Address ip = _ipv6Mgr.assignDirectIp6Address(dc.getId(), vm.getOwner(), network.getId(), requestedIpv6);
 -                        Vlan vlan = _vlanDao.findById(ip.getVlanId());
 -                        nic.setIp6Address(ip.getAddress().toString());
 -                        nic.setIp6Gateway(vlan.getIp6Gateway());
 -                        nic.setIp6Cidr(vlan.getIp6Cidr());
 -                        if (ipv4) {
 -                            nic.setFormat(AddressFormat.DualStack);
 -                        } else {
 -                            nic.setIsolationUri(IsolationType.Vlan.toUri(vlan.getVlanTag()));
 -                            nic.setBroadcastType(BroadcastDomainType.Vlan);
 -                            nic.setBroadcastUri(BroadcastDomainType.Vlan.toUri(vlan.getVlanTag()));
 -                            nic.setFormat(AddressFormat.Ip6);
 -                            nic.setReservationId(String.valueOf(vlan.getVlanTag()));
 -                            nic.setMacAddress(ip.getMacAddress());
 -                        }
 -                    }
 -                    nic.setIp6Dns1(dc.getIp6Dns1());
 -                    nic.setIp6Dns2(dc.getIp6Dns2());
 +                if (ip == null) {
 +                    ip = assignPublicIpAddress(dc.getId(), null, vm.getOwner(), VlanType.DirectAttached, network.getId(), requestedIpv4, false);
                  }
 +
 +                nic.setIp4Address(ip.getAddress().toString());
 +                nic.setGateway(ip.getGateway());
 +                nic.setNetmask(ip.getNetmask());
 +                nic.setIsolationUri(IsolationType.Vlan.toUri(ip.getVlanTag()));
 +                //nic.setBroadcastType(BroadcastDomainType.Vlan);
 +                //nic.setBroadcastUri(BroadcastDomainType.Vlan.toUri(ip.getVlanTag()));
 +                nic.setBroadcastType(network.getBroadcastDomainType());
 +                nic.setBroadcastUri(network.getBroadcastUri());
 +                nic.setFormat(AddressFormat.Ip4);
 +                nic.setReservationId(String.valueOf(ip.getVlanTag()));
 +                nic.setMacAddress(ip.getMacAddress());
 +            }
 +            nic.setDns1(dc.getDns1());
 +            nic.setDns2(dc.getDns2());
 +        }
 +
 +        //FIXME - get ipv6 address from the placeholder if it's stored there
 +        if (network.getIp6Gateway() != null) {
 +            if (nic.getIp6Address() == null) {
 +                UserIpv6Address ip = _ipv6Mgr.assignDirectIp6Address(dc.getId(), vm.getOwner(), network.getId(), requestedIpv6);
 +                Vlan vlan = _vlanDao.findById(ip.getVlanId());
 +                nic.setIp6Address(ip.getAddress().toString());
 +                nic.setIp6Gateway(vlan.getIp6Gateway());
 +                nic.setIp6Cidr(vlan.getIp6Cidr());
 +                if (ipv4) {
 +                    nic.setFormat(AddressFormat.DualStack);
 +                } else {
 +                    nic.setIsolationUri(IsolationType.Vlan.toUri(vlan.getVlanTag()));
 +                    nic.setBroadcastType(BroadcastDomainType.Vlan);
 +                    nic.setBroadcastUri(BroadcastDomainType.Vlan.toUri(vlan.getVlanTag()));
 +                    nic.setFormat(AddressFormat.Ip6);
 +                    nic.setReservationId(String.valueOf(vlan.getVlanTag()));
 +                    nic.setMacAddress(ip.getMacAddress());
 +                }
 +            }
 +            nic.setIp6Dns1(dc.getIp6Dns1());
 +            nic.setIp6Dns2(dc.getIp6Dns2());
 +        }
- 
-         txn.commit();
+             }
+         });
      }
  
      @Override


[30/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
Add a bit more padding to header bar


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

Branch: refs/heads/rbac
Commit: 3f2a14b8b47572d805d5093f39b66d2cf31fc9f8
Parents: 9d5ea57
Author: Brian Federle <br...@citrix.com>
Authored: Tue Oct 29 16:04:53 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Tue Oct 29 16:04:53 2013 -0700

----------------------------------------------------------------------
 ui/css/cloudstack3.css | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3f2a14b8/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index f58bb8c..e0859cd 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -2197,7 +2197,7 @@ div.detail-group.actions td {
 /*Header*/
 #header {
   width: 100%;
-  height: 117px;
+  height: 135px;
   background: url(../images/overlay-pattern.png) repeat 0, #1B5070 url(../images/header-gradient.png) no-repeat center;
   background-size: auto, cover;
   position: relative;
@@ -2214,17 +2214,17 @@ div.detail-group.actions td {
   height: 47px;
   margin: auto;
   background: url(../images/logo.png) no-repeat 0 center;
-  /*+placement:shift 0px 2px;*/
+  /*+placement:shift 0px 15px;*/
   position: relative;
   left: 0px;
-  top: 2px;
+  top: 15px;
 }
 
 #header div.controls {
-  width: 1024px;
+  width: 1026px;
   height: 48px;
   position: relative;
-  margin: 9px auto 8px;
+  margin: 27px auto 0;
   padding-top: 13px;
   /*+border-radius:4px 4px 0 0;*/
   -moz-border-radius: 4px 4px 0 0;
@@ -2261,10 +2261,10 @@ div.detail-group.actions td {
   float: right;
   height: 18px;
   padding: 1px 0 0;
-  /*+placement:shift -174px -54px;*/
+  /*+placement:shift -174px -57px;*/
   position: relative;
   left: -174px;
-  top: -54px;
+  top: -57px;
 }
 
 #header div.notifications:after {
@@ -2277,7 +2277,7 @@ div.detail-group.actions td {
 
 #header div.notifications span {
   position: relative;
-  top: 6px;
+  top: 5px;
   left: 7px;
 }
 
@@ -2321,10 +2321,10 @@ div.detail-group.actions td {
 
 #user {
   height: 30px;
-  margin: 5px 6px 0 0;
+  margin: 0;
   position: absolute;
-  top: -48px;
-  left: 880px;
+  top: -47px;
+  left: 890px;
   cursor: default !important;
   display: inline-block;
   float: left;
@@ -2369,10 +2369,10 @@ div.detail-group.actions td {
   width: 11px;
   height: 8px;
   background: url(../images/buttons.png) -402px -23px;
-  /*+placement:shift 10px 13px;*/
+  /*+placement:shift 8px 11px;*/
   position: relative;
-  left: 10px;
-  top: 13px;
+  left: 8px;
+  top: 11px;
 }
 
 /** Zone filter (mixed zone management)*/


[34/50] [abbrv] git commit: updated refs/heads/rbac to 2ef4d52

Posted by mc...@apache.org.
CLOUDSTACK-4776: New Tests for Netscaler as external device


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

Branch: refs/heads/rbac
Commit: af4f78ecca31df7b640f9a8d43b917e0f0510b0f
Parents: ee5a396
Author: Sowmya Krishnan <so...@citrix.com>
Authored: Wed Oct 30 16:46:20 2013 +0530
Committer: Sowmya Krishnan <so...@citrix.com>
Committed: Wed Oct 30 16:57:21 2013 +0530

----------------------------------------------------------------------
 test/integration/component/test_vpc_network.py | 241 ++++++++------------
 1 file changed, 95 insertions(+), 146 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/af4f78ec/test/integration/component/test_vpc_network.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_vpc_network.py b/test/integration/component/test_vpc_network.py
index ffd41a2..b9b4f00 100644
--- a/test/integration/component/test_vpc_network.py
+++ b/test/integration/component/test_vpc_network.py
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-""" Component tests for VPC network functionality
+""" Component tests for VPC network functionality - with and without Netscaler (Netscaler tests will be skipped if Netscaler configuration fails)
 """
 #Import Local Modules
 import marvin
@@ -27,6 +27,7 @@ from marvin.integration.lib.base import *
 from marvin.integration.lib.common import *
 from marvin.remoteSSHClient import remoteSSHClient
 import datetime
+# For more info on ddt refer to http://ddt.readthedocs.org/en/latest/api.html#module-ddt
 from ddt import ddt, data
 
 class Services:
@@ -74,6 +75,7 @@ class Services:
                     "SourceNat": {"SupportedSourceNatTypes": "peraccount"},
                 },
             },
+            # Offering that uses Netscaler as provider for LB inside VPC, dedicated = false            
             "network_off_netscaler": {
                 "name": 'Network offering-netscaler',
                 "displaytext": 'Network offering-netscaler',
@@ -96,7 +98,9 @@ class Services:
                     "SourceNat": {"SupportedSourceNatTypes": "peraccount"},
                 },
             },
-            "network_offering_vpcNS": {
+            # Offering that uses Netscaler as provider for LB in VPC, dedicated = True 
+            # This offering is required for the tests that use Netscaler as external LB provider in VPC
+            "network_offering_vpcns": {
                                     "name": 'VPC Network offering',
                                     "displaytext": 'VPC Network off',
                                     "guestiptype": 'Isolated',
@@ -145,6 +149,7 @@ class Services:
                 "displaytext": "TestVPC",
                 "cidr": '10.0.0.1/24'
             },
+            # Netscaler should be added as a dedicated device for it to work as external LB provider in VPC
             "netscaler": {
                         "ipaddress": '10.102.192.50',
                         "username": 'nsroot',
@@ -223,6 +228,9 @@ class TestVPCNetwork(cloudstackTestCase):
                                cls
                                ).getClsTestClient().getApiClient()
         cls.services = Services().services
+        # Added an attribute to track if Netscaler addition was successful. 
+        # Value is checked in tests and if not configured, Netscaler tests will be skipped 
+        cls.ns_configured = False
         # Get Zone, Domain and templates
         cls.domain = get_domain(cls.api_client, cls.services)
         cls.zone = get_zone(cls.api_client, cls.services)
@@ -241,16 +249,14 @@ class TestVPCNetwork(cloudstackTestCase):
                                             )
         cls._cleanup.append(cls.service_offering)
         # Configure Netscaler device
-        global NSconfigured
-        
+        # If configuration succeeds, set ns_configured to True so that Netscaler tests are executed                
         try:
            cls.netscaler = add_netscaler(cls.api_client, cls.zone.id, cls.services["netscaler"])
            cls._cleanup.append(cls.netscaler)
-           NSconfigured = True
+           cls.debug("Netscaler configured")
+           cls.ns_configured = True
         except Exception as e:
-           NSconfigured = False
-           raise Exception ("Warning: Exception in setUpClass: %s" % e)
-
+           cls.debug("Warning: Couldn't configure Netscaler: %s" % e)
         return
 
     @classmethod
@@ -334,26 +340,24 @@ class TestVPCNetwork(cloudstackTestCase):
         self.debug("VPC network validated - %s" % network.name)
         return
     
-    @data("network_offering", "network_offering_vpcNS")
+    @data("network_offering", "network_offering_vpcns")
     @attr(tags=["advanced", "intervlan"])
     def test_01_create_network(self, value):
         """ Test create network in VPC
         """
 
         # Validate the following
-        # 1. Create VPC Offering by specifying all supported Services
-        #    (Vpn,dhcpdns,UserData, SourceNat,Static NAT and PF,LB,NetworkAcl)
-        # 2. Create a VPC using the above VPC offering.
-        # 3. Create a network offering with guest type=Isolated" that has
+        # 1. Create a VPC using Default Offering
+        # 2. Create a network offering with guest type=Isolated" that has
         #    all of supported Services(Vpn,dhcpdns,UserData, SourceNat,Static
-        #    NAT,LB and PF,LB,NetworkAcl ) provided by VPCVR and conserver
+        #    NAT,LB and PF,LB,NetworkAcl ) provided by VPCVR and conserve
         #    mode is ON
-        # 4. Create a VPC using the above VPC offering.
-        # 5. Create a network using the network offering created in step2 as
+        # 3. Create a network tier using the network offering created in step2 as
         #    part of this VPC.
+        # 4. Validate Network is created
+        # 5. Repeat test for offering which has Netscaler as external LB provider
 
-
-        if (value == "network_offering_vpcNS" and NSconfigured == False):
+        if (value == "network_offering_vpcns" and self.ns_configured == False):
            self.skipTest('Netscaler not configured: skipping test')
 
         if (value == "network_offering"):
@@ -368,8 +372,7 @@ class TestVPCNetwork(cloudstackTestCase):
                                   name='Default VPC  offering with Netscaler',
                                   listall=True
                                   )
-        if isinstance(vpc_off_list, list):
-           vpc_off=vpc_off_list[0]
+        vpc_off=vpc_off_list[0]
         self.debug("Creating a VPC with offering: %s" % vpc_off.id)
 
         self.services["vpc"]["cidr"] = '10.1.1.1/16'
@@ -433,26 +436,24 @@ class TestVPCNetwork(cloudstackTestCase):
                          )
         return
 
-    @data("network_offering", "network_offering_vpcNS")
+    @data("network_offering", "network_offering_vpcns")
     @attr(tags=["advanced", "intervlan"])
     def test_02_create_network_fail(self, value):
         """ Test create network in VPC mismatched services (Should fail)
         """
         
         # Validate the following
-        # 1. Create VPC Offering by specifying all supported Services
-        #    (Vpn,dhcpdns,UserData, SourceNat,Static NAT and PF,LB,NetworkAcl)
-        # 2. Create a VPC using the above VPC offering.
-        # 3. Create a network offering with guest type=Isolated" that has
-        #    one of supported Services(Vpn,dhcpdns,UserData, SourceNat,Static
-        #    NAT,LB and PF,LB,NetworkAcl ) provided by VPCVR and conserver
-        #    mode is ON
-        # 4. Create a VPC using the above VPC offering.
-        # 5. Create a network using the network offering created in step2 as
+        # 1. Create a VPC using Default VPC Offering 
+        # 2. Create a network offering with guest type=Isolated" that has
+        #    one of supported Services(Vpn,dhcpdns,UserData, Static
+        #    NAT,LB and PF,LB,NetworkAcl ) provided by VPCVR, SourceNat by VR 
+        #    and conserve mode is ON
+        # 3. Create a network using the network offering created in step2 as
         #    part of this VPC.
-        # 6. Network creation should fail
+        # 4. Network creation should fail since SourceNat offered by VR instead of VPCVR
+        # 5. Repeat test for offering which has Netscaler as external LB provider 
 
-        if (value == "network_offering_vpcNS" and NSconfigured == False):
+        if (value == "network_offering_vpcns" and self.ns_configured == False):
            self.skipTest('Netscaler not configured: skipping test')
 
 
@@ -468,8 +469,7 @@ class TestVPCNetwork(cloudstackTestCase):
                                   name='Default VPC  offering with Netscaler',
                                   listall=True
                                   )
-        if isinstance(vpc_off_list, list):
-           vpc_off=vpc_off_list[0]
+        vpc_off=vpc_off_list[0]
         self.debug("Creating a VPC with offering: %s" % vpc_off.id)
         
         self.services["vpc"]["cidr"] = '10.1.1.1/16'
@@ -483,7 +483,6 @@ class TestVPCNetwork(cloudstackTestCase):
                          )
         self.validate_vpc_network(vpc)
 
-        #self.services[value]["supportedservices"] = 'SourceNat'
         self.services[value]["serviceProviderList"] = {
                                         "SourceNat": 'VirtualRouter', }
 
@@ -512,24 +511,23 @@ class TestVPCNetwork(cloudstackTestCase):
                                 )
         return
 
-    @data("network_offering", "network_offering_vpcNS") 
+    @data("network_offering", "network_offering_vpcns") 
     @attr(tags=["advanced", "intervlan"])
     def test_04_create_multiple_networks_with_lb(self, value):
         """ Test create multiple networks with LB service (Should fail)
         """
 
         # Validate the following
-        # 1. Create VPC Offering by specifying all supported Services
-        #    (Vpn,dhcpdns,UserData, SourceNat,Static NAT and PF,LB,NetworkAcl)
-        # 2. Create a VPC using the above VPC offering
-        # 3. Create a network offering with guest type=Isolated that has LB
-        #    services Enabled and conserver mode is "ON".
-        # 4. Create a network using the network offering created in step3 as
+        # 1. Create a VPC using Default Offering
+        # 2. Create a network offering with guest type=Isolated that has LB
+        #    services Enabled and conserve mode is "ON".
+        # 3. Create a network using the network offering created in step2 as
         #    part of this VPC.
-        # 5. Create another network using the network offering created in
+        # 4. Create another network using the network offering created in
         #    step3 as part of this VPC
-
-        if (value == "network_offering_vpcNS" and NSconfigured == False):
+        # 5. Create Network should fail 
+        # 6. Repeat test for offering which has Netscaler as external LB provider
+        if (value == "network_offering_vpcns" and self.ns_configured == False):
            self.skipTest('Netscaler not configured: skipping test')
 
 
@@ -545,8 +543,7 @@ class TestVPCNetwork(cloudstackTestCase):
                                   name='Default VPC  offering with Netscaler',
                                   listall=True
                                   )
-        if isinstance(vpc_off_list, list):
-           vpc_off=vpc_off_list[0]
+        vpc_off=vpc_off_list[0]
         self.debug("Creating a VPC with offering: %s" % vpc_off.id)
 
         self.services["vpc"]["cidr"] = '10.1.1.1/16'
@@ -630,23 +627,18 @@ class TestVPCNetwork(cloudstackTestCase):
         """
 
         # Validate the following
-        # 1. Create VPC Offering by specifying all supported Services
-        #    (Vpn,dhcpdns,UserData, SourceNat,Static NAT and PF,LB,NetworkAcl)
-        # 2. Create a VPC using the above VPC offering
-        # 3. Create a network offering with guest type=Isolated that has LB
-        #    services Enabled and conserver mode is "ON".
-        # 4. Create a network using the network offering created in step3 as
-        #    part of this VPC.
-        # 5. Create another network using the network offering created in
-        #    step3 as part of this VPC
+        # 1.Create a VPC using Default Offering (Without Netscaler)
+        # 2. Create a network offering with guest type=Isolated that has LB
+        #    service provided by netscaler and conserve mode is "ON".
+        # 3. Create a network using this network offering as part of this VPC.
+        # 4. Create Network should fail since it doesn't match the VPC offering
 
         vpc_off_list=VpcOffering.list(
                                   self.apiclient,
                                   name='Default VPC offering',
                                   listall=True
                                   )
-        if isinstance(vpc_off_list, list):
-           vpc_off=vpc_off_list[0]
+        vpc_off=vpc_off_list[0]
         self.debug("Creating a VPC with offering: %s" % vpc_off.id)
 
         self.services["vpc"]["cidr"] = '10.1.1.1/16'
@@ -660,10 +652,9 @@ class TestVPCNetwork(cloudstackTestCase):
                          )
         self.validate_vpc_network(vpc)
 
-        #with self.assertRaises(Exception):
         self.network_offering = NetworkOffering.create(
                                                      self.apiclient,
-                                                     self.services["network_offering_vpcNS"],
+                                                     self.services["network_offering_vpcns"],
                                                      conservemode=False
                                                      )
         # Enable Network offering
@@ -768,16 +759,13 @@ class TestVPCNetwork(cloudstackTestCase):
         """
 
         # Validate the following
-        # 1. Create VPC Offering by specifying supported Services -
-        #    Vpn,dhcpdns,UserData, SourceNat,Static NAT and PF,LB,NetworkAcl)
-        #    with out including LB services.
+        # 1. Create VPC Offering without LB service
         # 2. Create a VPC using the above VPC offering
         # 3. Create a network offering with guest type=Isolated that has all
         #    supported Services(Vpn,dhcpdns,UserData, SourceNat,Static NAT,LB
-        #    and PF,LB,NetworkAcl ) provided by VPCVR and conserver mode is OFF
-        # 4. Create a VPC using the above VPC offering
-        # 5. Create a network using the network offering created in step2 as
-        #    part of this VPC.
+        #    and PF,LB,NetworkAcl ) provided by VPCVR and conserve mode is OFF
+        # 4. Create Network with the above offering
+        # 5. Create network fails since VPC offering doesn't support LB
 
         self.debug("Creating a VPC offering without LB service")
         self.services["vpc_offering"]["supportedservices"] = 'Dhcp,Dns,SourceNat,PortForwarding,Vpn,UserData,StaticNat'
@@ -897,23 +885,21 @@ class TestVPCNetwork(cloudstackTestCase):
         self.debug("Network creation failed as VPC doesn't have LB service")
         return
     
-    @data("network_off_shared", "network_offering_vpcNS")
+    @data("network_off_shared", "network_offering_vpcns")
     @attr(tags=["advanced", "intervlan"])
     def test_09_create_network_shared_nwoff(self, value):
         """ Test create network with shared network offering
         """
 
         # Validate the following
-        # 1. Create VPC Offering by specifying supported Services -
-        #    Vpn,dhcpdns,UserData, SourceNat,Static NAT and PF,LB,NetworkAcl)
-        #    with out including LB services
+        # 1. Create VPC Offering using Default Offering
         # 2. Create a VPC using the above VPC offering
         # 3. Create a network offering with guest type=shared
-        # 4. Create a VPC using the above VPC offering
-        # 5. Create a network using the network offering created in step2
-        #    as part of this VPC
+        # 4. Create a network using the network offering created in step3 as part of this VPC
+        # 5. Create network fails since it using shared offering
+        # 6. Repeat test for offering which has Netscaler as external LB provider
 
-        if (value == "network_offering_vpcNS" and NSconfigured == False):
+        if (value == "network_offering_vpcns" and self.ns_configured == False):
            self.skipTest('Netscaler not configured: skipping test')
 
         if (value == "network_off_shared"):
@@ -928,8 +914,7 @@ class TestVPCNetwork(cloudstackTestCase):
                                   name='Default VPC  offering with Netscaler',
                                   listall=True
                                   )
-        if isinstance(vpc_off_list, list):
-           vpc_off=vpc_off_list[0]
+        vpc_off=vpc_off_list[0]
         self.debug("Creating a VPC with offering: %s" % vpc_off.id)
 
         self.services["vpc"]["cidr"] = '10.1.1.1/16'
@@ -972,52 +957,18 @@ class TestVPCNetwork(cloudstackTestCase):
         self.debug("Network creation failed")
         return
 
-    @data("network_offering", "network_offering_vpcNS")
+    @data("network_offering", "network_offering_vpcns")
     @attr(tags=["advanced", "intervlan"])
     def test_10_create_network_with_conserve_mode(self, value):
         """ Test create network with conserve mode ON
         """
 
         # Validate the following
-        # 1. Create VPC Offering by specifying all supported Services
-        #    (Vpn,dhcpdns,UserData, SourceNat,Static NAT and PF,LB,NetworkAcl)
-        # 2. Create a VPC using the above VPC offering
-        # 3. Create a network offering with guest type=Isolated that has all
+        # 1. Create a network offering with guest type=Isolated that has all
         #    supported Services(Vpn,dhcpdns,UserData, SourceNat,Static NAT,LB
-        #    and PF,LB,NetworkAcl ) provided by VPCVR and conserver mode is ON
-        # 4. Create a VPC using the above VPC offering
-        # 5. Create a network using the network offering created in step2 as
-        #    part of this VPC
-
-        if (value == "network_offering_vpcNS" and NSconfigured == False):
-           self.skipTest('Netscaler not configured: skipping test')
-
-        if (value == "network_offering"):
-           vpc_off_list=VpcOffering.list(
-                                  self.apiclient,
-                                  name='Default VPC offering',
-                                  listall=True
-                                  )
-        else:
-           vpc_off_list=VpcOffering.list(
-                                  self.apiclient,
-                                  name='Default VPC  offering with Netscaler',
-                                  listall=True
-                                  )
-        if isinstance(vpc_off_list, list):
-           vpc_off=vpc_off_list[0]
-        self.debug("Creating a VPC with offering: %s" % vpc_off.id)
-
-        self.services["vpc"]["cidr"] = '10.1.1.1/16'
-        vpc = VPC.create(
-                         self.apiclient,
-                         self.services["vpc"],
-                         vpcofferingid=vpc_off.id,
-                         zoneid=self.zone.id,
-                         account=self.account.name,
-                         domainid=self.account.domainid
-                         )
-        self.validate_vpc_network(vpc)
+        #    and PF,LB,NetworkAcl ) provided by VPCVR and conserve mode is ON
+        # 2. Create offering fails since Conserve mode ON isn't allowed within VPC
+        # 3. Repeat test for offering which has Netscaler as external LB provider
 
         self.debug("Creating network offering with conserve mode = ON")
 
@@ -1041,6 +992,9 @@ class TestVPCNetworkRanges(cloudstackTestCase):
                                cls
                                ).getClsTestClient().getApiClient()
         cls.services = Services().services
+        # Added an attribute to track if Netscaler addition was successful. 
+        # Value is checked in tests and if not configured, Netscaler tests will be skipped 
+        cls.ns_configured = False
         # Get Zone, Domain and templates
         cls.domain = get_domain(cls.api_client, cls.services)
         cls.zone = get_zone(cls.api_client, cls.services)
@@ -1059,18 +1013,13 @@ class TestVPCNetworkRanges(cloudstackTestCase):
                                             )
         cls._cleanup.append(cls.service_offering)
         # Configure Netscaler device
-        global NSconfigured
-
+        # If configuration succeeds, set ns_configured to True so that Netscaler tests are executed              
         try:
            cls.netscaler = add_netscaler(cls.api_client, cls.zone.id, cls.services["netscaler"])
-           cls._cleanup = [
-                    cls.netscaler
-                    ]
-           NSconfigured = True
+           cls._cleanup.append(cls.netscaler)
+           cls.ns_configured = True
         except Exception as e:
-           NSconfigured = False
-           raise Exception ("Warning: Exception in setUpClass: %s" % e)
-
+           cls.debug("Warning: Couldn't configure Netscaler: %s" % e)
         return
 
     @classmethod
@@ -1100,7 +1049,6 @@ class TestVPCNetworkRanges(cloudstackTestCase):
             cleanup_resources(self.apiclient, self.cleanup)
         except Exception as e:
             self.debug("Warning: Exception during cleanup : %s" % e)
-            #raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
     def validate_vpc_offering(self, vpc_offering):
@@ -1153,7 +1101,7 @@ class TestVPCNetworkRanges(cloudstackTestCase):
         self.debug("VPC network validated - %s" % network.name)
         return
 
-    @data("network_offering", "network_offering_vpcNS")
+    @data("network_offering", "network_offering_vpcns")
     @attr(tags=["advanced", "intervlan"])
     def test_01_create_network_outside_range(self, value):
         """ Test create network outside cidr range of VPC
@@ -1163,8 +1111,9 @@ class TestVPCNetworkRanges(cloudstackTestCase):
         # 1. Create a VPC with cidr - 10.1.1.1/16
         # 2. Add network1 with cidr - 10.2.1.1/24  to this VPC
         # 3. Network creation should fail.
+        # 4. Repeat test for offering which has Netscaler as external LB provider
 
-        if (value == "network_offering_vpcNS" and NSconfigured == False):
+        if (value == "network_offering_vpcns" and self.ns_configured == False):
            self.skipTest('Netscaler not configured: skipping test')
 
         if (value == "network_offering"):
@@ -1179,8 +1128,7 @@ class TestVPCNetworkRanges(cloudstackTestCase):
                                   name='Default VPC  offering with Netscaler',
                                   listall=True
                                   )
-        if isinstance(vpc_off_list, list):
-           vpc_off=vpc_off_list[0]
+        vpc_off=vpc_off_list[0]
         self.debug("Creating a VPC with offering: %s" % vpc_off.id)
 
         self.services["vpc"]["cidr"] = '10.1.1.1/16'
@@ -1231,6 +1179,7 @@ class TestVPCNetworkRanges(cloudstackTestCase):
         # 1. Create a VPC with cidr - 10.1.1.1/16
         # 2. Add network1 with cidr - 10.2.1.1/24  to this VPC
         # 3. Network creation should fail.
+        # 4. Repeat test for offering which has Netscaler as external LB provider
 
         self.debug("Creating a VPC offering")
         vpc_off = VpcOffering.create(
@@ -1284,7 +1233,7 @@ class TestVPCNetworkRanges(cloudstackTestCase):
             "Network creation failed as network cidr range is outside of vpc")
         return
 
-    @data("network_offering", "network_offering_vpcNS")
+    @data("network_offering", "network_offering_vpcns")
     @attr(tags=["advanced", "intervlan"])
     def test_03_create_network_inside_range(self, value):
         """ Test create network inside cidr range of VPC
@@ -1294,8 +1243,9 @@ class TestVPCNetworkRanges(cloudstackTestCase):
         # 1. Create a VPC with cidr - 10.1.1.1/16
         # 2. Add network1 with cidr - 10.1.1.1/8  to this VPC
         # 3. Network creation should fail.
+        # 4. Repeat test for offering which has Netscaler as external LB provider
 
-        if (value == "network_offering_vpcNS" and NSconfigured == False):
+        if (value == "network_offering_vpcns" and self.ns_configured == False):
            self.skipTest('Netscaler not configured: skipping test')
 
         if (value == "network_offering"):
@@ -1310,8 +1260,7 @@ class TestVPCNetworkRanges(cloudstackTestCase):
                                   name='Default VPC  offering with Netscaler',
                                   listall=True
                                   )
-        if isinstance(vpc_off_list, list):
-           vpc_off=vpc_off_list[0]
+        vpc_off=vpc_off_list[0]
         self.debug("Creating a VPC with offering: %s" % vpc_off.id)
 
         self.debug("creating a VPC network with cidr: 10.1.1.1/16")
@@ -1357,7 +1306,7 @@ class TestVPCNetworkRanges(cloudstackTestCase):
             "Network creation failed as network cidr range is inside of vpc")
         return
 
-    @data("network_offering", "network_offering_vpcNS")    
+    @data("network_offering", "network_offering_vpcns")
     @attr(tags=["advanced", "intervlan"])
     def test_04_create_network_overlapping_range(self, value):
         """ Test create network overlapping cidr range of VPC
@@ -1369,8 +1318,10 @@ class TestVPCNetworkRanges(cloudstackTestCase):
         # 3. Add network2 with cidr - 10.1.1.1/24  to this VPC
         # 4. Add network3 with cidr - 10.1.1.1/26  to this VPC
         # 5. Network creation in step 3 & 4 should fail.
+        # 6. Repeat test for offering which has Netscaler as external LB provider
+
         self.services = Services().services
-        if (value == "network_offering_vpcNS" and NSconfigured == False):
+        if (value == "network_offering_vpcns" and self.ns_configured == False):
            self.skipTest('Netscaler not configured: skipping test')
 
         if (value == "network_offering"):
@@ -1385,8 +1336,7 @@ class TestVPCNetworkRanges(cloudstackTestCase):
                                   name='Default VPC  offering with Netscaler',
                                   listall=True
                                   )
-        if isinstance(vpc_off_list, list):
-           vpc_off=vpc_off_list[0]
+        vpc_off=vpc_off_list[0]
         self.debug("Creating a VPC with offering: %s" % vpc_off.id)
         self.debug("creating a VPC network with cidr: 10.1.1.1/16")
         self.services["vpc"]["cidr"] = '10.1.1.1/16'
@@ -1487,7 +1437,7 @@ class TestVPCNetworkRanges(cloudstackTestCase):
             "Network creation failed as network range overlaps each other")
         return
 
-    @data("network_offering", "network_offering_vpcNS")
+    @data("network_offering", "network_offering_vpcns")
     @attr(tags=["advanced", "intervlan"])
     def test_05_create_network_diff_account(self, value):
         """ Test create network from different account in VPC
@@ -1496,9 +1446,11 @@ class TestVPCNetworkRanges(cloudstackTestCase):
         # Validate the following
         # 1. Create a VPC with cidr - 10.1.1.1/16
         # 2. Add network1 with cidr - 10.1.1.1/24  to this VPC
-        # 3. Network creation should fail.
+        # 3. Create another account
+        # 4. Create network using this account - Network creation should fail
+        # 5. Repeat test for offering which has Netscaler as external LB provider
 
-        if (value == "network_offering_vpcNS" and NSconfigured == False):
+        if (value == "network_offering_vpcns" and self.ns_configured == False):
            self.skipTest('Netscaler not configured: skipping test')
 
         if (value == "network_offering"):
@@ -1513,8 +1465,7 @@ class TestVPCNetworkRanges(cloudstackTestCase):
                                   name='Default VPC  offering with Netscaler',
                                   listall=True
                                   )
-        if isinstance(vpc_off_list, list):
-           vpc_off=vpc_off_list[0]
+        vpc_off=vpc_off_list[0]
         self.debug("Creating a VPC with offering: %s" % vpc_off.id)
 
         self.debug("creating a VPC network with cidr: 10.1.1.1/16")
@@ -1626,7 +1577,6 @@ class TestVPCNetworkUpgrade(cloudstackTestCase):
             cleanup_resources(self.apiclient, self.cleanup)
         except Exception as e:
             self.debug("Warning: Exception during cleanup : %s" % e)
-            #raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
     def validate_vpc_offering(self, vpc_offering):
@@ -1704,8 +1654,7 @@ class TestVPCNetworkUpgrade(cloudstackTestCase):
                                   name='Default VPC offering',
                                   listall=True
                                   )
-        if isinstance(vpc_off_list, list):
-           vpc_off=vpc_off_list[0]
+        vpc_off=vpc_off_list[0]
         self.debug("Creating a VPC with offering: %s" % vpc_off.id)
 
         self.services["vpc"]["cidr"] = '10.1.1.1/16'