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:
parent
27a7a7a365
commit
464e7bee39
3 changed files with 46 additions and 0 deletions
|
@ -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'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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());
|
||||||
|
|
Loading…
Reference in a new issue