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'