Пример #1
0
def setup_worker_userdata(configs, headnode_ip):

    if configs['SERVICE_TYPE'] == 'slurm':
        userdata = configurator.getstring("worker_slurm")
    elif configs['SERVICE_TYPE'] == 'coasters':
        userdata = configurator.getstring("worker_coasters")
    else:
        logging.error("Unknown SERVICE_TYPE:{0}\nCannot proceed, failing".format(configs['SERVICE_TYPE']))
        exit(-1);

    userdata   = userdata.replace("SET_HEADNODE_IP", headnode_ip)
    concurrency= ""
    if 'WORKER_CONCURRENCY' in configs:
        concurrency = "-c " + str(configs['WORKER_CONCURRENCY'])
    userdata    = userdata.replace("SET_CONCURRENCY", concurrency)

    if 'WORKER_INIT_SCRIPT' in configs :
        if not os.path.isfile(configs['WORKER_INIT_SCRIPT']):
            print "Unable to read WORKER_INIT_SCRIPT"
            exit(-1);
        init_string = open(configs['WORKER_INIT_SCRIPT'], 'r').read()
        userdata    = userdata.replace("#WORKER_INIT_SCRIPT", init_string)

    logging.info("Worker userdata : %s", userdata)

    userdata = userdata.replace("#ETC_LINE", "{0}\t{1}".format(headnode_ip, HEADNODE_NAME))
    logging.debug("USERDATA:\n{0}\n".format(userdata))

    return userdata
Пример #2
0
def setup_headnode_userdata(configs):

    if configs['SERVICE_TYPE'] == 'slurm':
        userdata = configurator.getstring("headnode_slurm")
    elif configs['SERVICE_TYPE'] == 'coasters':
        userdata = configurator.getstring("headnode_coasters")
    else:
        logging.error("Unknown SERVICE_TYPE:{0}\nCannot proceed, failing".format(configs['SERVICE_TYPE']))
        exit(-1);

    return userdata
Пример #3
0
def setup_headnode_userdata(configs):

    if configs['SERVICE_TYPE'] == 'slurm':
        userdata = configurator.getstring("headnode_slurm")
    elif configs['SERVICE_TYPE'] == 'coasters':
        userdata = configurator.getstring("headnode_coasters")
    elif configs['SERVICE_TYPE'] == 'turbine':
        userdata = configurator.getstring("headnode_turbine")
        userdata = userdata.replace("PRIVATE_KEY", open("./turbine_rsa").read())
    else:
        logging.error("Unknown SERVICE_TYPE:{0}\nCannot proceed, failing".format(configs['SERVICE_TYPE']))
        exit(-1);

    return userdata
Пример #4
0
def start_headnode(driver, configs):
    userdata   = configurator.getstring("headnode")

    # Check if headnode
    nodes      = driver.list_nodes()
    headnode   = False
    for node in nodes:
        if node.name == "headnode" and node.state == NodeState.RUNNING:
            headnode = node
            print "INFO: Headnode is RUNNING"
            return 0

    size       = NodeSize(id=configs['HEADNODE_MACHINE_TYPE'], name='headnode',
                          ram=None, disk=None, bandwidth=None, price=None, driver=driver)
    image      = NodeImage(id=configs['HEADNODE_IMAGE'], name=None, driver=driver)
    node       = driver.create_node(name='headnode',
                                    image=image,
                                    size=size,
                                    ex_keyname=configs['AWS_KEYPAIR_NAME'],
                                    ex_securitygroup=configs['SECURITY_GROUP'],
                                    ex_userdata=userdata )
    print "INFO: Waiting for headnode bootup ..."
    driver._wait_until_running(node, wait_period=5, timeout=240)
    print "INFO: Headnode active!"
    if node.public_ips:
        print '-'*51
        print '{0:20} | {1:10} | {2:15}'.format(node.name, NODESTATES[node.state], node.public_ips[0])
        print '-'*51
        f = open('./PUBLIC_ADDRESS', 'w')
        f.write(str(node.public_ips[0]))
        f.close()
