Repropose new location APIs spec
This commit re-proposes the new location APIs spec based on the discussion in the 2023.1 (Antelope) PTG[1]. [1] https://wiki.openstack.org/wiki/CinderAntelopePTGSummary#Cross_project_with_glance Implements: blueprint new-location-apis Change-Id: Id9a3b38136d2110b643056bc289998d9e0dfa718
This commit is contained in:
parent
2d0d8c2b7c
commit
67e61b00c1
377
specs/2023.1/approved/glance/new-location-info-apis.rst
Normal file
377
specs/2023.1/approved/glance/new-location-info-apis.rst
Normal file
@ -0,0 +1,377 @@
|
||||
..
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
=================
|
||||
New Location APIs
|
||||
=================
|
||||
|
||||
https://blueprints.launchpad.net/glance/+spec/new-location-apis
|
||||
|
||||
Problem description
|
||||
===================
|
||||
|
||||
Currently we have two security vulnerabilities with
|
||||
``show_multiple_locations`` config option, OSSN-0065 [1]_ and OSSN-0090 [2]_.
|
||||
If we enable ``show_multiple_locations`` and the policies for add/update
|
||||
(set_image_location), get (get_image_location) and remove
|
||||
(delete_image_location) locations are set for non-admins then non-admin users
|
||||
can modify location data to corrupt an image that they own. Note that the
|
||||
policies for add, get and remove locations are set for non-admins by default
|
||||
else a non-admin user cannot associate data with an image record, or retrieve
|
||||
image data, or delete image data.
|
||||
|
||||
When show_multiple_locations is False, users cannot modify image
|
||||
locations via the image-update API call, even if they have the
|
||||
``{get,set,delete}_image_location`` permissions. However, there are some
|
||||
popular use cases where other services can bypass Glance and store or access
|
||||
image data directly in the backend by writing or reading image locations,
|
||||
using the image owner's credentials, and this is why operators want to set
|
||||
show_multiple_locations to True. What operators want to do, however, is to
|
||||
enable optimized image data access; exposing image locations to non-admin
|
||||
users is a side-effect, not the goal. We currently recommend that operators
|
||||
who want to use optimized data access use a specialized Glance instance for
|
||||
services, and only expose glance-api to end users with show_multiple_locations
|
||||
set False. This is inconvinient for certain users.
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
|
||||
There will be 3 phases in which the work will be done as follows:
|
||||
|
||||
1. Introduce 2 new API calls that allow operations on image locations which
|
||||
are described in detail in the `REST API impact`_ section.
|
||||
These calls will replace the image-update mechanism for consumers
|
||||
like cinder and nova.
|
||||
|
||||
2. Modify the consumer (cinder/nova) code to use the new location APIs.
|
||||
Also modify HTTP store to use new location APIs.
|
||||
|
||||
3. Remove ``show_multiple_locations`` config option when it is no longer
|
||||
required by other services (cinder/nova) to perform operations on
|
||||
locations. This will mostly be done in B or C cycle.
|
||||
|
||||
The config option ``show_multiple_locations`` has been deprecated since Newton
|
||||
but we will keep the config option until the consumers of glance locations
|
||||
(nova, cinder, http store etc) start using the new location APIs. Since this
|
||||
is a major effort spanning across multiple services (nova, cinder, glance),
|
||||
we will implement the work items in different cycles to provide enough
|
||||
time for developers (to implement this) and operators (to move away from the
|
||||
config option).
|
||||
|
||||
We will introduce 2 new policies, for each API performing different operations
|
||||
like add and get, as follows:
|
||||
|
||||
1. The ``add policy`` can default to the project member or ``service`` role
|
||||
(when it is implemented).
|
||||
2. The ``get policy`` will default to the ``service`` role for authorization.
|
||||
|
||||
Along with the new ``add policy``, we will add a check in the location add API
|
||||
code to check the status of image and only add location if it is in ``QUEUED``
|
||||
state and adding location when the image is in other states will be
|
||||
disallowed. This is done in order to prevent malicious users from modifying
|
||||
the image location again and again since the location added for the first time
|
||||
is the correct one as far as Glance is concerned.
|
||||
|
||||
End-user access to image locations via the Image API is no longer necessary.
|
||||
Since Train, Glance has multiple stores support, and we have added API calls
|
||||
that allow users to manipulate data locality with respect to store.
|
||||
Further, a store is an opaque identifier, whereas an image location
|
||||
exposes backend details that users don't need to know.
|
||||
|
||||
Here are the current use cases for the direct manipulation of image
|
||||
locations along with an explanation of how they can be handled by the
|
||||
new Location API.
|
||||
|
||||
1. When using a copy-on-write (COW) backend shared by Nova and Glance,
|
||||
Nova can create an image record in Glance, snapshot a server image
|
||||
directly in the backend, and set the location on the image record.
|
||||
This use case is covered by the new add-location call, and having
|
||||
its default policy be image owner or service.
|
||||
|
||||
2. A user wants to have a single image record, but have image data
|
||||
stored in multiple locations for locality (i.e., to have image
|
||||
data as close as possible to where it's consumed).
|
||||
This use case is handled by the glance multiple stores feature
|
||||
plus image import, which since API v2.8, allows a 'stores' parameter
|
||||
specifying where the image data should be stored. This applies to both
|
||||
newly created images and existing images (via the copy-image import
|
||||
method).
|
||||
In this workflow, Glance itself manipulates the image locations; there
|
||||
is no need for the user to interact with locations directly.
|
||||
|
||||
3. An operator wants to introduce a new storage backend and decommission
|
||||
the current backend while keeping the same image catalog.
|
||||
Similar to #2, this can be handled by using the copy-image import
|
||||
method and the delete-image-from-store API call introduced in v2.10.
|
||||
Note that there are some exceptions to this like:
|
||||
|
||||
a. HTTP store is read-only, so we can't use copy-image in this case.
|
||||
|
||||
b. For RBD store, we will create a dependency chain if we launch a VM
|
||||
or create a bootable volume from it hence we can't delete the source
|
||||
image until all of it's children are flattened.
|
||||
|
||||
c. For cinder store, if the cinder backend uses COW cloning, it is similar
|
||||
to the RBD case mentioned in b) else the image delete will succeed.
|
||||
|
||||
Following APIs are not being implemented:
|
||||
|
||||
``Update``: For service to service interaction, there is no value in updating
|
||||
the metadata of a location. This would be beneficial if we plan to remove the
|
||||
existing location code from image-update call and support the usecase of
|
||||
operators/end-users doing location operations.
|
||||
|
||||
``Delete``: We already have `Delete Image From Store`_ API for this purpose.
|
||||
We don't require the `Delete Image From Store`_ API call for the current
|
||||
usecase but if we plan to extend the location APIs in future, we can do this
|
||||
by updating the policies enforced by `Delete Image From Store`_ operation from
|
||||
the default ``role:admin`` to ``role:admin or role:service``.
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
* We can remove the ``show_multiple_locations`` config option and filter the
|
||||
images with the ``admin_or_service`` role. This will require the consumers
|
||||
to provide admin credentials during add or get of an image to get the
|
||||
location.
|
||||
This was the original proposal but due to the disagreement here [4]_, we
|
||||
changed the design to the current proposal.
|
||||
|
||||
* Another alternative is to add this functionality in the import workflow.
|
||||
We can add a new import method ``direct-location`` which will allow end
|
||||
users to specify the ``location`` and ``metadata`` parameters and create a
|
||||
new image based on the given parameters. We can also update an existing
|
||||
image with ``location`` and ``metadata`` values but will require the image
|
||||
to be in ``queued`` state.
|
||||
|
||||
For this, we will need to add a new import method ``direct-location`` and also
|
||||
add ``--metadata`` and ``--location`` parameters to the following commands:
|
||||
|
||||
* ``glance image-create-via-import --import-method direct-location --location
|
||||
<location> --metadata <key1=value1, key2=value2 ...>``
|
||||
|
||||
* ``glance image-import --import-method direct-location --location
|
||||
<location> --metadata <key1=value1, key2=value2 ...>``
|
||||
|
||||
Data model impact
|
||||
-----------------
|
||||
|
||||
None
|
||||
|
||||
REST API impact
|
||||
---------------
|
||||
|
||||
We are going to add 2 new location APIs:
|
||||
|
||||
* Add Location
|
||||
|
||||
This will add a new location to an existing image.
|
||||
The request body will contain the location URL and an optional parameter,
|
||||
``do_secure_hash``, which will tell the API if we want to do the checksum or
|
||||
not. The ``do_secure_hash`` flag is required by the HTTP Store to make it
|
||||
compatible with new location add API.
|
||||
We will allow ``validation data`` [3]_ to be passed in case of HTTP store
|
||||
else glance will calculate the image hash. If both ``do_secure_hash`` and
|
||||
``validation data`` are passed, then we will compare them and fail the
|
||||
location add operation if they don't match.
|
||||
|
||||
POST /v2/images/{image_id}/locations
|
||||
|
||||
* JSON request body
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"url": "cinder://lvmdriver-1/0f031ed1-5872-43d5-a638-4b0d07c10ab5",
|
||||
"do_secure_hash": false,
|
||||
}
|
||||
|
||||
* JSON response body
|
||||
|
||||
- Success - 200
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"url": "cinder://lvmdriver-1/0f031ed1-5872-43d5-a638-4b0d07c10ab5",
|
||||
"metadata": "{'store': 'lvmdriver-1',
|
||||
'do_secure_hash': false}"
|
||||
}
|
||||
|
||||
- Error - 409 (Location already exists), 403 (Forbidden for users that are
|
||||
not owner), 400 (BadRequest if image is not in QUEUED state)
|
||||
|
||||
* Get Location(s)
|
||||
|
||||
This will show all the locations associated to an existing image. Returns an
|
||||
empty list if an image contains no locations.
|
||||
|
||||
GET /v2/images/{image_id}/locations
|
||||
|
||||
* JSON response body
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
[
|
||||
{
|
||||
"url": "cinder://lvmdriver-1/0f031ed1-5872-43d5-a638-4b0d07c10ab5",
|
||||
"metadata": "{'store': 'lvmdriver-1'}"
|
||||
},
|
||||
{
|
||||
"url": "cinder://cephdriver-1/11b4fa9f-a44b-46c9-950c-0026c467252c",
|
||||
"metadata": "{'store': 'cephdriver-1'}"
|
||||
}
|
||||
]
|
||||
|
||||
- Error - 404 (Image ID does not exist), 403 (Forbidden for normal users)
|
||||
|
||||
The transition of image state during the image create operation will be as
|
||||
follows.
|
||||
Image upload (PUT), image stage (PUT) and location add (PATCH), will transition
|
||||
the image from queued to the next state that could be either of the following:
|
||||
|
||||
1. ``saving``
|
||||
2. ``uploading``
|
||||
3. ``active``
|
||||
|
||||
Below are the valid transitions for image from queued state.
|
||||
|
||||
'queued': ('saving', 'uploading', 'importing', 'active', 'deleted')
|
||||
|
||||
Security impact
|
||||
---------------
|
||||
|
||||
No worse than it is now, and possibly better.
|
||||
|
||||
1. The get-locations policy is restricted to the 'service' role,
|
||||
so users will not be able to see image locations. Thus with
|
||||
'show_multiple_locations' and 'show_direct_url' set to False,
|
||||
the new get-locations API will not expose location information
|
||||
to users.
|
||||
2. The add-location policy is restricted by default to image-owner.
|
||||
This will allow end users to add a location to an image to address
|
||||
current uses of this functionality that we aren't aware of.
|
||||
Even allowing this, the data-substitution attack is blocked because
|
||||
the API call will only be allowed for an image in 'queued' status.
|
||||
The add-location API cannot be used to add a location to an image in
|
||||
other states and then delete the original location, so the OSSN-0065
|
||||
attack is not possible under this scenario.
|
||||
Further, the add-locations call (unlike the current method of
|
||||
updating locations via PATCH), does not require the locations to
|
||||
be visible to succeed. Thus operators will be able to configure
|
||||
Glance with 'show_multiple_locations' and 'show_direct_url' set
|
||||
to False, even when other services are sharing a COW backend with
|
||||
Glance and the operator wants an optimized workflow.
|
||||
|
||||
Notifications impact
|
||||
--------------------
|
||||
|
||||
None
|
||||
|
||||
Other end user impact
|
||||
---------------------
|
||||
|
||||
Since the new APIs are for service to service interaction, there is not much
|
||||
value to expose them via glanceclient CLI. However, we will add methods to
|
||||
the glanceclient (that will call the new location APIs) that will be used by
|
||||
other consumer services like cinder and nova but those methods won't be
|
||||
exposed via the shell to end users.
|
||||
End users can still use the existing commands (that internally calls the
|
||||
image-update API) to perform operations on locations:
|
||||
|
||||
* ``glance location-add:`` Add a location (and related metadata) to an image.
|
||||
* ``glance location-delete:`` Remove locations (and related metadata) from an
|
||||
image.
|
||||
* ``glance location-update:`` Update metadata of an image's location.
|
||||
|
||||
We will also add a new command that will allow end users to update the
|
||||
``location`` and ``metadata`` for HTTP store case.
|
||||
|
||||
* ``glance direct-location --location <location> --metadata
|
||||
<key1=value1, key2=value2 ...>``
|
||||
|
||||
Performance Impact
|
||||
------------------
|
||||
|
||||
None
|
||||
|
||||
Other deployer impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Developer impact
|
||||
----------------
|
||||
|
||||
Consumers like Cinder, Nova and HTTP store need to modify code to call the
|
||||
new client functions to access the API.
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
|
||||
Primary assignee:
|
||||
abhishekk
|
||||
|
||||
Other contributors:
|
||||
whoami-rajat
|
||||
|
||||
Work Items
|
||||
----------
|
||||
|
||||
* Add 2 new Location APIs for add and get operations.
|
||||
|
||||
* Modify consumers like cinder and nova and http store to use the new location
|
||||
APIs.
|
||||
|
||||
* Add a releasenote mentioning that we will remove the config option
|
||||
``show_multiple_locations`` when the consumers (nova/cinder/http store)
|
||||
shift to using new location APIs.
|
||||
|
||||
* Tempest tests for the new add-location and get-location APIs.
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
None
|
||||
|
||||
Testing
|
||||
=======
|
||||
|
||||
* Unit Tests
|
||||
* Functional Tests
|
||||
* Integration Tests
|
||||
* Tempest Tests
|
||||
|
||||
Documentation Impact
|
||||
====================
|
||||
|
||||
Need to document new location APIs.
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
.. [1] https://wiki.openstack.org/wiki/OSSN/OSSN-0065
|
||||
|
||||
.. [2] https://wiki.openstack.org/wiki/OSSN/OSSN-0090
|
||||
|
||||
.. [3] https://specs.openstack.org/openstack/glance-specs/specs/stein/implemented/glance/spec-lite-locations-with-validation-data.html
|
||||
|
||||
.. [4] https://review.opendev.org/c/openstack/glance-specs/+/840882/2..15/specs/zed/approved/glance/new-location-info-apis.rst#b199
|
||||
|
||||
.. _Delete Image From Store: https://docs.openstack.org/api-ref/image/v2/index.html?expanded=delete-image-from-store-detail#delete-image-from-store
|
||||
|
||||
* Deprecate `show_multiple_locations` option | https://review.opendev.org/c/openstack/glance/+/313936
|
||||
|
||||
* Update deprecated show_multiple_locations helptext | https://review.opendev.org/c/openstack/glance/+/426283
|
||||
|
||||
* Update show_multiple_locations deprecation note | https://review.opendev.org/c/openstack/glance/+/625702
|
||||
|
||||
* Original security bug | https://bugs.launchpad.net/ossn/+bug/1549483
|
||||
|
||||
* New security bug | https://bugs.launchpad.net/ossn/+bug/1990157
|
@ -14,5 +14,10 @@
|
||||
|
||||
glance_store/*
|
||||
|
||||
2023.1 approved specs for glance:
|
||||
|
||||
.. toctree::
|
||||
:glob:
|
||||
:maxdepth: 1
|
||||
|
||||
glance/*
|
||||
|
@ -1,237 +0,0 @@
|
||||
..
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
=================
|
||||
New Location APIs
|
||||
=================
|
||||
|
||||
https://blueprints.launchpad.net/glance/+spec/new-location-apis
|
||||
|
||||
Problem description
|
||||
===================
|
||||
|
||||
Currently we have a security vulnerability with ``show_multiple_locations``
|
||||
config option, OSSN-0065 [1]_. If we enable ``show_multiple_locations`` and
|
||||
the policies for add/update (set_image_location), get (get_image_location) and
|
||||
remove (delete_image_location) locations are set for non-admins then non-admin
|
||||
users can modify location data to corrupt an image that they own. Note that the
|
||||
policies for add, get and remove locations are set for non-admins by default
|
||||
else a non-admin user cannot associate data with an image record, or retrieve
|
||||
image data, or delete image data.
|
||||
|
||||
When show_multiple_locations is False, users cannot modify image
|
||||
locations via the image-update API call, even if they have the
|
||||
``{get,set,delete}_image_location`` permissions. However, there are some
|
||||
popular use cases where other services can bypass Glance and store or access
|
||||
image data directly in the backend by writing or reading image locations,
|
||||
using the image owner's credentials, and this is why operators want to set
|
||||
show_multiple_locations to True. What operators want to do, however, is to
|
||||
enable optimized image data access; exposing image locations to non-admin
|
||||
users is a side-effect, not the goal. We currently recommend that operators
|
||||
who want to use optimized data access use a specialized Glance instance for
|
||||
services, and only expose glance-api to end users with show_multiple_locations
|
||||
set False. This is inconvinient for certain users.
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
|
||||
There will be 3 phases in which the work will be done as follows:
|
||||
|
||||
1. Introduce 2 new API calls that allow operations on image locations which
|
||||
are described in detail in the `REST API impact`_ section.
|
||||
These calls will replace the image-update mechanism for consumers
|
||||
like cinder and nova.
|
||||
|
||||
2. Modify the consumer (cinder/nova) code to use the new location APIs.
|
||||
|
||||
3. Remove ``show_multiple_locations`` config option when it is no longer
|
||||
required by other services (cinder/nova) to perform operations on
|
||||
locations.
|
||||
|
||||
The config option ``show_multiple_locations`` has been deprecated since Newton
|
||||
but we will keep the config option until the consumers of glance locations
|
||||
(nova, cinder etc) start using the new location APIs.
|
||||
|
||||
We will introduce 2 new policies for each API performing different operations
|
||||
like add and get which will default to the ``service`` role for authorization.
|
||||
|
||||
Following APIs are not being implemented:
|
||||
|
||||
``Update``: For service to service interaction, there is no value in updating
|
||||
the metadata of a location. This would be beneficial if we plan to remove the
|
||||
existing location code from image-update call and support the usecase of
|
||||
operators/end-users doing location operations.
|
||||
|
||||
``Delete``: We already have `Delete Image From Store`_ API for this purpose.
|
||||
We don't require the `Delete Image From Store`_ API call for the current
|
||||
usecase but if we plan to extend the location APIs in future, we can do this
|
||||
by updating the policies enforced by `Delete Image From Store`_ operation from
|
||||
the default ``role:admin`` to ``role:admin or role:service``.
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
None
|
||||
|
||||
Data model impact
|
||||
-----------------
|
||||
|
||||
None
|
||||
|
||||
REST API impact
|
||||
---------------
|
||||
|
||||
We are going to add 2 new location APIs:
|
||||
|
||||
* Add Location
|
||||
|
||||
This will add a new location to an existing image.
|
||||
|
||||
POST /v2/images/{image_id}/locations
|
||||
|
||||
* JSON request body
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"url": "cinder://lvmdriver-1/0f031ed1-5872-43d5-a638-4b0d07c10ab5",
|
||||
}
|
||||
|
||||
* JSON response body
|
||||
|
||||
- Success - 200
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"url": "cinder://lvmdriver-1/0f031ed1-5872-43d5-a638-4b0d07c10ab5",
|
||||
"metadata": "{'store': 'lvmdriver-1'}"
|
||||
}
|
||||
|
||||
- Error - 409 (Location already exists), 403 (Forbidden for users)
|
||||
|
||||
* Get Location(s)
|
||||
|
||||
This will show all the locations associated to an existing image. Returns an
|
||||
empty list if an image contains no locations.
|
||||
|
||||
GET /v2/images/{image_id}/locations
|
||||
|
||||
* JSON response body
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
[
|
||||
{
|
||||
"url": "cinder://lvmdriver-1/0f031ed1-5872-43d5-a638-4b0d07c10ab5",
|
||||
"metadata": "{'store': 'lvmdriver-1'}"
|
||||
},
|
||||
{
|
||||
"url": "cinder://cephdriver-1/11b4fa9f-a44b-46c9-950c-0026c467252c",
|
||||
"metadata": "{'store': 'cephdriver-1'}"
|
||||
}
|
||||
]
|
||||
|
||||
- Error - 404 (Image ID does not exist)
|
||||
|
||||
|
||||
Security impact
|
||||
---------------
|
||||
|
||||
None. All APIs will only allow authorization to a context with ``service``
|
||||
role which will be only supplied by the consumer services of glance locations
|
||||
like cinder and nova.
|
||||
|
||||
Notifications impact
|
||||
--------------------
|
||||
|
||||
None
|
||||
|
||||
Other end user impact
|
||||
---------------------
|
||||
|
||||
Since the new APIs are for service to service interaction, there is not much
|
||||
value to expose them via CLI. We will add methods to the client
|
||||
(that will call the new location APIs) that will be used by other services
|
||||
like cinder and nova but those methods won't be exposed via the shell to end
|
||||
users. End users can still use the existing commands (that internally calls
|
||||
the image-update API) to perform operations on locations:
|
||||
|
||||
* ``glance location-add:`` Add a location (and related metadata) to an image.
|
||||
* ``glance location-delete:`` Remove locations (and related metadata) from an image.
|
||||
* ``glance location-update:`` Update metadata of an image's location.
|
||||
|
||||
Performance Impact
|
||||
------------------
|
||||
|
||||
None
|
||||
|
||||
Other deployer impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Developer impact
|
||||
----------------
|
||||
|
||||
Consumers like Cinder and Nova need to implement code to call the new APIs
|
||||
for location operations.
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
|
||||
Primary assignee:
|
||||
mrjoshi, whoami-rajat
|
||||
|
||||
Other contributors:
|
||||
None
|
||||
|
||||
Work Items
|
||||
----------
|
||||
|
||||
* Add 2 new Location APIs for add and get operations.
|
||||
|
||||
* Modify consumers like cinder and nova to use the new location APIs.
|
||||
|
||||
* Add a releasenote mentioning that we will remove the config option
|
||||
``show_multiple_locations`` when the consumers (nova/cinder) shift to using
|
||||
new location APIs.
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
None
|
||||
|
||||
Testing
|
||||
=======
|
||||
|
||||
* Unit Tests
|
||||
* Functional Tests
|
||||
* Integration Tests
|
||||
* Tempest Tests
|
||||
|
||||
Documentation Impact
|
||||
====================
|
||||
|
||||
Need to document new location APIs.
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
.. [1] https://wiki.openstack.org/wiki/OSSN/OSSN-0065
|
||||
|
||||
.. _Delete Image From Store: https://docs.openstack.org/api-ref/image/v2/index.html?expanded=delete-image-from-store-detail#delete-image-from-store
|
||||
|
||||
* Deprecate `show_multiple_locations` option | https://review.opendev.org/c/openstack/glance/+/313936
|
||||
|
||||
* Update deprecated show_multiple_locations helptext | https://review.opendev.org/c/openstack/glance/+/426283
|
||||
|
||||
* Update show_multiple_locations deprecation note | https://review.opendev.org/c/openstack/glance/+/625702
|
||||
|
||||
* Original security bug | https://bugs.launchpad.net/ossn/+bug/1549483
|
Loading…
Reference in New Issue
Block a user