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