From 3364855a2283b57ccd09ea6b98ca45aba5dbcccd Mon Sep 17 00:00:00 2001
From: Tang Chen <tangchen@cn.fujitsu.com>
Date: Mon, 14 Dec 2015 20:54:03 +0800
Subject: [PATCH] Router: Add "router delete" command using SDK

This patch adds "router delete" command to osc using sdk.

Change-Id: I47d0ca7f7984942ffceaeb1c9ac69efd09145f40
Implements: blueprint neutron-client
Partial-bug: #1519503
---
 doc/source/command-objects/router.rst         | 16 ++++++++++
 openstackclient/network/v2/router.py          | 25 ++++++++++++++++
 .../tests/network/v2/test_router.py           | 29 +++++++++++++++++++
 setup.cfg                                     |  1 +
 4 files changed, 71 insertions(+)

diff --git a/doc/source/command-objects/router.rst b/doc/source/command-objects/router.rst
index 9e1e72911a..c3a952e9dd 100644
--- a/doc/source/command-objects/router.rst
+++ b/doc/source/command-objects/router.rst
@@ -44,6 +44,22 @@ Create new router
 
     New router name
 
+router delete
+--------------
+
+Delete router(s)
+
+.. program:: router delete
+.. code:: bash
+
+    os router delete
+        <router> [<router> ...]
+
+.. _router_delete-router:
+.. describe:: <router>
+
+    Router(s) to delete (name or ID)
+
 router list
 -----------
 
diff --git a/openstackclient/network/v2/router.py b/openstackclient/network/v2/router.py
index 755bf10059..0042e93f73 100644
--- a/openstackclient/network/v2/router.py
+++ b/openstackclient/network/v2/router.py
@@ -16,6 +16,7 @@
 import json
 import logging
 
+from cliff import command
 from cliff import lister
 from cliff import show
 
@@ -117,6 +118,30 @@ class CreateRouter(show.ShowOne):
         return (tuple(columns), data)
 
 
+class DeleteRouter(command.Command):
+    """Delete router(s)"""
+
+    log = logging.getLogger(__name__ + '.DeleteRouter')
+
+    def get_parser(self, prog_name):
+        parser = super(DeleteRouter, self).get_parser(prog_name)
+        parser.add_argument(
+            'router',
+            metavar="<router>",
+            nargs="+",
+            help=("Router(s) to delete (name or ID)")
+        )
+        return parser
+
+    def take_action(self, parsed_args):
+        self.log.debug('take_action(%s)' % parsed_args)
+        client = self.app.client_manager.network
+        for router in parsed_args.router:
+            obj = client.find_router(router)
+            client.delete_router(obj)
+        return
+
+
 class ListRouter(lister.Lister):
     """List routers"""
 
diff --git a/openstackclient/tests/network/v2/test_router.py b/openstackclient/tests/network/v2/test_router.py
index 5170826cbd..ccda9d2dc2 100644
--- a/openstackclient/tests/network/v2/test_router.py
+++ b/openstackclient/tests/network/v2/test_router.py
@@ -88,6 +88,35 @@ class TestCreateRouter(TestRouter):
         self.assertEqual(self.data, data)
 
 
+class TestDeleteRouter(TestRouter):
+
+    # The router to delete.
+    _router = network_fakes.FakeRouter.create_one_router()
+
+    def setUp(self):
+        super(TestDeleteRouter, self).setUp()
+
+        self.network.delete_router = mock.Mock(return_value=None)
+
+        self.network.find_router = mock.Mock(return_value=self._router)
+
+        # Get the command object to test
+        self.cmd = router.DeleteRouter(self.app, self.namespace)
+
+    def test_delete(self):
+        arglist = [
+            self._router.name,
+        ]
+        verifylist = [
+            ('router', [self._router.name]),
+        ]
+        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+        result = self.cmd.take_action(parsed_args)
+        self.network.delete_router.assert_called_with(self._router)
+        self.assertEqual(None, result)
+
+
 class TestListRouter(TestRouter):
 
     # The routers going to be listed up.
diff --git a/setup.cfg b/setup.cfg
index 535e4fdf95..ee6192a72b 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -333,6 +333,7 @@ openstack.network.v2 =
     network_set = openstackclient.network.v2.network:SetNetwork
     network_show = openstackclient.network.v2.network:ShowNetwork
     router_create = openstackclient.network.v2.router:CreateRouter
+    router_delete = openstackclient.network.v2.router:DeleteRouter
     router_list = openstackclient.network.v2.router:ListRouter
 
 openstack.object_store.v1 =