|
Jakub Ruzicka |
fcc2a65 |
From 9ef187014875577fd62ca2b5454355c34cd22708 Mon Sep 17 00:00:00 2001
|
|
Jakub Ruzicka |
fcc2a65 |
From: ZhiQiang Fan <zhiqiang.fan@huawei.com>
|
|
Jakub Ruzicka |
fcc2a65 |
Date: Mon, 24 Mar 2014 15:29:01 +0800
|
|
Jakub Ruzicka |
fcc2a65 |
Subject: [PATCH] Avoid AttributeError in servers.Server.__repr__
|
|
Jakub Ruzicka |
fcc2a65 |
|
|
Jakub Ruzicka |
fcc2a65 |
servers.Server represents various object now, and some of them may
|
|
Jakub Ruzicka |
fcc2a65 |
don't have attribute 'name', for example, the interface_list() result
|
|
Jakub Ruzicka |
fcc2a65 |
object. It will cause AttributeError when we try to format string with
|
|
Jakub Ruzicka |
fcc2a65 |
such object, so I add a check for the 'name' attribute in __repr__
|
|
Jakub Ruzicka |
fcc2a65 |
method, it will use 'unknown-name' instead when 'name' is not found.
|
|
Jakub Ruzicka |
fcc2a65 |
|
|
Jakub Ruzicka |
fcc2a65 |
Change-Id: If4757d5d73721774543d58a4cc875710a6013f34
|
|
Jakub Ruzicka |
fcc2a65 |
Closes-Bug: #1280453
|
|
Jakub Ruzicka |
fcc2a65 |
---
|
|
Jakub Ruzicka |
fcc2a65 |
novaclient/tests/v1_1/test_servers.py | 26 ++++++++++++++++++++++++++
|
|
Jakub Ruzicka |
fcc2a65 |
novaclient/v1_1/servers.py | 2 +-
|
|
Jakub Ruzicka |
fcc2a65 |
2 files changed, 27 insertions(+), 1 deletion(-)
|
|
Jakub Ruzicka |
fcc2a65 |
|
|
Jakub Ruzicka |
fcc2a65 |
diff --git a/novaclient/tests/v1_1/test_servers.py b/novaclient/tests/v1_1/test_servers.py
|
|
Jakub Ruzicka |
fcc2a65 |
index a48204c..b70964a 100644
|
|
Jakub Ruzicka |
fcc2a65 |
--- a/novaclient/tests/v1_1/test_servers.py
|
|
Jakub Ruzicka |
fcc2a65 |
+++ b/novaclient/tests/v1_1/test_servers.py
|
|
Jakub Ruzicka |
fcc2a65 |
@@ -582,6 +582,32 @@ class ServersTest(utils.TestCase):
|
|
Jakub Ruzicka |
fcc2a65 |
s.interface_list()
|
|
Jakub Ruzicka |
fcc2a65 |
cs.assert_called('GET', '/servers/1234/os-interface')
|
|
Jakub Ruzicka |
fcc2a65 |
|
|
Jakub Ruzicka |
fcc2a65 |
+ def test_interface_list_result_string_representable(self):
|
|
Jakub Ruzicka |
fcc2a65 |
+ """Test for bugs.launchpad.net/python-novaclient/+bug/1280453."""
|
|
Jakub Ruzicka |
fcc2a65 |
+ # According to https://github.com/openstack/nova/blob/master/
|
|
Jakub Ruzicka |
fcc2a65 |
+ # nova/api/openstack/compute/contrib/attach_interfaces.py#L33,
|
|
Jakub Ruzicka |
fcc2a65 |
+ # the attach_interface extension get method will return a json
|
|
Jakub Ruzicka |
fcc2a65 |
+ # object partly like this:
|
|
Jakub Ruzicka |
fcc2a65 |
+ interface_list = [{
|
|
Jakub Ruzicka |
fcc2a65 |
+ 'net_id': 'd7745cf5-63f9-4883-b0ae-983f061e4f23',
|
|
Jakub Ruzicka |
fcc2a65 |
+ 'port_id': 'f35079da-36d5-4513-8ec1-0298d703f70e',
|
|
Jakub Ruzicka |
fcc2a65 |
+ 'mac_addr': 'fa:16:3e:4c:37:c8',
|
|
Jakub Ruzicka |
fcc2a65 |
+ 'port_state': 'ACTIVE',
|
|
Jakub Ruzicka |
fcc2a65 |
+ 'fixed_ips': [{
|
|
Jakub Ruzicka |
fcc2a65 |
+ 'subnet_id': 'f1ad93ad-2967-46ba-b403-e8cbbe65f7fa',
|
|
Jakub Ruzicka |
fcc2a65 |
+ 'ip_address': '10.2.0.96'
|
|
Jakub Ruzicka |
fcc2a65 |
+ }]
|
|
Jakub Ruzicka |
fcc2a65 |
+ }]
|
|
Jakub Ruzicka |
fcc2a65 |
+ # If server is not string representable, it will raise an exception,
|
|
Jakub Ruzicka |
fcc2a65 |
+ # because attribute named 'name' cannot be found.
|
|
Jakub Ruzicka |
fcc2a65 |
+ # Parameter 'loaded' must be True or it will try to get attribute
|
|
Jakub Ruzicka |
fcc2a65 |
+ # 'id' then fails (lazy load detail), this is exactly same as
|
|
Jakub Ruzicka |
fcc2a65 |
+ # novaclient.base.Manager._list()
|
|
Jakub Ruzicka |
fcc2a65 |
+ s = servers.Server(servers.ServerManager, interface_list[0],
|
|
Jakub Ruzicka |
fcc2a65 |
+ loaded=True)
|
|
Jakub Ruzicka |
fcc2a65 |
+ # Trigger the __repr__ magic method
|
|
Jakub Ruzicka |
fcc2a65 |
+ self.assertEqual('<Server: unknown-name>', '%r' % s)
|
|
Jakub Ruzicka |
fcc2a65 |
+
|
|
Jakub Ruzicka |
fcc2a65 |
def test_interface_attach(self):
|
|
Jakub Ruzicka |
fcc2a65 |
s = cs.servers.get(1234)
|
|
Jakub Ruzicka |
fcc2a65 |
s.interface_attach(None, None, None)
|
|
Jakub Ruzicka |
fcc2a65 |
diff --git a/novaclient/v1_1/servers.py b/novaclient/v1_1/servers.py
|
|
Jakub Ruzicka |
fcc2a65 |
index cf284d9..d4ac6a7 100644
|
|
Jakub Ruzicka |
fcc2a65 |
--- a/novaclient/v1_1/servers.py
|
|
Jakub Ruzicka |
fcc2a65 |
+++ b/novaclient/v1_1/servers.py
|
|
Jakub Ruzicka |
fcc2a65 |
@@ -36,7 +36,7 @@ class Server(base.Resource):
|
|
Jakub Ruzicka |
fcc2a65 |
HUMAN_ID = True
|
|
Jakub Ruzicka |
fcc2a65 |
|
|
Jakub Ruzicka |
fcc2a65 |
def __repr__(self):
|
|
Jakub Ruzicka |
fcc2a65 |
- return "<Server: %s>" % self.name
|
|
Jakub Ruzicka |
fcc2a65 |
+ return '<Server: %s>' % getattr(self, 'name', 'unknown-name')
|
|
Jakub Ruzicka |
fcc2a65 |
|
|
Jakub Ruzicka |
fcc2a65 |
def delete(self):
|
|
Jakub Ruzicka |
fcc2a65 |
"""
|