Merge "Support "network list" command in nova network"

This commit is contained in:
Jenkins 2016-02-18 09:03:49 +00:00 committed by Gerrit Code Review
commit 36b21461d9
5 changed files with 136 additions and 10 deletions

View File

@ -2,7 +2,7 @@
network
=======
Network v2
Compute v2, Network v2
network create
--------------

View File

@ -168,11 +168,10 @@ class DeleteNetwork(common.NetworkAndComputeCommand):
client.networks.delete(network.id)
class ListNetwork(command.Lister):
class ListNetwork(common.NetworkAndComputeLister):
"""List networks"""
def get_parser(self, prog_name):
parser = super(ListNetwork, self).get_parser(prog_name)
def update_parser_common(self, parser):
parser.add_argument(
'--external',
action='store_true',
@ -187,9 +186,7 @@ class ListNetwork(command.Lister):
)
return parser
def take_action(self, parsed_args):
client = self.app.client_manager.network
def take_action_network(self, client, parsed_args):
if parsed_args.long:
columns = (
'id',
@ -231,7 +228,29 @@ class ListNetwork(command.Lister):
args = {'router:external': True}
else:
args = {}
data = client.networks(**args)
return (column_headers,
(utils.get_item_properties(
s, columns,
formatters=_formatters,
) for s in data))
def take_action_compute(self, client, parsed_args):
columns = (
'id',
'label',
'cidr',
)
column_headers = (
'ID',
'Name',
'Subnet',
)
data = client.networks.list()
return (column_headers,
(utils.get_item_properties(
s, columns,

View File

@ -587,3 +587,61 @@ class FakeFloatingIP(object):
if floating_ips is None:
floating_ips = FakeFloatingIP.create_floating_ips(count)
return mock.MagicMock(side_effect=floating_ips)
class FakeNetwork(object):
"""Fake one or more networks."""
@staticmethod
def create_one_network(attrs={}, methods={}):
"""Create a fake network.
:param Dictionary attrs:
A dictionary with all attributes
:param Dictionary methods:
A dictionary with all methods
:return:
A FakeResource object, with id, label, cidr
"""
# Set default attributes.
network_attrs = {
'id': 'network-id-' + uuid.uuid4().hex,
'label': 'network-label-' + uuid.uuid4().hex,
'cidr': '10.0.0.0/24',
}
# Overwrite default attributes.
network_attrs.update(attrs)
# Set default methods.
network_methods = {
'keys': ['id', 'label', 'cidr'],
}
# Overwrite default methods.
network_methods.update(methods)
network = fakes.FakeResource(info=copy.deepcopy(network_attrs),
methods=copy.deepcopy(network_methods),
loaded=True)
return network
@staticmethod
def create_networks(attrs={}, methods={}, count=2):
"""Create multiple fake networks.
:param Dictionary attrs:
A dictionary with all attributes
:param Dictionary methods:
A dictionary with all methods
:param int count:
The number of networks to fake
:return:
A list of FakeResource objects faking the networks
"""
networks = []
for i in range(0, count):
networks.append(FakeNetwork.create_one_network(attrs, methods))
return networks

View File

@ -579,7 +579,7 @@ class TestNetworkCompute(compute_fakes.TestComputev2):
class TestDeleteNetworkCompute(TestNetworkCompute):
# The network to delete.
_network = network_fakes.FakeNetwork.create_one_network()
_network = compute_fakes.FakeNetwork.create_one_network()
def setUp(self):
super(TestDeleteNetworkCompute, self).setUp()
@ -596,10 +596,10 @@ class TestDeleteNetworkCompute(TestNetworkCompute):
def test_network_delete(self):
arglist = [
self._network.name,
self._network.label,
]
verifylist = [
('network', [self._network.name]),
('network', [self._network.label]),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -607,3 +607,50 @@ class TestDeleteNetworkCompute(TestNetworkCompute):
self.compute.networks.delete.assert_called_with(self._network.id)
self.assertIsNone(result)
class TestListNetworkCompute(TestNetworkCompute):
# The networks going to be listed up.
_networks = compute_fakes.FakeNetwork.create_networks(count=3)
columns = (
'ID',
'Name',
'Subnet',
)
data = []
for net in _networks:
data.append((
net.id,
net.label,
net.cidr,
))
def setUp(self):
super(TestListNetworkCompute, self).setUp()
self.app.client_manager.network_endpoint_enabled = False
self.compute.networks.list.return_value = self._networks
# Get the command object to test
self.cmd = network.ListNetwork(self.app, None)
def test_network_list_no_options(self):
arglist = []
verifylist = [
('external', False),
('long', False),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
# In base command class Lister in cliff, abstract method take_action()
# returns a tuple containing the column names and an iterable
# containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.compute.networks.list.assert_called_with()
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, list(data))

View File

@ -2,3 +2,5 @@
features:
- Command ``network delete`` is now available for nova network.
[Bug `1543672 <https://bugs.launchpad.net/python-openstackclient/+bug/1543672>`_]
- Command ``network list`` is now available for nova network.
[Bug `1543672 <https://bugs.launchpad.net/python-openstackclient/+bug/1543672>`_]