def _await_networks(cluster, instances): if not instances: return ips_assigned = set() while len(ips_assigned) != len(instances): if not g.check_cluster_exists(instances[0].node_group.cluster): return for instance in instances: if instance.id not in ips_assigned: if networks.init_instances_ips(instance): ips_assigned.add(instance.id) context.sleep(1) LOG.info("Cluster '%s': all instances have IPs assigned" % cluster.id) ctx = context.ctx() cluster = conductor.cluster_get(ctx, instances[0].node_group.cluster) instances = _get_instances(cluster, ips_assigned) with context.ThreadGroup() as tg: for instance in instances: tg.spawn("wait-for-ssh-%s" % instance.instance_name, _wait_until_accessible, instance) LOG.info("Cluster '%s': all instances are accessible" % cluster.id)
def _check_if_up(instance): if hasattr(instance, '_is_up'): return True server = instance.nova_info if server.status == 'ERROR': # TODO(slukjanov): replace with specific error raise RuntimeError("node %s has error status" % server.name) if server.status != 'ACTIVE': return False if len(server.networks) == 0: return False if not networks.init_instances_ips(instance, server): return False try: exit_code, _ = instance.remote.execute_command("hostname") if exit_code: return False except Exception as ex: LOG.debug("Can't login to node %s (%s), reason %s", server.name, instance.management_ip, ex) return False instance._is_up = True return True
def _await_networks(self, cluster, instances): if not instances: return ips_assigned = set() while len(ips_assigned) != len(instances): if not g.check_cluster_exists(instances[0].node_group.cluster): return for instance in instances: if instance.id not in ips_assigned: if networks.init_instances_ips(instance): ips_assigned.add(instance.id) context.sleep(1) LOG.info("Cluster '%s': all instances have IPs assigned" % cluster.id) ctx = context.ctx() cluster = conductor.cluster_get(ctx, instances[0].node_group.cluster) instances = g.get_instances(cluster, ips_assigned) with context.ThreadGroup() as tg: for instance in instances: tg.spawn("wait-for-ssh-%s" % instance.instance_name, self._wait_until_accessible, instance) LOG.info("Cluster '%s': all instances are accessible" % cluster.id)
def _await_networks(instances): if not instances: return ips_assigned = set() while len(ips_assigned) != len(instances): if not _check_cluster_exists(instances[0].node_group.cluster): return for instance in instances: if instance.id not in ips_assigned: if networks.init_instances_ips(instance): ips_assigned.add(instance.id) context.sleep(1) ctx = context.ctx() cluster = conductor.cluster_get(ctx, instances[0].node_group.cluster) instances = get_instances(cluster, ips_assigned) accessible_instances = set() while len(accessible_instances) != len(instances): if not _check_cluster_exists(instances[0].node_group.cluster): return for instance in instances: if instance.id not in accessible_instances: if _check_if_accessible(instance): accessible_instances.add(instance.id) context.sleep(1)
def _check_if_up(instance): if instance.internal_ip and instance.management_ip: return True server = nova.get_instance_info(instance) if server.status == 'ERROR': # TODO(slukjanov): replace with specific error raise RuntimeError("node %s has error status" % server.name) if server.status != 'ACTIVE': return False if len(server.networks) == 0: return False if not networks.init_instances_ips(instance, server): return False return True