mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-21 14:50:08 +03:00
parent
096754b63f
commit
020efc6391
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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>
|
||||
|
@ -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 {
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user