Skip to content

Commit 60370b4

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "SDK refactor: Prepare network commands"
2 parents 63377f2 + 22d639b commit 60370b4

3 files changed

Lines changed: 100 additions & 33 deletions

File tree

openstackclient/network/v2/network.py

Lines changed: 47 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from openstackclient.i18n import _
2020
from openstackclient.identity import common as identity_common
2121
from openstackclient.network import common
22+
from openstackclient.network import sdk_utils
2223

2324

2425
def _format_admin_state(item):
@@ -31,13 +32,33 @@ def _format_router_external(item):
3132

3233
_formatters = {
3334
'subnets': utils.format_list,
35+
'subnet_ids': utils.format_list,
3436
'admin_state_up': _format_admin_state,
37+
'is_admin_state_up': _format_admin_state,
3538
'router:external': _format_router_external,
39+
'is_router_external': _format_router_external,
3640
'availability_zones': utils.format_list,
3741
'availability_zone_hints': utils.format_list,
3842
}
3943

4044

45+
def _get_network_columns(item):
46+
column_map = {
47+
'subnet_ids': 'subnets',
48+
'is_admin_state_up': 'admin_state_up',
49+
'is_router_external': 'router:external',
50+
'is_port_security_enabled': 'port_security_enabled',
51+
'provider_network_type': 'provider:network_type',
52+
'provider_physical_network': 'provider:physical_network',
53+
'provider_segmentation_id': 'provider:segmentation_id',
54+
'is_shared': 'shared',
55+
'ipv4_address_scope_id': 'ipv4_address_scope',
56+
'ipv6_address_scope_id': 'ipv6_address_scope',
57+
'tenant_id': 'project_id',
58+
}
59+
return sdk_utils.get_osc_show_columns_for_sdk_resource(item, column_map)
60+
61+
4162
def _get_columns(item):
4263
columns = list(item.keys())
4364
if 'tenant_id' in columns:
@@ -162,6 +183,8 @@ def _get_attrs_compute(client_manager, parsed_args):
162183
return attrs
163184

164185

186+
# TODO(sindhu): Use the SDK resource mapped attribute names once the
187+
# OSC minimum requirements include SDK 1.0.
165188
class CreateNetwork(common.NetworkAndComputeShowOne):
166189
_description = _("Create new network")
167190

@@ -275,9 +298,9 @@ def update_parser_compute(self, parser):
275298
def take_action_network(self, client, parsed_args):
276299
attrs = _get_attrs(self.app.client_manager, parsed_args)
277300
obj = client.create_network(**attrs)
278-
columns = _get_columns(obj)
301+
display_columns, columns = _get_network_columns(obj)
279302
data = utils.get_item_properties(obj, columns, formatters=_formatters)
280-
return (columns, data)
303+
return (display_columns, data)
281304

282305
def take_action_compute(self, client, parsed_args):
283306
attrs = _get_attrs_compute(self.app.client_manager, parsed_args)
@@ -313,6 +336,8 @@ def take_action_compute(self, client, parsed_args):
313336
client.networks.delete(network.id)
314337

315338

339+
# TODO(sindhu): Use the SDK resource mapped attribute names once the
340+
# OSC minimum requirements include SDK 1.0.
316341
class ListNetwork(common.NetworkAndComputeLister):
317342
_description = _("List networks")
318343

