1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-21 14:50:08 +03:00

Bug 4132: RDP in fenced vnet mapping (#4242)

* add rdp
* fix mapping networks
* fix ip in button RDP vm info
This commit is contained in:
Jorge Lobo 2020-02-24 18:08:06 +01:00 committed by GitHub
parent 520eca0801
commit df7e2ea50b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 60 additions and 17 deletions

View File

@ -24,6 +24,7 @@ define(function(require) {
var Vnc = require('utils/vnc');
var Spice = require('utils/spice');
var Rdp = require('utils/rdp');
var mapips = require('./utils/mapips');
var TAB_ID = require('./tabId');
var CREATE_DIALOG_ID = require('./form-panels/create/formPanelId');
@ -177,21 +178,27 @@ define(function(require) {
call: function() {
var vm = Sunstone.getElementRightInfo(TAB_ID);
if (vm && vm.NAME && vm.TEMPLATE && Array.isArray(vm.TEMPLATE.NIC)) {
if (vm && vm.NAME && vm.TEMPLATE && vm.TEMPLATE.NIC && Array.isArray(vm.TEMPLATE.NIC)) {
var name = vm.NAME;
var nic = vm.TEMPLATE.NIC.find(n => n.RDP === "YES");
var ip = nic && nic.IP ? nic.IP : '';
var credentials = {};
if (vm.TEMPLATE.CONTEXT) {
var context = vm.TEMPLATE.CONTEXT;
for (var prop in context) {
var propUpperCase = String(prop).toUpperCase();
(propUpperCase === "USERNAME" || propUpperCase === "PASSWORD")
&& (credentials[propUpperCase] = context[prop]);
}
var pblc = vm.TEMPLATE.CONTEXT.MAP_PUBLIC;
var prvt = vm.TEMPLATE.CONTEXT.MAP_PRIVATE;
var mapp = new mapips(pblc, prvt);
var foundip = mapp.renderPublicIp(ip);
ip = foundip || ip
}
nic && Rdp.downloadFile(nic.IP, name, credentials);
nic && Rdp.downloadFile(ip, name, credentials);
} else {
Notifier.notifyError(Locale.tr("RDP file error"));
return false;

View File

@ -31,6 +31,8 @@ define(function(require) {
var Notifier = require('utils/notifier');
var DashboardUtils = require('utils/dashboard');
var SearchDropdown = require('hbs!./datatable/search');
var Rdp = require('utils/rdp');
var TemplateUtils = require('utils/template-utils');
/*
CONSTANTS
@ -170,6 +172,15 @@ define(function(require) {
TabDataTable.prototype.initialize.call(this, opts);
//download file RDP
$('#' + this.dataTableId).on("click", '.download_rdp', function(e){
e.stopPropagation();
var ip = $(this).attr("ip");
var credential = TemplateUtils.stringToTemplate( $(this).attr("credential") );
var name = $(this).attr("name");
Rdp.downloadFile(ip, name, credential);
});
$('#' + this.dataTableId).on("click", '.vnc', function() {
var vmId = $(this).attr('vm_id');

View File

@ -100,6 +100,7 @@ define(function(require) {
var render = '';
if(
element &&
element.NAME &&
element.TEMPLATE &&
element.TEMPLATE.CONTEXT &&
element.TEMPLATE.CONTEXT.MAP_PRIVATE &&
@ -107,16 +108,28 @@ define(function(require) {
element.TEMPLATE.NIC &&
config &&
config.system_config &&
config.system_config.extended_vm_info &&
config.system_config.mapped_ips
config.system_config.get_extended_vm_info &&
config.system_config.get_extended_vm_info !== 'false' &&
config.system_config.mapped_ips &&
config.system_config.mapped_ips !== 'false'
){
var nics = element.TEMPLATE.NIC;
var pblc = element.TEMPLATE.CONTEXT.MAP_PUBLIC;
var prvt = element.TEMPLATE.CONTEXT.MAP_PRIVATE;
var credentials = {};
var context = element.TEMPLATE.CONTEXT;
var pblc = element.TEMPLATE.CONTEXT.MAP_PUBLIC; //"10.0.0.0/8";
var prvt = element.TEMPLATE.CONTEXT.MAP_PRIVATE; //"192.168.0.0/16";
var renderTitle = true;
if (!$.isArray(nics)){
nics = [nics];
}
//find RDP CREDENTIALS
for (var prop in context) {
var propUpperCase = String(prop).toUpperCase();
(propUpperCase === "USERNAME" || propUpperCase === "PASSWORD")
&& (credentials[propUpperCase] = context[prop]);
}
var mapp = new mapips(pblc, prvt);
nics.forEach(function(nic){
if(nic && nic.IP){
@ -126,7 +139,20 @@ define(function(require) {
render = $('<div/>').append($('<br/>').add($('<b/>').text(Locale.tr('Mapped Networks')))).html();
renderTitle = false;
}
render += $("<div/>").append($("<br/>").add($("<div/>").text(foundip+" ("+nic.IP+")"))).html();
if(nic.RDP && String(nic.RDP).toUpperCase() === "YES"){
render += $("<div/>").append(
$("<button/>",{
class:'button download_rdp',
ip: foundip,
name:element.NAME,
credential: TemplateUtils.templateToString(credentials)
}).css({display:'block'}).text("RDP: "+foundip)
).html();
}else{
render += $("<div/>").append(
$("<div/>").text(foundip)
).html();
}
}
}
});

View File

@ -46,23 +46,23 @@ define(function(require) {
);
}
mapIPprivate() {
mapIPprivate(ipnic) {
var dataPublic = this.pblc.split("/");
var dataPrivate = this.prvt.split("/");
var nic = ipnic || "";
if (
Array.isArray(dataPrivate) &&
Array.isArray(dataPublic) &&
dataPublic[0] &&
dataPublic[1] &&
dataPrivate[0] &&
dataPrivate[1] &&
dataPublic[1] === dataPrivate[1]
dataPrivate[1]
) {
var mask = ip.fromPrefixLen(dataPublic[1]);
var networkPublic = ip.mask(dataPublic[0], mask);
mask = ip.fromPrefixLen(dataPrivate[1]);
var hostBytes = ip.not(mask);
var hostsPrivate = ip.mask(dataPrivate[0], hostBytes);
var hostsPrivate = ip.mask(ipnic, hostBytes);
this.rtn = this.intToip(
this.ipToint(networkPublic) + this.ipToint(hostsPrivate)
);
@ -74,7 +74,7 @@ define(function(require) {
var ipnic = nic || "";
var rtn = '';
if (ip.cidrSubnet(this.prvt).contains(ipnic)) {
rtn = this.mapIPprivate();
rtn = this.mapIPprivate(ipnic);
}
return rtn;
}

View File

@ -69,8 +69,7 @@ define(function(require) {
config &&
config.system_config &&
config.system_config.leases
){
console.log("-->",form);
){
$(parseVarToJqueryClass(classButton)).off("click").on("click", function(e){
e.preventDefault();
var confLeases = config.system_config.leases;

View File

@ -47,8 +47,8 @@
'allow_vnc_federation' : '<%= (!$conf[:allow_vnc_federation].nil?)? $conf[:allow_vnc_federation] : "no" %>',
'max_upload_file_size' : <%= $conf[:max_upload_file_size] ? $conf[:max_upload_file_size] : "undefined" %>,
'leases' : <%= $conf[:leases] ? $conf[:leases].to_json : "null" %>,
'mapped_ips' : <%= $conf[:mapped_ips] ? $conf[:mapped_ips] : false %>,
'extended_vm_info': <%= $conf[:get_extended_vm_info] ? $conf[:get_extended_vm_info] : false %>
'mapped_ips' : '<%= $conf[:mapped_ips] ? $conf[:mapped_ips] : false %>',
'get_extended_vm_info': '<%= $conf[:get_extended_vm_info] ? $conf[:get_extended_vm_info] : false %>'
},
'view' : view,
'available_views' : available_views,