Support "network delete" command in nova network

"network delete" command is not implemented in nova network.
This patch implements it.

Change-Id: I5dac1eed6eb8e67298bb446418835a6ab85c859c
Depends-On: I1b59264cd40aaf1062f4e8db233ccb7fd0e95f0e
partial-Bug: 1543672
This commit is contained in:
Tang Chen 2016-02-10 01:41:45 +08:00
parent d8abec33ad
commit 27a0da65e3
4 changed files with 64 additions and 6 deletions
doc/source
openstackclient
network/v2
tests
compute/v2
network/v2

@ -98,7 +98,7 @@ referring to both Compute and Volume quotas.
* ``limits``: (**Compute**, **Volume**) resource usage limits * ``limits``: (**Compute**, **Volume**) resource usage limits
* ``mapping``: (**Identity**) a definition to translate identity provider attributes to Identity concepts * ``mapping``: (**Identity**) a definition to translate identity provider attributes to Identity concepts
* ``module``: internal - installed Python modules in the OSC process * ``module``: internal - installed Python modules in the OSC process
* ``network``: (**Network**) - a virtual network for connecting servers and other resources * ``network``: (**Compute**, **Network**) - a virtual network for connecting servers and other resources
* ``object``: (**Object Storage**) a single file in the Object Storage * ``object``: (**Object Storage**) a single file in the Object Storage
* ``policy``: (**Identity**) determines authorization * ``policy``: (**Identity**) determines authorization
* ``port``: (**Network**) - a virtual port for connecting servers and other resources to a network * ``port``: (**Network**) - a virtual port for connecting servers and other resources to a network

@ -17,6 +17,7 @@ from openstackclient.common import command
from openstackclient.common import exceptions from openstackclient.common import exceptions
from openstackclient.common import utils from openstackclient.common import utils
from openstackclient.identity import common as identity_common from openstackclient.identity import common as identity_common
from openstackclient.network import common
def _format_admin_state(item): def _format_admin_state(item):
@ -141,11 +142,10 @@ class CreateNetwork(command.ShowOne):
return (columns, data) return (columns, data)
class DeleteNetwork(command.Command): class DeleteNetwork(common.NetworkAndComputeCommand):
"""Delete network(s)""" """Delete network(s)"""
def get_parser(self, prog_name): def update_parser_common(self, parser):
parser = super(DeleteNetwork, self).get_parser(prog_name)
parser.add_argument( parser.add_argument(
'network', 'network',
metavar="<network>", metavar="<network>",
@ -154,12 +154,19 @@ class DeleteNetwork(command.Command):
) )
return parser return parser
def take_action(self, parsed_args): def take_action_network(self, client, parsed_args):
client = self.app.client_manager.network
for network in parsed_args.network: for network in parsed_args.network:
obj = client.find_network(network) obj = client.find_network(network)
client.delete_network(obj) client.delete_network(obj)
def take_action_compute(self, client, parsed_args):
for network in parsed_args.network:
network = utils.find_resource(
client.networks,
network,
)
client.networks.delete(network.id)
class ListNetwork(command.Lister): class ListNetwork(command.Lister):
"""List networks""" """List networks"""

@ -90,6 +90,7 @@ class FakeComputev2Client(object):
def __init__(self, **kwargs): def __init__(self, **kwargs):
self.aggregates = mock.Mock() self.aggregates = mock.Mock()
self.aggregates.resource_class = fakes.FakeResource(None, {}) self.aggregates.resource_class = fakes.FakeResource(None, {})
self.availability_zones = mock.Mock() self.availability_zones = mock.Mock()
self.availability_zones.resource_class = fakes.FakeResource(None, {}) self.availability_zones.resource_class = fakes.FakeResource(None, {})
@ -129,6 +130,9 @@ class FakeComputev2Client(object):
self.floating_ips = mock.Mock() self.floating_ips = mock.Mock()
self.floating_ips.resource_class = fakes.FakeResource(None, {}) self.floating_ips.resource_class = fakes.FakeResource(None, {})
self.networks = mock.Mock()
self.networks.resource_class = fakes.FakeResource(None, {})
self.auth_token = kwargs['token'] self.auth_token = kwargs['token']
self.management_url = kwargs['endpoint'] self.management_url = kwargs['endpoint']

@ -17,6 +17,7 @@ import mock
from openstackclient.common import exceptions from openstackclient.common import exceptions
from openstackclient.common import utils from openstackclient.common import utils
from openstackclient.network.v2 import network from openstackclient.network.v2 import network
from openstackclient.tests.compute.v2 import fakes as compute_fakes
from openstackclient.tests import fakes from openstackclient.tests import fakes
from openstackclient.tests.identity.v2_0 import fakes as identity_fakes_v2 from openstackclient.tests.identity.v2_0 import fakes as identity_fakes_v2
from openstackclient.tests.identity.v3 import fakes as identity_fakes_v3 from openstackclient.tests.identity.v3 import fakes as identity_fakes_v3
@ -24,6 +25,8 @@ from openstackclient.tests.network.v2 import fakes as network_fakes
from openstackclient.tests import utils as tests_utils from openstackclient.tests import utils as tests_utils
# Tests for Neutron network
#
class TestNetwork(network_fakes.TestNetworkV2): class TestNetwork(network_fakes.TestNetworkV2):
def setUp(self): def setUp(self):
@ -564,3 +567,47 @@ class TestShowNetwork(TestNetwork):
self.assertEqual(tuple(self.columns), columns) self.assertEqual(tuple(self.columns), columns)
self.assertEqual(list(self.data), list(data)) self.assertEqual(list(self.data), list(data))
# Tests for Nova network
#
class TestNetworkCompute(compute_fakes.TestComputev2):
def setUp(self):
super(TestNetworkCompute, self).setUp()
# Get a shortcut to the compute client
self.compute = self.app.client_manager.compute
class TestDeleteNetworkCompute(TestNetworkCompute):
# The network to delete.
_network = network_fakes.FakeNetwork.create_one_network()
def setUp(self):
super(TestDeleteNetworkCompute, self).setUp()
self.app.client_manager.network_endpoint_enabled = False
self.compute.networks.delete.return_value = None
# Return value of utils.find_resource()
self.compute.networks.get.return_value = self._network
# Get the command object to test
self.cmd = network.DeleteNetwork(self.app, None)
def test_network_delete(self):
arglist = [
self._network.name,
]
verifylist = [
('network', [self._network.name]),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args)
self.compute.networks.delete.assert_called_with(self._network.id)
self.assertIsNone(result)