diff --git a/conf/requirements.txt b/conf/requirements.txt index 8e71559..b7142fe 100644 --- a/conf/requirements.txt +++ b/conf/requirements.txt @@ -1,13 +1,13 @@ Django==3.2.10 -django_bootstrap5==21.2 +django_bootstrap5==21.1 django-icons==21.1 django-login-required-middleware==0.7 -django-otp==1.1.3 +django-otp==1.1.1 django-qr-code==2.3.0 gunicorn==20.1.0 libsass==0.21.0 -libvirt-python==7.10.0 -lxml==4.7.1 +libvirt-python==7.9.0 +lxml==4.6.5 qrcode==7.3.1 rwlock==0.0.7 websockify==0.10.0 diff --git a/dev/requirements.txt b/dev/requirements.txt index 350e803..ea7c65f 100644 --- a/dev/requirements.txt +++ b/dev/requirements.txt @@ -1,7 +1,7 @@ -r ../conf/requirements.txt -coverage==6.2 -django-debug-toolbar==3.2.4 +coverage==6.1.2 +django-debug-toolbar==3.2.2 pycodestyle==2.8.0 pyflakes==2.4.0 -pylint==2.12.2 +pylint==2.11.1 yapf==0.31.0 diff --git a/instances/templates/instance.html b/instances/templates/instance.html index a1b88b4..03bad2f 100644 --- a/instances/templates/instance.html +++ b/instances/templates/instance.html @@ -37,7 +37,6 @@ | {% if instance.snapshots %} - | {% endif %} {% if instance.cur_vcpu %} {{ instance.cur_vcpu }} {% trans "VCPU" %} diff --git a/instances/templates/instances/settings_tab.html b/instances/templates/instances/settings_tab.html index 0728664..6426023 100644 --- a/instances/templates/instances/settings_tab.html +++ b/instances/templates/instances/settings_tab.html @@ -886,15 +886,15 @@
- - {% if instance.status == 5 %} + + {% if instance.status == 5 %} - {% else %} + {% else %} - {% endif %} + {% endif %}
diff --git a/instances/views.py b/instances/views.py index e766bee..f8bcd2e 100644 --- a/instances/views.py +++ b/instances/views.py @@ -549,24 +549,7 @@ def add_new_vol(request, pk): int(app_settings.INSTANCE_VOLUME_DEFAULT_OWNER_UID), int(app_settings.INSTANCE_VOLUME_DEFAULT_OWNER_GID), ) - - conn_pool = wvmStorage( - instance.compute.hostname, - instance.compute.login, - instance.compute.password, - instance.compute.type, - storage, - ) - - pool_type = conn_pool.get_type() - disk_type = conn_pool.get_volume_type(os.path.basename(source)) - - if pool_type == 'rbd': - source_info = conn_pool.get_rbd_source() - else: # add more disk types to handle different pool and disk types - source_info = None - - instance.proxy.attach_disk(target_dev, source, source_info=source_info, pool_type=pool_type, disk_type=disk_type, target_bus=bus, format_type=format, cache_mode=cache) + instance.proxy.attach_disk(target_dev, source, target_bus=bus, driver_type=format, cache_mode=cache) msg = _("Attach new disk: %(name)s (%(format)s)") % {"name": name, "format": format} addlogmsg(request.user.username, instance.compute.name, instance.name, msg) return redirect(request.META.get("HTTP_REFERER") + "#disks") @@ -592,20 +575,12 @@ def add_existing_vol(request, pk): storage, ) - format_type = conn_create.get_volume_format_type(name) - disk_type = conn_create.get_volume_type(name) - pool_type = conn_create.get_type() - if pool_type == 'rbd': - source_info = conn_create.get_rbd_source() - path = conn_create.get_source_name() - else: - source_info = None - path = conn_create.get_target_path() - + driver_type = conn_create.get_volume_type(name) + path = conn_create.get_target_path() target_dev = utils.get_new_disk_dev(media, disks, bus) source = f"{path}/{name}" - instance.proxy.attach_disk(target_dev, source, source_info=source_info, pool_type=pool_type, disk_type=disk_type, target_bus=bus, format_type=format_type, cache_mode=cache) + instance.proxy.attach_disk(target_dev, source, target_bus=bus, driver_type=driver_type, cache_mode=cache) msg = _("Attach Existing disk: %(target_dev)s") % {"target_dev": target_dev} addlogmsg(request.user.username, instance.compute.name, instance.name, msg) return redirect(request.META.get("HTTP_REFERER") + "#disks") @@ -818,9 +793,9 @@ def set_vcpu(request, pk): @superuser_only def set_vcpu_hotplug(request, pk): instance = get_instance(request.user, pk) - status = True if request.POST.get("vcpu_hotplug", "False") == 'True' else False + status = request.POST.get("vcpu_hotplug", "") msg = _("VCPU Hot-plug is enabled=%(status)s") % {"status": status} - instance.proxy.set_vcpu_hotplug(status) + instance.proxy.set_vcpu_hotplug(eval(status)) addlogmsg(request.user.username, instance.compute.name, instance.name, msg) return redirect(request.META.get("HTTP_REFERER") + "#resize") @@ -1406,7 +1381,7 @@ def create_instance(request, compute_id, arch, machine): volume = dict() volume["device"] = "disk" volume["path"] = path - volume["type"] = conn.get_volume_format_type(path) + volume["type"] = conn.get_volume_type(path) volume["cache_mode"] = data["cache_mode"] volume["bus"] = default_bus if volume["bus"] == "scsi": @@ -1436,7 +1411,7 @@ def create_instance(request, compute_id, arch, machine): ) volume = dict() volume["path"] = clone_path - volume["type"] = conn.get_volume_format_type(clone_path) + volume["type"] = conn.get_volume_type(clone_path) volume["device"] = "disk" volume["cache_mode"] = data["cache_mode"] volume["bus"] = default_bus @@ -1456,7 +1431,7 @@ def create_instance(request, compute_id, arch, machine): path = conn.get_volume_path(vol) volume = dict() volume["path"] = path - volume["type"] = conn.get_volume_format_type(path) + volume["type"] = conn.get_volume_type(path) volume["device"] = request.POST.get("device" + str(idx), "") volume["bus"] = request.POST.get("bus" + str(idx), "") if volume["bus"] == "scsi": diff --git a/storages/views.py b/storages/views.py index 34681bd..0c48ab6 100644 --- a/storages/views.py +++ b/storages/views.py @@ -1,5 +1,4 @@ import json -import os from django.contrib import messages from django.http import HttpResponse, HttpResponseRedirect @@ -91,10 +90,7 @@ def storage(request, compute_id, pool): """ def handle_uploaded_file(path, f_name): - target = os.path.normpath(os.path.join(path, f_name)) - if not target.startswith(path): - raise Exception("Security Issues with file uploading") - + target = path + "/" + str(f_name) destination = open(target, "wb+") for chunk in f_name.chunks(): destination.write(chunk) @@ -145,7 +141,7 @@ def storage(request, compute_id, pool): volname = request.POST.get("volname", "") vol = conn.get_volume(volname) vol.delete(0) - messages.success(request, _("Volume: %(vol)s is deleted.") % {"vol": volname}) + messages.success(request, _("Volume: %(volume)s is deleted.") % {"vol": volname}) return redirect(reverse("storage", args=[compute.id, pool])) # return HttpResponseRedirect(request.get_full_path()) if "iso_upload" in request.POST: diff --git a/vrtManager/create.py b/vrtManager/create.py index 61d5040..fcae692 100644 --- a/vrtManager/create.py +++ b/vrtManager/create.py @@ -11,13 +11,9 @@ def get_rbd_storage_data(stg): def get_ceph_hosts(doc): hosts = list() for host in doc.xpath("/pool/source/host"): - name = host.get('name') + name = host.prop("name") if name: - port = host.get('port') - if port: - hosts.append({"name": name, "port": port}) - else: - hosts.append({"name": name}) + hosts.append({"name": name, "port": host.prop("port")}) return hosts ceph_hosts = util.get_xml_path(xml, func=get_ceph_hosts) @@ -64,7 +60,6 @@ class wvmCreate(wvmConnect): name += ".img" alloc = 0 else: - image_format = 'raw' alloc = size metadata = False xml = f""" @@ -94,7 +89,7 @@ class wvmCreate(wvmConnect): vol = stg.storageVolLookupByName(name) return vol.path() - def get_volume_format_type(self, path): + def get_volume_type(self, path): vol = self.get_volume_by_path(path) vol_type = util.get_xml_path(vol.XMLDesc(0), "/volume/target/format/@type") if vol_type == "unknown" or vol_type == "iso": @@ -281,24 +276,37 @@ class wvmCreate(wvmConnect): if stg_type == "rbd": ceph_user, secret_uuid, ceph_hosts = get_rbd_storage_data(stg) - xml += f""" - """ - xml += f""" - + xml += """ + """ % ( + volume["type"], + disk_opts, + ) + xml += """ + - """ + """ % ( + ceph_user, + secret_uuid, + volume["path"], + ) if isinstance(ceph_hosts, list): for host in ceph_hosts: if host.get("port"): - xml += f""" - """ + xml += """ + """ % ( + host.get("name"), + host.get("port"), + ) else: - xml += f"""""" + xml += """ + """ % host.get( + "name" + ) xml += """""" else: - xml += f"""""" - xml += f""" """ - xml += f""" """ + xml += """""" % volume["device"] + xml += """ """ % (volume["type"], disk_opts) + xml += """ """ % volume["path"] if volume.get("bus") == "virtio": xml += """""" % (vd_disk_letters.pop(0), volume.get("bus")) diff --git a/vrtManager/instance.py b/vrtManager/instance.py index 63fd835..a59ec62 100644 --- a/vrtManager/instance.py +++ b/vrtManager/instance.py @@ -713,13 +713,11 @@ class wvmInstance(wvmConnect): self, target_dev, source, - source_info = None, - pool_type="dir", target_bus="ide", disk_type="file", disk_device="disk", driver_name="qemu", - format_type="raw", + driver_type="raw", readonly=False, shareable=False, serial=None, @@ -741,33 +739,11 @@ class wvmInstance(wvmConnect): xml_disk = f"" if disk_device == "cdrom": - xml_disk += f"" + xml_disk += f"" elif disk_device == "disk": - xml_disk += f"" - - if disk_type == 'file': - xml_disk += f"" - elif disk_type == 'network': - if pool_type == 'rbd': - auth_type = source_info.get('auth_type') - auth_user = source_info.get('auth_user') - auth_uuid = source_info.get("auth_uuid") - xml_disk += f""" - - """ - xml_disk += f"""""" - for host in source_info.get("hosts"): - if host.get('hostport'): - xml_disk += f"""""" - else: - xml_disk += f"""""" - xml_disk +="""""" - else: - raise Exception("Not implemented disk type") - else: - raise Exception("Not implemented disk type") - - xml_disk +=f"" + xml_disk += f"" + xml_disk += f""" + """ if readonly or disk_device == "cdrom": xml_disk += """""" if shareable: diff --git a/vrtManager/storage.py b/vrtManager/storage.py index c7b37f8..85eafb0 100644 --- a/vrtManager/storage.py +++ b/vrtManager/storage.py @@ -145,9 +145,6 @@ class wvmStorage(wvmConnect): def get_target_path(self): return util.get_xml_path(self._XMLDesc(0), "/pool/target/path") - def get_source_name(self): - return util.get_xml_path(self._XMLDesc(0), "/pool/source/name") - def get_allocation(self): return int(util.get_xml_path(self._XMLDesc(0), "/pool/allocation")) @@ -157,34 +154,6 @@ class wvmStorage(wvmConnect): def get_capacity(self): return int(util.get_xml_path(self._XMLDesc(0), "/pool/capacity")) - def get_rbd_source(self): - def hosts(doc): - hosts_array = [] - - for host in doc.xpath("/pool/source/host"): - name = host.get('name') - if name: - port = host.get('port') - if port: - hosts_array.append({"hostname": name, "hostport": port}) - else: - hosts_array.append({"hostname": name}) - - name = doc.get('name') - auth = doc.xpath("/pool/source/auth") - auth_type = auth[0].get("type") - auth_user = auth[0].get("username") - auth_uuid = auth[0].xpath("secret/@uuid")[0] - - return({ - "name": name, - "auth_type": auth_type, - "auth_user": auth_user, - "auth_uuid": auth_uuid, - "hosts": hosts_array - }) - return util.get_xml_path(self._XMLDesc(0), func=hosts) - def get_pretty_allocation(self): return util.pretty_bytes(self.get_allocation()) @@ -216,13 +185,9 @@ class wvmStorage(wvmConnect): vol = self.pool.storageVolLookupByName(name) vol.delete(0) - def get_volume_format_type(self, name): - vol_xml = self._vol_XMLDesc(name) - return util.get_xml_path(vol_xml, "/volume/target/format/@type") - def get_volume_type(self, name): vol_xml = self._vol_XMLDesc(name) - return util.get_xml_path(vol_xml, "/volume/@type") + return util.get_xml_path(vol_xml, "/volume/target/format/@type") def refresh(self): self.pool.refresh(0) @@ -241,7 +206,7 @@ class wvmStorage(wvmConnect): "name": volname, "size": self.get_volume_size(volname), "allocation": self.get_volume_allocation(volname), - "type": self.get_volume_format_type(volname), + "type": self.get_volume_type(volname), } ) return vol_list @@ -295,7 +260,7 @@ class wvmStorage(wvmConnect): ): vol = self.get_volume(name) if not vol_fmt: - vol_fmt = self.get_volume_format_type(name) + vol_fmt = self.get_volume_type(name) storage_type = self.get_type() if storage_type == "dir":