summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Riedemann <mriedem.os@gmail.com>2019-02-20 11:37:16 -0500
committerMatt Riedemann <mriedem.os@gmail.com>2019-02-20 11:58:35 -0500
commit874b03068f1682cb0fe94d59f64e858b1514308d (patch)
tree42b40d98e31160dad389b55964889fcc74aa58fe
parent81ea9887f041a58fae547d5e6efbd60891ab9cab (diff)
downloadpython-novaclient-874b03068f1682cb0fe94d59f64e858b1514308d.tar.gz
Make Server.networks use a predictable sort order
This changes the Server.networks property method to return an OrderedDict where the keys (network labels) are sorted which will allow for a predictable sort order on the resulting networks attached to a Server resource. This affects the output of "nova list" and "nova show" commands so a simple release note is added to mention the change. Change-Id: I2e9b3c6a256509c045966035da24d58628f1b33b
-rw-r--r--novaclient/tests/unit/v2/test_servers.py6
-rw-r--r--novaclient/v2/servers.py11
-rw-r--r--releasenotes/notes/server-networks-sorted-1d3a7f1c1f88e846.yaml7
3 files changed, 22 insertions, 2 deletions
diff --git a/novaclient/tests/unit/v2/test_servers.py b/novaclient/tests/unit/v2/test_servers.py
index e153fd57..8a734f82 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 fa296bf6..5e29b112 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 00000000..d6b94706
--- /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.