Merge "Spec: Add ‘protected’ filter to image-list call"
This commit is contained in:
commit
b7e47b8232
186
specs/pike/approved/glance/add-protected-filter.rst
Normal file
186
specs/pike/approved/glance/add-protected-filter.rst
Normal file
@ -0,0 +1,186 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
=========================================
|
||||||
|
Add 'protected' filter to image-list call
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
https://blueprints.launchpad.net/glance/+spec/add-protected-filter
|
||||||
|
|
||||||
|
Images contain a boolean 'protected' field. Filtering on this field in the
|
||||||
|
image-list request is not currently supported. Operators and users who make
|
||||||
|
use of the 'protected' field to prevent accidental deletion of images, however,
|
||||||
|
would find such filtering useful. Not supporting filtering on this field is
|
||||||
|
counterintuitive as Glance supports filtering on all other image fields.
|
||||||
|
|
||||||
|
|
||||||
|
Problem description
|
||||||
|
===================
|
||||||
|
|
||||||
|
Use cases:
|
||||||
|
|
||||||
|
* An End User wants to list protected images that are accessible to that end
|
||||||
|
user.
|
||||||
|
|
||||||
|
* An End User wants to list non-protected images that are accessible to that
|
||||||
|
end user.
|
||||||
|
|
||||||
|
|
||||||
|
Proposed change
|
||||||
|
===============
|
||||||
|
|
||||||
|
Add code so that when 'protected=<value>' is included in a query string on the
|
||||||
|
image-list call, the value is converted to a boolean, making it suitable
|
||||||
|
for database filtering (the 'protected' field is a boolean in the database
|
||||||
|
backend).
|
||||||
|
|
||||||
|
For a user experience consistent with the image-create and image-update calls,
|
||||||
|
the only accepted values for this parameter will be 'true' or 'false' in that
|
||||||
|
exact case combination. Any other value for this parameter should return a 400
|
||||||
|
to indicate a bad request.
|
||||||
|
|
||||||
|
To summarize:
|
||||||
|
|
||||||
|
1. Introduce a new query parameter to the ``GET v2/images`` call, namely,
|
||||||
|
``protected``.
|
||||||
|
|
||||||
|
2. The parameter will act as a filter on the 'protected' field of an Image.
|
||||||
|
|
||||||
|
3. The set of values for the parameter will be strict, that is, the call will
|
||||||
|
accept only those strings that satisfy the JSON boolean data type (in other
|
||||||
|
words, only 'true' or 'false' in that exact case combination).
|
||||||
|
|
||||||
|
4. Unrecognized values will result in a 400 (Bad Request) response with an
|
||||||
|
appropriate message.
|
||||||
|
|
||||||
|
5. When the ``protected`` query parameter is not present, no filtering will be
|
||||||
|
done on the 'protected' field of Images. (In other words, there's no
|
||||||
|
default value.)
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
1. Do nothing. This isn't really an option, because even though 'protected' is
|
||||||
|
not currently supported as a filter, image-list calls passing a value for
|
||||||
|
'protected' in the query string are accepted and do have an effect (the
|
||||||
|
API behaves as if ``protected=False`` has been specified). This behavior
|
||||||
|
appears weird to end users.
|
||||||
|
|
||||||
|
2. Implement the filter, but accept a liberal set of values, recognizing, for
|
||||||
|
example, 'true' or 'false' in any case combination; 'yes' or 'no' in any
|
||||||
|
case combination; and 1 or 0. This can be accomplished by using the oslo
|
||||||
|
string utilities, which contains a function ``bool_from_string`` that
|
||||||
|
converts strings to an appropriate boolean value [APF-1]_. Using the oslo
|
||||||
|
library has an additional bonus in that the usage will be consistent across
|
||||||
|
other OpenStack projects.
|
||||||
|
|
||||||
|
The downside to this alternative is that it is inconsistent with the
|
||||||
|
image-create and image-update calls in the Images v2 API. The latter calls
|
||||||
|
are governed by the Image json-schema, which clearly specifies a JSON
|
||||||
|
boolean type as the value of the ``protected`` field, and hence only 'true'
|
||||||
|
or 'false' in that exact case combination is what these calls accept. Thus,
|
||||||
|
liberal acceptance of commonly regarded boolean values in the query string
|
||||||
|
may cause API users to be surprised when these liberal values don't work for
|
||||||
|
image-create or image-update, leading to user dissatisfaction.
|
||||||
|
|
||||||
|
3. Implement the filter, but be extremely lax, that is, any value that isn't
|
||||||
|
mapped to the boolean value True by the oslo ``bool_from_string`` function
|
||||||
|
would be considered False. This actually isn't very user friendly. For
|
||||||
|
example, a French language speaker applying the query filter 'protected=oui'
|
||||||
|
will receive the complement of what was requested.
|
||||||
|
|
||||||
|
Data model impact
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
REST API impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
This is a very minor modification to the ``GET v2/images`` call. The
|
||||||
|
only changes are:
|
||||||
|
|
||||||
|
* Parameters which can be passed via the URL now include ``protected``.
|
||||||
|
|
||||||
|
Security impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Notifications impact
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Other end user impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
The only impact on python-glanceclient is that the command
|
||||||
|
|
||||||
|
``glance image-list --property protected=true``
|
||||||
|
|
||||||
|
will now work correctly.
|
||||||
|
|
||||||
|
Performance Impact
|
||||||
|
------------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Other deployer impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Developer impact
|
||||||
|
----------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Primary assignee:
|
||||||
|
|
||||||
|
- fengzhr
|
||||||
|
|
||||||
|
Other contributors:
|
||||||
|
|
||||||
|
- rosmaita
|
||||||
|
- dharinic
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
* Implement the change roughly along the lines of
|
||||||
|
https://review.openstack.org/#/c/449108/
|
||||||
|
|
||||||
|
* Update the api-ref
|
||||||
|
|
||||||
|
* Write a release note
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
Functional tests consistent with the current image-list filtering tests.
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
Small addition to the v2 image-list documentation in the api-ref.
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
.. [APF-1] http://git.openstack.org/cgit/openstack/oslo.utils/tree/oslo_utils/strutils.py
|
Loading…
Reference in New Issue
Block a user