Пример #5
0
def start_worker(driver, configs, worker_names):
    nodes      = driver.list_nodes()
    headnode   = False
    for node in nodes:
        if node.name == "headnode" and node.state == NodeState.RUNNING:
            headnode = node
    if not headnode :
        print "WARNING : No active headnode found"
        return -1

    # Setup userdata
    userdata   = configurator.getstring("worker")
    userdata   = userdata.replace("SET_HEADNODE_IP", headnode.public_ips[0])
    logging.debug("Worker userdata : %s", userdata)

    list_nodes = []
    for worker_name in worker_names:
        size       = NodeSize(id=configs['WORKER_MACHINE_TYPE'], name=worker_name,
                              ram=None, disk=None, bandwidth=None, price=None, driver=driver)
        image      = NodeImage(id=configs['WORKER_IMAGE'], name=None, driver=driver)
        node       = driver.create_node(name=worker_name,
                                        image=image,
                                        size=size,
                                        ex_keyname=configs['AWS_KEYPAIR_NAME'],
                                        ex_securitygroup=configs['SECURITY_GROUP'],
                                        ex_userdata=userdata )
        list_nodes.append(node)
        logging.info("Worker node started : %s",str(node))
Пример #6
0
def start_worker(driver, configs, worker_names):
    nodes = driver.list_nodes()
    headnode = False
    for node in nodes:
        if node.name == "headnode" and node.state == NodeState.RUNNING:
            headnode = node
    if not headnode:
        print "WARNING : No active headnode found"
        return -1

    # Setup userdata
    userdata = configurator.getstring("worker")
    userdata = userdata.replace("SET_HEADNODE_IP", headnode.public_ips[0])
    logging.debug("Worker userdata : %s", userdata)

    list_nodes = []
    for worker_name in worker_names:
        size = NodeSize(id=configs['WORKER_MACHINE_TYPE'],
                        name=worker_name,
                        ram=None,
                        disk=None,
                        bandwidth=None,
                        price=None,
                        driver=driver)
        image = NodeImage(id=configs['WORKER_IMAGE'], name=None, driver=driver)
        node = driver.create_node(name=worker_name,
                                  image=image,
                                  size=size,
                                  ex_keyname=configs['AWS_KEYPAIR_NAME'],
                                  ex_securitygroup=configs['SECURITY_GROUP'],
                                  ex_userdata=userdata)
        list_nodes.append(node)
        logging.info("Worker node started : %s", str(node))
Пример #7
0
def start_headnode(driver, configs):
    userdata   = configurator.getstring("headnode")

    # Check if headnode
    nodes      = driver.list_nodes()
    headnode   = False
    for node in nodes:
        if node.name == "headnode" and node.state == NodeState.RUNNING:
            headnode = node
            print "INFO: Headnode is RUNNING"
            return 0



    sizes      = driver.list_sizes()
    size       = [ s for s in sizes if s.id == configs['HEADNODE_MACHINE_TYPE'] ]
    if not size:
        logging.info("ec2headnodeimage not legal/valid : %s", configs['HEADNODE_MACHINE_TYPE'])
        sys.stderr.write("HEADNODE_MACHINE_TYPE not legal/valid \n")
        exit(-1);

    image      = NodeImage(id=configs['HEADNODE_IMAGE'], name=None, driver=driver)
    node       = driver.create_node(name='headnode',
                                    image=image,
                                    size=size[0],
                                    ex_keyname=configs['AWS_KEYPAIR_NAME'],
                                    ex_securitygroup=configs['SECURITY_GROUP'],
                                    ex_userdata=userdata )
    print "INFO: Waiting for headnode bootup ..."
    driver._wait_until_running(node, wait_period=5, timeout=240)
    print "INFO: Headnode active!"
    if node.public_ips:
        print '-'*51
        print '{0:20} | {1:10} | {2:15}'.format(node.name, NODESTATES[node.state], node.public_ips[0])
        print '-'*51
        f = open('./PUBLIC_ADDRESS', 'w')
        f.write(str(node.public_ips[0]))
        f.close()