@@ -405,12 +430,12 @@ def take_action_network(self, client, parsed_args):
405430
'id',
406431
'name',
407432
'status',
408-
'tenant_id',
409-
'admin_state_up',
410-
'shared',
411-
'subnets',
433+
'project_id',
434+
'is_admin_state_up',
435+
'is_shared',
436+
'subnet_ids',
412437
'provider_network_type',
413-
'router:external',
438+
'is_router_external',
414439
'availability_zones',
415440
)
416441
column_headers = (
@@ -429,7 +454,7 @@ def take_action_network(self, client, parsed_args):
429454
columns = (
430455
'id',
431456
'name',
432-
'subnets'
457+
'subnet_ids'
433458
)
434459
column_headers = (
435460
'ID',
@@ -441,16 +466,20 @@ def take_action_network(self, client, parsed_args):
441466

442467
if parsed_args.external:
443468
args['router:external'] = True
469+
args['is_router_external'] = True
444470
elif parsed_args.internal:
445471
args['router:external'] = False
472+
args['is_router_external'] = False
446473

447474
if parsed_args.name is not None:
448475
args['name'] = parsed_args.name
449476

450477
if parsed_args.enable:
451478
args['admin_state_up'] = True
479+
args['is_admin_state_up'] = True
452480
elif parsed_args.disable:
453481
args['admin_state_up'] = False
482+
args['is_admin_state_up'] = False
454483

455484
if parsed_args.project:
456485
project = identity_common.find_project(
@@ -459,21 +488,27 @@ def take_action_network(self, client, parsed_args):
459488
parsed_args.project_domain,
460489
)
461490
args['tenant_id'] = project.id
491+
args['project_id'] = project.id
462492

463493
if parsed_args.share:
464494
args['shared'] = True
495+
args['is_shared'] = True
465496
elif parsed_args.no_share:
466497
args['shared'] = False
498+
args['is_shared'] = False
467499

468500
if parsed_args.status:
469501
args['status'] = parsed_args.status
470502

471503
if parsed_args.provider_network_type:
472504
args['provider:network_type'] = parsed_args.provider_network_type
505+
args['provider_network_type'] = parsed_args.provider_network_type
473506
if parsed_args.physical_network:
474507
args['provider:physical_network'] = parsed_args.physical_network
508+
args['provider_physical_network'] = parsed_args.physical_network
475509
if parsed_args.segmentation_id:
476510
args['provider:segmentation_id'] = parsed_args.segmentation_id
511+
args['provider_segmentation_id'] = parsed_args.segmentation_id
477512

478513
data = client.networks(**args)
479514

@@ -504,6 +539,8 @@ def take_action_compute(self, client, parsed_args):
504539
) for s in data))
505540

506541

542+
# TODO(sindhu): Use the SDK resource mapped attribute names once the
543+
# OSC minimum requirements include SDK 1.0.
507544
class SetNetwork(command.Command):
508545
_description = _("Set network properties")
509546

@@ -619,9 +656,9 @@ def update_parser_common(self, parser):
619656

620657
def take_action_network(self, client, parsed_args):
621658
obj = client.find_network(parsed_args.network, ignore_missing=False)
622-
columns = _get_columns(obj)
659+
display_columns, columns = _get_network_columns(obj)
623660
data = utils.get_item_properties(obj, columns, formatters=_formatters)
624-
return (columns, data)
661+
return (display_columns, data)
625662

626663
def take_action_compute(self, client, parsed_args):
627664
obj = utils.find_resource(

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

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -297,15 +297,17 @@ def create_one_network(attrs=None):
297297
'admin_state_up': True,
298298
'shared': False,
299299
'subnets': ['a', 'b'],
300-
'provider_network_type': 'vlan',
301-
'provider_physical_network': 'physnet1',
302-
'provider_segmentation_id': "400",
300+
'provider:network_type': 'vlan',
301+
'provider:physical_network': 'physnet1',
302+
'provider:segmentation_id': "400",
303303
'router:external': True,
304304
'availability_zones': [],
305305
'availability_zone_hints': [],
306306
'is_default': False,
307307
'port_security_enabled': True,
308308
'qos_policy_id': 'qos-policy-id-' + uuid.uuid4().hex,
309+
'ipv4_address_scope': 'ipv4' + uuid.uuid4().hex,
310+
'ipv6_address_scope': 'ipv6' + uuid.uuid4().hex,
309311
}
310312

