def get_container_ip_port(username, project_name, service_name, container_name): ip = database_update.container_ip(username, project_name, service_name, container_name) port = database_update.container_port(username, project_name, service_name, container_name) client = Client(ip, config.c_version).client detail = client.inspect_container(container_name+config.split_mark+project_name+config.split_mark+username) host_ports = detail["NetworkSettings"]["Ports"][port][0]["HostPort"] return ip.split(":")[0] + ":" + host_port
def delete_from_ct(project_name, username): machines = database_update.get_machines() for machine in machines: cli = Client(machine, config.c_version).client tt = cli.exec_create(container='nginx', cmd='/bin/bash -c \"cd /etc/consul-templates && bash delete.sh %s-%s\"' % ( project_name, username)) cli.exec_start(exec_id=tt, detach=True)
def write_to_ct(port, service_name, project_name, username): machines = database_update.get_machines() for machine in machines: cli = Client(machine, config.c_version).client tt = cli.exec_create(container='nginx', cmd='/bin/bash -c \"cd /etc/consul-templates && sh refresh.sh %s %s %s %s\"' % ( port, service_name, project_name, username)) cli.exec_start(exec_id=tt, detach=True)
def write_to_ct(port, service_name, project_name, username): machines = database_update.get_machines() for machine in machines: cli = Client(machine, config.c_version).client tt = cli.exec_create( container='nginx', cmd= '/bin/bash -c \"cd /etc/consul-templates && sh refresh.sh %s %s %s %s\"' % (port, service_name, project_name, username)) cli.exec_start(exec_id=tt, detach=True)
def delete_from_ct(project_name, username): machines = database_update.get_machines() for machine in machines: cli = Client(machine, config.c_version).client tt = cli.exec_create( container='nginx', cmd= '/bin/bash -c \"cd /etc/consul-templates && bash delete.sh %s-%s\"' % (project_name, username)) cli.exec_start(exec_id=tt, detach=True)
def get_port(username, project_name, service_name): cip = database_update.service_ip(username, project_name, service_name) if cip == '-': return 'no such project or service' cli = Client(base_url=cip, version=config.c_version) full_name = username + config.split_mark + project_name + config.split_mark + service_name if container_exists(cli, full_name): detail = cli.inspect_container(full_name) return detail['NetworkSettings']['Ports'] else: return 'no such container'
def get_status(username, password, project_name, service_name): cip = database_update.service_ip(username, project_name, service_name) if cip == '-': return 'no such project or service' cli = Client(cip, config.c_version) full_name = service_name + config.split_mark + project_name + config.split_mark + username # full_name = username + config.split_mark + project_name + config.split_mark + service_name if container_exists(cli, full_name): detail = cli.inspect_container(full_name) return detail['State']['Status'] else: return 'no such container'
def get_container(username, project_name, service_name, container_name): url = database_update.container_ip(username, project_name, service_name, container_name) full_name = container_name + config.split_mark + project_name + config.split_mark + username cli = Client(url, config.c_version) con = Container.get_container_by_name(cli, full_name) srv_dict = {'name': container_name, 'ip': str(url).split(":")[0]} if con is None: srv_dict['status'] = 'not create' srv_dict['ports'] = '-' srv_dict['image'] = '-' srv_dict['create_time'] = '-' srv_dict['id'] = '-' else: srv_dict['status'] = con.status srv_dict['image'] = con.image srv_dict['create_time'] = con.create_time srv_dict['id'] = con.id if len(con.ports) == 0: srv_dict['shell'] = '-' ports = '-' else: ports = con.ports if '4200' in con.ports: srv_dict['shell'] = con.ports['4200'] del ports['4200'] srv_dict['ports'] = ports return srv_dict
def restart_container(username, project_name, service_name, container_name): ip = database_update.container_ip(username, project_name, service_name, container_name) client = Client(ip, config.c_version) full_name = container_name + config.split_mark + project_name + config.split_mark + username cont = Container.get_container_by_name(client, full_name) cont.restart()
def update_status(): consul = Consul(host=health_heck.config.consul_url) containers = Client.get_local_client().get_all_containers() while True: for c in containers: value = { 'name': c.service_name, 'status': c['Status'], 'time': time.time() } consul.kv.put( 'nap_services/%s/%s/%s' % (c.user_name, c.project_name, c.service_name), str(value)) time.sleep(health_heck.config.time_interval_in_seconds)
def get_logs(username, project_name, service_name, container_name): cip = database_update.container_ip(username, project_name, service_name, container_name) print cip if cip == '-': return 'no such project or service' cli = Client(cip, config.c_version) full_name = container_name + config.split_mark + project_name + config.split_mark + username con = Container.get_container_by_name(cli, full_name) print con.id return con.client.logs(container=con.id, tail=100)
def get_service_by_name(cls, username, project_name, service_name): service = Service(service_name, project_name, username) container_list = database_update.container_list( username, project_name, service_name) print 'container_list' print container_list for container_name in container_list: full_name = container_name[ 0] + config.split_mark + project_name + config.split_mark + username ip = database_update.container_ip(username, project_name, service_name, container_name[0]) client = Client(ip, config.c_version) cont = Container.get_container_by_name(client, full_name) service.containers.append(cont) return service
def __init__(self, name, project, username, network=None, volume=None, options=None): print options self.name = name self.project = project self.username = username self.containers = [] if options is not None: if 'dynamic_scale' in options: if options['dynamic_scale']: database_update.create_service_for_scale( username, project, name) scale = options['scale'] for i in range(int(scale)): option = {} for item in options: option[item] = options[item] ip = schedule.random_schedule() client = Client(ip, config.c_version) option['container_name'] = name + "_" + str( i ) + config.split_mark + project + config.split_mark + username option['hostname'] = name + "_" + str( i ) + config.split_mark + project + config.split_mark + username cont = Container(client=client, network=network, volume=volume, options=option) database_update.create_container(username, project, name, name + "_" + str(i), ip) self.containers.append(cont)
def scale_up(username, project_name, service_name): service_scale, service_dict = database_update.get_service_scale_config(username, project_name, service_name) database_update.set_service_scale(username, project_name, service_name, int(service_scale)+1) true = True false = False service_dict = eval(service_dict) ip = schedule.random_schedule() client = Client(ip, config.c_version) container_name = service_name + "_" + str(service_scale) database_update.create_container(username, project_name, service_name, container_name, ip) service_dict['container_name'] = container_name + config.split_mark + project_name + config.split_mark + username service_dict['hostname'] = container_name + config.split_mark + project_name + config.split_mark + username cont = Container(client=client, options=service_dict, volume=None, network=Network(service_dict['network'])) cont.create() cont.start()
def scale_down(username, project_name, service_name): service_scale, service_config = database_update.get_service_scale_config(username, project_name, service_name) service_scale = int(service_scale) - 1 if service_scale < 1: return container_name = service_name + "_" + str(service_scale) full_name = container_name + config.split_mark + project_name + config.split_mark + username ip = database_update.container_ip(username, project_name, service_name, container_name) client = Client(ip, config.c_version) cont = Container.get_container_by_name(client, full_name) print ip, cont.name cont.stop() cont.remove() database_update.delete_container_by_name(username, project_name, service_name, container_name) database_update.set_service_scale(username, project_name, service_name, service_scale)
def delete_network(username, network): client = Client("114.212.189.147:2376", config.c_version).client Network.remove_network(client, network) database_update.delete_network(username, network)
def create_network(username, network): client = Client("114.212.189.147:2376", config.c_version).client Network.create_network(client, network, 'overlay') database_update.create_network(username, network)