Skip to content

Commit cc8384d

Browse files
stephenfingouthampacha
authored andcommitted
share: Import commands (1/n)
Import the following commands: * share lock * * share message * * share security service * * share service * Change-Id: I5758625ea0a7e78913cbd032377fcc9857f8b480 Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
1 parent 9150013 commit cc8384d

9 files changed

Lines changed: 3113 additions & 0 deletions

File tree

Lines changed: 226 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,226 @@
1+
# Licensed under the Apache License, Version 2.0 (the "License"); you may
2+
# not use this file except in compliance with the License. You may obtain
3+
# a copy of the License at
4+
#
5+
# http://www.apache.org/licenses/LICENSE-2.0
6+
#
7+
# Unless required by applicable law or agreed to in writing, software
8+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
9+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
10+
# License for the specific language governing permissions and limitations
11+
# under the License.
12+
13+
import argparse
14+
from collections.abc import Iterable, Sequence
15+
import logging
16+
from typing import Any
17+
18+
from manilaclient import api_versions
19+
from manilaclient.common.apiclient import utils as apiutils
20+
from osc_lib import exceptions
21+
from osc_lib import utils as oscutils
22+
23+
from openstackclient import command
24+
from openstackclient.i18n import _
25+
26+
LOG = logging.getLogger(__name__)
27+
28+
MESSAGE_ATTRIBUTES = [
29+
'id',
30+
'resource_type',
31+
'resource_id',
32+
'action_id',
33+
'user_message',
34+
'message_level',
35+
'detail_id',
36+
'created_at',
37+
'expires_at',
38+
'request_id',
39+
]
40+
41+
42+
class DeleteMessage(command.Command):
43+
"""Remove one or more messages."""
44+
45+
_description = _("Remove one or more messages")
46+
47+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
48+
parser = super().get_parser(prog_name)
49+
parser.add_argument(
50+
'message',
51+
metavar='<message>',
52+
nargs='+',
53+
help=_('ID of the message(s).'),
54+
)
55+
return parser
56+
57+
def take_action(self, parsed_args: argparse.Namespace) -> None:
58+
share_client = self.app.client_manager.share
59+
failure_count = 0
60+
61+
for message in parsed_args.message:
62+
try:
63+
message_ref = apiutils.find_resource(
64+
share_client.messages, message
65+
)
66+
share_client.messages.delete(message_ref)
67+
except Exception as e:
68+
failure_count += 1
69+
LOG.error(
70+
_("Delete for message %(message)s failed: %(e)s"),
71+
{'message': message, 'e': e},
72+
)
73+
74+
if failure_count > 0:
75+
raise exceptions.CommandError(
76+
_("Unable to delete some or all of the specified messages.")
77+
)
78+
79+
80+
class ListMessage(command.Lister):
81+
"""Lists all messages."""
82+
83+
_description = _("Lists all messages")
84+
85+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
86+
parser = super().get_parser(prog_name)
87+
parser.add_argument(
88+
'--resource-id',
89+
metavar='<resource-id>',
90+
default=None,
91+
help=_('Filters results by a resource uuid. Default=None.'),
92+
)
93+
parser.add_argument(
94+
'--resource-type',
95+
metavar='<resource-type>',
96+
default=None,
97+
help=_(
98+
'Filters results by a resource type. Default=None. '
99+
'Example: "openstack message list --resource-type share"'
100+
),
101+
)
102+
parser.add_argument(
103+
'--action-id',
104+
metavar='<action-id>',
105+
default=None,
106+
help=_('Filters results by action id. Default=None.'),
107+
)
108+
parser.add_argument(
109+
'--detail-id',
110+
metavar='<detail-id>',
111+
default=None,
112+
help=_('Filters results by detail id. Default=None.'),
113+
)
114+
parser.add_argument(
115+
'--request-id',
116+
metavar='<request-id>',
117+
default=None,
118+
help=_('Filters results by request id. Default=None.'),
119+
)
120+
parser.add_argument(
121+
'--message-level',
122+
metavar='<message-level>',
123+
default=None,
124+
help=_(
125+
'Filters results by the message level. Default=None. '
126+
'Example: "openstack message list --message-level ERROR".'
127+
),
128+
)
129+
parser.add_argument(
130+
'--limit',
131+
metavar='<limit>',
132+
type=int,
133+
default=None,
134+
help=_('Maximum number of messages to return. (Default=None)'),
135+
)
136+
parser.add_argument(
137+
'--since',
138+
metavar='<since>',
139+
default=None,
140+
help=_(
141+
'Return only user messages created since given date. '
142+
'The date format must be conforming to ISO8601. '
143+
'Available only for microversion >= 2.52.'
144+
),
145+
)
146+
parser.add_argument(
147+
'--before',
148+
metavar='<before>',
149+
default=None,
150+
help=_(
151+
'Return only user messages created before given date. '
152+
'The date format must be conforming to ISO8601. '
153+
'Available only for microversion >= 2.52.'
154+
),
155+
)
156+
return parser
157+
158+
def take_action(
159+
self, parsed_args: argparse.Namespace
160+
) -> tuple[Sequence[str], Iterable[tuple[Any, ...]]]:
161+
share_client = self.app.client_manager.share
162+
163+
search_opts = {
164+
'limit': parsed_args.limit,
165+
'request_id': parsed_args.request_id,
166+
'resource_type': parsed_args.resource_type,
167+
'resource_id': parsed_args.resource_id,
168+
'action_id': parsed_args.action_id,
169+
'detail_id': parsed_args.detail_id,
170+
'message_level': parsed_args.message_level,
171+
}
172+
173+
if share_client.api_version < api_versions.APIVersion("2.52"):
174+
if getattr(parsed_args, 'since') or getattr(parsed_args, 'before'):
175+
raise exceptions.CommandError(
176+
_(
177+
"Filtering messages by 'since' and 'before'"
178+
" is possible only with Manila API version >=2.52"
179+
)
180+
)
181+
else:
182+
search_opts['created_since'] = parsed_args.since
183+
search_opts['created_before'] = parsed_args.before
184+
185+
messages = share_client.messages.list(search_opts=search_opts)
186+
columns = [
187+
'ID',
188+
'Resource Type',
189+
'Resource ID',
190+
'Action ID',
191+
'User Message',
192+
'Detail ID',
193+
'Created At',
194+
]
195+
196+
return (
197+
columns,
198+
(oscutils.get_item_properties(m, columns) for m in messages),
199+
)
200+
201+
202+
class ShowMessage(command.ShowOne):
203+
"""Show details about a message."""
204+
205+
_description = _("Show details about a message")
206+
207+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
208+
parser = super().get_parser(prog_name)
209+
parser.add_argument(
210+
'message', metavar='<message>', help=_('ID of the message.')
211+
)
212+
return parser
213+
214+
def take_action(
215+
self, parsed_args: argparse.Namespace
216+
) -> tuple[Sequence[str], tuple[Any, ...]]:
217+
share_client = self.app.client_manager.share
218+
219+
message = apiutils.find_resource(
220+
share_client.messages, parsed_args.message
221+
)
222+
223+
return (
224+
MESSAGE_ATTRIBUTES,
225+
oscutils.get_dict_properties(message._info, MESSAGE_ATTRIBUTES),
226+
)

0 commit comments

Comments
 (0)