Skip to content

Commit d6cc50f

Browse files
committed
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
1 parent 70cb628 commit d6cc50f

3 files changed

Lines changed: 33 additions & 15 deletions

File tree

openstackclient/network/v2/subnet_pool.py

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,21 @@
2222

2323
from openstackclient.i18n import _
2424
from openstackclient.identity import common as identity_common
25+
from openstackclient.network import sdk_utils
2526

2627

2728
LOG = logging.getLogger(__name__)
2829

2930

3031
def _get_columns(item):
31-
columns = list(item.keys())
32-
if 'tenant_id' in columns:
33-
columns.remove('tenant_id')
34-
columns.append('project_id')
35-
return tuple(sorted(columns))
32+
column_map = {
33+
'default_prefix_length': 'default_prefixlen',
34+
'is_shared': 'shared',
35+
'maximum_prefix_length': 'max_prefixlen',
36+
'minimum_prefix_length': 'min_prefixlen',
37+
'tenant_id': 'project_id',
38+
}
39+
return sdk_utils.get_osc_show_columns_for_sdk_resource(item, column_map)
3640

3741

3842
_formatters = {
@@ -134,6 +138,8 @@ def _add_default_options(parser):
134138
)
135139

136140

141+
# TODO(rtheis): Use the SDK resource mapped attribute names once the
142+
# OSC minimum requirements include SDK 1.0.
137143
class CreateSubnetPool(command.ShowOne):
138144
"""Create subnet pool"""
139145

@@ -184,9 +190,9 @@ def take_action(self, parsed_args):
184190
if "prefixes" not in attrs:
185191
attrs['prefixes'] = []
186192
obj = client.create_subnet_pool(**attrs)
187-
columns = _get_columns(obj)
193+
display_columns, columns = _get_columns(obj)
188194
data = utils.get_item_properties(obj, columns, formatters=_formatters)
189-
return (columns, data)
195+
return (display_columns, data)
190196

191197

192198
class DeleteSubnetPool(command.Command):
@@ -223,6 +229,8 @@ def take_action(self, parsed_args):
223229
raise exceptions.CommandError(msg)
224230

225231

232+
# TODO(rtheis): Use only the SDK resource mapped attribute names once the
233+
# OSC minimum requirements include SDK 1.0.
226234
class ListSubnetPool(command.Lister):
227235
"""List subnet pools"""
228236

@@ -281,8 +289,10 @@ def take_action(self, parsed_args):
281289
filters = {}
282290
if parsed_args.share:
283291
filters['shared'] = True
292+
filters['is_shared'] = True
284293
elif parsed_args.no_share:
285294
filters['shared'] = False
295+
filters['is_shared'] = False
286296
if parsed_args.default:
287297
filters['is_default'] = True
288298
elif parsed_args.no_default:
@@ -294,6 +304,7 @@ def take_action(self, parsed_args):
294304
parsed_args.project_domain,
295305
).id
296306
filters['tenant_id'] = project_id
307+
filters['project_id'] = project_id
297308
if parsed_args.name is not None:
298309
filters['name'] = parsed_args.name
299310
if parsed_args.address_scope:
@@ -308,8 +319,8 @@ def take_action(self, parsed_args):
308319
if parsed_args.long:
309320
headers += ('Default Prefix Length', 'Address Scope',
310321
'Default Subnet Pool', 'Shared')
311-
columns += ('default_prefixlen', 'address_scope_id',
312-
'is_default', 'shared')
322+
columns += ('default_prefix_length', 'address_scope_id',
323+
'is_default', 'is_shared')
313324

314325
return (headers,
315326
(utils.get_item_properties(
@@ -318,6 +329,8 @@ def take_action(self, parsed_args):
318329
) for s in data))
319330

320331

332+
# TODO(rtheis): Use the SDK resource mapped attribute names once the
333+
# OSC minimum requirements include SDK 1.0.
321334
class SetSubnetPool(command.Command):
322335
"""Set subnet pool properties"""
323336

@@ -388,9 +401,9 @@ def take_action(self, parsed_args):
388401
parsed_args.subnet_pool,
389402
ignore_missing=False
390403
)
391-
columns = _get_columns(obj)
404+
display_columns, columns = _get_columns(obj)
392405
data = utils.get_item_properties(obj, columns, formatters=_formatters)
393-
return (columns, data)
406+
return (display_columns, data)
394407

395408

396409
class UnsetSubnetPool(command.Command):

openstackclient/tests/unit/network/v2/fakes.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1067,6 +1067,11 @@ def create_one_subnet_pool(attrs=None):
10671067
)
10681068

10691069
# Set attributes with special mapping in OpenStack SDK.
1070+
subnet_pool.default_prefix_length = \
1071+
subnet_pool_attrs['default_prefixlen']
1072+
subnet_pool.is_shared = subnet_pool_attrs['shared']
1073+
subnet_pool.maximum_prefix_length = subnet_pool_attrs['max_prefixlen']
1074+
subnet_pool.minimum_prefix_length = subnet_pool_attrs['min_prefixlen']
10701075
subnet_pool.project_id = subnet_pool_attrs['tenant_id']
10711076

10721077
return subnet_pool

openstackclient/tests/unit/network/v2/test_subnet_pool.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ def test_subnet_pool_list_no_share(self):
435435
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
436436

437437
columns, data = self.cmd.take_action(parsed_args)
438-
filters = {'shared': False}
438+
filters = {'shared': False, 'is_shared': False}
439439

440440
self.network.subnet_pools.assert_called_once_with(**filters)
441441
self.assertEqual(self.columns, columns)
@@ -451,7 +451,7 @@ def test_subnet_pool_list_share(self):
451451
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
452452

453453
columns, data = self.cmd.take_action(parsed_args)
454-
filters = {'shared': True}
454+
filters = {'shared': True, 'is_shared': True}
455455

456456
self.network.subnet_pools.assert_called_once_with(**filters)
457457
self.assertEqual(self.columns, columns)
@@ -501,7 +501,7 @@ def test_subnet_pool_list_project(self):
501501
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
502502

503503
columns, data = self.cmd.take_action(parsed_args)
504-
filters = {'tenant_id': project.id}
504+
filters = {'tenant_id': project.id, 'project_id': project.id}
505505

506506
self.network.subnet_pools.assert_called_once_with(**filters)
507507
self.assertEqual(self.columns, columns)
@@ -521,7 +521,7 @@ def test_subnet_pool_list_project_domain(self):
521521
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
522522

523523
columns, data = self.cmd.take_action(parsed_args)
524-
filters = {'tenant_id': project.id}
524+
filters = {'tenant_id': project.id, 'project_id': project.id}
525525

526526
self.network.subnet_pools.assert_called_once_with(**filters)
527527
self.assertEqual(self.columns, columns)

0 commit comments

Comments
 (0)