Add the ability to extend a volume size
Change-Id: Ia3a316ec159ced9be0b6770c598aff4ea9ab42ac Story: 2003539 Task: 24827
This commit is contained in:
parent
d92678a7ac
commit
17578cdb9c
@ -189,6 +189,18 @@ class Proxy(proxy.Proxy):
|
||||
"""
|
||||
self._delete(_volume.Volume, volume, ignore_missing=ignore_missing)
|
||||
|
||||
def extend_volume(self, volume, size):
|
||||
"""Extend a volume
|
||||
|
||||
:param volume: The value can be either the ID of a volume or a
|
||||
:class:`~openstack.volume.v2.volume.Volume` instance.
|
||||
:param size: New volume size
|
||||
|
||||
:returns: None
|
||||
"""
|
||||
volume = self._get_resource(_volume.Volume, volume)
|
||||
volume.extend(self, size)
|
||||
|
||||
def backend_pools(self):
|
||||
"""Returns a generator of cinder Back-end storage pools
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
from openstack.block_storage import block_storage_service
|
||||
from openstack import format
|
||||
from openstack import resource
|
||||
from openstack import utils
|
||||
|
||||
|
||||
class Volume(resource.Resource):
|
||||
@ -76,6 +77,20 @@ class Volume(resource.Resource):
|
||||
#: The timestamp of this volume creation.
|
||||
created_at = resource.Body("created_at")
|
||||
|
||||
def _action(self, session, body):
|
||||
"""Preform volume actions given the message body."""
|
||||
# NOTE: This is using Volume.base_path instead of self.base_path
|
||||
# as both Volume and VolumeDetail instances can be acted on, but
|
||||
# the URL used is sans any additional /detail/ part.
|
||||
url = utils.urljoin(Volume.base_path, self.id, 'action')
|
||||
headers = {'Accept': ''}
|
||||
return session.post(url, json=body, headers=headers)
|
||||
|
||||
def extend(self, session, size):
|
||||
"""Extend a volume size."""
|
||||
body = {'os-extend': {'new_size': size}}
|
||||
self._action(session, body)
|
||||
|
||||
|
||||
class VolumeDetail(Volume):
|
||||
|
||||
|
@ -88,6 +88,12 @@ class TestVolumeProxy(test_proxy_base.TestProxyBase):
|
||||
def test_volume_delete_ignore(self):
|
||||
self.verify_delete(self.proxy.delete_volume, volume.Volume, True)
|
||||
|
||||
def test_volume_extend(self):
|
||||
self._verify("openstack.block_storage.v2.volume.Volume.extend",
|
||||
self.proxy.extend_volume,
|
||||
method_args=["value", "new-size"],
|
||||
expected_args=["new-size"])
|
||||
|
||||
def test_backend_pools(self):
|
||||
self.verify_list(self.proxy.backend_pools, stats.Pools,
|
||||
paginated=False)
|
||||
|
@ -11,6 +11,7 @@
|
||||
# under the License.
|
||||
|
||||
import copy
|
||||
import mock
|
||||
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -63,6 +64,14 @@ VOLUME_DETAIL.update(DETAILS)
|
||||
|
||||
class TestVolume(base.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestVolume, self).setUp()
|
||||
self.resp = mock.Mock()
|
||||
self.resp.body = None
|
||||
self.resp.json = mock.Mock(return_value=self.resp.body)
|
||||
self.sess = mock.Mock()
|
||||
self.sess.post = mock.Mock(return_value=self.resp)
|
||||
|
||||
def test_basic(self):
|
||||
sot = volume.Volume(VOLUME)
|
||||
self.assertEqual("volume", sot.resource_key)
|
||||
@ -101,6 +110,16 @@ class TestVolume(base.TestCase):
|
||||
self.assertEqual(VOLUME["size"], sot.size)
|
||||
self.assertEqual(VOLUME["imageRef"], sot.image_id)
|
||||
|
||||
def test_extend(self):
|
||||
sot = volume.Volume(**VOLUME)
|
||||
|
||||
self.assertIsNone(sot.extend(self.sess, '20'))
|
||||
|
||||
url = 'volumes/%s/action' % FAKE_ID
|
||||
body = {"os-extend": {"new_size": "20"}}
|
||||
headers = {'Accept': ''}
|
||||
self.sess.post.assert_called_with(url, json=body, headers=headers)
|
||||
|
||||
|
||||
class TestVolumeDetail(base.TestCase):
|
||||
|
||||
|
@ -0,0 +1,3 @@
|
||||
---
|
||||
features:
|
||||
- Add the ability to extend a volume size with extend_volume method.
|
Loading…
x
Reference in New Issue
Block a user