diff --git a/novaclient/tests/unit/v2/test_servers.py b/novaclient/tests/unit/v2/test_servers.py index e153fd571..8a734f82d 100644 --- a/novaclient/tests/unit/v2/test_servers.py +++ b/novaclient/tests/unit/v2/test_servers.py @@ -453,6 +453,12 @@ class ServersTest(utils.FixturedTestCase): self.assert_request_id(server, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/servers/1234') self.assertEqual('sample-server', server.name) + # The networks should be sorted. + networks = server.networks + self.assertEqual(2, len(networks)) + labels = list(networks) # returns the dict keys + self.assertEqual('private', labels[0]) + self.assertEqual('public', labels[1]) self.assertRaises(exceptions.NoUniqueMatch, self.cs.servers.find, flavor={"id": 1, "name": "256 MiB Server"}) diff --git a/novaclient/v2/servers.py b/novaclient/v2/servers.py index fa296bf62..5e29b1121 100644 --- a/novaclient/v2/servers.py +++ b/novaclient/v2/servers.py @@ -20,6 +20,7 @@ Server interface. """ import base64 +import collections from oslo_utils import encodeutils import six @@ -399,10 +400,16 @@ class Server(base.Resource): def networks(self): """ Generate a simplified list of addresses + + :returns: An OrderedDict, keyed by network name, and sorted by network + name in ascending order. """ - networks = {} + networks = collections.OrderedDict() try: - for network_label, address_list in self.addresses.items(): + # Sort the keys by network name in natural (ascending) order. + network_labels = sorted(self.addresses.keys()) + for network_label in network_labels: + address_list = self.addresses[network_label] networks[network_label] = [a['addr'] for a in address_list] return networks except AttributeError: diff --git a/releasenotes/notes/server-networks-sorted-1d3a7f1c1f88e846.yaml b/releasenotes/notes/server-networks-sorted-1d3a7f1c1f88e846.yaml new file mode 100644 index 000000000..d6b94706f --- /dev/null +++ b/releasenotes/notes/server-networks-sorted-1d3a7f1c1f88e846.yaml @@ -0,0 +1,7 @@ +--- +other: + - | + The ``novaclient.v2.servers.Server.networks`` property method now returns + an OrderedDict where the keys are sorted in natural (ascending) order. + This means the ``nova show`` and ``nova list`` output will have predictable + sort order on the networks attached to a server.