1717
1818import logging
1919
20- from novaclient import api_versions
20+ from openstack import utils as sdk_utils
2121from osc_lib .cli import format_columns
2222from osc_lib .cli import parseractions
2323from osc_lib .command import command
3131
3232
3333_formatters = {
34- 'members ' : format_columns .ListColumn ,
34+ 'member_ids ' : format_columns .ListColumn ,
3535 'policies' : format_columns .ListColumn ,
3636 'rules' : format_columns .DictColumn ,
3737}
3838
3939
40- def _get_columns (info ):
41- columns = list (info .keys ())
42- if 'metadata' in columns :
43- # NOTE(RuiChen): The metadata of server group is always empty since API
44- # compatible, so hide it in order to avoid confusion.
45- columns .remove ('metadata' )
46- return tuple (sorted (columns ))
40+ def _get_server_group_columns (item , client ):
41+ column_map = {'member_ids' : 'members' }
42+ hidden_columns = ['metadata' , 'location' ]
43+
44+ if sdk_utils .supports_microversion (client , '2.64' ):
45+ hidden_columns .append ('policies' )
46+ else :
47+ hidden_columns .append ('policy' )
48+ hidden_columns .append ('rules' )
49+
50+ return utils .get_osc_show_columns_for_sdk_resource (
51+ item , column_map , hidden_columns )
4752
4853
4954class CreateServerGroup (command .ShowOne ):
@@ -54,7 +59,7 @@ def get_parser(self, prog_name):
5459 parser .add_argument (
5560 'name' ,
5661 metavar = '<name>' ,
57- help = _ ("New server group name" )
62+ help = _ ("New server group name" ),
5863 )
5964 parser .add_argument (
6065 '--policy' ,
@@ -87,42 +92,50 @@ def get_parser(self, prog_name):
8792 return parser
8893
8994 def take_action (self , parsed_args ):
90- compute_client = self .app .client_manager .compute
91- info = {}
95+ compute_client = self .app .client_manager .sdk_connection .compute
9296
9397 if parsed_args .policy in ('soft-affinity' , 'soft-anti-affinity' ):
94- if compute_client . api_version < api_versions . APIVersion ( '2.15' ):
98+ if not sdk_utils . supports_microversion ( compute_client , '2.15' ):
9599 msg = _ (
96100 '--os-compute-api-version 2.15 or greater is required to '
97101 'support the %s policy'
98102 )
99103 raise exceptions .CommandError (msg % parsed_args .policy )
100104
101105 if parsed_args .rules :
102- if compute_client . api_version < api_versions . APIVersion ( '2.64' ):
106+ if not sdk_utils . supports_microversion ( compute_client , '2.64' ):
103107 msg = _ (
104108 '--os-compute-api-version 2.64 or greater is required to '
105109 'support the --rule option'
106110 )
107111 raise exceptions .CommandError (msg )
108112
109- if compute_client .api_version < api_versions .APIVersion ('2.64' ):
110- kwargs = {'policies' : [parsed_args .policy ]}
113+ if not sdk_utils .supports_microversion (compute_client , '2.64' ):
114+ kwargs = {
115+ 'name' : parsed_args .name ,
116+ 'policies' : [parsed_args .policy ],
117+ }
111118 else :
112119 kwargs = {
120+ 'name' : parsed_args .name ,
113121 'policy' : parsed_args .policy ,
114- 'rules' : parsed_args .rules or None ,
115122 }
116123
117- server_group = compute_client . server_groups . create (
118- name = parsed_args .name , ** kwargs )
124+ if parsed_args . rules :
125+ kwargs [ 'rules' ] = parsed_args .rules
119126
120- info . update ( server_group . _info )
127+ server_group = compute_client . create_server_group ( ** kwargs )
121128
122- columns = _get_columns (info )
123- data = utils .get_dict_properties (
124- info , columns , formatters = _formatters )
125- return columns , data
129+ display_columns , columns = _get_server_group_columns (
130+ server_group ,
131+ compute_client ,
132+ )
133+ data = utils .get_item_properties (
134+ server_group ,
135+ columns ,
136+ formatters = _formatters ,
137+ )
138+ return display_columns , data
126139
127140
128141class DeleteServerGroup (command .Command ):
@@ -134,18 +147,17 @@ def get_parser(self, prog_name):
134147 'server_group' ,
135148 metavar = '<server-group>' ,
136149 nargs = '+' ,
137- help = _ ("server group(s) to delete (name or ID)" )
150+ help = _ ("server group(s) to delete (name or ID)" ),
138151 )
139152 return parser
140153
141154 def take_action (self , parsed_args ):
142- compute_client = self .app .client_manager .compute
155+ compute_client = self .app .client_manager .sdk_connection . compute
143156 result = 0
144157 for group in parsed_args .server_group :
145158 try :
146- group_obj = utils .find_resource (compute_client .server_groups ,
147- group )
148- compute_client .server_groups .delete (group_obj .id )
159+ group_obj = compute_client .find_server_group (group )
160+ compute_client .delete_server_group (group_obj .id )
149161 # Catch all exceptions in order to avoid to block the next deleting
150162 except Exception as e :
151163 result += 1
@@ -169,13 +181,13 @@ def get_parser(self, prog_name):
169181 '--all-projects' ,
170182 action = 'store_true' ,
171183 default = False ,
172- help = _ ("Display information from all projects (admin only)" )
184+ help = _ ("Display information from all projects (admin only)" ),
173185 )
174186 parser .add_argument (
175187 '--long' ,
176188 action = 'store_true' ,
177189 default = False ,
178- help = _ ("List additional fields in output" )
190+ help = _ ("List additional fields in output" ),
179191 )
180192 # TODO(stephenfin): This should really be a --marker option, but alas
181193 # the API doesn't support that for some reason
@@ -204,7 +216,7 @@ def get_parser(self, prog_name):
204216 return parser
205217
206218 def take_action (self , parsed_args ):
207- compute_client = self .app .client_manager .compute
219+ compute_client = self .app .client_manager .sdk_connection . compute
208220
209221 kwargs = {}
210222
@@ -217,10 +229,10 @@ def take_action(self, parsed_args):
217229 if parsed_args .limit :
218230 kwargs ['limit' ] = parsed_args .limit
219231
220- data = compute_client .server_groups . list (** kwargs )
232+ data = compute_client .server_groups (** kwargs )
221233
222234 policy_key = 'Policies'
223- if compute_client . api_version >= api_versions . APIVersion ( " 2.64" ):
235+ if sdk_utils . supports_microversion ( compute_client , ' 2.64' ):
224236 policy_key = 'Policy'
225237
226238 columns = (
@@ -235,7 +247,7 @@ def take_action(self, parsed_args):
235247 )
236248 if parsed_args .long :
237249 columns += (
238- 'members ' ,
250+ 'member_ids ' ,
239251 'project_id' ,
240252 'user_id' ,
241253 )
@@ -263,17 +275,18 @@ def get_parser(self, prog_name):
263275 parser .add_argument (
264276 'server_group' ,
265277 metavar = '<server-group>' ,
266- help = _ ("server group to display (name or ID)" )
278+ help = _ ("server group to display (name or ID)" ),
267279 )
268280 return parser
269281
270282 def take_action (self , parsed_args ):
271- compute_client = self .app .client_manager .compute
272- group = utils .find_resource (compute_client .server_groups ,
273- parsed_args .server_group )
274- info = {}
275- info .update (group ._info )
276- columns = _get_columns (info )
277- data = utils .get_dict_properties (
278- info , columns , formatters = _formatters )
279- return columns , data
283+ compute_client = self .app .client_manager .sdk_connection .compute
284+ group = compute_client .find_server_group (parsed_args .server_group )
285+ display_columns , columns = _get_server_group_columns (
286+ group ,
287+ compute_client ,
288+ )
289+ data = utils .get_item_properties (
290+ group , columns , formatters = _formatters
291+ )
292+ return display_columns , data
0 commit comments