From 9cb0148e523f63458dfd6d662eb88703ca3dd2aa Mon Sep 17 00:00:00 2001 From: Nick Fox Date: Fri, 31 Jul 2015 15:17:13 -0500 Subject: [PATCH] Add instance fault to OpenStack_NodeDriver `InstanceFault` is returned by the API but is not saved in the `OpenStack_1_1_NodeDriver.extra` field. Adding `fault` to the `extra` field. (https://issues.apache.org/jira/browse/LIBCLOUD-730) --- libcloud/compute/drivers/openstack.py | 1 + .../compute/fixtures/openstack_v1.1/_servers_detail.json | 8 ++++++++ libcloud/test/compute/test_openstack.py | 1 + 3 files changed, 10 insertions(+) diff --git a/libcloud/compute/drivers/openstack.py b/libcloud/compute/drivers/openstack.py index 211e8fb644..469f5d6dec 100644 --- a/libcloud/compute/drivers/openstack.py +++ b/libcloud/compute/drivers/openstack.py @@ -2113,6 +2113,7 @@ def _to_node(self, api_node): vm_state=api_node.get("OS-EXT-STS:vm_state", None), power_state=api_node.get("OS-EXT-STS:power_state", None), progress=api_node.get("progress", None), + fault=api_node.get('fault') ), ) diff --git a/libcloud/test/compute/fixtures/openstack_v1.1/_servers_detail.json b/libcloud/test/compute/fixtures/openstack_v1.1/_servers_detail.json index 1bc875d183..4c31b27c68 100644 --- a/libcloud/test/compute/fixtures/openstack_v1.1/_servers_detail.json +++ b/libcloud/test/compute/fixtures/openstack_v1.1/_servers_detail.json @@ -85,6 +85,14 @@ } ] }, + "fault": { + "id": 1234, + "instance_uuid": "ec53630b-e4fb-442a-a748-c376f5c4345b", + "code": "500", + "message": "test message", + "details": "No valid host was found.", + "host": "912566d83a13fbb357ea3f13c629363d9f7e1ba3f925b49f3d2ab725" + }, "config_drive": "", "id": 12065, "metadata": {}, diff --git a/libcloud/test/compute/test_openstack.py b/libcloud/test/compute/test_openstack.py index feb5a0c443..677b1be408 100644 --- a/libcloud/test/compute/test_openstack.py +++ b/libcloud/test/compute/test_openstack.py @@ -788,6 +788,7 @@ def test_list_nodes(self): self.assertEqual(node.extra.get('vm_state'), 'active') self.assertEqual(node.extra.get('power_state'), 1) self.assertEqual(node.extra.get('progress'), 25) + self.assertEqual(node.extra.get('fault')['id'], 1234) def test_list_nodes_no_image_id_attribute(self): # Regression test for LIBCLOD-455