1717
1818import logging
1919
20+ import iso8601
21+ from novaclient import api_versions
2022from osc_lib .command import command
23+ from osc_lib import exceptions
2124from osc_lib import utils
2225
2326from openstackclient .i18n import _
2730
2831
2932class 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
95183class 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