Пример #8
0
def start_headnode(driver, configs):
    userdata = configurator.getstring("headnode")

    # Check if headnode
    nodes = driver.list_nodes()
    headnode = False
    for node in nodes:
        if node.name == "headnode" and node.state == NodeState.RUNNING:
            headnode = node
            print "INFO: Headnode is RUNNING"
            return 0

    size = NodeSize(id=configs['HEADNODE_MACHINE_TYPE'],
                    name='headnode',
                    ram=None,
                    disk=None,
                    bandwidth=None,
                    price=None,
                    driver=driver)
    image = NodeImage(id=configs['HEADNODE_IMAGE'], name=None, driver=driver)
    node = driver.create_node(name='headnode',
                              image=image,
                              size=size,
                              ex_keyname=configs['AWS_KEYPAIR_NAME'],
                              ex_securitygroup=configs['SECURITY_GROUP'],
                              ex_userdata=userdata)
    print "INFO: Waiting for headnode bootup ..."
    driver._wait_until_running(node, wait_period=5, timeout=240)
    print "INFO: Headnode active!"
    if node.public_ips:
        print '-' * 51
        print '{0:20} | {1:10} | {2:15}'.format(node.name,
                                                NODESTATES[node.state],
                                                node.public_ips[0])
        print '-' * 51
        f = open('./PUBLIC_ADDRESS', 'w')
        f.write(str(node.public_ips[0]))
        f.close()
Пример #9
0
def start_worker(driver, configs, worker_names):
    nodes       = driver.list_nodes()
    headnode    = False
    disk_info   = False
    volume      = False
    disk_info   = ""
    concurrency = "-c 1" # Default concurrency for workers
    init_string = ""

    for node in nodes:
        if node.name == "headnode" and node.state == NodeState.RUNNING:
            headnode = node
    if not headnode :
        print "WARNING : No active headnode found"
        return -1

    # Setup userdata
    userdata   = configurator.getstring("worker")
    userdata   = userdata.replace("SET_HEADNODE_IP", headnode.public_ips[0])

    # Setting worker concurrency level
    if 'WORKER_CONCURRENCY' in configs:
        concurrency = "-c " + str(configs['WORKER_CONCURRENCY'])
    userdata    = userdata.replace("SET_CONCURRENCY", concurrency)

    # Inserting WORKER_INIT_SCRIPT
    if 'WORKER_INIT_SCRIPT' in configs :
        if not os.path.isfile(configs['WORKER_INIT_SCRIPT']):
            print "Unable to read WORKER_INIT_SCRIPT"
            exit(-1);
        init_string = open(configs['WORKER_INIT_SCRIPT'], 'r').read()
    userdata    = userdata.replace("#WORKER_INIT_SCRIPT", init_string)

    if 'WORKER_DISK' in configs:
        disk_info  = configs['WORKER_DISK'].split(" ")
        location   = driver.list_locations()[0];
        volume     = driver.create_volume(size=500, location=location, name="test volume 500gb")
    else:
        print "No worker_disk defined"

    logging.info("Worker userdata : %s", userdata)
    list_nodes = []
    sizes      = driver.list_sizes()
    size       = [ s for s in sizes if s.id == configs['WORKER_MACHINE_TYPE'] ]
    if not size:
        logging.info("ec2workerimage not legal/valid : %s", configs['WORKER_MACHINE_TYPE'])
        sys.stderr.write("WORKER_MACHINE_TYPE not legal/valid \n")
        exit(-1);

    image      = NodeImage(id=configs['WORKER_IMAGE'], name=None, driver=driver)
    print size

    for worker_name in worker_names:
        node       = driver.create_node(name=worker_name,
                                        image=image,
                                        size=size[0],
                                        ex_keyname=configs['AWS_KEYPAIR_NAME'],
                                        ex_securitygroup=configs['SECURITY_GROUP'],
                                        #block_device_mapping=mapping,
                                        ex_userdata=userdata )
        if volume:
            driver.attach_volume(node, volume, device=disk_info[1] )

        list_nodes.append(node)
        logging.info("Worker node started : %s",str(node))