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
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
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:
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
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)
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
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"