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 @@
- {% 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 }} |
-
-
- |
-
- {% endfor %}
+ {% for disk in disks %}
+
+
+ {{ disk.dev }} {{ disk.target }} |
+ {{ disk.format }} |
+ {{ disk.used | filesizeformat}} |
+ {{ disk.size | filesizeformat }} |
+ {{ disk.bus }} |
+ {{ disk.storage }} |
+ {{ disk.path }} |
+
+
+ |
+
+ {% 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)