Exemplo n.º 1
0
async def list_containers(name):
    # hosts = Host.select()
    if not os.path.exists(lab_path(name)):
        abort(404)

    containers = []

    show_containers = 'show_containers' in request.args and request.args[
        'show_containers'] == 'True'

    if show_containers:
        try:
            lab = Lab.get(Lab.name == name)
            containers = lab.list_containers()
        except peewee.DoesNotExist:
            pass

    stats = Messenger.get_stats(name)
    if stats and 'start_time' in stats:
        stats['uptime'] = int(time.time() - stats['start_time'])

    return await render_template('containers_list.html',
                                 containers=containers,
                                 lab=name,
                                 stats=stats,
                                 show_containers=show_containers)
Exemplo n.º 2
0
async def stop_lab_api():

    data = await request.json

    if data is None or 'name' not in data:
        return abort(400)

    name = data.get('name')

    try:
        lab = Lab.get(Lab.name == name)
    except peewee.DoesNotExist:
        abort(404)

    try:
        args = []
        if lab.runtime == 'cluster':
            args.extend((lab.get_host_map(), Host.get_all_configs()))

        stop_lab(lab_path(name),
                 prefix(name),
                 *args,
                 runtime=lab.runtime,
                 remove=True)
        lab.delete_instance()
        msg_cache.delete(name)
        return 'OK', 200

    except FileNotFoundError:
        return abort(404)
Exemplo n.º 3
0
async def get_lab_containers():
    name = request.args.get('name')
    if name is None:
        return abort(400)

    if not os.path.exists(lab_path(name)):
        abort(404)

    try:
        lab = Lab.get(Lab.name == name)
        containers = lab.list_containers()
    except peewee.DoesNotExist:
        containers = []

    prefix_len = len(prefix(name))

    return jsonify({c.name[prefix_len:]: c.short_id for c in containers})
Exemplo n.º 4
0
async def get_messages():

    lab = request.args.get('lab', 'DEMO')

    messages = Messenger.get_messages(lab)

    lab_prefix = prefix(lab)

    with open(os.path.join(lab_path(lab), 'lab.json')) as config_file:
        lab_config = json.load(config_file)

    for name, config in lab_config['nodes'].items():
        fullname = lab_prefix + name

        # print(routers_cache, fullname, config)
        if not config['isRouter']:
            continue

        if routers_cache.has(fullname):
            messages[fullname] = {'status': 1}

    print('[ msg ]', messages)
    return jsonify(messages)
Exemplo n.º 5
0
async def generate_graph_json():
    lab = request.args.get('lab', 'DEMO')
    return jsonify(from_config(os.path.join(lab_path(lab), 'lab.json')))
Exemplo n.º 6
0
async def restart_lab_api():
    '''
    try:
        hosts_ids = request.json.get('hosts', list)
    except (ValueError, AttributeError):
        return abort(400)

    hosts = Host.select().where(Host.id in hosts_ids)

    if len(hosts) == 0:
        return abort(400)
    elif len(hosts) == 1:
        runtime = 'docker'
    else:
        runtime = 'cluster'
    '''

    data = await request.json

    if data is None or 'name' not in data:
        return abort(400)

    name = data.get('name')

    lab, created = Lab.get_or_create(name=name, defaults={'runtime': runtime})

    tc_options = data.get('tc_options', {})
    hosts = Host.get_all_configs()

    if created:
        ret, killed_routers = start_lab(lab_path(name),
                                          prefix(name),
                                          *(() if runtime!='cluster' else \
                                                (hosts,)),
                                          default_tc_options=tc_options,
                                          runtime=runtime)
    else:
        ret, killed_routers = restart_lab(lab_path(name),
                                        prefix(name),
                                        *(() if runtime!='cluster' else \
                                            (lab.get_host_map(), hosts)),
                                        default_tc_options=tc_options,
                                        runtime=runtime)
        print('\n[ deleting old nodes & network ]\n')
        Node.delete().where(Node.lab_id == lab.id).execute()
        Network.delete().where(Network.lab_id == lab.id).execute()

    print('\n[ mid-state ]', list(Node.select()))

    if runtime == 'cluster':
        hosts_map = ret
        for host_name, (containers, networks) in ret.items():
            Node.bulk_create([
                Node(name=c.name,
                     short_id=c.short_id,
                     lab=lab,
                     host_id=hosts[host_name]['id']) for c in containers
            ])
            Network.bulk_create([
                Network(name=n, lab=lab, host=hosts[host_name]['id'])
                for n in networks
            ])

    msgr = Messenger(name)

    # with open(os.path.join('/sockets', name, 'lab.sock'), 'w') as f:
    #     f.write('no')

    for container_name in killed_routers:
        routers_cache.set(container_name, True)

    return 'OK', 200