Commit f345666b authored by Stefano Alberto Russo's avatar Stefano Alberto Russo
Browse files

Added support for linking a storage with a computing resurce when editing or...

Added support for linking a storage with a computing resurce when editing or creating new storages. Minor UI improvmeents and fixes.
parent e6c17908
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -43,6 +43,17 @@
          <td><b>Bind path</b></td>
          <td><input type="text" name="bind_path" value="" size="30" /></td>
        </tr>
        <tr>
          <td><b>Computing</b></td>
          <td>
            <select name="computing_uuid" style="width: 220px;">
              <option value="">None</option>
              {% for computing in data.computings %}
                <option value="{{ computing.uuid }}">{{ computing.name }}</option>
              {% endfor %}
            </select>
          </td>
        </tr>
        <tr>
          <td><b>Read only</b></td>
          <td><input type="checkbox" name="read_only" value="True" /></td>
+8 −11
Original line number Diff line number Diff line
{% comment %} Storage resource component, main list and detailed view {% endcomment %}

{% if data.storage and storage.uuid == data.storage.uuid %}
<div style="float:left; width:500px; margin:10px; margin-bottom:20px">
  <table class="dashboard" style="width:100%">
    <tr><td><b>Name</b></td><td>{{ storage.name }}</td></tr>
    <tr><td><b>Description</b></td><td>{{ storage.description }}</td></tr>
    <tr><td><b>Type</b></td><td>{{ storage.type }}</td></tr>
    <tr><td><b>Access mode</b></td><td>{{ storage.access_mode }}</td></tr>
    <tr><td><b>Auth mode</b></td><td>{{ storage.auth_mode }}</td></tr>
@@ -12,7 +11,7 @@
    <tr><td><b>Read only</b></td><td>{% if storage.read_only %}Yes{% else %}No{% endif %}</td></tr>
    <tr><td><b>Browsable</b></td><td>{% if storage.browsable %}Yes{% else %}No{% endif %}</td></tr>
    <tr><td><b>Group</b></td><td>{% if storage.group %}{{ storage.group }}{% else %}Platform{% endif %}</td></tr>
    <tr><td><b>Computing</b></td><td>{% if storage.computing %}{{ storage.computing.name }}{% else %}-{% endif %}</td></tr>
    <tr><td><b>Computing</b></td><td>{% if storage.computing %}{{ storage.computing.name }}{% else %}None{% endif %}</td></tr>
    <tr><td><b>Conf</b></td><td><pre style="font-size:0.9em">{{ storage.conf|default_if_none:'' }}</pre></td></tr>
    {% if request.user.is_staff %}
    <tr>
@@ -31,16 +30,14 @@
{% else %}
<div style="width:300px; float:left; border: #e0e0e0 solid 1px; margin:10px; background:#f8f8f8; margin-bottom:15px;">
  <div style="padding:10px; margin-top:5px; text-align:center; border-bottom: #e0e0e0 solid 1px; ">
    {% if storage.computing %}
      <a href="/storage/?manage=True&uuid={{ storage.uuid }}">{{ storage.name }}</a>
  </div>
  <div style="padding:10px;">
    {% if storage.description %}
    <div class="description-box" title="{{ storage.description }}">
      {{ storage.description }}
    </div>
      <br/><font size=-1>@{{ storage.computing.name }}</font>
    {% else %}
    <br/>
      <a href="/storage/?manage=True&uuid={{ storage.uuid }}">{{ storage.name }}</a>
    {% endif %}
  </div>
  <div style="padding:10px;">
    <div class="image-version-box">
      <b>Type:</b> {{ storage.type }}<br/>
      <b>Base path:</b> <code>{{ storage.base_path }}</code><br/>
+11 −0
Original line number Diff line number Diff line
@@ -43,6 +43,17 @@
          <td><b>Bind path</b></td>
          <td><input type="text" name="bind_path" value="{{ data.storage.bind_path }}" size="30" /></td>
        </tr>
        <tr>
          <td><b>Computing</b></td>
          <td>
            <select name="computing_uuid" style="width: 220px;">
              <option value="">None</option>
              {% for computing in data.computings %}
                <option value="{{ computing.uuid }}" {% if data.storage.computing and computing.uuid == data.storage.computing.uuid %}selected{% endif %}>{{ computing.name }}</option>
              {% endfor %}
            </select>
          </td>
        </tr>
        <tr>
          <td><b>Read only</b></td>
          <td><input type="checkbox" name="read_only" value="True" {% if data.storage.read_only %}checked{% endif %} /></td>
+25 −1
Original line number Diff line number Diff line
@@ -1431,6 +1431,10 @@ def edit_storage(request):
    # For JSON field display
    data['conf_json'] = json.dumps(storage.conf, indent=2) if storage.conf else ''

    # Provide all computing resources for the dropdown
    from .models import Computing
    data['computings'] = Computing.objects.all()

    if request.method == 'POST':
        storage.name = request.POST.get('name', storage.name)
        storage.type = request.POST.get('type', storage.type)
@@ -1441,6 +1445,16 @@ def edit_storage(request):
        storage.read_only = bool(request.POST.get('read_only', False))
        storage.browsable = bool(request.POST.get('browsable', False))

        # Handle computing resource link
        computing_uuid = request.POST.get('computing_uuid', None)
        if computing_uuid:
            try:
                storage.computing = Computing.objects.get(uuid=computing_uuid)
            except Computing.DoesNotExist:
                storage.computing = None
        else:
            storage.computing = None

        # Foreign keys (group, computing) not handled for now
        conf = request.POST.get('conf', None)
        if conf:
@@ -1718,6 +1732,8 @@ def add_storage(request):
    data = {}
    data['user'] = request.user
    data['added'] = False
    from .models import Computing
    data['computings'] = Computing.objects.all()
    if not request.user.is_staff:
        data['error'] = 'You do not have permission to add storage.'
        return render(request, 'error.html', {'data': data})
@@ -1733,6 +1749,13 @@ def add_storage(request):
        browsable = bool(request.POST.get('browsable', False))
        conf = request.POST.get('conf', None)
        conf_obj = None
        computing_uuid = request.POST.get('computing_uuid', None)
        computing = None
        if computing_uuid:
            try:
                computing = Computing.objects.get(uuid=computing_uuid)
            except Computing.DoesNotExist:
                computing = None
        if conf:
            try:
                conf_obj = json.loads(conf)
@@ -1749,7 +1772,8 @@ def add_storage(request):
                bind_path=bind_path,
                read_only=read_only,
                browsable=browsable,
                conf=conf_obj
                conf=conf_obj,
                computing=computing
            )
            data['added'] = True
            return redirect('/storage/?manage=True')