From 03ffa3a295492c07476cb2307a54fd88e9fe9f38 Mon Sep 17 00:00:00 2001 From: catborise Date: Wed, 24 Oct 2018 12:04:05 +0300 Subject: [PATCH] move add new disk to instance disk tab. add existing disk option to attach disk. Small typo fixes --- instances/templates/add_instance_volume.html | 213 ++++++++++++------- instances/templates/instance.html | 106 +++++---- instances/views.py | 35 ++- storages/views.py | 9 +- vrtManager/instance.py | 6 +- 5 files changed, 252 insertions(+), 117 deletions(-) diff --git a/instances/templates/add_instance_volume.html b/instances/templates/add_instance_volume.html index fb3ce22..3c94225 100644 --- a/instances/templates/add_instance_volume.html +++ b/instances/templates/add_instance_volume.html @@ -12,79 +12,150 @@ -
{% csrf_token %} - - -
+ + diff --git a/instances/templates/instance.html b/instances/templates/instance.html index ecc410b..2cae09d 100644 --- a/instances/templates/instance.html +++ b/instances/templates/instance.html @@ -631,8 +631,8 @@

- {% trans "Instance Volumes" %} - {% include 'add_instance_volume.html' %} + {% trans "Instance Volumes" %} + {% include 'add_instance_volume.html' %}

