Skip to content

Commit 27a0da6

Browse files
author
Tang Chen
committed
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
1 parent d8abec3 commit 27a0da6

4 files changed

Lines changed: 64 additions & 6 deletions

File tree

doc/source/commands.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ referring to both Compute and Volume quotas.
9898
* ``limits``: (**Compute**, **Volume**) resource usage limits
9999
* ``mapping``: (**Identity**) a definition to translate identity provider attributes to Identity concepts
100100
* ``module``: internal - installed Python modules in the OSC process
101-
* ``network``: (**Network**) - a virtual network for connecting servers and other resources
101+
* ``network``: (**Compute**, **Network**) - a virtual network for connecting servers and other resources
102102
* ``object``: (**Object Storage**) a single file in the Object Storage
103103
* ``policy``: (**Identity**) determines authorization
104104
* ``port``: (**Network**) - a virtual port for connecting servers and other resources to a network

openstackclient/network/v2/network.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from openstackclient.common import exceptions
1818
from openstackclient.common import utils
1919
from openstackclient.identity import common as identity_common
20+
from openstackclient.network import common
2021

2122

2223
def _format_admin_state(item):
@@ -141,11 +142,10 @@ def take_action(self, parsed_args):
141142
return (columns, data)
142143

143144

144-
class DeleteNetwork(command.Command):
145+
class DeleteNetwork(common.NetworkAndComputeCommand):
145146
"""Delete network(s)"""
146147

147-
def get_parser(self, prog_name):
148-
parser = super(DeleteNetwork, self).get_parser(prog_name)
148+
def update_parser_common(self, parser):
149149
parser.add_argument(
150150
'network',
151151
metavar="<network>",
@@ -154,12 +154,19 @@ def get_parser(self, prog_name):
154154
)
155155
return parser
156156

157-
def take_action(self, parsed_args):
158-
client = self.app.client_manager.network
157+
def take_action_network(self, client, parsed_args):
159158
for network in parsed_args.network:
160159
obj = client.find_network(network)
161160
client.delete_network(obj)
162161

162+
def take_action_compute(self, client, parsed_args):
163+
for network in parsed_args.network:
164+
network = utils.find_resource(
165+
client.networks,
166+
network,
167+
)
168+
client.networks.delete(network.id)
169+
163170

164171
class ListNetwork(command.Lister):
165172
"""List networks"""

openstackclient/tests/compute/v2/fakes.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ class FakeComputev2Client(object):
9090
def __init__(self, **kwargs):
9191
self.aggregates = mock.Mock()
9292
self.aggregates.resource_class = fakes.FakeResource(None, {})
93+
9394
self.availability_zones = mock.Mock()
9495
self.availability_zones.resource_class = fakes.FakeResource(None, {})
9596

@@ -129,6 +130,9 @@ def __init__(self, **kwargs):
129130
self.floating_ips = mock.Mock()
130131
self.floating_ips.resource_class = fakes.FakeResource(None, {})
131132

133+
self.networks = mock.Mock()
134+
self.networks.resource_class = fakes.FakeResource(None, {})
135+
132136
self.auth_token = kwargs['token']
133137

134138
self.management_url = kwargs['endpoint']

openstackclient/tests/network/v2/test_network.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,16 @@
1717
from openstackclient.common import exceptions
1818
from openstackclient.common import utils
1919
from openstackclient.network.v2 import network
20+
from openstackclient.tests.compute.v2 import fakes as compute_fakes
2021
from openstackclient.tests import fakes
2122
from openstackclient.tests.identity.v2_0 import fakes as identity_fakes_v2
2223
from openstackclient.tests.identity.v3 import fakes as identity_fakes_v3
2324
from openstackclient.tests.network.v2 import fakes as network_fakes
2425
from openstackclient.tests import utils as tests_utils
2526

2627

28+
# Tests for Neutron network
29+
#
2730
class TestNetwork(network_fakes.TestNetworkV2):
2831

2932
def setUp(self):
@@ -564,3 +567,47 @@ def test_show_all_options(self):
564567

565568
self.assertEqual(tuple(self.columns), columns)
566569
self.assertEqual(list(self.data), list(data))
570+
571+
572+
# Tests for Nova network
573+
#
574+
class TestNetworkCompute(compute_fakes.TestComputev2):
575+
576+
def setUp(self):
577+
super(TestNetworkCompute, self).setUp()
578+
579+
# Get a shortcut to the compute client
580+
self.compute = self.app.client_manager.compute
581+
582+
583+
class TestDeleteNetworkCompute(TestNetworkCompute):
584+
585+
# The network to delete.
586+
_network = network_fakes.FakeNetwork.create_one_network()
587+
588+
def setUp(self):
589+
super(TestDeleteNetworkCompute, self).setUp()
590+
591+
self.app.client_manager.network_endpoint_enabled = False
592+
593+
self.compute.networks.delete.return_value = None
594+
595+
# Return value of utils.find_resource()
596+
self.compute.networks.get.return_value = self._network
597+
598+
# Get the command object to test
599+
self.cmd = network.DeleteNetwork(self.app, None)
600+
601+
def test_network_delete(self):
602+
arglist = [
603+
self._network.name,
604+
]
605+
verifylist = [
606+
('network', [self._network.name]),
607+
]
608+
609+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
610+
result = self.cmd.take_action(parsed_args)
611+
612+
self.compute.networks.delete.assert_called_with(self._network.id)
613+
self.assertIsNone(result)

0 commit comments

Comments
 (0)