Fixed with commit 16ddc3414ae0269ecb8903f670496e45f68d6ef6

On 13-Mar-2014, at 11:34 PM, David Nalley <da...@gnsa.us> wrote:

> Better yet, feel free to submit a patch that fixes it in addition to
> the Jira :)
> 
> --David
> 
> On Thu, Mar 13, 2014 at 2:00 PM, Alena Prokharchyk
> <alena.prokharc...@citrix.com> wrote:
>> Konstantina, feel free to raise the Jira ticket for it.
>> 
>> Thanks,
>> Alena.
>> 
>> On 3/13/14, 8:46 AM, "Konstantina Chremmou"
>> <konstantina.chrem...@citrix.com> wrote:
>> 
>>> Hi,
>>> 
>>> This commit adds a new parameter to ListVMsCmd, but no 'since' has been
>>> specified in the parameter annotation. Please rectify.
>>> 
>>> Thanks,
>>> Tina
>>> 
>>> --------------------------------------------------------------------------
>>> -------------
>>> Guidelines for writing/modifying CS APIs:
>>> 
>>> https://cwiki.apache.org/confluence/display/CLOUDSTACK/CloudStack+API+Codi
>>> ng+Guidelines
>>> --------------------------------------------------------------------------
>>> -------------
>>> 
>>>> -----Original Message-----
>>>> From: muralire...@apache.org [mailto:muralire...@apache.org]
>>>> Sent: 13 March 2014 1:53 PM
>>>> To: comm...@cloudstack.apache.org
>>>> Subject: [20/31] git commit: updated refs/heads/distributedrouter to
>>>> a8d43ba
>>>> 
>>>> CLOUDSTACK-6052: List VM enhancement to support querying with multiple
>>>> VM IDs New parameter 'ids' added to listVirtualMachine API. The syntax
>>>> looks like
>>>> http://localhost:8096/api?command=listVirtualMachines&listAll=true&ids=e
>>>> ddac053-9b12-4d2e-acb7-233de2e98112,009966fc-4d7b-4f84-8609-
>>>> 254979ba0134
>>>> The new parameter will be mutually exclusive with the existing 'id'
>>>> parameter.
>>>> 
>>>> 
>>>> Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
>>>> Commit: http://git-wip-
>>>> us.apache.org/repos/asf/cloudstack/commit/5779292e
>>>> Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/5779292e
>>>> Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/5779292e
>>>> 
>>>> Branch: refs/heads/distributedrouter
>>>> Commit: 5779292e93fe52a7fb5ec0abffe1e3f6b9c10121
>>>> Parents: bc4c805
>>>> Author: Koushik Das <kous...@apache.org>
>>>> Authored: Tue Mar 11 11:49:13 2014 +0530
>>>> Committer: Koushik Das <kous...@apache.org>
>>>> Committed: Thu Mar 13 17:05:35 2014 +0530
>>>> 
>>>> ----------------------------------------------------------------------
>>>> .../api/command/user/vm/ListVMsCmd.java         |  8 +++
>>>> .../com/cloud/api/query/QueryManagerImpl.java   | 20 ++++++--
>>>> test/integration/smoke/test_deploy_vm.py        | 52
>>>> +++++++++++++++++++-
>>>> 3 files changed, 76 insertions(+), 4 deletions(-)
>>>> ----------------------------------------------------------------------
>>>> 
>>>> 
>>>> http://git-wip-
>>>> us.apache.org/repos/asf/cloudstack/blob/5779292e/api/src/org/apache/clo
>>>> udstack/api/command/user/vm/ListVMsCmd.java
>>>> ----------------------------------------------------------------------
>>>> diff --git
>>>> a/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java
>>>> b/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java
>>>> index 1a564f6..1ba2b23 100644
>>>> ---
>>>> a/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java
>>>> +++
>>>> b/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java
>>>> @@ -64,6 +64,10 @@ public class ListVMsCmd extends
>>>> BaseListTaggedResourcesCmd {
>>>>     @Parameter(name = ApiConstants.ID, type = CommandType.UUID,
>>>> entityType = UserVmResponse.class, description = "the ID of the virtual
>>>> machine")
>>>>     private Long id;
>>>> 
>>>> +    @Parameter(name=ApiConstants.IDS, type=CommandType.LIST,
>>>> collectionType=CommandType.UUID, entityType=UserVmResponse.class,
>>>> +               description="the IDs of the virtual machines, mutually
>>>> exclusive with
>>>> id")
>>>> +    private List<Long> ids;
>>>> +
>>>>     @Parameter(name = ApiConstants.NAME, type = CommandType.STRING,
>>>> description = "name of the virtual machine")
>>>>     private String name;
>>>> 
>>>> @@ -135,6 +139,10 @@ public class ListVMsCmd extends
>>>> BaseListTaggedResourcesCmd {
>>>>         return id;
>>>>     }
>>>> 
>>>> +    public List<Long> getIds() {
>>>> +        return ids;
>>>> +    }
>>>> +
>>>>     public String getName() {
>>>>         return name;
>>>>     }
>>>> 
>>>> http://git-wip-
>>>> us.apache.org/repos/asf/cloudstack/blob/5779292e/server/src/com/cloud/a
>>>> pi/query/QueryManagerImpl.java
>>>> ----------------------------------------------------------------------
>>>> diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java
>>>> b/server/src/com/cloud/api/query/QueryManagerImpl.java
>>>> index 4200799..47d2aec 100644
>>>> --- a/server/src/com/cloud/api/query/QueryManagerImpl.java
>>>> +++ b/server/src/com/cloud/api/query/QueryManagerImpl.java
>>>> @@ -728,11 +728,22 @@ public class QueryManagerImpl extends
>>>> ManagerBase implements QueryService {
>>>>         Boolean isRecursive = domainIdRecursiveListProject.second();
>>>>         ListProjectResourcesCriteria listProjectResourcesCriteria =
>>>> domainIdRecursiveListProject.third();
>>>> 
>>>> +        List<Long> ids = null;
>>>> +        if (cmd.getId() != null) {
>>>> +            if (cmd.getIds() != null && !cmd.getIds().isEmpty()) {
>>>> +                throw new InvalidParameterValueException("Specify
>>>> either id or
>>>> ids but not both parameters");
>>>> +            }
>>>> +            ids = new ArrayList<Long>();
>>>> +            ids.add(cmd.getId());
>>>> +        } else {
>>>> +            ids = cmd.getIds();
>>>> +        }
>>>> +
>>>>         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.ID, ids);
>>>>         c.addCriteria(Criteria.NAME, cmd.getName());
>>>>         c.addCriteria(Criteria.STATE, cmd.getState());
>>>>         c.addCriteria(Criteria.DATACENTERID, cmd.getZoneId()); @@
>>>> -805,7
>>>> +816,7 @@ public class QueryManagerImpl extends ManagerBase
>>>> implements QueryService {
>>>>         Object display = c.getCriteria(Criteria.DISPLAY);
>>>> 
>>>>         sb.and("displayName", sb.entity().getDisplayName(),
>>>> SearchCriteria.Op.LIKE);
>>>> -        sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
>>>> +        sb.and("idIN", sb.entity().getId(), SearchCriteria.Op.IN);
>>>>         sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE);
>>>>         sb.and("stateEQ", sb.entity().getState(),
>>>> SearchCriteria.Op.EQ);
>>>>         sb.and("stateNEQ", sb.entity().getState(),
>>>> SearchCriteria.Op.NEQ); @@
>>>> -889,7 +900,10 @@ public class QueryManagerImpl extends ManagerBase
>>>> implements QueryService {
>>>>         }
>>>> 
>>>>         if (id != null) {
>>>> -            sc.setParameters("id", id);
>>>> +            List<?> idList = (id instanceof List<?> ? (List<?>)id :
>>>> null);
>>>> +            if (idList != null && !idList.isEmpty()) {
>>>> +                sc.setParameters("idIN", idList.toArray());
>>>> +            }
>>>>         }
>>>> 
>>>>         if (templateId != null) {
>>>> 
>>>> http://git-wip-
>>>> us.apache.org/repos/asf/cloudstack/blob/5779292e/test/integration/smoke
>>>> /test_deploy_vm.py
>>>> ----------------------------------------------------------------------
>>>> diff --git a/test/integration/smoke/test_deploy_vm.py
>>>> b/test/integration/smoke/test_deploy_vm.py
>>>> index 425aeb7..fcde229 100644
>>>> --- a/test/integration/smoke/test_deploy_vm.py
>>>> +++ b/test/integration/smoke/test_deploy_vm.py
>>>> @@ -51,6 +51,11 @@ class TestData(object):
>>>>                 "name" : "testvm",
>>>>                 "displayname" : "Test VM",
>>>>             },
>>>> +            #data reqd for virtual machine creation
>>>> +            "virtual_machine2" : {
>>>> +                "name" : "testvm2",
>>>> +                "displayname" : "Test VM2",
>>>> +            },
>>>>             #small service offering
>>>>             "service_offering": {
>>>>                 "small": {
>>>> @@ -149,8 +154,53 @@ class TestDeployVM(cloudstackTestCase):
>>>>             msg="VM is not in Running state"
>>>>         )
>>>> 
>>>> +    @attr(tags = ['advanced', 'simulator', 'basic', 'sg'])
>>>> +    def test_deploy_vm_multiple(self):
>>>> +        """Test Multiple Deploy Virtual Machine
>>>> +
>>>> +        # Validate the following:
>>>> +        # 1. deploy 2 virtual machines
>>>> +        # 2. listVirtualMachines using 'ids' parameter returns accurate
>>>> information
>>>> +        """
>>>> +        self.virtual_machine = VirtualMachine.create(
>>>> +            self.apiclient,
>>>> +            self.testdata["virtual_machine"],
>>>> +            accountid=self.account.name,
>>>> +            zoneid=self.zone.id,
>>>> +            domainid=self.account.domainid,
>>>> +            serviceofferingid=self.service_offering.id,
>>>> +            templateid=self.template.id
>>>> +        )
>>>> +
>>>> +        self.virtual_machine2 = VirtualMachine.create(
>>>> +            self.apiclient,
>>>> +            self.testdata["virtual_machine2"],
>>>> +            accountid=self.account.name,
>>>> +            zoneid=self.zone.id,
>>>> +            domainid=self.account.domainid,
>>>> +            serviceofferingid=self.service_offering.id,
>>>> +            templateid=self.template.id
>>>> +        )
>>>> +
>>>> +        list_vms = VirtualMachine.list(self.apiclient,
>>>> ids=[self.virtual_machine.id, self.virtual_machine2.id], listAll=True)
>>>> +        self.debug(
>>>> +            "Verify listVirtualMachines response for virtual machines:
>>>> %s, %s" %
>>>> (self.virtual_machine.id, self.virtual_machine2.id)
>>>> +        )
>>>> +
>>>> +        self.assertEqual(
>>>> +            isinstance(list_vms, list),
>>>> +            True,
>>>> +            "List VM response was not a valid list"
>>>> +        )
>>>> +        self.assertEqual(
>>>> +            len(list_vms),
>>>> +            2,
>>>> +            "List VM response was empty, expected 2 VMs"
>>>> +        )
>>>> +
>>>>     def tearDown(self):
>>>>         try:
>>>>             cleanup_resources(self.apiclient, self.cleanup)
>>>>         except Exception as e:
>>>> -            self.debug("Warning! Exception in tearDown: %s" % e)
>>>> \ No newline at end of file
>>>> +            self.debug("Warning! Exception in tearDown: %s" % e)
>>>> +
>>> 
>> 

Reply via email to