Example #1
0
def setup_sriov(node_dic):
    for hostname, node in node_dic.iteritems():
        if node.skip:
            safe_print("skip node %(fqdn)s due to %(error)s\n" % {
                'fqdn': node.fqdn,
                'error': node.error
            })
            continue
        if node.tag != node.env_tag:
            safe_print("skip node %(fqdn)s due to mismatched tag\n" %
                       {'fqdn': node.fqdn})
            continue
        if node.role != const.ROLE_SRIOV:
            safe_print("Skipping node %(hostname)s because deployment mode is "
                       "SRIOV and role set for node is not SRIOV. It is "
                       "%(role)s\n" % {
                           'hostname': hostname,
                           'role': node.role
                       })
            continue
        if node.os != const.REDHAT:
            safe_print("Skipping node %(hostname)s because deployment mode is "
                       "SRIOV and non REDHAT OS is not supported. OS set for "
                       "node is %(os)s\n" % {
                           'hostname': hostname,
                           'os': node.os
                       })
            continue

        # all okay, generate scripts for node
        Helper.generate_sriov_scripts_for_redhat(node)
        node_q.put(node)

    with open(const.LOG_FILE, "a") as log_file:
        for hostname, node in node_dic.iteritems():
            log_file.write(str(node))

    # Use multiple threads to setup nodes
    for i in range(const.MAX_WORKERS):
        t = threading.Thread(target=worker_upgrade_or_sriov_node,
                             args=(node_q, ))
        t.daemon = True
        t.start()
    node_q.join()

    sorted_time_dict = OrderedDict(
        sorted(time_dict.items(), key=lambda x: x[1]))
    for fqdn, h_time in sorted_time_dict.items():
        safe_print("node: %(fqdn)s, time: %(time).2f\n" % {
            'fqdn': fqdn,
            'time': h_time
        })

    safe_print("Big Cloud Fabric deployment finished! "
               "Check %(log)s on each node for details.\n" %
               {'log': const.LOG_FILE})