diff --git a/computes/templates/overview.html b/computes/templates/overview.html index 8b5ff158..bb18c805 100644 --- a/computes/templates/overview.html +++ b/computes/templates/overview.html @@ -42,6 +42,7 @@

{% trans "Hostname" %}

{% trans "Hypervisors" %}

{% trans "Emulator" %}

+

{% trans "Version" %}

{% trans "Memory" %}

{% trans "Architecture" %}

{% trans "Logical CPUs" %}

@@ -55,10 +56,17 @@ {{ arch }} {% for h in hpv %} - {{ h }}{% endfor %} + {{ h }} + {% endfor %} {% endfor %}

{{ emulator }}

+

+ {% trans 'Qemu' %} + {{ version }}   + {% trans 'Libvirt' %} + {{ lib_version }}   +

{{ host_memory|filesizeformat }}

{{ host_arch }}

{{ logical_cpu }}

diff --git a/computes/urls.py b/computes/urls.py index 352b1568..51276f63 100644 --- a/computes/urls.py +++ b/computes/urls.py @@ -1,10 +1,10 @@ from django.conf.urls import url -from storages.views import storages, storage +from storages.views import storages, storage, get_volumes from networks.views import networks, network from secrets.views import secrets from create.views import create_instance from interfaces.views import interfaces, interface -from computes.views import overview, compute_graph, computes +from computes.views import overview, compute_graph, computes, get_compute_disk_buses from instances.views import instances from nwfilters.views import nwfilter, nwfilters @@ -14,6 +14,7 @@ url(r'^(?P[0-9]+)/statistics$', compute_graph, name='compute_graph'), url(r'^(?P[0-9]+)/instances/$', instances, name='instances'), url(r'^(?P[0-9]+)/storages/$', storages, name='storages'), + url(r'^(?P[0-9]+)/storage/(?P[\w\-\.\/]+)/volumes$', get_volumes, name='volumes'), url(r'^(?P[0-9]+)/storage/(?P[\w\-\.\/]+)/$', storage, name='storage'), url(r'^(?P[0-9]+)/networks/$', networks, name='networks'), url(r'^(?P[0-9]+)/network/(?P[\w\-\.]+)/$', network, name='network'), @@ -23,4 +24,5 @@ url(r'^(?P[0-9]+)/nwfilter/(?P[\w\-\.\:]+)/$', nwfilter, name='nwfilter'), url(r'^(?P[0-9]+)/secrets/$', secrets, name='secrets'), url(r'^(?P[0-9]+)/create/$', create_instance, name='create_instance'), + url(r'^(?P[0-9]+)/disk/(?P[\w\-\.\/]+)/buses$', get_compute_disk_buses, name='buses'), ] diff --git a/computes/views.py b/computes/views.py index db3887ca..bb9c55e5 100644 --- a/computes/views.py +++ b/computes/views.py @@ -9,7 +9,7 @@ from accounts.models import UserInstance from computes.forms import ComputeAddTcpForm, ComputeAddSshForm, ComputeEditHostForm, ComputeAddTlsForm, ComputeAddSocketForm from vrtManager.hostdetails import wvmHostDetails -from vrtManager.connection import CONN_SSH, CONN_TCP, CONN_TLS, CONN_SOCKET, connection_manager +from vrtManager.connection import CONN_SSH, CONN_TCP, CONN_TLS, CONN_SOCKET, connection_manager, wvmConnect from libvirt import libvirtError @@ -157,6 +157,8 @@ def overview(request, compute_id): hypervisor = conn.hypervisor_type() mem_usage = conn.get_memory_usage() emulator = conn.get_emulator(host_arch) + version = conn.get_version() + lib_version = conn.get_lib_version() conn.close() except libvirtError as lib_err: error_messages.append(lib_err) @@ -225,3 +227,32 @@ def compute_graph(request, compute_id): response.cookies['mem'] = datasets['mem'] response.write(data) return response + + +@login_required +def get_compute_disk_buses(request, compute_id, disk): + data = {} + compute = get_object_or_404(Compute, pk=compute_id) + try: + conn = wvmConnect(compute.hostname, + compute.login, + compute.password, + compute.type) + + disk_device_types = conn.get_disk_device_types() + disk_bus_types = conn.get_disk_bus_types() + + if disk in disk_device_types: + if disk == 'disk': + data['bus'] = sorted(disk_device_types) + elif disk == 'cdrom': + data['bus'] = ['ide', 'sata', 'scsi',] + elif disk == 'floppy': + data['bus'] = ['fdc',] + elif disk == 'lun': + data['bus'] = ['scsi',] + except libvirtError: + pass + + return HttpResponse(json.dumps(data)) + diff --git a/create/forms.py b/create/forms.py index d1e5bf01..9be0888c 100644 --- a/create/forms.py +++ b/create/forms.py @@ -37,7 +37,7 @@ class NewVMForm(forms.Form): host_model = forms.BooleanField(required=False) disk = forms.IntegerField(required=False) memory = forms.IntegerField(error_messages={'required': _('No RAM size has been entered')}) - networks = forms.CharField(error_messages={'required': _('No Network pool has been choice')}) + networks = forms.CharField(error_messages={'required': _('No Network pool has been choosen')}) nwfilter = forms.CharField(required=False) storage = forms.CharField(max_length=20, required=False) template = forms.CharField(required=False) @@ -46,6 +46,7 @@ class NewVMForm(forms.Form): hdd_size = forms.IntegerField(required=False) meta_prealloc = forms.BooleanField(required=False) virtio = forms.BooleanField(required=False) + qemu_ga = forms.BooleanField(required=False) mac = forms.CharField(required=False) console_pass = forms.CharField(required=False,empty_value="", widget=forms.PasswordInput()) video = forms.CharField(error_messages={'required': _('Please select a graphic display')}) diff --git a/create/templates/create_instance.html b/create/templates/create_instance.html index 33eeca86..baaada27 100644 --- a/create/templates/create_instance.html +++ b/create/templates/create_instance.html @@ -16,6 +16,22 @@

{% trans "New instance on" %} {{ compute.name }}

{% include 'errors_block.html' %} {% include 'pleasewaitdialog.html' %} + + {% if form.errors %} + {% for field in form %} + {% for error in field.errors %} +
+ {{ error|escape }} +
+ {% endfor %} + {% endfor %} + {% for error in form.non_field_errors %} +
+ {{ error|escape }} +
+ {% endfor %} +{% endif %} +
@@ -187,6 +203,12 @@
+
+ +
+ +
+
@@ -223,67 +245,79 @@
- {% endif %} -
-
+ {% endif %} +
+
{% csrf_token %}
-
- +
+
-
- +
+
-
+
-
+
+
-
-
    - -
- - +
+
+
+ +
+
-
+
-
+
{% for nwfilter in nwfilters %} @@ -319,7 +353,7 @@
-
+
-
+
+
+
+
+ +
{% if storages %} - {% else %} @@ -372,54 +412,62 @@