@@ -415,4 +436,4 @@
var editor = ace.edit("editor");
editor.getSession().setMode("ace/mode/xml");
-{% endblock %}
\ No newline at end of file
+{% endblock %}
diff --git a/create/views.py b/create/views.py
index 3f97606..6c223da 100644
--- a/create/views.py
+++ b/create/views.py
@@ -41,6 +41,7 @@ def create_instance(request, compute_id):
networks = sorted(conn.get_networks())
instances = conn.get_instances()
get_images = sorted(conn.get_storages_images())
+ cache_modes = sorted(conn.get_cache_modes().items())
mac_auto = util.randomMAC()
except libvirtError as lib_err:
error_messages.append(lib_err)
@@ -122,11 +123,15 @@ def create_instance(request, compute_id):
volumes[path] = conn.get_volume_type(path)
except libvirtError as lib_err:
error_messages.append(lib_err.message)
+ if data['cache_mode'] not in conn.get_cache_modes():
+ error_msg = _("Invalid cache mode")
+ error_messages.append(error_msg)
if not error_messages:
uuid = util.randomUUID()
try:
conn.create_instance(data['name'], data['memory'], data['vcpu'], data['host_model'],
- uuid, volumes, data['networks'], data['virtio'], data['mac'])
+ uuid, volumes, data['cache_mode'], data['networks'], data['virtio'],
+ data['mac'])
create_instance = Instance(compute_id=compute_id, name=data['name'], uuid=uuid)
create_instance.save()
return HttpResponseRedirect(reverse('instance', args=[compute_id, data['name']]))
diff --git a/instances/views.py b/instances/views.py
index 83c80e8..5fcce4a 100644
--- a/instances/views.py
+++ b/instances/views.py
@@ -103,7 +103,7 @@ def instances(request):
conn.start(name)
addlogmsg(request.user.username, instance.name, msg)
return HttpResponseRedirect(request.get_full_path())
-
+
if 'getvvfile' in request.POST:
msg = _("Send console.vv file")
addlogmsg(request.user.username, instance.name, msg)
diff --git a/vrtManager/create.py b/vrtManager/create.py
index fc32177..473b9d2 100644
--- a/vrtManager/create.py
+++ b/vrtManager/create.py
@@ -7,9 +7,17 @@ from webvirtcloud.settings import QEMU_CONSOLE_DEFAULT_TYPE
def get_rbd_storage_data(stg):
xml = stg.XMLDesc(0)
ceph_user = util.get_xml_path(xml, "/pool/source/auth/@username")
- ceph_host = util.get_xml_path(xml, "/pool/source/host/@name")
- secrt_uuid = util.get_xml_path(xml, "/pool/source/auth/secret/@uuid")
- return ceph_user, secrt_uuid, ceph_host
+
+ def get_ceph_hosts(ctx):
+ hosts = []
+ for host in ctx.xpathEval("/pool/source/host"):
+ name = host.prop("name")
+ if name:
+ hosts.append({'name': name, 'port': host.prop("port")})
+ return hosts
+ ceph_hosts = util.get_xml_path(xml, func=get_ceph_hosts)
+ secret_uuid = util.get_xml_path(xml, "/pool/source/auth/secret/@uuid")
+ return ceph_user, secret_uuid, ceph_hosts
class wvmCreate(wvmConnect):
@@ -40,6 +48,17 @@ class wvmCreate(wvmConnect):
"""Get guest capabilities"""
return util.get_xml_path(self.get_cap_xml(), "/capabilities/host/cpu/arch")
+ def get_cache_modes(self):
+ """Get cache available modes"""
+ return {
+ 'default': 'Default',
+ 'none': 'Disabled',
+ 'writethrough': 'Write through',
+ 'writeback': 'Write back',
+ 'directsync': 'Direct sync', # since libvirt 0.9.5
+ 'unsafe': 'Unsafe', # since libvirt 0.9.7
+ }
+
def create_volume(self, storage, name, size, format='qcow2', metadata=False):
size = int(size) * 1073741824
stg = self.get_storage(storage)
@@ -121,7 +140,7 @@ class wvmCreate(wvmConnect):
vol = self.get_volume_by_path(path)
vol.delete()
- def create_instance(self, name, memory, vcpu, host_model, uuid, images, networks, virtio, mac=None):
+ def create_instance(self, name, memory, vcpu, host_model, uuid, images, cache_mode, networks, virtio, mac=None):
"""
Create VM function
"""
@@ -162,19 +181,27 @@ class wvmCreate(wvmConnect):
stg_type = util.get_xml_path(stg.XMLDesc(0), "/pool/@type")
if stg_type == 'rbd':
- ceph_user, secrt_uuid, ceph_host = get_rbd_storage_data(stg)
+ ceph_user, secret_uuid, ceph_hosts = get_rbd_storage_data(stg)
xml += """
-
+
- """ % (img_type, ceph_user, secrt_uuid, image, ceph_host)
+ """
else:
xml += """
-
- """ % (img_type, image)
+
+ """ % (img_type, cache_mode, image)
if virtio:
xml += """""" % (disk_letters.pop(0),)
diff --git a/vrtManager/instance.py b/vrtManager/instance.py
index 08e0c39..e792e13 100644
--- a/vrtManager/instance.py
+++ b/vrtManager/instance.py
@@ -82,7 +82,7 @@ class wvmInstances(wvmConnect):
dom = self.get_instance(name)
xml = dom.XMLDesc(VIR_DOMAIN_XML_SECURE)
self.wvm.defineXML(xml)
-
+
def graphics_type(self, name):
inst = self.get_instance(name)
console_type = util.get_xml_path(inst.XMLDesc(0), "/domain/devices/graphics/@type")