2525
2626from openstackclient.i18n import _
2727from openstackclient.identity import common as identity_common
28+ from openstackclient.network import sdk_utils
2829
2930
3031LOG = logging.getLogger(__name__)
@@ -36,34 +37,33 @@ def _format_admin_state(state):
3637
3738_formatters = {
3839 'admin_state_up': _format_admin_state,
40+ 'is_admin_state_up': _format_admin_state,
3941 'allowed_address_pairs': utils.format_list_of_dicts,
4042 'binding_profile': utils.format_dict,
4143 'binding_vif_details': utils.format_dict,
44+ 'binding:profile': utils.format_dict,
45+ 'binding:vif_details': utils.format_dict,
4246 'dns_assignment': utils.format_list_of_dicts,
4347 'extra_dhcp_opts': utils.format_list_of_dicts,
4448 'fixed_ips': utils.format_list_of_dicts,
49+ 'security_group_ids': utils.format_list,
4550 'security_groups': utils.format_list,
4651}
4752
4853
4954def _get_columns(item):
50- columns = list(item.keys())
51- if 'tenant_id' in columns:
52- columns.remove('tenant_id')
53- if 'project_id' not in columns:
54- columns.append('project_id')
55- binding_columns = [
56- 'binding:host_id',
57- 'binding:profile',
58- 'binding:vif_details',
59- 'binding:vif_type',
60- 'binding:vnic_type',
61- ]
62- for binding_column in binding_columns:
63- if binding_column in columns:
64- columns.remove(binding_column)
65- columns.append(binding_column.replace('binding:', 'binding_', 1))
66- return tuple(sorted(columns))
55+ column_map = {
56+ 'binding:host_id': 'binding_host_id',
57+ 'binding:profile': 'binding_profile',
58+ 'binding:vif_details': 'binding_vif_details',
59+ 'binding:vif_type': 'binding_vif_type',
60+ 'binding:vnic_type': 'binding_vnic_type',
61+ 'is_admin_state_up': 'admin_state_up',
62+ 'is_port_security_enabled': 'port_security_enabled',
63+ 'security_group_ids': 'security_groups',
64+ 'tenant_id': 'project_id',
65+ }
66+ return sdk_utils.get_osc_show_columns_for_sdk_resource(item, column_map)
6767
6868
6969class JSONKeyValueAction(argparse.Action):
@@ -244,6 +244,8 @@ def _add_updatable_args(parser):
244244 )
245245
246246
247+ # TODO(abhiraut): Use the SDK resource mapped attribute names once the
248+ # OSC minimum requirements include SDK 1.0.
247249class CreatePort(command.ShowOne):
248250 _description = _("Create a new port")
249251
@@ -349,10 +351,10 @@ def take_action(self, parsed_args):
349351 attrs['security_groups'] = []
350352
351353 obj = client.create_port(**attrs)
352- columns = _get_columns(obj)
354+ display_columns, columns = _get_columns(obj)
353355 data = utils.get_item_properties(obj, columns, formatters=_formatters)
354356
355- return (columns , data)
357+ return (display_columns , data)
356358
357359
358360class DeletePort(command.Command):
@@ -389,6 +391,8 @@ def take_action(self, parsed_args):
389391 raise exceptions.CommandError(msg)
390392
391393
394+ # TODO(abhiraut): Use only the SDK resource mapped attribute names once the
395+ # OSC minimum requirements include SDK 1.0.
392396class ListPort(command.Lister):
393397 _description = _("List ports")
394398
@@ -451,7 +455,7 @@ def take_action(self, parsed_args):
451455
452456 filters = {}
453457 if parsed_args.long:
454- columns += ('security_groups ', 'device_owner',)
458+ columns += ('security_group_ids ', 'device_owner',)
455459 column_headers += ('Security Groups', 'Device Owner',)
456460 if parsed_args.device_owner is not None:
457461 filters['device_owner'] = parsed_args.device_owner
@@ -479,6 +483,8 @@ def take_action(self, parsed_args):
479483 ) for s in data))
480484
481485
486+ # TODO(abhiraut): Use the SDK resource mapped attribute names once the
487+ # OSC minimum requirements include SDK 1.0.
482488class SetPort(command.Command):
483489 _description = _("Set port properties")
484490
@@ -621,11 +627,13 @@ def get_parser(self, prog_name):
621627 def take_action(self, parsed_args):
622628 client = self.app.client_manager.network
623629 obj = client.find_port(parsed_args.port, ignore_missing=False)
624- columns = _get_columns(obj)
630+ display_columns, columns = _get_columns(obj)
625631 data = utils.get_item_properties(obj, columns, formatters=_formatters)
626- return (columns , data)
632+ return (display_columns , data)
627633
628634
635+ # TODO(abhiraut): Use the SDK resource mapped attribute names once the
636+ # OSC minimum requirements include SDK 1.0.
629637class UnsetPort(command.Command):
630638 _description = _("Unset port properties")
631639
0 commit comments