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

F #4994: Fix vmrc action (#777)

This commit is contained in:
Sergio Betanzos 2021-02-09 16:49:55 +01:00 committed by GitHub
parent 096754b63f
commit 020efc6391
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 62 additions and 77 deletions

View File

@ -162,7 +162,10 @@ class SunstoneVMRC
file.write('https://' + data[:host] + ':' + data[:port].to_s)
file.close
[200, { :data => data }.to_json]
info = SunstoneVMHelper.get_remote_info(vm_resource)
encode_info = Base64.encode64(info.to_json)
[200, { :data => data, :info => encode_info }.to_json]
end
private

View File

@ -613,8 +613,7 @@ define(function(require) {
var callback = params.success;
var callback_error = params.error;
var id = params.data.id;
var typeConnection = params.data.extra_param.type;
var vm_name = params.data.extra_param.vm_name;
var typeConnection = params.data.extra_param;
var resource = RESOURCE;
var request = OpenNebulaHelper.request(resource, null, params.data);
@ -623,7 +622,6 @@ define(function(require) {
type: "POST",
dataType: "json",
success: function(response) {
response.vm_name = vm_name;
return callback ? callback(request, response) : null;
},
error: function(response) {
@ -816,11 +814,26 @@ define(function(require) {
"isSPICESupported": isSPICESupported,
"isWFileSupported": isWFileSupported,
"hasConnection": hasConnection,
"promiseGetVm" : _promiseGetVm,
"getName": function(id){
return OpenNebulaAction.getName(id, RESOURCE);
}
};
function _promiseGetVm({ id, success, async = true } = {}) {
return $.ajax({
url: 'vm/' + id,
type: 'GET',
success: function(response) {
if (typeof success === 'function') {
var vm = response ? response[RESOURCE] : undefined;
success(vm);
}
},
async: async
});
}
function retrieveLastHistoryRecord(element) {
if (element.HISTORY_RECORDS && element.HISTORY_RECORDS.HISTORY) {
var history = element.HISTORY_RECORDS.HISTORY;
@ -1095,10 +1108,11 @@ define(function(require) {
function isVMRCSupported(element = {}) {
var actionEnabled = Config.isTabActionEnabled('vms-tab', 'VM.startvmrc')
var vmrcSupported = graphicSupported(element, 'vrmc')
var isVCenter =
var vmrcSupported = graphicSupported(element, 'vnc')
var isVCenter = Boolean(
element.USER_TEMPLATE &&
String(element.USER_TEMPLATE.HYPERVISOR).toLowerCase() === 'vcenter'
)
return actionEnabled && vmrcSupported && isVCenter
}

View File

@ -220,24 +220,24 @@ define(function(require) {
var ips = "", actions = "";
function successCallback (data) {
if (data.VM && data.VM.ID === id) {
if (data && data.ID === id) {
var ready = ""
if (ready_status_gate) {
ready = (data.VM.USER_TEMPLATE && data.VM.USER_TEMPLATE.READY == "YES")
ready = (data.USER_TEMPLATE && data.USER_TEMPLATE.READY == "YES")
? '<span class="has-tip" title="'+
Locale.tr("The VM is ready")+'"><i class="fas fa-check"/></span>'
: '<span class="has-tip" title="'+
Locale.tr("Waiting for the VM to be ready")+'"><i class="fas fa-clock"/></span>'
}
ips = OpenNebulaVM.ipsStr(data.VM, { forceGroup: true });
ips = OpenNebulaVM.ipsStr(data, { forceGroup: true });
actions = VMRemoteActions.renderActionsHtml(data.VM);
actions = VMRemoteActions.renderActionsHtml(data);
}
roleVms[index] = rowInfoRoleVm(ready, id, name, uname, gname, ips, actions);
}
promises.push(promiseVmInfo(id, successCallback))
promises.push(OpenNebulaVM.promiseGetVm({ id, success: successCallback }))
})
}
@ -282,15 +282,6 @@ define(function(require) {
];
}
function promiseVmInfo(id, success) {
return $.ajax({
url: "vm/" + id,
type: "GET",
dataType: "json",
success: success
})
}
function _roleSetup(context, role) {
var that = this

View File

@ -348,10 +348,8 @@ define(function(require) {
"VM.guac_vnc" : {
type: "custom",
call: function() {
$.each(Sunstone.getDataTable(TAB_ID).elements(), function(index, elem) {
var vm_name = OpenNebulaVM.getName(elem);
var extra_param = {type: 'vnc', 'vm_name': vm_name }
Sunstone.runAction("VM.startguac_action", elem, extra_param);
$.each(Sunstone.getDataTable(TAB_ID).elements(), function(_, elem) {
Sunstone.runAction("VM.startguac_action", elem, 'vnc');
});
},
error: function(req, resp) {
@ -361,10 +359,8 @@ define(function(require) {
"VM.guac_rdp" : {
type: "custom",
call: function() {
$.each(Sunstone.getDataTable(TAB_ID).elements(), function(index, elem) {
var vm_name = OpenNebulaVM.getName(elem);
var extra_param = {type: 'rdp', 'vm_name': vm_name }
Sunstone.runAction("VM.startguac_action", elem, extra_param);
$.each(Sunstone.getDataTable(TAB_ID).elements(), function(_, elem) {
Sunstone.runAction("VM.startguac_action", elem, 'rdp');
});
},
error: function(req, resp) {
@ -374,10 +370,8 @@ define(function(require) {
"VM.guac_ssh" : {
type: "custom",
call: function() {
$.each(Sunstone.getDataTable(TAB_ID).elements(), function(index, elem) {
var vm_name = OpenNebulaVM.getName(elem);
var extra_param = {type: 'ssh', 'vm_name': vm_name }
Sunstone.runAction("VM.startguac_action", elem, extra_param);
$.each(Sunstone.getDataTable(TAB_ID).elements(), function(_, elem) {
Sunstone.runAction("VM.startguac_action", elem, 'ssh');
});
},
error: function(req, resp) {
@ -387,7 +381,7 @@ define(function(require) {
"VM.startguac_action" : {
type: "single",
call: OpenNebulaVM.guac,
callback: function(request, response) {
callback: function(_, response) {
var dialog = Sunstone.getDialog(GUAC_DIALOG_ID);
dialog.setElement(response);
dialog.show();

View File

@ -63,8 +63,6 @@ define(function(require) {
}
function _setup(context) {
var that = this;
$("#open_in_a_new_window", context).on("click", function() {
var dialog = Sunstone.getDialog(DIALOG_ID);
dialog.hide();

View File

@ -15,7 +15,7 @@
{{! -------------------------------------------------------------------------- }}
<div id="{{dialogId}}" class="reveal full" data-reveal>
<div class="row text-center">
<div class="row">
<div class="large-12 columns">
<h5 class="subheader" id="vmrc_dialog">
<span id="VMRC_status"></span>

View File

@ -79,19 +79,19 @@ define(function(require) {
function _callGuacVNC(data) {
(data.hasOwnProperty('id'))
? Sunstone.runAction('VM.startguac_action', String(data.id), { type: 'vnc' })
? Sunstone.runAction('VM.startguac_action', String(data.id), 'vnc')
: Notifier.notifyError(Locale.tr('VNC - Invalid action'));
}
function _callGuacRDP(data) {
(data.hasOwnProperty('id'))
? Sunstone.runAction('VM.startguac_action', String(data.id), { type: 'rdp' })
? Sunstone.runAction('VM.startguac_action', String(data.id), 'rdp')
: Notifier.notifyError(Locale.tr('RDP - Invalid action'));
}
function _callGuacSSH(data) {
(data.hasOwnProperty('id'))
? Sunstone.runAction('VM.startguac_action', String(data.id), { type: 'ssh' })
? Sunstone.runAction('VM.startguac_action', String(data.id), 'ssh')
: Notifier.notifyError(Locale.tr('SSH - Invalid action'));
}
@ -111,18 +111,6 @@ define(function(require) {
return $('<div>').append(button.append(icon)).html()
}
function buttonVmrc(id = '') {
var icon = $('<i>', { class: 'fas fa-desktop' })
var button = $('<button>', {
title: 'vmrc',
class: 'vmrc remote-vm',
'data-id': id
})
return $('<div>').append(button.append(icon)).html()
}
function buttonSSH(id = '') {
var icon = $('<i>', { class: 'fas fa-terminal' })
@ -232,9 +220,6 @@ define(function(require) {
if (OpenNebulaVM.isVNCSupported(vm)) {
actions += buttonVnc(vm.ID);
}
else if (OpenNebulaVM.isVMRCSupported(vm)) {
actions += buttonVmrc(vm.ID);
}
else if (OpenNebulaVM.isSPICESupported(vm)) {
actions += buttonSpice(vm.ID);
}
@ -299,31 +284,27 @@ define(function(require) {
evt.preventDefault();
var data = $(this).data();
FireedgeValidator.validateFireedgeToken(
function(fireedgeToken) {
fireedgeToken !== '' ? _callGuacVNC(data) : _callVNC(data)
},
function() {
_callVNC(data)
// Get VM show info to get USER_TEMPLATE.HYPERVISOR
OpenNebulaVM.promiseGetVm({
id: data.id,
success: function(response) {
FireedgeValidator.validateFireedgeToken(
function(fireedgeToken) {
if (fireedgeToken !== '') {
OpenNebulaVM.isVMRCSupported(response) ? _callVMRC(data) : _callGuacVNC(data)
} else {
_callVNC(data)
}
},
function() {
_callVNC(data)
}
);
}
);
});
evt.stopPropagation();
})
.off("click", '.vmrc')
.on("click", '.vmrc', function(evt) {
evt.preventDefault();
var data = $(this).data();
FireedgeValidator.validateFireedgeToken(
function(fireedgeToken) {
fireedgeToken !== '' ? _callVMRC(data) : _callVNC(data)
},
function() { _callVNC(data) }
);
evt.stopPropagation();
});
}
return {

View File

@ -22,6 +22,7 @@ define(function (require) {
var _lock = false;
var _wmks;
var _is_encrypted = "";
var vm_name = ""
return {
"lockStatus": lockStatus,
@ -50,12 +51,12 @@ define(function (require) {
}
function connected() {
setStatus(null, "VMRC " + _wmks.connectionState + " (" + _is_encrypted + ") to: " + _wmks.vm_name);
setStatus(null, "VMRC " + _wmks.connectionState + " (" + _is_encrypted + ") to: " + vm_name);
}
function disconnectedFromServer(e) {
if (e.detail.clean) {
setStatus(null, "VMRC " + _wmks.connectionState + " (" + _is_encrypted + ") to: " + _wmks.vm_name);
setStatus(null, "VMRC " + _wmks.connectionState + " (" + _is_encrypted + ") to: " + vm_name);
} else {
setStatus("Something went wrong, connection is closed", "Failed");
}
@ -73,6 +74,9 @@ define(function (require) {
var info_decode = UtilsConnection.decodeInfoConnection(info);
UtilsConnection.printInfoConnection($('.VMRC_info'), info_decode)
// set vm name on title
vm_name = (info_decode && info_decode.name) ? info_decode.name : ""
const queryString = window.location.search;
const urlParams = new URLSearchParams(queryString);