Skip to content

Commit 7ed4f68

Browse files
committed
compute: Add missing options for 'server event list'
Add pagination parameters, '--limit' and '--offset', and filtering parameters, '--changes-since' and '--changes-before'. Change-Id: Ieca8267c3b204ae2db580502cc8fe72c95eddf09 Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
1 parent 5ec4d4c commit 7ed4f68

3 files changed

Lines changed: 375 additions & 44 deletions

File tree

openstackclient/compute/v2/server_event.py

Lines changed: 135 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@
1717

1818
import logging
1919

20+
import iso8601
21+
from novaclient import api_versions
2022
from osc_lib.command import command
23+
from osc_lib import exceptions
2124
from osc_lib import utils
2225

2326
from openstackclient.i18n import _
@@ -27,10 +30,11 @@
2730

2831

2932
class ListServerEvent(command.Lister):
30-
_description = _(
31-
"List recent events of a server. "
32-
"Specify ``--os-compute-api-version 2.21`` "
33-
"or higher to show events for a deleted server.")
33+
"""List recent events of a server.
34+
35+
Specify ``--os-compute-api-version 2.21`` or higher to show events for a
36+
deleted server.
37+
"""
3438

3539
def get_parser(self, prog_name):
3640
parser = super(ListServerEvent, self).get_parser(prog_name)
@@ -45,60 +49,144 @@ def get_parser(self, prog_name):
4549
default=False,
4650
help=_("List additional fields in output")
4751
)
52+
parser.add_argument(
53+
'--changes-since',
54+
dest='changes_since',
55+
metavar='<changes-since>',
56+
help=_(
57+
"List only server events changed later or equal to a certain "
58+
"point of time. The provided time should be an ISO 8061 "
59+
"formatted time, e.g. ``2016-03-04T06:27:59Z``. "
60+
"(supported with --os-compute-api-version 2.58 or above)"
61+
),
62+
)
63+
parser.add_argument(
64+
'--changes-before',
65+
dest='changes_before',
66+
metavar='<changes-before>',
67+
help=_(
68+
"List only server events changed earlier or equal to a "
69+
"certain point of time. The provided time should be an ISO "
70+
"8061 formatted time, e.g. ``2016-03-04T06:27:59Z``. "
71+
"(supported with --os-compute-api-version 2.66 or above)"
72+
),
73+
)
74+
parser.add_argument(
75+
'--marker',
76+
help=_(
77+
'The last server event ID of the previous page '
78+
'(supported by --os-compute-api-version 2.58 or above)'
79+
),
80+
)
81+
parser.add_argument(
82+
'--limit',
83+
type=int,
84+
help=_(
85+
'Maximum number of server events to display '
86+
'(supported by --os-compute-api-version 2.58 or above)'
87+
),
88+
)
4889
return parser
4990

