Ejemplo n.º 1
0
Archivo: app.py Proyecto: ufcg-lsd/SCO
def _add_load_balancer(container_params, ip=None):
    global current_port
    lb_image_label = haproxy_prefix + container_params['image_id']
    lb_dockerfile_path = haproxy_dockerfile_dir + container_params['image_id']
    ip_list = docker.get_ip_list_by_id(container_params['image_id'])
    if len(ip_list) == 0 and ip:
        return None
    haproxy.add_nodes(container_params['image_id'], container_params['port'],
                      ip_list)
    ### DEBUG ###
    docker.build('-t', lb_image_label, lb_dockerfile_path)
    if not ip:
        current_port += 1
        created = docker.run('--network=' + container_params['image_id'], '-d',
                             '-p',
                             str(current_port) + ':' + str(current_port),
                             lb_image_label)
    else:
        networkID = docker.get_network_name_by_id(container_params['image_id'])
        created = docker.run('--network=' + container_params['image_id'],
                             '--ip', str(ip), '-d', '-p',
                             str(current_port) + ':' + str(current_port),
                             lb_image_label)
    if created:
        print('[INFO] Load balancer created succesfully')
        if not ip:
            print '[DEBUG] Adding load balancer. The port used was ' + str(
                current_port)
            return current_port - 1
        else:
            print '[DEBUG] Updating load balancer. The port used was ' + str(
                current_port)
            return current_port
Ejemplo n.º 2
0
Archivo: app.py Proyecto: ufcg-lsd/SCO
def _add_to_main_load_balancer(image_id, lb_ip, container_ips, port):
    current_ip = docker.get_ip_list_by_id(main_lb_image_label)
    haproxy.add_lb_to_main_lb(lb_ip, container_ips, port)
    docker.build('-t', main_lb_image_label, main_lb_dockerfile_path)
    main_load_balancer_instance = docker.get_instance_names_by_id(main_lb_image_label)[0]
    docker.stop(main_load_balancer_instance)
    eocker.rm(main_load_balancer_instance)
    created = docker.run('--network=' + main_lb_image_label, '--ip', currrent_ip, '-d', main_lb_image_label)        
    return True
Ejemplo n.º 3
0
Archivo: app.py Proyecto: ufcg-lsd/SCO
def _add_load_balancer(image_id, port, ip=None):
    global current_port
    lb_image_label = haproxy_prefix + image_id
    lb_dockerfile_path = haproxy_dockerfile_dir + image_id
    ip_list = docker.get_ip_list_by_id(image_id)
    if not ip_list:
        return None
    haproxy.add_nodes(image_id, port, ip_list)
    docker.build('-t', lb_image_label, lb_dockerfile_path)
    if not ip:
Ejemplo n.º 4
0
Archivo: app.py Proyecto: ufcg-lsd/SCO
def create_instance_single_client_cluster(id, client_id):
    meta_string = ""
    with open(service_dispatcher_dockerfile_dir + id + "/meta.json") as file:
        meta_string = file.read()
    params = json.loads(meta_string)
    mem = params['mem']
    volume_size = params['volume_size']
    volume_name = id + client_id
    dockerfile_dir = definition.ROOT_PATH + '/dockerfiles/' + id
    docker.build("-t", id, dockerfile_dir)
    volume_created = _create_volume(volume_name, volume_size)
    name = (docker.run_get_name('-m', str(mem) + 'M', '-d', '-v', volume_name + ':' + docker.default_volume_path, id)).rstrip()
    container_ip = docker.get_ip_by_name(name)
    return container_ip, 201