311313
# Overwrite default attributes.
@@ -317,8 +319,21 @@ def create_one_network(attrs=None):
317319
# Set attributes with special mapping in OpenStack SDK.
318320
network.project_id = network_attrs['tenant_id']
319321
network.is_router_external = network_attrs['router:external']
322+
network.is_admin_state_up = network_attrs['admin_state_up']
320323
network.is_port_security_enabled = \
321324
network_attrs['port_security_enabled']
325+
network.subnet_ids = network_attrs['subnets']
326+
network.is_shared = network_attrs['shared']
327+
network.provider_network_type = \
328+
network_attrs['provider:network_type']
329+
network.provider_physical_network = \
330+
network_attrs['provider:physical_network']
331+
network.provider_segmentation_id = \
332+
network_attrs['provider:segmentation_id']
333+
network.ipv4_address_scope_id = \
334+
network_attrs['ipv4_address_scope']
335+
network.ipv6_address_scope_id = \
336+
network_attrs['ipv6_address_scope']
322337

323338
return network
324339

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

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,15 @@ class TestCreateNetworkIdentityV3(TestNetwork):
6262
'availability_zones',
6363
'description',
6464
'id',
65+
'ipv4_address_scope',
66+
'ipv6_address_scope',
6567
'is_default',
6668
'name',
6769
'port_security_enabled',
6870
'project_id',
69-
'provider_network_type',
70-
'provider_physical_network',
71-
'provider_segmentation_id',
71+
'provider:network_type',
72+
'provider:physical_network',
73+
'provider:segmentation_id',
7274
'qos_policy_id',
7375
'router:external',
7476
'shared',
@@ -82,6 +84,8 @@ class TestCreateNetworkIdentityV3(TestNetwork):
8284
utils.format_list(_network.availability_zones),
8385
_network.description,
8486
_network.id,
87+
_network.ipv4_address_scope_id,
88+
_network.ipv6_address_scope_id,
8589
_network.is_default,
8690
_network.name,
8791
_network.is_port_security_enabled,
@@ -236,13 +240,15 @@ class TestCreateNetworkIdentityV2(TestNetwork):
236240
'availability_zones',
237241
'description',
238242
'id',
243+
'ipv4_address_scope',
244+
'ipv6_address_scope',
239245
'is_default',
240246
'name',
241247
'port_security_enabled',
242248
'project_id',
243-
'provider_network_type',
244-
'provider_physical_network',
245-
'provider_segmentation_id',
249+
'provider:network_type',
250+
'provider:physical_network',
251+
'provider:segmentation_id',
246252
'qos_policy_id',
247253
'router:external',
248254
'shared',
@@ -256,6 +262,8 @@ class TestCreateNetworkIdentityV2(TestNetwork):
256262
utils.format_list(_network.availability_zones),
257263
_network.description,
258264
_network.id,
265+
_network.ipv4_address_scope_id,
266+
_network.ipv6_address_scope_id,
259267
_network.is_default,
260268
_network.name,
261269
_network.is_port_security_enabled,
@@ -512,7 +520,7 @@ def test_list_external(self):
512520
columns, data = self.cmd.take_action(parsed_args)
513521

514522
self.network.networks.assert_called_once_with(
515-
**{'router:external': True}
523+
**{'router:external': True, 'is_router_external': True}
516524
)
517525
self.assertEqual(self.columns, columns)
518526
self.assertEqual(self.data, list(data))
@@ -529,7 +537,7 @@ def test_list_internal(self):
529537
columns, data = self.cmd.take_action(parsed_args)
530538

531539
self.network.networks.assert_called_once_with(
532-
**{'router:external': False}
540+
**{'router:external': False, 'is_router_external': False}
533541
)
534542
self.assertEqual(self.columns, columns)
535543
self.assertEqual(self.data, list(data))
@@ -585,7 +593,7 @@ def test_network_list_enable(self):
585593
columns, data = self.cmd.take_action(parsed_args)
586594

587595
self.network.networks.assert_called_once_with(
588-
**{'admin_state_up': True}
596+
**{'admin_state_up': True, 'is_admin_state_up': True}
589597
)
590598
self.assertEqual(self.columns, columns)
591599
self.assertEqual(self.data, list(data))
@@ -603,7 +611,7 @@ def test_network_list_disable(self):
603611
columns, data = self.cmd.take_action(parsed_args)
604612

