def return_controller_ip():
    config = argv[1]
    fuel_ip = argv[2]

    parser = SafeConfigParser()
    parser.read(config)

    cluster_settings = dict(parser.items('cluster'))

    client = fuel.NailgunClient(str(fuel_ip))
    cluster_id = client.get_cluster_id(cluster_settings['env_name'])
    if cluster_settings['config_mode'] == 'ha_compact':
        ext_env_ip = client.get_networks(cluster_id).get("public_vip", "")
    else:
        ext_env_ip = next(network['ip_ranges'][0][0] for network
                          in client.get_networks(cluster_id)['networks']
                          if network['name'] == 'public')
    if ext_env_ip:
        logger.info("Cluster URL: http://{}/".format(ext_env_ip))
        print ext_env_ip
    else:
        logger.warning("Cluster URL not found")
def return_controller_ip():
    config = argv[1]
    fuel_ip = argv[2]

    parser = SafeConfigParser()
    parser.read(config)

    cluster_settings = dict(parser.items('cluster'))

    client = fuel.NailgunClient(str(fuel_ip))
    cluster_id = client.get_cluster_id(cluster_settings['env_name'])
    if cluster_settings['config_mode'] == 'ha_compact':
        ext_env_ip = client.get_networks(cluster_id).get("public_vip", "")
    else:
        ext_env_ip = next(network['ip_ranges'][0][0] for network
                          in client.get_networks(cluster_id)['networks']
                          if network['name'] == 'public')
    if ext_env_ip:
        logger.info("Cluster URL: http://{}/".format(ext_env_ip))
        print ext_env_ip
    else:
        logger.warning("Cluster URL not found")
def await_deploy(fuel_ip, cluster_settings):
    client = fuel.NailgunClient(str(fuel_ip))
    cluster_id = client.get_cluster_id(cluster_settings['env_name'])
    conn = libvirt.open("qemu:///system")
    err_message = "Cluster {0} with name {1} has error status".format(
        cluster_id, cluster_settings['env_name'])

    deploy_timeout = int(cluster_settings.get('deploy_timeout', 7200))
    waiting_time = 0
    while waiting_time < deploy_timeout:
        for domain_name in conn.listDefinedDomains():
            conn.lookupByName(domain_name).create()

        try:
            state = client.get_cluster(cluster_id)['status']
            if state == 'operational':
                return
            if state == 'error':

                task_id = client.generate_logs()['id']
                start_time = time.time()

                while client.get_task(task_id)['status'] == 'running':
                    time.sleep(5)
                    if time.time() - start_time > 600:
                        raise RuntimeError(
                            "Diagnostic snapshot makes so very long. "
                            "Aborting. " + err_message)

                task = client.get_task(task_id)
                url = "http://{0}:8000{1}".format(fuel_ip, task['message'])
                log_path = os.environ.get("LOGGING_PATH", "logs/")
                log_name = "diagnostic_snapshot.tar.xz"

                if log_path.startswith('/'):
                    logfile = os.path.join(log_path, log_name)
                else:
                    logfile = os.path.join(
                        os.path.join(os.getcwd()), log_path, log_name)

                try:
                    with open(logfile, 'w') as f:
                        f.write(
                            urllib2.urlopen(url).read()
                        )
                except (urllib2.HTTPError, urllib2.URLError) as e:
                    raise RuntimeError(
                        "Diagnostic snapshot ready, but not saved. " +
                        err_message + "({0}): {1}".format(e.errno, e.strerror)
                    )

                raise RuntimeError(err_message)
            logger.info('Waiting {0} of {1} seconds - cluster {2} has '
                        'state "{3}"'.format(
                            waiting_time,
                            deploy_timeout,
                            cluster_id,
                            state
                        ))
        except urllib2.URLError:
            pass
        waiting_time += POLL_PERIOD
        time.sleep(POLL_PERIOD)
    raise RuntimeError('Timeout waiting for cluster deployment')
def await_deploy(fuel_ip, cluster_settings):
    client = fuel.NailgunClient(str(fuel_ip))
    cluster_id = client.get_cluster_id(cluster_settings['env_name'])
    conn = libvirt.open("qemu:///system")
    err_message = "Cluster {0} with name {1} has error status".format(
        cluster_id, cluster_settings['env_name'])

    deploy_timeout = int(cluster_settings.get('deploy_timeout', 7200))
    waiting_time = 0
    while waiting_time < deploy_timeout:
        for domain_name in conn.listDefinedDomains():
            conn.lookupByName(domain_name).create()

        try:
            state = client.get_cluster(cluster_id)['status']
            if state == 'operational':
                return
            if state == 'error':

                task_id = client.generate_logs()['id']
                start_time = time.time()

                while client.get_task(task_id)['status'] == 'running':
                    time.sleep(5)
                    if time.time() - start_time > 600:
                        raise RuntimeError(
                            "Diagnostic snapshot makes so very long. "
                            "Aborting. " + err_message)

                task = client.get_task(task_id)
                url = "http://{0}:8000{1}".format(fuel_ip, task['message'])
                log_path = os.environ.get("LOGGING_PATH", "logs/")
                log_name = "diagnostic_snapshot.tar.xz"

                if log_path.startswith('/'):
                    logfile = os.path.join(log_path, log_name)
                else:
                    logfile = os.path.join(
                        os.path.join(os.getcwd()), log_path, log_name)

                try:
                    with open(logfile, 'w') as f:
                        f.write(
                            urllib2.urlopen(url).read()
                        )
                except (urllib2.HTTPError, urllib2.URLError) as e:
                    raise RuntimeError(
                        "Diagnostic snapshot ready, but not saved. " +
                        err_message + "({0}): {1}".format(e.errno, e.strerror)
                    )

                raise RuntimeError(err_message)
            logger.info('Waiting {0} of {1} seconds - cluster {2} has '
                        'state "{3}"'.format(
                            waiting_time,
                            deploy_timeout,
                            cluster_id,
                            state
                        ))
        except urllib2.URLError:
            pass
        waiting_time += POLL_PERIOD
        time.sleep(POLL_PERIOD)
    raise RuntimeError('Timeout waiting for cluster deployment')