volume: Allow setting volume statuses individually
Some of these are admin-only. We don't want to force setting them all at once. Change-Id: I3b1694ee5e4dfd96315cc48b44b3d28c01aa3bfa Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
This commit is contained in:
parent
601b21acad
commit
52c5d74518
|
@ -385,7 +385,7 @@ class Proxy(_base_proxy.BaseBlockStorageProxy):
|
|||
volume.set_bootable_status(self, bootable)
|
||||
|
||||
def reset_volume_status(
|
||||
self, volume, status, attach_status, migration_status
|
||||
self, volume, status=None, attach_status=None, migration_status=None
|
||||
):
|
||||
"""Reset volume statuses.
|
||||
|
||||
|
|
|
@ -9,6 +9,9 @@
|
|||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import typing as ty
|
||||
|
||||
from openstack.common import metadata
|
||||
from openstack import format
|
||||
from openstack import resource
|
||||
|
@ -114,15 +117,17 @@ class Volume(resource.Resource, metadata.MetadataMixin):
|
|||
body = {'os-set_bootable': {'bootable': bootable}}
|
||||
self._action(session, body)
|
||||
|
||||
def reset_status(self, session, status, attach_status, migration_status):
|
||||
def reset_status(
|
||||
self, session, status=None, attach_status=None, migration_status=None
|
||||
):
|
||||
"""Reset volume statuses (admin operation)"""
|
||||
body = {
|
||||
'os-reset_status': {
|
||||
'status': status,
|
||||
'attach_status': attach_status,
|
||||
'migration_status': migration_status,
|
||||
}
|
||||
}
|
||||
body: ty.Dict[str, ty.Dict[str, str]] = {'os-reset_status': {}}
|
||||
if status:
|
||||
body['os-reset_status']['status'] = status
|
||||
if attach_status:
|
||||
body['os-reset_status']['attach_status'] = attach_status
|
||||
if migration_status:
|
||||
body['os-reset_status']['migration_status'] = migration_status
|
||||
self._action(session, body)
|
||||
|
||||
def attach(self, session, mountpoint, instance):
|
||||
|
|
|
@ -771,7 +771,7 @@ class Proxy(_base_proxy.BaseBlockStorageProxy):
|
|||
volume.set_bootable_status(self, bootable)
|
||||
|
||||
def reset_volume_status(
|
||||
self, volume, status, attach_status, migration_status
|
||||
self, volume, status=None, attach_status=None, migration_status=None
|
||||
):
|
||||
"""Reset volume statuses.
|
||||
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import typing as ty
|
||||
|
||||
from openstack.common import metadata
|
||||
from openstack import exceptions
|
||||
from openstack import format
|
||||
|
@ -138,15 +140,17 @@ class Volume(resource.Resource, metadata.MetadataMixin):
|
|||
body = {'os-update_readonly_flag': {'readonly': readonly}}
|
||||
self._action(session, body)
|
||||
|
||||
def reset_status(self, session, status, attach_status, migration_status):
|
||||
def reset_status(
|
||||
self, session, status=None, attach_status=None, migration_status=None
|
||||
):
|
||||
"""Reset volume statuses (admin operation)"""
|
||||
body = {
|
||||
'os-reset_status': {
|
||||
'status': status,
|
||||
'attach_status': attach_status,
|
||||
'migration_status': migration_status,
|
||||
}
|
||||
}
|
||||
body: ty.Dict[str, ty.Dict[str, str]] = {'os-reset_status': {}}
|
||||
if status:
|
||||
body['os-reset_status']['status'] = status
|
||||
if attach_status:
|
||||
body['os-reset_status']['attach_status'] = attach_status
|
||||
if migration_status:
|
||||
body['os-reset_status']['migration_status'] = migration_status
|
||||
self._action(session, body)
|
||||
|
||||
def revert_to_snapshot(self, session, snapshot_id):
|
||||
|
|
|
@ -198,6 +198,21 @@ class TestVolumeActions(TestVolume):
|
|||
url, json=body, microversion=sot._max_microversion
|
||||
)
|
||||
|
||||
def test_reset_status__single_option(self):
|
||||
sot = volume.Volume(**VOLUME)
|
||||
|
||||
self.assertIsNone(sot.reset_status(self.sess, status='1'))
|
||||
|
||||
url = 'volumes/%s/action' % FAKE_ID
|
||||
body = {
|
||||
'os-reset_status': {
|
||||
'status': '1',
|
||||
}
|
||||
}
|
||||
self.sess.post.assert_called_with(
|
||||
url, json=body, microversion=sot._max_microversion
|
||||
)
|
||||
|
||||
def test_attach_instance(self):
|
||||
sot = volume.Volume(**VOLUME)
|
||||
|
||||
|
|
|
@ -227,6 +227,21 @@ class TestVolumeActions(TestVolume):
|
|||
url, json=body, microversion=sot._max_microversion
|
||||
)
|
||||
|
||||
def test_reset_status__single_option(self):
|
||||
sot = volume.Volume(**VOLUME)
|
||||
|
||||
self.assertIsNone(sot.reset_status(self.sess, status='1'))
|
||||
|
||||
url = 'volumes/%s/action' % FAKE_ID
|
||||
body = {
|
||||
'os-reset_status': {
|
||||
'status': '1',
|
||||
}
|
||||
}
|
||||
self.sess.post.assert_called_with(
|
||||
url, json=body, microversion=sot._max_microversion
|
||||
)
|
||||
|
||||
@mock.patch(
|
||||
'openstack.utils.require_microversion',
|
||||
autospec=True,
|
||||
|
|
Loading…
Reference in New Issue