def install_gluster(tarball):
    nodes = run_helper.get_nodes_ip()

    clients = run_helper.get_client_ip()
    for client in clients:
        if client not in nodes:
            nodes.append(client)

    if not os.path.exists(tarball):
        print 'INFO: Source tarball ' + tarball + ' doesn\'t exist. Proceeding to download from bits.gluster.com'
        download_url = 'http://bits.gluster.com/pub/gluster/glusterfs/src/' + tarball
        cmd = 'wget ' +  download_url
        wget_status = os.system(cmd)
        if wget_status:
            print 'unable to download ' + tarball + ' from bits.gluster.com, \n Exiting...'
            sys.exit(1)

    prefix_path = run_helper.get_prefix_path()

    build_dir = run_helper.get_build_dir()
    if build_dir[-1] != '/':
        build_dir = build_dir + '/'

    ret_queue = Queue.Queue()
    threads = []
    for node in nodes:
        t = threading.Thread(target=real_install_gluster, args=(node, tarball, build_dir, prefix_path, ret_queue))
        t.start()
        threads.append(t)

    ret_codes = []
    for t in threads:
        t.join()
        ret_codes.append(ret_queue.get())

    return_value = 0
    for ret in ret_codes:
        if ret != 0:
            return_value = 1
            break

    return return_value
def install_gluster_rpms(rpms):

    nodes = run_helper.get_nodes_ip()

    clients = run_helper.get_client_ip()
    for client in clients:
        if client not in nodes:
            nodes.append(client)

    g_version = run_helper.get_gluster_version()
    if g_version[-7:] == '.tar.gz':
        gluster_version = g_version[:-7]
    else:
        gluster_version = g_version

    match = re.search(r'glusterfs-([\w.]+)', gluster_version)
    if not match:
        print 'unable to get gluster version to determine the rpm URL. Please check the configfile'
        sys.exit(1)
    version = match.group(1)

    ret_queue = Queue.Queue()
    threads = []
    for node in nodes:
        t = threading.Thread(target=install_rpm, args=(node, version, rpms, ret_queue))
        t.start()
        threads.append(t)

    ret_codes = []
    for t in threads:
        t.join()
        ret_codes.append(ret_queue.get())

    ret_value = 0
    for ret in ret_codes:
        if ret != 0:
            ret_value = 1
            break

    return ret_value