Skip to content

Commit 518fbf0

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Support --provider-* options in the network list command"
2 parents 81c0129 + 960b265 commit 518fbf0

5 files changed

Lines changed: 146 additions & 5 deletions

File tree

doc/source/command-objects/network.rst

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,53 +193,96 @@ List networks
193193
[--project <project> [--project-domain <project-domain>]]
194194
[--share | --no-share]
195195
[--status <status>]
196+
[--provider-network-type <provider-network-type>]
197+
[--provider-physical-network <provider-physical-network>]
198+
[--provider-segment <provider-segment>]
196199
197200
.. option:: --external
198201
199202
List external networks
200203
204+
*Network version 2 only*
205+
201206
.. option:: --internal
202207
203208
List internal networks
204209
210+
*Network version 2 only*
211+
205212
.. option:: --long
206213
207214
List additional fields in output
208215
216+
*Network version 2 only*
217+
209218
.. option:: --name <name>
210219
211220
List networks according to their name
212221
222+
*Network version 2 only*
223+
213224
.. option:: --enable
214225
215226
List enabled networks
216227
228+
*Network version 2 only*
229+
217230
.. option:: --disable
218231
219232
List disabled networks
220233
234+
*Network version 2 only*
235+
221236
.. option:: --project <project>
222237
223238
List networks according to their project (name or ID)
224239
240+
*Network version 2 only*
241+
225242
.. option:: --project-domain <project-domain>
226243
227244
Domain the project belongs to (name or ID).
228245
This can be used in case collisions between project names exist.
229246
247+
*Network version 2 only*
248+
230249
.. option:: --share
231250
232251
List networks shared between projects
233252
253+
*Network version 2 only*
254+
234255
.. option:: --no-share
235256
236257
List networks not shared between projects
237258
259+
*Network version 2 only*
260+
238261
.. option:: --status <status>
239262
240263
List networks according to their status
241264
('ACTIVE', 'BUILD', 'DOWN', 'ERROR')
242265
266+
.. option:: --provider-network-type <provider-network-type>
267+
268+
List networks according to their physical mechanisms.
269+
The supported options are: flat, geneve, gre, local, vlan, vxlan.
270+
271+
*Network version 2 only*
272+
273+
.. option:: --provider-physical-network <provider-physical-network>
274+
275+
List networks according to name of the physical network
276+
277+
*Network version 2 only*
278+
279+
.. option:: --provider-segment <provider-segment>
280+
281+
List networks according to VLAN ID for VLAN networks
282+
or Tunnel ID for GENEVE/GRE/VXLAN networks
283+
284+
*Network version 2 only*
285+
243286
network set
244287
-----------
245288

openstackclient/network/v2/network.py

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ def take_action_compute(self, client, parsed_args):
304304
class ListNetwork(common.NetworkAndComputeLister):
305305
"""List networks"""
306306

307-
def update_parser_common(self, parser):
307+
def update_parser_network(self, parser):
308308
router_ext_group = parser.add_mutually_exclusive_group()
309309
router_ext_group.add_argument(
310310
'--external',
@@ -361,6 +361,29 @@ def update_parser_common(self, parser):
361361
help=_("List networks according to their status "
362362
"('ACTIVE', 'BUILD', 'DOWN', 'ERROR')")
363363
)
364+
parser.add_argument(
365+
'--provider-network-type',
366+
metavar='<provider-network-type>',
367+
choices=['flat', 'geneve', 'gre', 'local',
368+
'vlan', 'vxlan'],
369+
help=_("List networks according to their physical mechanisms. "
370+
"The supported options are: flat, geneve, gre, local, "
371+
"vlan, vxlan.")
372+
)
373+
parser.add_argument(
374+
'--provider-physical-network',
375+
metavar='<provider-physical-network>',
376+
dest='physical_network',
377+
help=_("List networks according to name of the physical network")
378+
)
379+
parser.add_argument(
380+
'--provider-segment',
381+
metavar='<provider-segment>',
382+
dest='segmentation_id',
383+
help=_("List networks according to VLAN ID for VLAN networks "
384+
"or Tunnel ID for GENEVE/GRE/VXLAN networks")
385+
)
386+
364387
return parser
365388

366389
def take_action_network(self, client, parsed_args):
@@ -433,6 +456,13 @@ def take_action_network(self, client, parsed_args):
433456
if parsed_args.status:
434457
args['status'] = parsed_args.status
435458

459+
if parsed_args.provider_network_type:
460+
args['provider:network_type'] = parsed_args.provider_network_type
461+
if parsed_args.physical_network:
462+
args['provider:physical_network'] = parsed_args.physical_network
463+
if parsed_args.segmentation_id:
464+
args['provider:segmentation_id'] = parsed_args.segmentation_id
465+
436466
data = client.networks(**args)
437467

