Ejemplo n.º 1
0
def run_container(request, username, experiment, public_name):
    experiment_session = experiment.split("~")

    if len(experiment_session) == 2:
        experiment_proposal_id = experiment_session[0]
        session_number = experiment_session[1]
    else:
        experiment_proposal_id = experiment
        session_number = experiment

    logger.debug("Running session:%s from experiment:%s" % (experiment_proposal_id, session_number))

    if username != request.user.username:
        return JSONResponse("username mismatch", status=status.HTTP_403_FORBIDDEN)

    try:
        container = container_service.run_container(username, session_number, public_name)
    except Exception as e:
        logger.debug("Error after run_container : %s " % e)
        return JSONResponse({'error': errorFormatting.format(e)}, status=status.HTTP_204_NO_CONTENT)

    image_selected = image_service.get_available_image(public_name=public_name)

    logger.debug("Searching... port")

    try:
        port = int(container.container_info['NetworkSettings']['Ports'][image_selected.port_hook][0]['HostPort'])
    except Exception as e:
        port = 0

    container.container_info = experiment_proposal_id
    container.save()

    serializer = CalipsoContainerSerializer(container)

    logger.debug("Selected port: %d" % port)

    try:

        params = {'guacamole_username': container.guacamole_username,
                  'guacamole_password': container.guacamole_password,
                  'guacamole_connection_name': container.container_name,
                  'guacamole_protocol': image_selected.protocol,
                  'vnc_password': container.vnc_password,
                  'container_ip': settings.REMOTE_MACHINE_IP,
                  'container_port': port}

        guacamole_service.create_connection(params)

    except Exception as e:
        logger.debug(errorFormatting.format(e))
        return JSONResponse({'error': errorFormatting.format(e)}, status=status.HTTP_400_BAD_REQUEST)

    return JSONResponse(serializer.data, status=status.HTTP_201_CREATED)
Ejemplo n.º 2
0
def stop_container(request, username, container_name):
    if username != request.user.username:
        return JSONResponse("username mismatch", status=status.HTTP_403_FORBIDDEN)
    try:
        container_data = container_service.stop_container(container_name)
        try:
            serializer = CalipsoContainerSerializer(container_data)
            return JSONResponse(serializer.data, status=status.HTTP_200_OK)
        except Exception as e:
            logger.debug(errorFormatting.format(e))
            return JSONResponse([], status=status.HTTP_200_OK)

    except Exception as e:
        logger.debug(errorFormatting.format(e))
        return JSONResponse({'error': errorFormatting.format(e)}, status=status.HTTP_400_BAD_REQUEST)