DimensionData: Fixing wait_for_state for node objects

Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/b693e9f5
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/b693e9f5
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/b693e9f5

Branch: refs/heads/trunk
Commit: b693e9f51f50fc109b7737517abb400af11690b4
Parents: d44fd92
Author: Jeffrey Dunham <jeffrey.a.dun...@gmail.com>
Authored: Fri Feb 19 22:18:19 2016 -0500
Committer: anthony-shaw <anthony.p.s...@gmail.com>
Committed: Sun Feb 28 16:18:56 2016 +1100

----------------------------------------------------------------------
 libcloud/common/dimensiondata.py            | 10 +++++++---
 libcloud/test/compute/test_dimensiondata.py |  5 +++++
 2 files changed, 12 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/b693e9f5/libcloud/common/dimensiondata.py
----------------------------------------------------------------------
diff --git a/libcloud/common/dimensiondata.py b/libcloud/common/dimensiondata.py
index 030c7a2..469f933 100644
--- a/libcloud/common/dimensiondata.py
+++ b/libcloud/common/dimensiondata.py
@@ -21,6 +21,7 @@ from libcloud.utils.py3 import httplib
 from libcloud.utils.py3 import b
 from libcloud.common.base import ConnectionUserAndKey, XmlResponse
 from libcloud.common.types import LibcloudError, InvalidCredsError
+from libcloud.compute.base import Node
 from libcloud.utils.xml import findtext
 
 # Roadmap / TODO:
@@ -426,8 +427,8 @@ class DimensionDataConnection(ConnectionUserAndKey):
     def wait_for_state(self, state, func, poll_interval=2, timeout=60, *args,
                        **kwargs):
         """
-        Wait for the function which returns a instance with field status to
-        match.
+        Wait for the function which returns a instance with field status/state
+        to match.
 
         Keep polling func until one of the desired states is matched
 
@@ -456,7 +457,10 @@ class DimensionDataConnection(ConnectionUserAndKey):
         cnt = 0
         while cnt < timeout / poll_interval:
             result = func(*args, **kwargs)
-            if result.status is state or result.status in state:
+            if isinstance(result, Node):
+                if result.state is state:
+                    return result
+            elif result.status is state or result.status in state:
                 return result
             sleep(poll_interval)
             cnt += 1

http://git-wip-us.apache.org/repos/asf/libcloud/blob/b693e9f5/libcloud/test/compute/test_dimensiondata.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_dimensiondata.py 
b/libcloud/test/compute/test_dimensiondata.py
index 2443ea5..bf0bb0c 100644
--- a/libcloud/test/compute/test_dimensiondata.py
+++ b/libcloud/test/compute/test_dimensiondata.py
@@ -398,6 +398,11 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
                                       self.driver.ex_get_vlan,
                                       
vlan_id='0e56433f-d808-4669-821d-812769517ff8')
 
+    def test_ex_wait_for_state_node(self):
+        self.driver.ex_wait_for_state('running',
+                                      self.driver.ex_get_node_by_id,
+                                      
id='e75ead52-692f-4314-8725-c8a4f4d13a87')
+
     def test_ex_update_vlan(self):
         vlan = self.driver.ex_get_vlan('0e56433f-d808-4669-821d-812769517ff8')
         vlan.name = 'new name'

Reply via email to