Ejemplo n.º 5
0
Archivo: app.py Proyecto: ufcg-lsd/SCO
def _create_service_dispatcher(id, cluster, volume):
    service_dispatcher_dir = service_dispatcher_dockerfile_dir + id
    if not os.path.exists(service_dispatcher_dir):
        os.makedirs(service_dispatcher_dir)
    section = merger.get_section()
    dockerfile_dir = (definition.ROOT_PATH + '/dockerfiles/' + id).encode("ascii")
    dockerfile_path = dockerfile_dir + '/Dockerfile'
    merger.insert_section(dockerfile_path, section)
    print("[LOG] section inserted")
    instance_metadata_path = service_dispatcher_dir + "/meta.json"
    cluster['volume_size'] = volume['volume_size']
    del cluster['package']
    merger.write_data(instance_metadata_path, json.dumps(cluster))
    shutil.copy(service_dispatcher_dockerfile_dir + "Dockerfile", service_dispatcher_dir)
    manager_address = socket.gethostbyname(socket.gethostname())
    docker.build('-t', service_dispatcher_id, service_dispatcher_dockerfile_dir)
    docker.run('-e', "ID=" + id, '-e', 'MANAGER=' + manager_address, '-d',  service_dispatcher_id)
    return docker.get_ip_list_by_id(service_dispatcher_id)
Ejemplo n.º 6
0
Archivo: app.py Proyecto: ufcg-lsd/SCO
def _create_cluster_components(id, volume_size, dockerfile, package, instances, mem, port):
    global cluster_port
    global server_pointer
    register_openers()

    for node in available_nodes:
        if node.get_ip() != "localhost":
            url = 'http://' + node.get_ip() + ":5001/build"
            package_filename = merger.get_short_filename_from_package(package)
            form_data = {'image_id' : id, 'dockerfile' : dockerfile, 'data': open(dockerfile_dir + '/' + package_filename)}
            datagen, headers = multipart_encode(form_data)
#            request = urllib2.Request(url, datagen, headers)
            build_agent = BuildAgent(form_data, url)
            build_agent.start()
            
#            response = urllib2.urlopen(request)
#            result = response.read()
    build_agent.join()
    print "[DEBUG] join completed"
    add_cluster_frontend_to_main_load_balancer(cluster_port, id)
    cluster_port += 1
    print "[DEBUG] dockerfile dir is  " +  dockerfile_dir
    if "localhost" in [node.get_ip() for node in available_nodes]:
        if not docker.build('-t', id, dockerfile_dir):
            print("[ERROR] build unsuccessfull")
            return None
    print("[LOG] image built")
    success = True
    volume_created = _create_volume(id, volume_size)
    if not volume_created:
        print("[ERROR] volume not created")
        return
    print(volume_created)
    network_created = docker.create_network('--subnet=' + ip_strings.get_current_network() + "/16", id)
    if not network_created:
        print("[ERROR] network not created")
        return
    count = 0
    container_locations = {}
    #TODO: Move instantiation to a different module
    for i in range(instances):
        container_location = _create_instance(id, mem, port, available_nodes_ips[count])
        container_locations.update(container_location)
        if count == len(available_nodes) - 1:
            count = 0
        else:
            count += 1
    if not success:
        print("[ERROR] instances not created")
        return None
    else:
        print("[LOG] instances created")
	return container_locations
Ejemplo n.º 7
0
Archivo: app.py Proyecto: ufcg-lsd/SCO
def build():
    image_resources = {
        'image_id': request.form['image_id'],
        'dockerfile': request.form['dockerfile'],
        'data': request.files['data']
    }
    resource_directory = _deploy_files(image_resources['image_id'],
                                       image_resources['dockerfile'],
                                       image_resources['data'])
    print "[DEBUG] resource_directory is: " + resource_directory
    print "[DEBUG] image id is: " + image_resources['image_id']
    result = docker.build('-t', image_resources['image_id'],
                          resource_directory)
    print "[DEBUG] result is: " + str(result)
    if result:
        return "[INFO] Image " + image_resources[
            'image_id'] + " built successfully."
        image_ids.append(image_resources['image_id'])
    else:
        return "[ERROR] Image " + image_resources[
            'image_id'] + " could not be built. Check your parameters"