@@ -648,38 +648,39 @@ {% trans "Action" %} - {% for disk in disks %} - - {{ disk.dev }}
{{ disk.target }} - {{ disk.format }} - {{ disk.used | filesizeformat}} - {{ disk.size | filesizeformat }} - {{ disk.bus }} - {{ disk.storage }} - {{ disk.path }} - -
{% csrf_token %} - - - {% ifequal status 5 %} - - - {% else %} - - - {% endifequal %} -
- - - {% endfor %} + {% for disk in disks %} + + + {{ disk.dev }}
{{ disk.target }} + {{ disk.format }} + {{ disk.used | filesizeformat}} + {{ disk.size | filesizeformat }} + {{ disk.bus }} + {{ disk.storage }} + {{ disk.path }} + +
{% csrf_token %} + + + {% ifequal status 5 %} + + + {% else %} + + + {% endifequal %} +
+ + + {% endfor %}
@@ -1227,6 +1228,39 @@ {% endblock %} {% block script %} + + diff --git a/instances/views.py b/instances/views.py index 4f90d85..e98ca86 100644 --- a/instances/views.py +++ b/instances/views.py @@ -20,6 +20,7 @@ from vrtManager.hostdetails import wvmHostDetails from vrtManager.instance import wvmInstance, wvmInstances from vrtManager.connection import connection_manager from vrtManager.create import wvmCreate +from vrtManager.storage import wvmStorage from vrtManager.util import randomPasswd from libvirt import libvirtError, VIR_DOMAIN_XML_SECURE from logs.views import addlogmsg @@ -171,7 +172,7 @@ def instance(request, compute_id, vname): usr_inst.instance.name) cpu += int(conn.get_vcpu()) memory += int(conn.get_memory()) - for disk in conn.get_disk_device(): + for disk in conn.get_disk_devices(): if disk['size']: disk_size += int(disk['size']) >> 30 @@ -255,8 +256,8 @@ def instance(request, compute_id, vname): cur_memory = conn.get_cur_memory() title = conn.get_title() description = conn.get_description() - disks = conn.get_disk_device() - media = conn.get_media_device() + disks = conn.get_disk_devices() + media = conn.get_media_devices() if len(media) != 0: media_iso = sorted(conn.get_iso_media()) else: @@ -439,7 +440,7 @@ def instance(request, compute_id, vname): addlogmsg(request.user.username, instance.name, msg) return HttpResponseRedirect(request.get_full_path() + '#resize') - if 'addvolume' in request.POST and (request.user.is_superuser or userinstance.is_change): + if 'addnewvol' in request.POST and (request.user.is_superuser or userinstance.is_change): connCreate = wvmCreate(compute.hostname, compute.login, compute.password, @@ -459,6 +460,26 @@ def instance(request, compute_id, vname): addlogmsg(request.user.username, instance.name, msg) return HttpResponseRedirect(request.get_full_path() + '#disks') + if 'addexistingvol' in request.POST and (request.user.is_superuser or userinstance.is_change): + storage = request.POST.get('selected_storage', '') + name = request.POST.get('vols', '') + bus = request.POST.get('bus', default_bus) + cache = request.POST.get('cache', default_cache) + + connCreate = wvmStorage(compute.hostname, + compute.login, + compute.password, + compute.type, + storage) + + format = connCreate.get_volume_type(name) + path = connCreate.get_target_path() + target = get_new_disk_dev(disks, bus) + source = path + "/" + name; + + conn.attach_disk(source, target, subdriver=format, cache=cache, targetbus=bus) + return HttpResponseRedirect(request.get_full_path() + '#disks') + if 'delvolume' in request.POST and (request.user.is_superuser or userinstance.is_change): connDelete = wvmCreate(compute.hostname, compute.login, @@ -1056,7 +1077,7 @@ def _get_dhcp_mac_address(vname): @login_required def guess_mac_address(request, vname): - data = { 'vname': vname } + data = {'vname': vname} mac = _get_dhcp_mac_address(vname) if not mac: mac = _get_random_mac_address() @@ -1100,7 +1121,7 @@ def guess_clone_name(request): @login_required def check_instance(request, vname): check_instance = Instance.objects.filter(name=vname) - data = { 'vname': vname, 'exists': False } + data = {'vname': vname, 'exists': False} if check_instance: data['exists'] = True return HttpResponse(json.dumps(data)) @@ -1119,6 +1140,7 @@ def get_clone_disk_name(disk, prefix, clone_name=''): image = "{}-clone".format(disk['image']) return image + def _get_clone_disks(disks, vname=''): clone_disks = [] for disk in disks: @@ -1134,6 +1156,7 @@ def _get_clone_disks(disks, vname=''): clone_disks.append(new_disk) return clone_disks + def sshkeys(request, vname): """ :param request: diff --git a/storages/views.py b/storages/views.py index d2214aa..4893a27 100644 --- a/storages/views.py +++ b/storages/views.py @@ -1,5 +1,5 @@ from django.shortcuts import render, get_object_or_404 -from django.http import HttpResponseRedirect +from django.http import HttpResponseRedirect, HttpResponse from django.utils.translation import ugettext_lazy as _ from django.core.urlresolvers import reverse from django.contrib.auth.decorators import login_required @@ -8,6 +8,7 @@ from storages.forms import AddStgPool, AddImage, CloneImage from vrtManager.storage import wvmStorage, wvmStorages from libvirt import libvirtError from django.contrib import messages +import json @login_required def storages(request, compute_id): @@ -204,6 +205,12 @@ def storage(request, compute_id, pool): else: for msg_err in form.errors.values(): error_messages.append(msg_err.as_text()) + if request.method == 'GET': + if 'get_volumes' in request.GET: + conn.close() + return HttpResponse(json.dumps(sorted(volumes))) + conn.close() return render(request, 'storage.html', locals()) + diff --git a/vrtManager/instance.py b/vrtManager/instance.py index 6c05c3c..eb38096 100644 --- a/vrtManager/instance.py +++ b/vrtManager/instance.py @@ -244,7 +244,7 @@ class wvmInstance(wvmConnect): return util.get_xml_path(self._XMLDesc(0), func=networks) - def get_disk_device(self): + def get_disk_devices(self): def disks(doc): result = [] dev = None @@ -285,7 +285,7 @@ class wvmInstance(wvmConnect): return util.get_xml_path(self._XMLDesc(0), func=disks) - def get_media_device(self): + def get_media_devices(self): def disks(doc): result = [] dev = None @@ -651,7 +651,7 @@ class wvmInstance(wvmConnect): return iso def delete_all_disks(self): - disks = self.get_disk_device() + disks = self.get_disk_devices() for disk in disks: vol = self.get_volume_by_path(disk.get('path')) vol.delete(0)