The API has the capability to perform searches, using the 'search' query parameter: GET /ovirt-engine/api/vms?search=name%3Dmyvm It also has the capability to filter results according to the permissions of the user, using the 'filter' parameter (or the 'Filter' http header): GET /ovirt-engine/api/vms?filter=true The can be used together as well: GET /ovirt-engine/api/vms?search=name%3Dmyvm&filter=true When doing this, using them together, the implementation performs two separate queries, one for searching and another one for filtering, and then calculates the intersection of the results. But this calculation is computed comparing the objects using the Java Object.equals method. This means that minor differences in the results, like an attribute that isn't populated, will result in excluding that particular result from the intersection. The net result perceived by the user of the API is that the intersection is usually empty. To avoid that we need to calculate the intersection using only the identifiers of the objects.
4.0.6 has been the last oVirt 4.0 release, please re-target this bug.
Verified on ovirt-engine-4.1.1-0.0.master. ➜ ~ curl -s -k -X GET -u admin@internal:123456 -H "Accept: application/json" https://engine/ovirt-engine/api/vms | grep 123 "name" : "123", ➜ ~ curl -s -k -X GET -u admin@internal:123456 -H "Accept: application/json" https://engine/ovirt-engine/api/vms\?search\=name\=123 | grep 123 "name" : "123", ➜ ~ curl -s -k -X GET -u admin@internal:123456 -H "Accept: application/json" https://engine/ovirt-engine/api/vms\?filter\=true | grep 123 "name" : "123", ➜ ~ curl -s -k -X GET -u admin@internal:123456 -H "Accept: application/json" https://engine/ovirt-engine/api/vms\?search\=name\=123\&filter\=true | grep 123 "name" : "123",