diff --git a/doc/source/commands.rst b/doc/source/commands.rst index bf5d7035a9..6b862f816f 100644 --- a/doc/source/commands.rst +++ b/doc/source/commands.rst @@ -98,7 +98,7 @@ referring to both Compute and Volume quotas. * ``limits``: (**Compute**, **Volume**) resource usage limits * ``mapping``: (**Identity**) a definition to translate identity provider attributes to Identity concepts * ``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 * ``policy``: (**Identity**) determines authorization * ``port``: (**Network**) - a virtual port for connecting servers and other resources to a network diff --git a/openstackclient/network/v2/network.py b/openstackclient/network/v2/network.py index 6123721963..ae80b48a15 100644 --- a/openstackclient/network/v2/network.py +++ b/openstackclient/network/v2/network.py @@ -17,6 +17,7 @@ from openstackclient.common import command from openstackclient.common import exceptions from openstackclient.common import utils from openstackclient.identity import common as identity_common +from openstackclient.network import common def _format_admin_state(item): @@ -141,11 +142,10 @@ class CreateNetwork(command.ShowOne): return (columns, data) -class DeleteNetwork(command.Command): +class DeleteNetwork(common.NetworkAndComputeCommand): """Delete network(s)""" - def get_parser(self, prog_name): - parser = super(DeleteNetwork, self).get_parser(prog_name) + def update_parser_common(self, parser): parser.add_argument( 'network', metavar="<network>", @@ -154,12 +154,19 @@ class DeleteNetwork(command.Command): ) return parser - def take_action(self, parsed_args): - client = self.app.client_manager.network + def take_action_network(self, client, parsed_args): for network in parsed_args.network: obj = client.find_network(network) 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): """List networks""" diff --git a/openstackclient/tests/compute/v2/fakes.py b/openstackclient/tests/compute/v2/fakes.py index 2e4cc1c56b..c5e8f412c2 100644 --- a/openstackclient/tests/compute/v2/fakes.py +++ b/openstackclient/tests/compute/v2/fakes.py @@ -90,6 +90,7 @@ class FakeComputev2Client(object): def __init__(self, **kwargs): self.aggregates = mock.Mock() self.aggregates.resource_class = fakes.FakeResource(None, {}) + self.availability_zones = mock.Mock() self.availability_zones.resource_class = fakes.FakeResource(None, {}) @@ -129,6 +130,9 @@ class FakeComputev2Client(object): self.floating_ips = mock.Mock() 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.management_url = kwargs['endpoint'] diff --git a/openstackclient/tests/network/v2/test_network.py b/openstackclient/tests/network/v2/test_network.py index d6c6fbca2f..784a936653 100644 --- a/openstackclient/tests/network/v2/test_network.py +++ b/openstackclient/tests/network/v2/test_network.py @@ -17,6 +17,7 @@ import mock from openstackclient.common import exceptions from openstackclient.common import utils from openstackclient.network.v2 import network +from openstackclient.tests.compute.v2 import fakes as compute_fakes from openstackclient.tests import fakes from openstackclient.tests.identity.v2_0 import fakes as identity_fakes_v2 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 +# Tests for Neutron network +# class TestNetwork(network_fakes.TestNetworkV2): def setUp(self): @@ -564,3 +567,47 @@ class TestShowNetwork(TestNetwork): self.assertEqual(tuple(self.columns), columns) 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)