1
0
Fork 0
mirror of https://github.com/retspen/webvirtcloud synced 2024-12-24 15:15:22 +00:00

add vdiconsole datasource endpoint. provides vdi url for remote-viewer.

add instance/access/vdi panel
This commit is contained in:
Ing. Jan KRCMAR 2018-06-21 14:53:35 +02:00
parent 27a7a7a365
commit 464e7bee39
3 changed files with 46 additions and 0 deletions

View file

@ -8,4 +8,6 @@ urlpatterns = [
views.os_metadata_json, name='ds_openstack_metadata'), views.os_metadata_json, name='ds_openstack_metadata'),
url(r'^openstack/(?P<version>[\w\-\.]+)/user_data$', url(r'^openstack/(?P<version>[\w\-\.]+)/user_data$',
views.os_userdata, name='ds_openstack_userdata'), views.os_userdata, name='ds_openstack_userdata'),
url(r'^vdi/(?P<vname>[\w\-\.]+)/$',
views.get_vdi_url, name='vdi_url'),
] ]

View file

@ -1,6 +1,9 @@
from django.shortcuts import render from django.shortcuts import render
from django.http import HttpResponse, Http404 from django.http import HttpResponse, Http404
from accounts.models import UserInstance, UserSSHKey from accounts.models import UserInstance, UserSSHKey
from instances.models import Instance
from vrtManager.instance import wvmInstance
from libvirt import libvirtError
import json import json
import socket import socket
@ -62,3 +65,24 @@ def get_client_ip(request):
def get_hostname_by_ip(ip): def get_hostname_by_ip(ip):
addrs = socket.gethostbyaddr(ip) addrs = socket.gethostbyaddr(ip)
return addrs[0] return addrs[0]
def get_vdi_url(request, vname):
instance = Instance.objects.get(name=vname)
compute = instance.compute
data = {}
try:
conn = wvmInstance(compute.hostname,
compute.login,
compute.password,
compute.type,
instance.name)
fqdn = get_hostname_by_ip(compute.hostname)
url = "{}://{}:{}".format(conn.get_console_type(), fqdn, conn.get_console_port())
response = url
return HttpResponse(response)
except libvirtError as lib_err:
err = "Error getting vdi url for {}".format(vname)
raise Http404(err)

View file

@ -241,6 +241,13 @@
</a> </a>
</li> </li>
{% endif %} {% endif %}
{% ifequal status 1 %}
<li role="presentation">
<a href="#vdiconsole" aria-controls="vdiconsole" role="tab" data-toggle="tab">
{% trans "VDI" %}
</a>
</li>
{% endifequal %}
</ul> </ul>
<!-- Tab panes --> <!-- Tab panes -->
<div class="tab-content"> <div class="tab-content">
@ -297,6 +304,13 @@
<div class="clearfix"></div> <div class="clearfix"></div>
</div> </div>
{% endif %} {% endif %}
{% ifequal status 1 %}
<div role="tabpanel" class="tab-pane tab-pane-bordered" id="vdiconsole">
<p>{% trans "This action opens a remote viewer with a connection to the console of the instance." %}</p>
<a href="#" class="btn btn-lg btn-success pull-right" id="vdi_url" >{% trans "VDI" %}</a>
<div class="clearfix"></div>
</div>
{% endifequal %}
</div> </div>
</div> </div>
</div> </div>
@ -1305,6 +1319,12 @@
$("#console_select_listen_address option[value='" + console_listen_address + "']").prop('selected', true); $("#console_select_listen_address option[value='" + console_listen_address + "']").prop('selected', true);
} }
}); });
$(document).ready(function () {
// set vdi url
$.get("/datasource/vdi/{{ vname }}/", function(data) {
$("#vdi_url").attr("href", data);
});
});
{% if not request.user.is_superuser %} {% if not request.user.is_superuser %}
$('#select_clone_name').on('change', function () { $('#select_clone_name').on('change', function () {
update_clone_disk_name($(this).val()); update_clone_disk_name($(this).val());