Use better variable names, move check to the top.
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/2ebdee24 Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/2ebdee24 Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/2ebdee24 Branch: refs/heads/trunk Commit: 2ebdee24775b13d02b985ed146594357c89bec44 Parents: 805bb05 Author: Tomaz Muraus <[email protected]> Authored: Sun Dec 29 15:32:06 2013 +0100 Committer: Tomaz Muraus <[email protected]> Committed: Sun Dec 29 15:32:06 2013 +0100 ---------------------------------------------------------------------- libcloud/compute/base.py | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/libcloud/blob/2ebdee24/libcloud/compute/base.py ---------------------------------------------------------------------- diff --git a/libcloud/compute/base.py b/libcloud/compute/base.py index 491fa74..7e6b9e6 100644 --- a/libcloud/compute/base.py +++ b/libcloud/compute/base.py @@ -1143,7 +1143,7 @@ class NodeDriver(BaseDriver): def wait_until_running(self, nodes, wait_period=3, timeout=600, ssh_interface='public_ips', force_ipv4=True): """ - Block until the provided nodes are considered running + Block until the provided nodes are considered running. Node is considered running when it's state is "running" and when it has at least one IP address assigned. @@ -1173,7 +1173,7 @@ class NodeDriver(BaseDriver): """ def is_supported(address): """ - Return True for supported address + Return True for supported address. """ if force_ipv4 and not is_valid_ip_address(address=address, family=socket.AF_INET): @@ -1182,32 +1182,36 @@ class NodeDriver(BaseDriver): def filter_addresses(addresses): """ - Return list of supported addresses + Return list of supported addresses. """ - return [a for a in addresses if is_supported(a)] - - start = time.time() - end = start + timeout + return [address for address in addresses if is_supported(address)] if ssh_interface not in ['public_ips', 'private_ips']: raise ValueError('ssh_interface argument must either be' + 'public_ips or private_ips') - uuids = set([n.uuid for n in nodes]) + start = time.time() + end = start + timeout + + uuids = set([node.uuid for node in nodes]) + while time.time() < end: - nodes = self.list_nodes() - nodes = list([n for n in nodes if n.uuid in uuids]) + all_nodes = self.list_nodes() + matching_nodes = list([node for node in all_nodes + if node.uuid in uuids]) - if len(nodes) > len(uuids): - found_uuids = [n.uuid for n in nodes] + if len(matching_nodes) > len(uuids): + found_uuids = [node.uuid for node in matching_nodes] msg = ('Unable to match specified uuids ' + '(%s) with existing nodes. Found ' % (uuids) + 'multiple nodes with same uuid: (%s)' % (found_uuids)) raise LibcloudError(value=msg, driver=self) - running_nodes = [n for n in nodes if n.state == NodeState.RUNNING] - addresses = [filter_addresses(getattr(n, ssh_interface)) for n in - running_nodes] + running_nodes = [node for node in matching_nodes + if node.state == NodeState.RUNNING] + addresses = [filter_addresses(getattr(node, ssh_interface)) + for node in running_nodes] + if len(running_nodes) == len(uuids) == len(addresses): return list(zip(running_nodes, addresses)) else:
