Commit 7aa95913 authored by Stefano Alberto Russo's avatar Stefano Alberto Russo
Browse files

Refactored task proxy and tunel env var names.

parent 07469527
Loading
Loading
Loading
Loading
+7 −3
Original line number Original line Diff line number Diff line
@@ -51,7 +51,8 @@ Webapp service configuraion parameters and their defaults:
      - DJANGO_LOG_LEVEL=ERROR
      - DJANGO_LOG_LEVEL=ERROR
      - ROSETTA_LOG_LEVEL=ERROR
      - ROSETTA_LOG_LEVEL=ERROR
      - ROSETTA_HOST=localhost      
      - ROSETTA_HOST=localhost      
      - ROSETTA_TUNNEL_HOST=localhost
      - ROSETTA_TASKS_PROXY_HOST=$ROSETTA_HOST
      - ROSETTA_TASKS_TUNNEL_HOST=$ROSETTA_HOST  
      - ROSETTA_WEBAPP_HOST=""
      - ROSETTA_WEBAPP_HOST=""
      - ROSETTA_WEBAPP_PORT=8080
      - ROSETTA_WEBAPP_PORT=8080
      - ROSETTA_REGISTRY_HOST=proxy
      - ROSETTA_REGISTRY_HOST=proxy
@@ -69,10 +70,13 @@ Webapp service configuraion parameters and their defaults:


Notes:
Notes:


 - `ROSETTA_TUNNEL_HOST` must not include http:// or https://
 - `ROSETTA_REGISTRY_HOST` should be set to the same value as `ROSETTA_HOST` for production scenarios, in order to be secured unders SSL. The `standaloneworker` is configured to treat the following hosts (and ports) as unsecure registies, where it can connect without a valid certificate: `proxy:5000`,`dregistry:5000` and `rosetta.platform:5000`.
 - `ROSETTA_REGISTRY_HOST` should be set to the same value as `ROSETTA_HOST` for production scenarios, in order to be secured unders SSL. The `standaloneworker` is configured to treat the following hosts (and ports) as unsecure registies, where it can connect without a valid certificate: `proxy:5000`,`dregistry:5000` and `rosetta.platform:5000`.
 - `ROSETTA_WEBAPP_HOST` is used for let the agent know where to connect, and it is differentiated from `ROSETTA_HOST` as it can be on an internal Docker network. It is indeed defaulted to the `webapp` container IP address.
 - `ROSETTA_WEBAPP_HOST` is used for let the agent know where to connect, and it is differentiated from `ROSETTA_HOST` as it can be on an internal Docker network. It is indeed defaulted to the `webapp` container IP address.


Proxy service configuraion parameters and their defaults:

      - SAFEMODE=false
      - ROSETTA_HOST=localhost




### User types 
### User types 
+3 −4
Original line number Original line Diff line number Diff line
@@ -60,15 +60,14 @@ services:
      - ROSETTA_LOG_LEVEL=DEBUG
      - ROSETTA_LOG_LEVEL=DEBUG
      #- ROSETTA_WEBAPP_HOST=localhost # Internal, for the agent
      #- ROSETTA_WEBAPP_HOST=localhost # Internal, for the agent
      #- ROSETTA_WEBAPP_PORT=8080      # Internal, for the agent
      #- ROSETTA_WEBAPP_PORT=8080      # Internal, for the agent
      #- ROSETTA_REGISTRY_HOST=
      #- ROSETTA_REGISTRY_HOST=proxy
      #- ROSETTA_REGISTRY_PORT=5000
      #- ROSETTA_REGISTRY_PORT=5000
      #- DJANGO_EMAIL_APIKEY=""
      #- DJANGO_EMAIL_APIKEY=""
      #- DJANGO_EMAIL_FROM="Rosetta Platform <notifications@rosetta.platform>"
      #- DJANGO_EMAIL_FROM="Rosetta Platform <notifications@rosetta.platform>"
      #- DJANGO_SECRET_KEY=""
      #- DJANGO_SECRET_KEY=""
      - TASK_PROXY_HOST=localhost
      #- ROSETTA_TASKS_PROXY_HOST=
      - TASK_TUNNEL_HOST=localhost
      #- ROSETTA_TASKS_TUNNEL_HOST=
      - ROSETTA_HOST=localhost
      - ROSETTA_HOST=localhost
      - REGISTRY_HOST=proxy:5000     # Use same value as ROSETTA_HOST for production or to use "real" computing resurces 
    ports:
    ports:
      - "8080:8080"
      - "8080:8080"
      - "7000-7020:7000-7020"
      - "7000-7020:7000-7020"
+10 −6
Original line number Original line Diff line number Diff line
@@ -515,12 +515,16 @@ def get_platform_registry():
    platform_registry_conn_string = '{}:{}'.format(platform_registry_host, platform_registry_port)
    platform_registry_conn_string = '{}:{}'.format(platform_registry_host, platform_registry_port)
    return platform_registry_conn_string
    return platform_registry_conn_string
    
    
def get_task_tunnel_host():
def get_rosetta_tasks_tunnel_host():
    tunnel_host = os.environ.get('TASK_TUNNEL_HOST', 'localhost')
    # Importing here instead of on top avoids circular dependencies problems when loading booleanize in settings
    from django.conf import settings
    tunnel_host = os.environ.get('ROSETTA_TASKS_TUNNEL_HOST', settings.ROSETTA_HOST)
    return tunnel_host
    return tunnel_host


def get_task_proxy_host():
def get_rosetta_tasks_proxy_host():
    proxy_host = os.environ.get('TASK_PROXY_HOST', 'localhost')
    # Importing here instead of on top avoids circular dependencies problems when loading booleanize in settings
    from django.conf import settings
    proxy_host = os.environ.get('ROSETTA_TASKS_PROXY_HOST', settings.ROSETTA_HOST)
    return proxy_host
    return proxy_host


def hash_string_to_int(string):
def hash_string_to_int(string):
@@ -622,7 +626,7 @@ def setup_tunnel_and_proxy(task):
            # Some info about the various SSL switches: https://serverfault.com/questions/577616/using-https-between-apache-loadbalancer-and-backends
            # Some info about the various SSL switches: https://serverfault.com/questions/577616/using-https-between-apache-loadbalancer-and-backends
            logger.debug('Writing task proxy conf to {}'.format(apache_conf_file))
            logger.debug('Writing task proxy conf to {}'.format(apache_conf_file))
            websocket_protocol = 'wss' if task.container.interface_protocol == 'https' else 'ws'
            websocket_protocol = 'wss' if task.container.interface_protocol == 'https' else 'ws'
            task_proxy_host = get_task_proxy_host()
            rosetta_tasks_proxy_host = get_rosetta_tasks_proxy_host()
            apache_conf_content = '''
            apache_conf_content = '''
#---------------------------
#---------------------------
#  Task interface proxy 
#  Task interface proxy 
@@ -641,7 +645,7 @@ Listen '''+str(task.tcp_tunnel_port)+'''


<VirtualHost *:'''+str(task.tcp_tunnel_port)+'''>
<VirtualHost *:'''+str(task.tcp_tunnel_port)+'''>
    
    
    ServerName  '''+task_proxy_host+'''
    ServerName  '''+rosetta_tasks_proxy_host+'''
    ServerAdmin admin@rosetta.platform
    ServerAdmin admin@rosetta.platform
    
    
    SSLEngine on
    SSLEngine on
+11 −11
Original line number Original line Diff line number Diff line
@@ -13,8 +13,8 @@ from django.contrib.auth.models import User
from django.shortcuts import redirect
from django.shortcuts import redirect
from django.db.models import Q
from django.db.models import Q
from .models import Profile, LoginToken, Task, TaskStatuses, Container, Computing, KeyPair, Page
from .models import Profile, LoginToken, Task, TaskStatuses, Container, Computing, KeyPair, Page
from .utils import send_email, format_exception, timezonize, os_shell, booleanize, get_task_tunnel_host
from .utils import send_email, format_exception, timezonize, os_shell, booleanize, get_rosetta_tasks_tunnel_host
from .utils import get_task_proxy_host, random_username, setup_tunnel_and_proxy, finalize_user_creation
from .utils import get_rosetta_tasks_proxy_host, random_username, setup_tunnel_and_proxy, finalize_user_creation
from .utils import sanitize_container_env_vars, get_or_create_container_from_repository
from .utils import sanitize_container_env_vars, get_or_create_container_from_repository
from .decorators import public_view, private_view
from .decorators import public_view, private_view
from .exceptions import ErrorMessage
from .exceptions import ErrorMessage
@@ -1183,19 +1183,19 @@ def direct_connection_handler(request, uuid):
    setup_tunnel_and_proxy(task)
    setup_tunnel_and_proxy(task)
    
    
    # Get task and tunnel proxy host
    # Get task and tunnel proxy host
    task_proxy_host = get_task_proxy_host()
    rosetta_tasks_proxy_host = get_rosetta_tasks_proxy_host()
    task_tunnel_host = get_task_tunnel_host()
    rosetta_tasks_tunnel_host = get_rosetta_tasks_tunnel_host()


    # Redirect to the task through the tunnel    
    # Redirect to the task through the tunnel    
    if task.requires_proxy:
    if task.requires_proxy:
        if task.requires_proxy_auth and task.auth_token:
        if task.requires_proxy_auth and task.auth_token:
            user = request.user.email
            user = request.user.email
            password = task.auth_token
            password = task.auth_token
            redirect_string = 'https://{}:{}@{}:{}'.format(user, password, task_proxy_host, task.tcp_tunnel_port)        
            redirect_string = 'https://{}:{}@{}:{}'.format(user, password, rosetta_tasks_proxy_host, task.tcp_tunnel_port)        
        else:
        else:
            redirect_string = 'https://{}:{}'.format(task_proxy_host, task.tcp_tunnel_port)       
            redirect_string = 'https://{}:{}'.format(rosetta_tasks_proxy_host, task.tcp_tunnel_port)       
    else:
    else:
        redirect_string = '{}://{}:{}'.format(task.container.interface_protocol, task_tunnel_host, task.tcp_tunnel_port)
        redirect_string = '{}://{}:{}'.format(task.container.interface_protocol, rosetta_tasks_tunnel_host, task.tcp_tunnel_port)
    
    
    logger.debug('Task direct connect redirect: "{}"'.format(redirect_string))
    logger.debug('Task direct connect redirect: "{}"'.format(redirect_string))
    return redirect(redirect_string)
    return redirect(redirect_string)
@@ -1216,14 +1216,14 @@ def sharable_link_handler(request, short_uuid):
    setup_tunnel_and_proxy(task)
    setup_tunnel_and_proxy(task)
    
    
    # Get task and tunnel proxy host
    # Get task and tunnel proxy host
    task_proxy_host = get_task_proxy_host()
    rosetta_tasks_proxy_host = get_rosetta_tasks_proxy_host()
    task_tunnel_host = get_task_tunnel_host()
    rosetta_tasks_tunnel_host = get_rosetta_tasks_tunnel_host()


    # Redirect to the task through the tunnel    
    # Redirect to the task through the tunnel    
    if task.requires_proxy:
    if task.requires_proxy:
        redirect_string = 'https://{}:{}'.format(task_proxy_host, task.tcp_tunnel_port)       
        redirect_string = 'https://{}:{}'.format(rosetta_tasks_proxy_host, task.tcp_tunnel_port)       
    else:
    else:
        redirect_string = '{}://{}:{}'.format(task.container.interface_protocol, task_tunnel_host, task.tcp_tunnel_port)
        redirect_string = '{}://{}:{}'.format(task.container.interface_protocol, rosetta_tasks_tunnel_host, task.tcp_tunnel_port)
    
    
    logger.debug('Task sharable link connect redirect: "{}"'.format(redirect_string))
    logger.debug('Task sharable link connect redirect: "{}"'.format(redirect_string))
    return redirect(redirect_string)
    return redirect(redirect_string)