438468
return (column_headers,

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,8 @@ def create_one_network(attrs=None):
292292
'shared': False,
293293
'subnets': ['a', 'b'],
294294
'provider_network_type': 'vlan',
295+
'provider_physical_network': 'physnet1',
296+
'provider_segmentation_id': "400",
295297
'router:external': True,
296298
'availability_zones': [],
297299
'availability_zone_hints': [],

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

Lines changed: 64 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ class TestCreateNetworkIdentityV3(TestNetwork):
6565
'port_security_enabled',
6666
'project_id',
6767
'provider_network_type',
68+
'provider_physical_network',
69+
'provider_segmentation_id',
6870
'router:external',
6971
'shared',
7072
'status',
@@ -82,6 +84,8 @@ class TestCreateNetworkIdentityV3(TestNetwork):
8284
_network.is_port_security_enabled,
8385
_network.project_id,
8486
_network.provider_network_type,
87+
_network.provider_physical_network,
88+
_network.provider_segmentation_id,
8589
network._format_router_external(_network.is_router_external),
8690
_network.shared,
8791
_network.status,
@@ -229,6 +233,8 @@ class TestCreateNetworkIdentityV2(TestNetwork):
229233
'port_security_enabled',
230234
'project_id',
231235
'provider_network_type',
236+
'provider_physical_network',
237+
'provider_segmentation_id',
232238
'router:external',
233239
'shared',
234240
'status',
@@ -246,6 +252,8 @@ class TestCreateNetworkIdentityV2(TestNetwork):
246252
_network.is_port_security_enabled,
247253
_network.project_id,
248254
_network.provider_network_type,
255+
_network.provider_physical_network,
256+
_network.provider_segmentation_id,
249257
network._format_router_external(_network.is_router_external),
250258
_network.shared,
251259
_network.status,
@@ -681,6 +689,57 @@ def test_network_list_status(self):
681689
self.assertEqual(self.columns, columns)
682690
self.assertEqual(self.data, list(data))
683691

692+
def test_network_list_provider_network_type(self):
693+
network_type = self._network[0].provider_network_type
694+
arglist = [
695+
'--provider-network-type', network_type,
696+
]
697+
verifylist = [
698+
('provider_network_type', network_type),
699+
]
700+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
701+
columns, data = self.cmd.take_action(parsed_args)
702+
703+
self.network.networks.assert_called_once_with(
704+
**{'provider:network_type': network_type}
705+
)
706+
self.assertEqual(self.columns, columns)
707+
self.assertEqual(self.data, list(data))
708+
709+
def test_network_list_provider_physical_network(self):
710+
physical_network = self._network[0].provider_physical_network
711+
arglist = [
712+
'--provider-physical-network', physical_network,
713+
]
714+
verifylist = [
715+
('physical_network', physical_network),
716+
]
717+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
718+
columns, data = self.cmd.take_action(parsed_args)
719+
720+
self.network.networks.assert_called_once_with(
721+
**{'provider:physical_network': physical_network}
722+
)
723+
self.assertEqual(self.columns, columns)
724+
self.assertEqual(self.data, list(data))
725+
726+
def test_network_list_provider_segment(self):
727+
segmentation_id = self._network[0].provider_segmentation_id
728+
arglist = [
729+
'--provider-segment', segmentation_id,
730+
]
731+
verifylist = [
732+
('segmentation_id', segmentation_id),
733+
]
734+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
735+
columns, data = self.cmd.take_action(parsed_args)
736+
737+
self.network.networks.assert_called_once_with(
738+
**{'provider:segmentation_id': segmentation_id}
739+
)
740+
self.assertEqual(self.columns, columns)
741+
self.assertEqual(self.data, list(data))
742+
684743

685744
class TestSetNetwork(TestNetwork):
686745

@@ -805,6 +864,8 @@ class TestShowNetwork(TestNetwork):
805864
'port_security_enabled',
806865
'project_id',
807866
'provider_network_type',
867+
'provider_physical_network',
868+
'provider_segmentation_id',
808869
'router:external',
809870
'shared',
810871
'status',
@@ -822,6 +883,8 @@ class TestShowNetwork(TestNetwork):
822883
_network.is_port_security_enabled,
823884
_network.project_id,
824885
_network.provider_network_type,
886+
_network.provider_physical_network,
887+
_network.provider_segmentation_id,
825888
network._format_router_external(_network.is_router_external),
826889
_network.shared,
827890
_network.status,
@@ -1111,10 +1174,7 @@ def setUp(self):
11111174

11121175
def test_network_list_no_options(self):
11131176
arglist = []
1114-
verifylist = [
1115-
('external', False),
1116-
('long', False),
1117-
]
1177+
verifylist = []
11181178
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
11191179

11201180
# In base command class Lister in cliff, abstract method take_action()
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
features:
3+
- |
4+
Add ``--provider-network-type``, ``--provider-physical-network``, and
5+
``--provider-segment`` options to the ``network list`` command.
6+
[Bug `1635580 <https://bugs.launchpad.net/bugs/1635580>`_]

0 commit comments

Comments
 (0)