Example #1
0
def deploy_bcf(config, fuel_cluster_id):
    # Deploy setup node
    Helper.safe_print("Start to prepare setup node\n")
    env = Environment(config, fuel_cluster_id)
    Helper.common_setup_node_preparation(env)
    controller_node = None

    # Generate detailed node information
    Helper.safe_print("Start to setup Big Cloud Fabric\n")
    nodes_config = None
    if 'nodes' in config:
        nodes_yaml_config = config['nodes']
    node_dic = Helper.load_nodes(nodes_yaml_config, env)

    # Generate scripts for each node
    for hostname, node in node_dic.iteritems():
        if node.os == const.CENTOS:
            Helper.generate_scripts_for_centos(node)
        elif node.os == const.UBUNTU:
            Helper.generate_scripts_for_ubuntu(node)
        with open(const.LOG_FILE, "a") as log_file:
            log_file.write(str(node))
        if node.skip:
            Helper.safe_print("skip node %(hostname)s due to %(error)s\n" %
                             {'hostname' : hostname,
                              'error'    : node.error})
            continue
        node_q.put(node)

        if node.role == const.ROLE_NEUTRON_SERVER:
            controller_node = node
        elif node.deploy_dhcp_agent:
            dhcp_node_q.put(node)

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

    # Use multiple threads to setup up dhcp agent and metadata agent
    if controller_node:
        Helper.safe_print("Copy dhcp_agent.ini from openstack controller %(controller_node)s\n" %
                         {'controller_node' : controller_node.hostname})
        Helper.copy_file_from_remote(controller_node, '/etc/neutron', 'dhcp_agent.ini',
                                     controller_node.setup_node_dir)
        Helper.safe_print("Copy metadata_agent.ini from openstack controller %(controller_node)s\n" %
                         {'controller_node' : controller_node.hostname})
        Helper.copy_file_from_remote(controller_node, '/etc/neutron', 'metadata_agent.ini',
                                     controller_node.setup_node_dir)
    for i in range(const.MAX_WORKERS):
        t = threading.Thread(target=worker_setup_dhcp_agent)
        t.daemon = True
        t.start()
    dhcp_node_q.join()

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