SDK Refactor: Prepare subnet pool commands
Prepare the OSC "subnet pool" commands for the SDK refactor. See [1] for details. [1] https://etherpad.openstack.org/p/osc-network-command-sdk-support Change-Id: I6d8cb7a079cf115ee25d48d9175e31f0f995c502 Partially-Implements: blueprint network-command-sdk-support
This commit is contained in:
		| @@ -22,17 +22,21 @@ from osc_lib import utils | |||||||
|  |  | ||||||
| from openstackclient.i18n import _ | from openstackclient.i18n import _ | ||||||
| from openstackclient.identity import common as identity_common | from openstackclient.identity import common as identity_common | ||||||
|  | from openstackclient.network import sdk_utils | ||||||
|  |  | ||||||
|  |  | ||||||
| LOG = logging.getLogger(__name__) | LOG = logging.getLogger(__name__) | ||||||
|  |  | ||||||
|  |  | ||||||
| def _get_columns(item): | def _get_columns(item): | ||||||
|     columns = list(item.keys()) |     column_map = { | ||||||
|     if 'tenant_id' in columns: |         'default_prefix_length': 'default_prefixlen', | ||||||
|         columns.remove('tenant_id') |         'is_shared': 'shared', | ||||||
|         columns.append('project_id') |         'maximum_prefix_length': 'max_prefixlen', | ||||||
|     return tuple(sorted(columns)) |         'minimum_prefix_length': 'min_prefixlen', | ||||||
|  |         'tenant_id': 'project_id', | ||||||
|  |     } | ||||||
|  |     return sdk_utils.get_osc_show_columns_for_sdk_resource(item, column_map) | ||||||
|  |  | ||||||
|  |  | ||||||
| _formatters = { | _formatters = { | ||||||
| @@ -134,6 +138,8 @@ def _add_default_options(parser): | |||||||
|     ) |     ) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # TODO(rtheis): Use the SDK resource mapped attribute names once the | ||||||
|  | # OSC minimum requirements include SDK 1.0. | ||||||
| class CreateSubnetPool(command.ShowOne): | class CreateSubnetPool(command.ShowOne): | ||||||
|     """Create subnet pool""" |     """Create subnet pool""" | ||||||
|  |  | ||||||
| @@ -184,9 +190,9 @@ class CreateSubnetPool(command.ShowOne): | |||||||
|         if "prefixes" not in attrs: |         if "prefixes" not in attrs: | ||||||
|             attrs['prefixes'] = [] |             attrs['prefixes'] = [] | ||||||
|         obj = client.create_subnet_pool(**attrs) |         obj = client.create_subnet_pool(**attrs) | ||||||
|         columns = _get_columns(obj) |         display_columns, columns = _get_columns(obj) | ||||||
|         data = utils.get_item_properties(obj, columns, formatters=_formatters) |         data = utils.get_item_properties(obj, columns, formatters=_formatters) | ||||||
|         return (columns, data) |         return (display_columns, data) | ||||||
|  |  | ||||||
|  |  | ||||||
| class DeleteSubnetPool(command.Command): | class DeleteSubnetPool(command.Command): | ||||||
| @@ -223,6 +229,8 @@ class DeleteSubnetPool(command.Command): | |||||||
|             raise exceptions.CommandError(msg) |             raise exceptions.CommandError(msg) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # TODO(rtheis): Use only the SDK resource mapped attribute names once the | ||||||
|  | # OSC minimum requirements include SDK 1.0. | ||||||
| class ListSubnetPool(command.Lister): | class ListSubnetPool(command.Lister): | ||||||
|     """List subnet pools""" |     """List subnet pools""" | ||||||
|  |  | ||||||
| @@ -281,8 +289,10 @@ class ListSubnetPool(command.Lister): | |||||||
|         filters = {} |         filters = {} | ||||||
|         if parsed_args.share: |         if parsed_args.share: | ||||||
|             filters['shared'] = True |             filters['shared'] = True | ||||||
|  |             filters['is_shared'] = True | ||||||
|         elif parsed_args.no_share: |         elif parsed_args.no_share: | ||||||
|             filters['shared'] = False |             filters['shared'] = False | ||||||
|  |             filters['is_shared'] = False | ||||||
|         if parsed_args.default: |         if parsed_args.default: | ||||||
|             filters['is_default'] = True |             filters['is_default'] = True | ||||||
|         elif parsed_args.no_default: |         elif parsed_args.no_default: | ||||||
| @@ -294,6 +304,7 @@ class ListSubnetPool(command.Lister): | |||||||
|                 parsed_args.project_domain, |                 parsed_args.project_domain, | ||||||
|             ).id |             ).id | ||||||
|             filters['tenant_id'] = project_id |             filters['tenant_id'] = project_id | ||||||
|  |             filters['project_id'] = project_id | ||||||
|         if parsed_args.name is not None: |         if parsed_args.name is not None: | ||||||
|             filters['name'] = parsed_args.name |             filters['name'] = parsed_args.name | ||||||
|         if parsed_args.address_scope: |         if parsed_args.address_scope: | ||||||
| @@ -308,8 +319,8 @@ class ListSubnetPool(command.Lister): | |||||||
|         if parsed_args.long: |         if parsed_args.long: | ||||||
|             headers += ('Default Prefix Length', 'Address Scope', |             headers += ('Default Prefix Length', 'Address Scope', | ||||||
|                         'Default Subnet Pool', 'Shared') |                         'Default Subnet Pool', 'Shared') | ||||||
|             columns += ('default_prefixlen', 'address_scope_id', |             columns += ('default_prefix_length', 'address_scope_id', | ||||||
|                         'is_default', 'shared') |                         'is_default', 'is_shared') | ||||||
|  |  | ||||||
|         return (headers, |         return (headers, | ||||||
|                 (utils.get_item_properties( |                 (utils.get_item_properties( | ||||||
| @@ -318,6 +329,8 @@ class ListSubnetPool(command.Lister): | |||||||
|                 ) for s in data)) |                 ) for s in data)) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # TODO(rtheis): Use the SDK resource mapped attribute names once the | ||||||
|  | # OSC minimum requirements include SDK 1.0. | ||||||
| class SetSubnetPool(command.Command): | class SetSubnetPool(command.Command): | ||||||
|     """Set subnet pool properties""" |     """Set subnet pool properties""" | ||||||
|  |  | ||||||
| @@ -388,9 +401,9 @@ class ShowSubnetPool(command.ShowOne): | |||||||
|             parsed_args.subnet_pool, |             parsed_args.subnet_pool, | ||||||
|             ignore_missing=False |             ignore_missing=False | ||||||
|         ) |         ) | ||||||
|         columns = _get_columns(obj) |         display_columns, columns = _get_columns(obj) | ||||||
|         data = utils.get_item_properties(obj, columns, formatters=_formatters) |         data = utils.get_item_properties(obj, columns, formatters=_formatters) | ||||||
|         return (columns, data) |         return (display_columns, data) | ||||||
|  |  | ||||||
|  |  | ||||||
| class UnsetSubnetPool(command.Command): | class UnsetSubnetPool(command.Command): | ||||||
|   | |||||||
| @@ -1067,6 +1067,11 @@ class FakeSubnetPool(object): | |||||||
|         ) |         ) | ||||||
|  |  | ||||||
|         # Set attributes with special mapping in OpenStack SDK. |         # Set attributes with special mapping in OpenStack SDK. | ||||||
|  |         subnet_pool.default_prefix_length = \ | ||||||
|  |             subnet_pool_attrs['default_prefixlen'] | ||||||
|  |         subnet_pool.is_shared = subnet_pool_attrs['shared'] | ||||||
|  |         subnet_pool.maximum_prefix_length = subnet_pool_attrs['max_prefixlen'] | ||||||
|  |         subnet_pool.minimum_prefix_length = subnet_pool_attrs['min_prefixlen'] | ||||||
|         subnet_pool.project_id = subnet_pool_attrs['tenant_id'] |         subnet_pool.project_id = subnet_pool_attrs['tenant_id'] | ||||||
|  |  | ||||||
|         return subnet_pool |         return subnet_pool | ||||||
|   | |||||||
| @@ -435,7 +435,7 @@ class TestListSubnetPool(TestSubnetPool): | |||||||
|         parsed_args = self.check_parser(self.cmd, arglist, verifylist) |         parsed_args = self.check_parser(self.cmd, arglist, verifylist) | ||||||
|  |  | ||||||
|         columns, data = self.cmd.take_action(parsed_args) |         columns, data = self.cmd.take_action(parsed_args) | ||||||
|         filters = {'shared': False} |         filters = {'shared': False, 'is_shared': False} | ||||||
|  |  | ||||||
|         self.network.subnet_pools.assert_called_once_with(**filters) |         self.network.subnet_pools.assert_called_once_with(**filters) | ||||||
|         self.assertEqual(self.columns, columns) |         self.assertEqual(self.columns, columns) | ||||||
| @@ -451,7 +451,7 @@ class TestListSubnetPool(TestSubnetPool): | |||||||
|         parsed_args = self.check_parser(self.cmd, arglist, verifylist) |         parsed_args = self.check_parser(self.cmd, arglist, verifylist) | ||||||
|  |  | ||||||
|         columns, data = self.cmd.take_action(parsed_args) |         columns, data = self.cmd.take_action(parsed_args) | ||||||
|         filters = {'shared': True} |         filters = {'shared': True, 'is_shared': True} | ||||||
|  |  | ||||||
|         self.network.subnet_pools.assert_called_once_with(**filters) |         self.network.subnet_pools.assert_called_once_with(**filters) | ||||||
|         self.assertEqual(self.columns, columns) |         self.assertEqual(self.columns, columns) | ||||||
| @@ -501,7 +501,7 @@ class TestListSubnetPool(TestSubnetPool): | |||||||
|         parsed_args = self.check_parser(self.cmd, arglist, verifylist) |         parsed_args = self.check_parser(self.cmd, arglist, verifylist) | ||||||
|  |  | ||||||
|         columns, data = self.cmd.take_action(parsed_args) |         columns, data = self.cmd.take_action(parsed_args) | ||||||
|         filters = {'tenant_id': project.id} |         filters = {'tenant_id': project.id, 'project_id': project.id} | ||||||
|  |  | ||||||
|         self.network.subnet_pools.assert_called_once_with(**filters) |         self.network.subnet_pools.assert_called_once_with(**filters) | ||||||
|         self.assertEqual(self.columns, columns) |         self.assertEqual(self.columns, columns) | ||||||
| @@ -521,7 +521,7 @@ class TestListSubnetPool(TestSubnetPool): | |||||||
|         parsed_args = self.check_parser(self.cmd, arglist, verifylist) |         parsed_args = self.check_parser(self.cmd, arglist, verifylist) | ||||||
|  |  | ||||||
|         columns, data = self.cmd.take_action(parsed_args) |         columns, data = self.cmd.take_action(parsed_args) | ||||||
|         filters = {'tenant_id': project.id} |         filters = {'tenant_id': project.id, 'project_id': project.id} | ||||||
|  |  | ||||||
|         self.network.subnet_pools.assert_called_once_with(**filters) |         self.network.subnet_pools.assert_called_once_with(**filters) | ||||||
|         self.assertEqual(self.columns, columns) |         self.assertEqual(self.columns, columns) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Richard Theis
					Richard Theis