summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api-ref/source/os-volume-attachments.inc8
-rw-r--r--nova/api/openstack/api_version_request.py1
-rw-r--r--nova/api/openstack/compute/rest_api_version_history.rst3
-rw-r--r--nova/tests/unit/api/openstack/compute/test_volumes.py55
-rw-r--r--releasenotes/notes/bp-support-delete-on-termination-in-server-attach-volume-5d08b4e97fdd24f9.yaml3
5 files changed, 64 insertions, 6 deletions
diff --git a/api-ref/source/os-volume-attachments.inc b/api-ref/source/os-volume-attachments.inc
index 68db210c2b..de73f95ea1 100644
--- a/api-ref/source/os-volume-attachments.inc
+++ b/api-ref/source/os-volume-attachments.inc
@@ -46,9 +46,9 @@ Response
.. literalinclude:: ../../doc/api_samples/os-volumes/list-volume-attachments-resp.json
:language: javascript
-**Example List tagged volume attachments for an instance (v2.70): JSON response**
+**Example List tagged volume attachments for an instance (v2.79): JSON response**
-.. literalinclude:: ../../doc/api_samples/os-volumes/v2.70/list-volume-attachments-resp.json
+.. literalinclude:: ../../doc/api_samples/os-volumes/v2.79/list-volume-attachments-resp.json
:language: javascript
Attach a volume to an instance
@@ -162,9 +162,9 @@ Response
.. literalinclude:: ../../doc/api_samples/os-volumes/volume-attachment-detail-resp.json
:language: javascript
-**Example Show a detail of a tagged volume attachment (v2.70): JSON response**
+**Example Show a detail of a tagged volume attachment (v2.79): JSON response**
-.. literalinclude:: ../../doc/api_samples/os-volumes/v2.70/volume-attachment-detail-resp.json
+.. literalinclude:: ../../doc/api_samples/os-volumes/v2.79/volume-attachment-detail-resp.json
:language: javascript
Update a volume attachment
diff --git a/nova/api/openstack/api_version_request.py b/nova/api/openstack/api_version_request.py
index 09038f416a..6c99006779 100644
--- a/nova/api/openstack/api_version_request.py
+++ b/nova/api/openstack/api_version_request.py
@@ -209,6 +209,7 @@ REST_API_VERSION_HISTORY = """REST API Version History:
request body to
``POST /servers/{server_id}/os-volume_attachments`` and exposes
this via the response from
+ ``POST /servers/{server_id}/os-volume_attachments``,
``GET /servers/{server_id}/os-volume_attachments`` and
``GET /servers/{server_id}/os-volume_attachments/{volume_id}``.
* 2.80 - Adds support for optional query parameters ``user_id`` and
diff --git a/nova/api/openstack/compute/rest_api_version_history.rst b/nova/api/openstack/compute/rest_api_version_history.rst
index cbdae2707a..ecb82de0a0 100644
--- a/nova/api/openstack/compute/rest_api_version_history.rst
+++ b/nova/api/openstack/compute/rest_api_version_history.rst
@@ -1047,7 +1047,8 @@ API microversion 2.79 adds support for specifying the ``delete_on_termination``
field in the request body when attaching a volume to a server, to support
configuring whether to delete the data volume when the server is destroyed.
Also, ``delete_on_termination`` is added to the GET responses when showing
-attached volumes.
+attached volumes, and the ``delete_on_termination`` field is contained
+in the POST API response body when attaching a volume.
The affected APIs are as follows:
diff --git a/nova/tests/unit/api/openstack/compute/test_volumes.py b/nova/tests/unit/api/openstack/compute/test_volumes.py
index 76eaeebf78..7c7d5353ba 100644
--- a/nova/tests/unit/api/openstack/compute/test_volumes.py
+++ b/nova/tests/unit/api/openstack/compute/test_volumes.py
@@ -1092,6 +1092,61 @@ class VolumeAttachTestsV279(VolumeAttachTestsV2_75):
self.assertIn("Invalid input for field/attribute "
"delete_on_termination.", six.text_type(ex))
+ @mock.patch('nova.compute.api.API.attach_volume', return_value=None)
+ def test_attach_volume_v279(self, mock_attach_volume):
+ body = {'volumeAttachment': {'volumeId': FAKE_UUID_A,
+ 'delete_on_termination': True}}
+ req = self._get_req(body)
+ result = self.attachments.create(req, FAKE_UUID, body=body)
+ self.assertTrue(result['volumeAttachment']['delete_on_termination'])
+ mock_attach_volume.assert_called_once_with(
+ req.environ['nova.context'], test.MatchType(objects.Instance),
+ FAKE_UUID_A, None, tag=None, supports_multiattach=True,
+ delete_on_termination=True)
+
+ def test_show_pre_v279(self):
+ """Before microversion 2.79, show a detail of a volume attachment
+ does not contain the 'delete_on_termination' field in the response
+ body.
+ """
+ req = self._get_req(body={}, microversion='2.78')
+ req.method = 'GET'
+ result = self.attachments.show(req, FAKE_UUID, FAKE_UUID_A)
+
+ self.assertNotIn('delete_on_termination', result['volumeAttachment'])
+
+ @mock.patch('nova.objects.BlockDeviceMappingList.get_by_instance_uuid')
+ def test_list_pre_v279(self, mock_get_bdms):
+ """Before microversion 2.79, list of a volume attachment
+ does not contain the 'delete_on_termination' field in the response
+ body.
+ """
+ req = fakes.HTTPRequest.blank(
+ '/v2/servers/id/os-volume_attachments',
+ version="2.78")
+ req.body = jsonutils.dump_as_bytes({})
+ req.method = 'GET'
+ req.headers['content-type'] = 'application/json'
+
+ vol_bdm = objects.BlockDeviceMapping(
+ self.context,
+ id=1,
+ instance_uuid=FAKE_UUID,
+ volume_id=FAKE_UUID_A,
+ source_type='volume',
+ destination_type='volume',
+ delete_on_termination=True,
+ connection_info=None,
+ tag='fake-tag',
+ device_name='/dev/fake0',
+ attachment_id=uuids.attachment_id)
+ bdms = objects.BlockDeviceMappingList(objects=[vol_bdm])
+
+ mock_get_bdms.return_value = bdms
+ result = self.attachments.index(req, FAKE_UUID)
+
+ self.assertNotIn('delete_on_termination', result['volumeAttachments'])
+
class SwapVolumeMultiattachTestCase(test.NoDBTestCase):
diff --git a/releasenotes/notes/bp-support-delete-on-termination-in-server-attach-volume-5d08b4e97fdd24f9.yaml b/releasenotes/notes/bp-support-delete-on-termination-in-server-attach-volume-5d08b4e97fdd24f9.yaml
index 2ef1e11b0e..9dd1effc16 100644
--- a/releasenotes/notes/bp-support-delete-on-termination-in-server-attach-volume-5d08b4e97fdd24f9.yaml
+++ b/releasenotes/notes/bp-support-delete-on-termination-in-server-attach-volume-5d08b4e97fdd24f9.yaml
@@ -5,7 +5,8 @@ features:
field in the request body when attaching a volume to a server, to support
configuring whether to delete the data volume when the server is destroyed.
Also, ``delete_on_termination`` is added to the GET responses when showing
- attached volumes.
+ attached volumes, and the ``delete_on_termination`` field is contained
+ in the POST API response body when attaching a volume.
The affected APIs are as follows: