Commit 6e4f63bb authored by Stefano Alberto Russo's avatar Stefano Alberto Russo
Browse files

Added support for editing computing confs.

parent 3f2fa624
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
      <table class="dashboard">
      <table class="dashboard" style="max-width:500px">

       <tr>
        <td><b>ID</b></td>
@@ -22,12 +22,12 @@

       <tr>
        <td><b>Sys Conf</b></td>
        <td>{{ computing.sys_conf_data }}</td>
        <td>{{ computing.sys_conf_data }} {% if request.user.is_superuser %} &nbsp;[<a href="/edit_computing_conf?type=sys&computing_uuid={{ computing.uuid}}">Edit</a>] {% endif %}</td>
       </tr>

       <tr>
        <td><b>User Conf</b></td>
        <td>{{ computing.user_conf_data }}</td>
        <td>{{ computing.user_conf_data }} &nbsp;[<a href="/edit_computing_conf?type=user&computing_uuid={{ computing.uuid}}">Edit</a>]</td>
       </tr>

       
+2 −2
Original line number Diff line number Diff line
@@ -27,8 +27,8 @@
      {% endfor %}
  
      
      <br />
      <a href="/add_computing">Add new...</a>
      <!-- <br />
      <a href="/add_computing">Add new...</a> -->
      
      {% endif %}
      <br />
+70 −0
Original line number Diff line number Diff line
{% load static %} 
{% include "header.html" %}
{% include "navigation.html" with main_path='/main/' %}

<br/>
<br/>

<div class="container">
  <div class="dashboard">
    <div class="span8 offset2">
      <h1>Edit computing conf</h1> 
      <hr>


      <h4>Edit the configuration in JSON format for {{ data.computing }}</h4> 
      
      <br/>
      
      <form action="/edit_computing_conf/" method="POST">
      {% csrf_token %}
      <input type="hidden" name="type" value="{{ data.type }}">
      <input type="hidden" name="computing_uuid" value="{{ data.computing.uuid }}">
      <table class="dashboard" style="max-width:430px">

       <tr>
        <td>
         <textarea name="new_conf" style="height:300px; width:500px">
{{ data.computing_conf_data}}
         </textarea>
        </td>
       </tr>

      {% if data.saved %}
       <tr>
        <td colspan=2 align=center style="padding:0px">
         <font color="green">Saved</font>
        </td>
       </tr>
      {% endif %}

       <tr>
        <td colspan=2 align=center style="padding:20px">
         <input type="submit" value="Save">
        </td>
       </tr>
       
      </table>
      </form>

      <br/>          
      <br/>
      <br/>
      <br/>
      <br/>
      <br/>
      <br/>
      <br/>
      <br/>
      
    </div>
  </div>
</div>

{% include "footer.html" %}





+119 −2
Original line number Diff line number Diff line
import uuid
import json
import subprocess
from django.conf import settings
from django.shortcuts import render
@@ -6,7 +7,7 @@ from django.contrib.auth import authenticate, login, logout
from django.http import HttpResponse, HttpResponseRedirect
from django.contrib.auth.models import User
from django.shortcuts import redirect
from .models import Profile, LoginToken, Task, TaskStatuses, Container, Computing, Keys
from .models import Profile, LoginToken, Task, TaskStatuses, Container, Computing, Keys, ComputingSysConf, ComputingUserConf
from .utils import send_email, format_exception, timezonize, os_shell, booleanize, debug_param
from .decorators import public_view, private_view
from .exceptions import ErrorMessage
@@ -715,7 +716,7 @@ def computings(request):


#=========================
#  Add Compute view
#  Add Computing view
#=========================

@private_view
@@ -730,3 +731,119 @@ def add_computing(request):


    return render(request, 'add_computing.html', {'data': data})



#=========================
# Edit Computing conf view
#=========================

@private_view
def edit_computing_conf(request):

    # Init data
    data={}
    data['user']    = request.user
    data['profile'] = Profile.objects.get(user=request.user)
    data['title']   = 'Add computing'

    # Get computing conf type
    computing_conf_type = request.GET.get('type', request.POST.get('type', None))
    if not computing_conf_type:
        raise Exception('Missing type')
    
    # Get computing uuid
    computing_uuid = request.GET.get('computing_uuid', request.POST.get('computing_uuid', None))
    if not computing_uuid:
        raise Exception('Missing computing_uuid')

    new_conf = request.POST.get('new_conf', None)


    if computing_conf_type == 'sys':
        
        data['type'] = 'sys'
        
        if not request.user.is_superuser:
            raise Exception('Cannot edit sys conf as not superuser')
    
        # Get computing
        try:
            computing = Computing.objects.get(uuid=computing_uuid)
            data['computing'] = computing
        except ComputingSysConf.DoesNotExist:
            raise Exception('Unknown computing "{}"'.format(computing_uuid))
        
        # Get computing conf
        computingSysConf = ComputingSysConf.objects.get(computing=computing)   
        
        # Edit conf?
        if new_conf:
            new_conf_data = json.loads(new_conf)
            logger.debug('Setting new conf data for sys conf "{}": "{}"'.format(computingSysConf.uuid, new_conf_data))
            computingSysConf.data = new_conf_data
            computingSysConf.save()
            data['saved'] = True

        # Dump conf data for the webpage            
        data['computing_conf_data'] = json.dumps(computingSysConf.data)
    
    elif computing_conf_type == 'user':

        data['type'] = 'user'
        
        # Get computing
        try:
            computing = Computing.objects.get(uuid=computing_uuid)
            data['computing'] = computing
        except ComputingUserConf.DoesNotExist:
            raise Exception('Unknown computing "{}"'.format(computing_uuid))

        # Get computing conf
        computingUserConf = ComputingUserConf.objects.get(computing=computing)

        # Edit conf?
        if new_conf:
            new_conf_data = json.loads(new_conf)
            logger.debug('Setting new conf data for user conf "{}": "{}"'.format(computingUserConf.uuid, new_conf_data))
            computingUserConf.data = new_conf_data
            computingUserConf.save()
            data['saved'] = True
        
        # Dump conf data for the webpage
        data['computing_conf_data'] = json.dumps(computingUserConf.data) 

           
    else:
        raise Exception('Unknown computing conf type "{}"'.format(computing_conf_type))
    

    return render(request, 'edit_computing_conf.html', {'data': data})



























+1 −0
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ urlpatterns = [
    url(r'^task_log/$', base_app_views.task_log),
    url(r'^computings/$', base_app_views.computings),
    url(r'^add_computing/$', base_app_views.add_computing),
    url(r'^edit_computing_conf/$', base_app_views.edit_computing_conf),
    url(r'^containers/$', base_app_views.containers),
    url(r'^add_container/$', base_app_views.add_container),