Fix CLOUDSTACK-2484: not able to deploy VM from registered ISO.

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

Branch: refs/heads/object_store
Commit: 03c255068b8febcb4eef5559a7a676caeca8a59e
Parents: 87af4dd
Author: Min Chen <[email protected]>
Authored: Tue May 14 14:47:16 2013 -0700
Committer: Min Chen <[email protected]>
Committed: Tue May 14 14:57:02 2013 -0700

----------------------------------------------------------------------
 .../src/com/cloud/api/query/QueryManagerImpl.java  |  271 ++++++++-------
 .../com/cloud/template/TemplateAdapterBase.java    |    9 +-
 2 files changed, 140 insertions(+), 140 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/03c25506/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 ab07f4f..f7fea53 100644
--- a/server/src/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/com/cloud/api/query/QueryManagerImpl.java
@@ -855,11 +855,11 @@ public class QueryManagerImpl extends ManagerBase 
implements QueryService {
                 sc.setParameters("stateNEQ", "Destroyed");
             }
         }
-        
+
         if (zoneType != null) {
                sc.setParameters("dataCenterType", zoneType);
         }
-        
+
         if (pod != null) {
             sc.setParameters("podId", pod);
 
@@ -1112,7 +1112,7 @@ public class QueryManagerImpl extends ManagerBase 
implements QueryService {
         if (zoneType != null) {
             sc.setParameters("dataCenterType", zoneType);
         }
-        
+
         if (pod != null) {
             sc.setParameters("podId", pod);
         }
@@ -2346,7 +2346,7 @@ public class QueryManagerImpl extends ManagerBase 
implements QueryService {
 
         if(networkType != null)
           sc.addAnd("networkType", SearchCriteria.Op.EQ, networkType);
-        
+
         if (id != null) {
             sc.addAnd("id", SearchCriteria.Op.EQ, id);
         } else if (name != null) {
@@ -2519,9 +2519,10 @@ public class QueryManagerImpl extends ManagerBase 
implements QueryService {
                 cmd.getZoneId(), hypervisorType, showDomr, 
cmd.listInReadyState(), permittedAccounts, caller, 
listProjectResourcesCriteria, tags);
     }
 
-    private Pair<List<TemplateJoinVO>, Integer> 
searchForTemplatesInternal(Long templateId, String name, String keyword, 
TemplateFilter templateFilter, boolean isIso,
-            Boolean bootable, Long pageSize, Long startIndex, Long zoneId, 
HypervisorType hyperType, boolean showDomr, boolean onlyReady,
-            List<Account> permittedAccounts, Account caller, 
ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> 
tags) {
+    private Pair<List<TemplateJoinVO>, Integer> 
searchForTemplatesInternal(Long templateId, String name, String keyword,
+            TemplateFilter templateFilter, boolean isIso, Boolean bootable, 
Long pageSize, Long startIndex, Long zoneId, HypervisorType hyperType,
+            boolean showDomr, boolean onlyReady, List<Account> 
permittedAccounts, Account caller,
+            ListProjectResourcesCriteria listProjectResourcesCriteria, 
Map<String, String> tags) {
         VMTemplateVO template = null;
 
         // verify templateId parameter
@@ -2571,167 +2572,171 @@ public class QueryManagerImpl extends ManagerBase 
implements QueryService {
         // add criteria for project or not
         if (listProjectResourcesCriteria == 
ListProjectResourcesCriteria.SkipProjectResources) {
             sc.addAnd("accountType", SearchCriteria.Op.NEQ, 
Account.ACCOUNT_TYPE_PROJECT);
-        } else if (listProjectResourcesCriteria == 
ListProjectResourcesCriteria.ListProjectResourcesOnly){
+        } else if (listProjectResourcesCriteria == 
ListProjectResourcesCriteria.ListProjectResourcesOnly) {
             sc.addAnd("accountType", SearchCriteria.Op.EQ, 
Account.ACCOUNT_TYPE_PROJECT);
         }
 
         // add criteria for domain path in case of domain admin
-         if ((templateFilter == TemplateFilter.self || templateFilter == 
TemplateFilter.selfexecutable) &&
-                 (caller.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN || 
caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN)) {
-             sc.addAnd("domainPath", SearchCriteria.Op.LIKE, domain.getPath() 
+ "%");
-         }
-
-         List<Long> relatedDomainIds = new ArrayList<Long>();
-         List<Long> permittedAccountIds = new ArrayList<Long>();
-            if (!permittedAccounts.isEmpty()) {
-                for (Account account : permittedAccounts) {
-                    permittedAccountIds.add(account.getId());
-                    DomainVO accountDomain = 
_domainDao.findById(account.getDomainId());
+        if ((templateFilter == TemplateFilter.self || templateFilter == 
TemplateFilter.selfexecutable)
+                && (caller.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN || 
caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN)) {
+            sc.addAnd("domainPath", SearchCriteria.Op.LIKE, domain.getPath() + 
"%");
+        }
 
-                    // get all parent domain ID's all the way till root domain
-                    DomainVO domainTreeNode = accountDomain;
+        List<Long> relatedDomainIds = new ArrayList<Long>();
+        List<Long> permittedAccountIds = new ArrayList<Long>();
+        if (!permittedAccounts.isEmpty()) {
+            for (Account account : permittedAccounts) {
+                permittedAccountIds.add(account.getId());
+                DomainVO accountDomain = 
_domainDao.findById(account.getDomainId());
+
+                // get all parent domain ID's all the way till root domain
+                DomainVO domainTreeNode = accountDomain;
+                relatedDomainIds.add(domainTreeNode.getId());
+                while (domainTreeNode.getParent() != null) {
+                    domainTreeNode = 
_domainDao.findById(domainTreeNode.getParent());
                     relatedDomainIds.add(domainTreeNode.getId());
-                    while (domainTreeNode.getParent() != null ){
-                        domainTreeNode = 
_domainDao.findById(domainTreeNode.getParent());
-                        relatedDomainIds.add(domainTreeNode.getId());
-                    }
+                }
 
-                    // get all child domain ID's
-                    if (_accountMgr.isAdmin(account.getType()) ) {
-                        List<DomainVO> allChildDomains = 
_domainDao.findAllChildren(accountDomain.getPath(), accountDomain.getId());
-                        for (DomainVO childDomain : allChildDomains) {
-                            relatedDomainIds.add(childDomain.getId());
-                        }
+                // get all child domain ID's
+                if (_accountMgr.isAdmin(account.getType())) {
+                    List<DomainVO> allChildDomains = 
_domainDao.findAllChildren(accountDomain.getPath(), accountDomain.getId());
+                    for (DomainVO childDomain : allChildDomains) {
+                        relatedDomainIds.add(childDomain.getId());
                     }
                 }
             }
+        }
 
-            // add hypervisor criteria
-            if ( hypers != null && !hypers.isEmpty()){
+        if (!isIso) {
+            // add hypervisor criteria for template case
+            if (hypers != null && !hypers.isEmpty()) {
                 String[] relatedHypers = new String[hypers.size()];
-                for (int i = 0; i < hypers.size(); i++){
+                for (int i = 0; i < hypers.size(); i++) {
                     relatedHypers[i] = hypers.get(i).toString();
                 }
                 sc.addAnd("hypervisorType", SearchCriteria.Op.IN, 
relatedHypers);
             }
+        }
 
-            // control different template filters
-            if (templateFilter == TemplateFilter.featured || templateFilter == 
TemplateFilter.community) {
-                sc.addAnd("publicTemplate", SearchCriteria.Op.EQ, true);
-                if ( templateFilter == TemplateFilter.featured){
+        // control different template filters
+        if (templateFilter == TemplateFilter.featured || templateFilter == 
TemplateFilter.community) {
+            sc.addAnd("publicTemplate", SearchCriteria.Op.EQ, true);
+            if (templateFilter == TemplateFilter.featured) {
                 sc.addAnd("featured", SearchCriteria.Op.EQ, true);
-                }
-                else{
-                    sc.addAnd("featured", SearchCriteria.Op.EQ, false);
-                }
-                if (!permittedAccounts.isEmpty()) {
-                    SearchCriteria<TemplateJoinVO> scc = 
_templateJoinDao.createSearchCriteria();
-                    scc.addOr("domainId", SearchCriteria.Op.IN, 
relatedDomainIds.toArray());
-                    scc.addOr("domainId", SearchCriteria.Op.NULL);
-                    sc.addAnd("domainId", SearchCriteria.Op.SC, scc);
-
-                    if (!_accountMgr.isAdmin(caller.getType())){
-                        // for non-root users, we should only show featured 
and community templates that they can see
-                        sc.addAnd("accountId", SearchCriteria.Op.IN, 
permittedAccountIds.toArray());
-                    }
-                }
-            } else if (templateFilter == TemplateFilter.self || templateFilter 
== TemplateFilter.selfexecutable ) {
-                if ( !permittedAccounts.isEmpty()){
+            } else {
+                sc.addAnd("featured", SearchCriteria.Op.EQ, false);
+            }
+            if (!permittedAccounts.isEmpty()) {
+                SearchCriteria<TemplateJoinVO> scc = 
_templateJoinDao.createSearchCriteria();
+                scc.addOr("domainId", SearchCriteria.Op.IN, 
relatedDomainIds.toArray());
+                scc.addOr("domainId", SearchCriteria.Op.NULL);
+                sc.addAnd("domainId", SearchCriteria.Op.SC, scc);
+
+                if (!_accountMgr.isAdmin(caller.getType())) {
+                    // for non-root users, we should only show featured and
+                    // community templates that they can see
                     sc.addAnd("accountId", SearchCriteria.Op.IN, 
permittedAccountIds.toArray());
                 }
-            } else if (templateFilter == TemplateFilter.sharedexecutable || 
templateFilter == TemplateFilter.shared ) {
-                SearchCriteria<TemplateJoinVO> scc = 
_templateJoinDao.createSearchCriteria();
+            }
+        } else if (templateFilter == TemplateFilter.self || templateFilter == 
TemplateFilter.selfexecutable) {
+            if (!permittedAccounts.isEmpty()) {
+                sc.addAnd("accountId", SearchCriteria.Op.IN, 
permittedAccountIds.toArray());
+            }
+        } else if (templateFilter == TemplateFilter.sharedexecutable || 
templateFilter == TemplateFilter.shared) {
+            SearchCriteria<TemplateJoinVO> scc = 
_templateJoinDao.createSearchCriteria();
+            scc.addOr("accountId", SearchCriteria.Op.IN, 
permittedAccountIds.toArray());
+            scc.addOr("sharedAccountId", SearchCriteria.Op.IN, 
permittedAccountIds.toArray());
+            sc.addAnd("accountId", SearchCriteria.Op.SC, scc);
+        } else if (templateFilter == TemplateFilter.executable) {
+            SearchCriteria<TemplateJoinVO> scc = 
_templateJoinDao.createSearchCriteria();
+            scc.addOr("publicTemplate", SearchCriteria.Op.EQ, true);
+            if (!permittedAccounts.isEmpty()) {
                 scc.addOr("accountId", SearchCriteria.Op.IN, 
permittedAccountIds.toArray());
-                scc.addOr("sharedAccountId", SearchCriteria.Op.IN, 
permittedAccountIds.toArray());
-                sc.addAnd("accountId", SearchCriteria.Op.SC, scc);
-            } else if (templateFilter == TemplateFilter.executable ) {
-                SearchCriteria<TemplateJoinVO> scc = 
_templateJoinDao.createSearchCriteria();
-                scc.addOr("publicTemplate", SearchCriteria.Op.EQ, true);
-                if ( !permittedAccounts.isEmpty()){
-                    scc.addOr("accountId", SearchCriteria.Op.IN, 
permittedAccountIds.toArray());
-                }
-                sc.addAnd("publicTemplate", SearchCriteria.Op.SC, scc);
             }
+            sc.addAnd("publicTemplate", SearchCriteria.Op.SC, scc);
+        }
 
-            // add tags criteria
-            if (tags != null && !tags.isEmpty()) {
-                SearchCriteria<TemplateJoinVO> scc = 
_templateJoinDao.createSearchCriteria();
-                int count = 0;
-                for (String key : tags.keySet()) {
-                    SearchCriteria<TemplateJoinVO> scTag = 
_templateJoinDao.createSearchCriteria();
-                    scTag.addAnd("tagKey", SearchCriteria.Op.EQ, key);
-                    scTag.addAnd("tagValue", SearchCriteria.Op.EQ, 
tags.get(key));
-                    if ( isIso){
-                        scTag.addAnd("tagResourceType", SearchCriteria.Op.EQ, 
TaggedResourceType.ISO);
-                    } else {
-                        scTag.addAnd("tagResourceType", SearchCriteria.Op.EQ, 
TaggedResourceType.Template);
-                    }
-                    scc.addOr("tagKey", SearchCriteria.Op.SC, scTag);
-                    count++;
+        // add tags criteria
+        if (tags != null && !tags.isEmpty()) {
+            SearchCriteria<TemplateJoinVO> scc = 
_templateJoinDao.createSearchCriteria();
+            int count = 0;
+            for (String key : tags.keySet()) {
+                SearchCriteria<TemplateJoinVO> scTag = 
_templateJoinDao.createSearchCriteria();
+                scTag.addAnd("tagKey", SearchCriteria.Op.EQ, key);
+                scTag.addAnd("tagValue", SearchCriteria.Op.EQ, tags.get(key));
+                if (isIso) {
+                    scTag.addAnd("tagResourceType", SearchCriteria.Op.EQ, 
TaggedResourceType.ISO);
+                } else {
+                    scTag.addAnd("tagResourceType", SearchCriteria.Op.EQ, 
TaggedResourceType.Template);
                 }
-                sc.addAnd("tagKey", SearchCriteria.Op.SC, scc);
+                scc.addOr("tagKey", SearchCriteria.Op.SC, scTag);
+                count++;
             }
+            sc.addAnd("tagKey", SearchCriteria.Op.SC, scc);
+        }
 
-            // other criteria
-            if (templateId != null){
-                sc.addAnd("id", SearchCriteria.Op.EQ, templateId);
-            }
-            else if (keyword != null) {
-                sc.addAnd("name", SearchCriteria.Op.LIKE, "%" + keyword + "%");
-            } else if (name != null) {
-                sc.addAnd("name", SearchCriteria.Op.EQ, name);
-            }
+        // other criteria
+        if (templateId != null) {
+            sc.addAnd("id", SearchCriteria.Op.EQ, templateId);
+        } else if (keyword != null) {
+            sc.addAnd("name", SearchCriteria.Op.LIKE, "%" + keyword + "%");
+        } else if (name != null) {
+            sc.addAnd("name", SearchCriteria.Op.EQ, name);
+        }
 
-            if (isIso) {
-                sc.addAnd("format", SearchCriteria.Op.EQ, "ISO");
+        if (isIso) {
+            sc.addAnd("format", SearchCriteria.Op.EQ, "ISO");
 
-            } else {
-                sc.addAnd("format", SearchCriteria.Op.NEQ, "ISO");
-            }
+        } else {
+            sc.addAnd("format", SearchCriteria.Op.NEQ, "ISO");
+        }
 
-            if (!hyperType.equals(HypervisorType.None)) {
-                sc.addAnd("hypervisorType", SearchCriteria.Op.EQ, hyperType);
-            }
+        if (!hyperType.equals(HypervisorType.None)) {
+            sc.addAnd("hypervisorType", SearchCriteria.Op.EQ, hyperType);
+        }
 
-            if (bootable != null) {
-                sc.addAnd("bootable", SearchCriteria.Op.EQ, bootable);
-            }
+        if (bootable != null) {
+            sc.addAnd("bootable", SearchCriteria.Op.EQ, bootable);
+        }
 
-            if (onlyReady){
-                sc.addAnd("downloadState", SearchCriteria.Op.EQ, 
Status.DOWNLOADED);
-                sc.addAnd("destroyed",  SearchCriteria.Op.EQ, false);
-            }
+        if (onlyReady) {
+            sc.addAnd("downloadState", SearchCriteria.Op.EQ, 
Status.DOWNLOADED);
+            sc.addAnd("destroyed", SearchCriteria.Op.EQ, false);
+        }
 
-            if (zoneId != null){
-                sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId);
-            }
+        if (zoneId != null) {
+            sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId);
+        }
 
-            if (!showDomr){
-                // excluding system template
-                sc.addAnd("templateType", SearchCriteria.Op.NEQ, 
Storage.TemplateType.SYSTEM);
-            }
+        if (!showDomr) {
+            // excluding system template
+            sc.addAnd("templateType", SearchCriteria.Op.NEQ, 
Storage.TemplateType.SYSTEM);
+        }
 
-            // don't return removed template, this should not be needed since 
we changed annotation for removed field in TemplateJoinVO.
-            //sc.addAnd("removed", SearchCriteria.Op.NULL);
+        // don't return removed template, this should not be needed since we
+        // changed annotation for removed field in TemplateJoinVO.
+        // sc.addAnd("removed", SearchCriteria.Op.NULL);
 
-            // search unique templates and find details by Ids
-            Pair<List<TemplateJoinVO>, Integer> uniqueTmplPair = 
_templateJoinDao.searchAndCount(sc, searchFilter);
-            Integer count = uniqueTmplPair.second();
-            if (count.intValue() == 0) {
-                // empty result
-                return uniqueTmplPair;
-            }
-            List<TemplateJoinVO> uniqueTmpls = uniqueTmplPair.first();
-            Long[] vrIds = new Long[uniqueTmpls.size()];
-            int i = 0;
-            for (TemplateJoinVO v : uniqueTmpls) {
-                vrIds[i++] = v.getId();
-            }
-            List<TemplateJoinVO> vrs = _templateJoinDao.searchByIds(vrIds);
-            return new Pair<List<TemplateJoinVO>, Integer>(vrs, count);
+        // search unique templates and find details by Ids
+        Pair<List<TemplateJoinVO>, Integer> uniqueTmplPair = 
_templateJoinDao.searchAndCount(sc, searchFilter);
+        Integer count = uniqueTmplPair.second();
+        if (count.intValue() == 0) {
+            // empty result
+            return uniqueTmplPair;
+        }
+        List<TemplateJoinVO> uniqueTmpls = uniqueTmplPair.first();
+        Long[] vrIds = new Long[uniqueTmpls.size()];
+        int i = 0;
+        for (TemplateJoinVO v : uniqueTmpls) {
+            vrIds[i++] = v.getId();
+        }
+        List<TemplateJoinVO> vrs = _templateJoinDao.searchByIds(vrIds);
+        return new Pair<List<TemplateJoinVO>, Integer>(vrs, count);
 
-            //TODO: revisit the special logic for iso search in 
VMTemplateDaoImpl.searchForTemplates and understand why we need to
-            //specially handle ISO. The original logic is very twisted and no 
idea about what the code was doing.
+        // TODO: revisit the special logic for iso search in
+        // VMTemplateDaoImpl.searchForTemplates and understand why we need to
+        // specially handle ISO. The original logic is very twisted and no idea
+        // about what the code was doing.
 
     }
 
@@ -2776,7 +2781,7 @@ public class QueryManagerImpl extends ManagerBase 
implements QueryService {
                 cmd.getStartIndex(), cmd.getZoneId(), hypervisorType, true, 
cmd.listInReadyState(), permittedAccounts, caller,
                 listProjectResourcesCriteria, tags);
     }
-    
+
     public ListResponse<AffinityGroupResponse> listAffinityGroups(Long 
affinityGroupId, String affinityGroupName,
             String affinityGroupType, Long vmId, Long startIndex, Long 
pageSize) {
         Pair<List<AffinityGroupJoinVO>, Integer> result = 
listAffinityGroupsInternal(affinityGroupId,

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/03c25506/server/src/com/cloud/template/TemplateAdapterBase.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/template/TemplateAdapterBase.java 
b/server/src/com/cloud/template/TemplateAdapterBase.java
index aeea8b9..fd8b60c 100755
--- a/server/src/com/cloud/template/TemplateAdapterBase.java
+++ b/server/src/com/cloud/template/TemplateAdapterBase.java
@@ -87,7 +87,7 @@ public abstract class TemplateAdapterBase extends AdapterBase 
implements Templat
        protected @Inject DataStoreManager storeMgr;
        @Inject TemplateManager templateMgr;
        @Inject ConfigurationServer _configServer;
-       
+
        @Override
        public boolean stop() {
                return true;
@@ -239,14 +239,9 @@ public abstract class TemplateAdapterBase extends 
AdapterBase implements Templat
            Account owner = _accountMgr.getAccount(cmd.getEntityOwnerId());
            _accountMgr.checkAccess(caller, null, true, owner);
 
-           HypervisorType hyperType = HypervisorType.None;
-           if ( cmd.getOsTypeId() != null ){
-               hyperType = 
_osHyperDao.findHypervisorTypeByGuestOsId(cmd.getOsTypeId());
-           }
-
                return prepare(true, UserContext.current().getCallerUserId(), 
cmd.getIsoName(), cmd.getDisplayText(), 64, false,
                                        true, cmd.getUrl(), cmd.isPublic(), 
cmd.isFeatured(), cmd.isExtractable(), ImageFormat.ISO.toString(), 
cmd.getOsTypeId(),
-                                       cmd.getZoneId(), hyperType, 
cmd.getChecksum(), cmd.isBootable(), null, owner, null, false);
+                                       cmd.getZoneId(), HypervisorType.None, 
cmd.getChecksum(), cmd.isBootable(), null, owner, null, false);
        }
 
        protected VMTemplateVO persistTemplate(TemplateProfile profile) {

Reply via email to