5091
def take_action(self, parsed_args):
5192
compute_client = self.app.client_manager.compute
52-
server_id = utils.find_resource(compute_client.servers,
53-
parsed_args.server).id
54-
data = compute_client.instance_action.list(server_id)
93+
94+
kwargs = {}
95+
96+
if parsed_args.marker:
97+
if compute_client.api_version < api_versions.APIVersion('2.58'):
98+
msg = _(
99+
'--os-compute-api-version 2.58 or greater is required to '
100+
'support the --marker option'
101+
)
102+
raise exceptions.CommandError(msg)
103+
kwargs['marker'] = parsed_args.marker
104+
105+
if parsed_args.limit:
106+
if compute_client.api_version < api_versions.APIVersion('2.58'):
107+
msg = _(
108+
'--os-compute-api-version 2.58 or greater is required to '
109+
'support the --limit option'
110+
)
111+
raise exceptions.CommandError(msg)
112+
kwargs['limit'] = parsed_args.limit
113+
114+
if parsed_args.changes_since:
115+
if compute_client.api_version < api_versions.APIVersion('2.58'):
116+
msg = _(
117+
'--os-compute-api-version 2.58 or greater is required to '
118+
'support the --changes-since option'
119+
)
120+
raise exceptions.CommandError(msg)
121+
122+
try:
123+
iso8601.parse_date(parsed_args.changes_since)
124+
except (TypeError, iso8601.ParseError):
125+
msg = _('Invalid changes-since value: %s')
126+
raise exceptions.CommandError(msg % parsed_args.changes_since)
127+
128+
kwargs['changes_since'] = parsed_args.changes_since
129+
130+
if parsed_args.changes_before:
131+
if compute_client.api_version < api_versions.APIVersion('2.66'):
132+
msg = _(
133+
'--os-compute-api-version 2.66 or greater is required to '
134+
'support the --changes-before option'
135+
)
136+
raise exceptions.CommandError(msg)
137+
138+
try:
139+
iso8601.parse_date(parsed_args.changes_before)
140+
except (TypeError, iso8601.ParseError):
141+
msg = _('Invalid changes-before value: %s')
142+
raise exceptions.CommandError(msg % parsed_args.changes_before)
143+
144+
kwargs['changes_before'] = parsed_args.changes_before
145+
146+
server_id = utils.find_resource(
147+
compute_client.servers, parsed_args.server,
148+
).id
149+
150+
data = compute_client.instance_action.list(server_id, **kwargs)
151+
152+
columns = (
153+
'request_id',
154+
'instance_uuid',
155+
'action',
156+
'start_time',
157+
)
158+
column_headers = (
159+
'Request ID',
160+
'Server ID',
161+
'Action',
162+
'Start Time',
163+
)
55164

56165
if parsed_args.long:
57-
columns = (
58-
'request_id',
59-
'instance_uuid',
60-
'action',
61-
'start_time',
166+
columns += (
62167
'message',
63168
'project_id',
64169
'user_id',
65170
)
66-
column_headers = (
67-
'Request ID',
68-
'Server ID',
69-
'Action',
70-
'Start Time',
171+
column_headers += (
71172
'Message',
72173
'Project ID',
73174
'User ID',
74175
)
75-
else:
76-
columns = (
77-
'request_id',
78-
'instance_uuid',
79-
'action',
80-
'start_time',
81-
)
82-
column_headers = (
83-
'Request ID',
84-
'Server ID',
85-
'Action',
86-
'Start Time',
87-
)
88176

89-
return (column_headers,
90-
(utils.get_item_properties(
91-
s, columns,
92-
) for s in data))
177+
return (
178+
column_headers,
179+
(utils.get_item_properties(s, columns) for s in data),
180+
)
93181

94182

95183
class ShowServerEvent(command.ShowOne):
96-
_description = _(
97-
"Show server event details. "
98-
"Specify ``--os-compute-api-version 2.21`` "
99-
"or higher to show event details for a deleted server. "
100-
"Specify ``--os-compute-api-version 2.51`` "
101-
"or higher to show event details for non-admin users.")
184+
"""Show server event details.
185+
186+
Specify ``--os-compute-api-version 2.21`` or higher to show event details
187+
for a deleted server. Specify ``--os-compute-api-version 2.51`` or higher
188+
to show event details for non-admin users.
189+
"""
102190

103191
def get_parser(self, prog_name):
104192
parser = super(ShowServerEvent, self).get_parser(prog_name)
@@ -116,9 +204,13 @@ def get_parser(self, prog_name):
116204

117205
def take_action(self, parsed_args):
118206
compute_client = self.app.client_manager.compute
119-
server_id = utils.find_resource(compute_client.servers,
120-
parsed_args.server).id
207+
208+
server_id = utils.find_resource(
209+
compute_client.servers, parsed_args.server,
210+
).id
211+
121212
action_detail = compute_client.instance_action.get(
122-
server_id, parsed_args.request_id)
213+
server_id, parsed_args.request_id
214+
)
123215

124216
return zip(*sorted(action_detail.to_dict().items()))

0 commit comments

Comments
 (0)