Exemple #1
0
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
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #4
0
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)
Exemple #5
0
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)
Exemple #6
0
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'
Exemple #7
0
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'
Exemple #8
0
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
Exemple #9
0
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()
Exemple #10
0
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)
Exemple #11
0
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)
Exemple #12
0
    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
Exemple #13
0
    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)
Exemple #14
0
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()
Exemple #15
0
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)
Exemple #16
0
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)
Exemple #17
0
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)