Skip to content

Commit 8ecdc57

Browse files
author
reedip
committed
Add "router remove port" to osc
This patch proposes the migration of port deletion of Neutron's "router-interface-delete" to OSC's "router remove port". Change-Id: Ifceabce080aacac9f6410c809fcc097760e0c5ee Partial-Bug: #1546849 Implements: blueprint neutron-client-advanced-router
1 parent 2e94f28 commit 8ecdc57

5 files changed

Lines changed: 96 additions & 2 deletions

File tree

doc/source/command-objects/router.rst

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Network v2
66

77
router add port
88
---------------
9+
910
Add a port to a router
1011

1112
.. program:: router add port
@@ -102,6 +103,29 @@ List routers
102103
103104
List additional fields in output
104105
106+
router remove port
107+
------------------
108+
109+
Remove a port from a router
110+
111+
.. program:: router remove port
112+
.. code:: bash
113+
114+
os router remove port
115+
<router>
116+
<port>
117+
118+
.. _router_remove_port:
119+
120+
.. describe:: <router>
121+
122+
Router from which port will be removed (name or ID)
123+
124+
.. describe:: <port>
125+
126+
Port to be removed (name or ID)
127+
128+
105129
router set
106130
----------
107131
@@ -167,4 +191,4 @@ Display router details
167191
.. _router_show-router:
168192
.. describe:: <router>
169193
170-
Router to display (name or ID)
194+
Router to display (name or ID)

openstackclient/network/v2/router.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,30 @@ def take_action(self, parsed_args):
241241
) for s in data))
242242

243243

244+
class RemovePortFromRouter(command.Command):
245+
"""Remove a port from a router"""
246+
247+
def get_parser(self, prog_name):
248+
parser = super(RemovePortFromRouter, self).get_parser(prog_name)
249+
parser.add_argument(
250+
'router',
251+
metavar='<router>',
252+
help="Router from which port will be removed (name or ID)",
253+
)
254+
parser.add_argument(
255+
'port',
256+
metavar='<port>',
257+
help="Port to be removed (name or ID).",
258+
)
259+
return parser
260+
261+
def take_action(self, parsed_args):
262+
client = self.app.client_manager.network
263+
port = client.find_port(parsed_args.port, ignore_missing=False)
264+
client.router_remove_interface(client.find_router(
265+
parsed_args.router, ignore_missing=False), port_id=port.id)
266+
267+
244268
class SetRouter(command.Command):
245269
"""Set router properties"""
246270

@@ -342,4 +366,4 @@ def take_action(self, parsed_args):
342366
obj = client.find_router(parsed_args.router, ignore_missing=False)
343367
columns = _get_columns(obj)
344368
data = utils.get_item_properties(obj, columns, formatters=_formatters)
345-
return columns, data
369+
return columns, data

openstackclient/tests/network/v2/test_router.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,46 @@ def test_router_list_long(self):
269269
self.assertEqual(self.data_long, list(data))
270270

271271

272+
class TestRemovePortFromRouter(TestRouter):
273+
'''Remove port from a Router '''
274+
275+
_port = network_fakes.FakePort.create_one_port()
276+
_router = network_fakes.FakeRouter.create_one_router(
277+
attrs={'port': _port.id})
278+
279+
def setUp(self):
280+
super(TestRemovePortFromRouter, self).setUp()
281+
self.network.router_remove_interface = mock.Mock()
282+
self.cmd = router.RemovePortFromRouter(self.app, self.namespace)
283+
self.network.find_router = mock.Mock(return_value=self._router)
284+
self.network.find_port = mock.Mock(return_value=self._port)
285+
286+
def test_remove_port_no_option(self):
287+
arglist = []
288+
verifylist = []
289+
290+
# Missing required args should bail here
291+
self.assertRaises(tests_utils.ParserException, self.check_parser,
292+
self.cmd, arglist, verifylist)
293+
294+
def test_remove_port_required_options(self):
295+
arglist = [
296+
self._router.id,
297+
self._router.port,
298+
]
299+
verifylist = [
300+
('router', self._router.id),
301+
('port', self._router.port),
302+
]
303+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
304+
305+
result = self.cmd.take_action(parsed_args)
306+
307+
self.network.router_remove_interface.assert_called_with(
308+
self._router, **{'port_id': self._router.port})
309+
self.assertIsNone(result)
310+
311+
272312
class TestSetRouter(TestRouter):
273313

274314
# The router to set.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
features:
3+
- |
4+
Add ``router remove port`` command
5+
[Bug `1546849 <https://bugs.launchpad.net/bugs/1546849>`_]

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,7 @@ openstack.network.v2 =
342342
router_create = openstackclient.network.v2.router:CreateRouter
343343
router_delete = openstackclient.network.v2.router:DeleteRouter
344344
router_list = openstackclient.network.v2.router:ListRouter
345+
router_remove_port = openstackclient.network.v2.router:RemovePortFromRouter
345346
router_set = openstackclient.network.v2.router:SetRouter
346347
router_show = openstackclient.network.v2.router:ShowRouter
347348

0 commit comments

Comments
 (0)