Skip to content

Commit 0eddab3

Browse files
committed
volume: Add 'volume message *' commands
This patch implements the necessary commands to utilize the Messages API introduced in Cinder API version 3.3. Version 3.5 built upon this by implementing pagination support for these commands which is present in this patch as well. volume message get volume message list volume message delete Change-Id: I64aa0b4a8d4468baa8c63e5e30ee31de68df999d
1 parent 6dc94e1 commit 0eddab3

8 files changed

Lines changed: 579 additions & 3 deletions

File tree

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
==============
2+
volume message
3+
==============
4+
5+
Block Storage v3
6+
7+
.. autoprogram-cliff:: openstack.volume.v3
8+
:command: volume message *

doc/source/cli/commands.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ referring to both Compute and Volume quotas.
160160
* ``volume backup record``: (**Volume**) volume record that can be imported or exported
161161
* ``volume backend``: (**Volume**) volume backend storage
162162
* ``volume host``: (**Volume**) the physical computer for volumes
163+
* ``volume message``: (**Volume**) volume API internal messages detailing volume failure messages
163164
* ``volume qos``: (**Volume**) quality-of-service (QoS) specification for volumes
164165
* ``volume snapshot``: (**Volume**) a point-in-time copy of a volume
165166
* ``volume type``: (**Volume**) deployment-specific types of volumes available

doc/source/cli/data/cinder.csv

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,9 @@ list,volume list,Lists all volumes.
7272
list-filters,,List enabled filters. (Supported by API versions 3.33 - 3.latest)
7373
manage,volume create --remote-source k=v,Manage an existing volume.
7474
manageable-list,,Lists all manageable volumes. (Supported by API versions 3.8 - 3.latest)
75-
message-delete,,Removes one or more messages. (Supported by API versions 3.3 - 3.latest)
76-
message-list,,Lists all messages. (Supported by API versions 3.3 - 3.latest)
77-
message-show,,Shows message details. (Supported by API versions 3.3 - 3.latest)
75+
message-delete,volume message delete,Removes one or more messages. (Supported by API versions 3.3 - 3.latest)
76+
message-list,volume message list,Lists all messages. (Supported by API versions 3.3 - 3.latest)
77+
message-show,volume message show,Shows message details. (Supported by API versions 3.3 - 3.latest)
7878
metadata,volume set --property k=v / volume unset --property k,Sets or deletes volume metadata.
7979
metadata-show,volume show,Shows volume metadata.
8080
metadata-update-all,volume set --property k=v,Updates volume metadata.

openstackclient/tests/unit/volume/v3/fakes.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ def __init__(self, **kwargs):
3232

3333
self.attachments = mock.Mock()
3434
self.attachments.resource_class = fakes.FakeResource(None, {})
35+
self.messages = mock.Mock()
36+
self.messages.resource_class = fakes.FakeResource(None, {})
3537
self.volumes = mock.Mock()
3638
self.volumes.resource_class = fakes.FakeResource(None, {})
3739

@@ -59,6 +61,72 @@ def setUp(self):
5961
FakeVolume = volume_v2_fakes.FakeVolume
6062

6163

64+
class FakeVolumeMessage:
65+
"""Fake one or more volume messages."""
66+
67+
@staticmethod
68+
def create_one_volume_message(attrs=None):
69+
"""Create a fake message.
70+
71+
:param attrs: A dictionary with all attributes of message
72+
:return: A FakeResource object with id, name, status, etc.
73+
"""
74+
attrs = attrs or {}
75+
76+
# Set default attribute
77+
message_info = {
78+
'created_at': '2016-02-11T11:17:37.000000',
79+
'event_id': f'VOLUME_{random.randint(1, 999999):06d}',
80+
'guaranteed_until': '2016-02-11T11:17:37.000000',
81+
'id': uuid.uuid4().hex,
82+
'message_level': 'ERROR',
83+
'request_id': f'req-{uuid.uuid4().hex}',
84+
'resource_type': 'VOLUME',
85+
'resource_uuid': uuid.uuid4().hex,
86+
'user_message': f'message-{uuid.uuid4().hex}',
87+
}
88+
89+
# Overwrite default attributes if there are some attributes set
90+
message_info.update(attrs)
91+
92+
message = fakes.FakeResource(
93+
None,
94+
message_info,
95+
loaded=True)
96+
return message
97+
98+
@staticmethod
99+
def create_volume_messages(attrs=None, count=2):
100+
"""Create multiple fake messages.
101+
102+
:param attrs: A dictionary with all attributes of message
103+
:param count: The number of messages to be faked
104+
:return: A list of FakeResource objects
105+
"""
106+
messages = []
107+
for n in range(0, count):
108+
messages.append(FakeVolumeMessage.create_one_volume_message(attrs))
109+
110+
return messages
111+
112+
@staticmethod
113+
def get_volume_messages(messages=None, count=2):
114+
"""Get an iterable MagicMock object with a list of faked messages.
115+
116+
If messages list is provided, then initialize the Mock object with the
117+
list. Otherwise create one.
118+
119+
:param messages: A list of FakeResource objects faking messages
120+
:param count: The number of messages to be faked
121+
:return An iterable Mock object with side_effect set to a list of faked
122+
messages
123+
"""
124+
if messages is None:
125+
messages = FakeVolumeMessage.create_messages(count)
126+
127+
return mock.Mock(side_effect=messages)
128+
129+
62130
class FakeVolumeAttachment:
63131
"""Fake one or more volume attachments."""
64132

0 commit comments

Comments
 (0)