605613
self.network.networks.assert_called_once_with(
606-
**{'admin_state_up': False}
614+
**{'admin_state_up': False, 'is_admin_state_up': False}
607615
)
608616
self.assertEqual(self.columns, columns)
609617
self.assertEqual(self.data, list(data))
@@ -621,7 +629,7 @@ def test_network_list_project(self):
621629

622630
columns, data = self.cmd.take_action(parsed_args)
623631
self.network.networks.assert_called_once_with(
624-
**{'tenant_id': project.id}
632+
**{'tenant_id': project.id, 'project_id': project.id}
625633
)
626634

627635
self.assertEqual(self.columns, columns)
@@ -640,7 +648,7 @@ def test_network_list_project_domain(self):
640648
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
641649

642650
columns, data = self.cmd.take_action(parsed_args)
643-
filters = {'tenant_id': project.id}
651+
filters = {'tenant_id': project.id, 'project_id': project.id}
644652

645653
self.network.networks.assert_called_once_with(**filters)
646654
self.assertEqual(self.columns, columns)
@@ -658,7 +666,7 @@ def test_network_list_share(self):
658666
columns, data = self.cmd.take_action(parsed_args)
659667

660668
self.network.networks.assert_called_once_with(
661-
**{'shared': True}
669+
**{'shared': True, 'is_shared': True}
662670
)
663671
self.assertEqual(self.columns, columns)
664672
self.assertEqual(self.data, list(data))
@@ -675,7 +683,7 @@ def test_network_list_no_share(self):
675683
columns, data = self.cmd.take_action(parsed_args)
676684

677685
self.network.networks.assert_called_once_with(
678-
**{'shared': False}
686+
**{'shared': False, 'is_shared': False}
679687
)
680688
self.assertEqual(self.columns, columns)
681689
self.assertEqual(self.data, list(data))
@@ -711,7 +719,8 @@ def test_network_list_provider_network_type(self):
711719
columns, data = self.cmd.take_action(parsed_args)
712720

713721
self.network.networks.assert_called_once_with(
714-
**{'provider:network_type': network_type}
722+
**{'provider:network_type': network_type,
723+
'provider_network_type': network_type}
715724
)
716725
self.assertEqual(self.columns, columns)
717726
self.assertEqual(self.data, list(data))
@@ -728,7 +737,8 @@ def test_network_list_provider_physical_network(self):
728737
columns, data = self.cmd.take_action(parsed_args)
729738

730739
self.network.networks.assert_called_once_with(
731-
**{'provider:physical_network': physical_network}
740+
**{'provider:physical_network': physical_network,
741+
'provider_physical_network': physical_network}
732742
)
733743
self.assertEqual(self.columns, columns)
734744
self.assertEqual(self.data, list(data))
@@ -745,7 +755,8 @@ def test_network_list_provider_segment(self):
745755
columns, data = self.cmd.take_action(parsed_args)
746756

747757
self.network.networks.assert_called_once_with(
748-
**{'provider:segmentation_id': segmentation_id}
758+
**{'provider:segmentation_id': segmentation_id,
759+
'provider_segmentation_id': segmentation_id}
749760
)
750761
self.assertEqual(self.columns, columns)
751762
self.assertEqual(self.data, list(data))
@@ -878,13 +889,15 @@ class TestShowNetwork(TestNetwork):
878889
'availability_zones',
879890
'description',
880891
'id',
892+
'ipv4_address_scope',
893+
'ipv6_address_scope',
881894
'is_default',
882895
'name',
883896
'port_security_enabled',
884897
'project_id',
885-
'provider_network_type',
886-
'provider_physical_network',
887-
'provider_segmentation_id',
898+
'provider:network_type',
899+
'provider:physical_network',
900+
'provider:segmentation_id',
888901
'qos_policy_id',
889902
'router:external',
890903
'shared',
@@ -898,6 +911,8 @@ class TestShowNetwork(TestNetwork):
898911
utils.format_list(_network.availability_zones),
899912
_network.description,
900913
_network.id,
914+
_network.ipv4_address_scope_id,
915+
_network.ipv6_address_scope_id,
901916
_network.is_default,
902917
_network.name,
903918
_network.is_port_security_enabled,

0 commit comments

Comments
 (0)