1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-16 22:50:10 +03:00

M #~: VM remotes buttons in sunstone views (#4699)

This commit is contained in:
Sergio Betanzos 2020-05-11 18:46:56 +02:00 committed by GitHub
parent 33485ee842
commit d282f2da86
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 102 additions and 53 deletions

View File

@ -418,6 +418,10 @@ tabs:
VM.unlock: true
VM.edit_labels: true
VM.menu_labels: true
VM.startvnc: true
VM.startspice: true
VM.save_rdp: true
VM.save_virt_viewer: true
oneflow-services-tab:
panel_tabs:
service_info_tab: true

View File

@ -91,6 +91,10 @@ tabs:
VM.migrate_poff_hard: false
VM.lockU: true
VM.unlock: true
VM.startvnc: true
VM.startspice: true
VM.save_rdp: true
VM.save_virt_viewer: true
dashboard:
# Connected user's quotas
quotas: true

View File

@ -417,6 +417,10 @@ tabs:
VM.unlock: true
VM.edit_labels: true
VM.menu_labels: true
VM.startvnc: true
VM.startspice: true
VM.save_rdp: true
VM.save_virt_viewer: true
oneflow-services-tab:
panel_tabs:
service_info_tab: true

View File

@ -410,6 +410,10 @@ tabs:
VM.unlock: true
VM.edit_labels: true
VM.menu_labels: true
VM.save_rdp: true
VM.save_virt_viewer: true
VM.startvnc: true
VM.startspice: true
oneflow-services-tab:
panel_tabs:
service_info_tab: true

View File

@ -418,6 +418,10 @@ tabs:
VM.unlock: true
VM.edit_labels: true
VM.menu_labels: true
VM.startvnc: true
VM.startspice: true
VM.save_rdp: true
VM.save_virt_viewer: true
oneflow-services-tab:
panel_tabs:
service_info_tab: true

View File

@ -91,6 +91,10 @@ tabs:
VM.save_as_template: true
VM.lockU: true
VM.unlock: true
VM.startvnc: true
VM.startspice: true
VM.save_rdp: true
VM.save_virt_viewer: true
dashboard:
# Connected user's quotas
quotas: true

View File

@ -417,6 +417,10 @@ tabs:
VM.unlock: true
VM.edit_labels: true
VM.menu_labels: true
VM.startvnc: true
VM.startspice: true
VM.save_rdp: true
VM.save_virt_viewer: true
oneflow-services-tab:
panel_tabs:
service_info_tab: true

View File

@ -410,6 +410,10 @@ tabs:
VM.unlock: true
VM.edit_labels: true
VM.menu_labels: true
VM.startvnc: true
VM.startspice: true
VM.save_rdp: true
VM.save_virt_viewer: true
oneflow-services-tab:
panel_tabs:
service_info_tab: true

View File

@ -416,6 +416,10 @@ tabs:
VM.unlock: true
VM.edit_labels: true
VM.menu_labels: true
VM.startvnc: true
VM.startspice: true
VM.save_rdp: true
VM.save_virt_viewer: true
oneflow-services-tab:
panel_tabs:
service_info_tab: true

View File

@ -92,6 +92,10 @@ tabs:
VM.save_as_template: true
VM.lockU: true
VM.unlock: true
VM.startvnc: true
VM.startspice: true
VM.save_rdp: true
VM.save_virt_viewer: true
dashboard:
# Connected user's quotas
quotas: true

View File

@ -417,6 +417,10 @@ tabs:
VM.unlock: true
VM.edit_labels: true
VM.menu_labels: true
VM.startvnc: true
VM.startspice: true
VM.save_rdp: true
VM.save_virt_viewer: true
oneflow-services-tab:
panel_tabs:
service_info_tab: true

View File

@ -410,6 +410,10 @@ tabs:
VM.unlock: true
VM.edit_labels: true
VM.menu_labels: true
VM.startvnc: true
VM.startspice: true
VM.save_rdp: true
VM.save_virt_viewer: true
oneflow-services-tab:
panel_tabs:
service_info_tab: true

View File

@ -16,12 +16,12 @@
define(function(require) {
var OpenNebulaAction = require("./action"),
OpenNebulaHelper = require("./helper"),
OpenNebulaError = require("./error");
Locale = require("utils/locale"),
Navigation = require("utils/navigation");
var OpenNebulaCluster = require("./cluster");
OpenNebulaHelper = require("./helper"),
OpenNebulaError = require("./error");
OpenNebulaCluster = require("./cluster"),
Locale = require("utils/locale"),
Config = require("sunstone-config"),
Navigation = require("utils/navigation");
var RESOURCE = "VM";
@ -921,35 +921,21 @@ define(function(require) {
// returns true if the vnc button should be enabled
function isVNCSupported(element) {
var rtn = false;
if(element && element.TEMPLATE && element.TEMPLATE.GRAPHICS && element.LCM_STATE){
var graphics = element.TEMPLATE.GRAPHICS;
var state = parseInt(element.LCM_STATE);
rtn = graphics &&
graphics.TYPE &&
graphics.TYPE.toLowerCase() == "vnc" &&
$.inArray(state, VNC_STATES) != -1;
}
return rtn;
return (Config.isTabActionEnabled("vms-tab", "VM.startvnc") && graphicSupported(element, "vnc"))
? true : false;
}
function isSPICESupported(element) {
var rtn = false;
if(element && element.TEMPLATE && element.TEMPLATE.GRAPHICS && element.LCM_STATE){
var graphics = element.TEMPLATE.GRAPHICS;
var state = parseInt(element.LCM_STATE);
rtn = graphics &&
graphics.TYPE &&
graphics.TYPE.toLowerCase() == "spice" &&
$.inArray(state, VNC_STATES) != -1;
}
return rtn;
return (Config.isTabActionEnabled("vms-tab", "VM.startspice") && graphicSupported(element, "spice"))
? true : false;
}
function isWFileSupported(element) {
// spice/vnc is assumed to be supported
var history = retrieveLastHistoryRecord(element);
return (history)
return (
Config.isTabActionEnabled("vms-tab", "VM.save_virt_viewer") && history &&
(graphicSupported(element, "vnc") || graphicSupported(element, "spice"))
)
? {
hostname: history.HOSTNAME,
type: element.TEMPLATE.GRAPHICS.TYPE.toLowerCase(),
@ -961,12 +947,14 @@ define(function(require) {
// returns true if the RDP button should be enabled
function isRDPSupported(element) {
var hasRdp = false;
if (element.TEMPLATE && element.TEMPLATE.NIC && element.LCM_STATE) {
if (
Config.isTabActionEnabled("vms-tab", "VM.save_rdp") &&
element && element.TEMPLATE && element.TEMPLATE.GRAPHICS && element.LCM_STATE
) {
var template = element.TEMPLATE;
var state = parseInt(element.LCM_STATE);
if ($.inArray(state, RDP_STATES) != -1) {
if ($.inArray(state, RDP_STATES) != -1 && template.NIC) {
hasRdp = hasRDP(template.NIC);
if (!hasRdp && template.NIC_ALIAS) {
@ -991,6 +979,19 @@ define(function(require) {
return activated;
}
function graphicSupported(element, type) {
var rtn = false;
if (element && element.TEMPLATE && element.TEMPLATE.GRAPHICS && element.LCM_STATE) {
var graphics = element.TEMPLATE.GRAPHICS;
var state = parseInt(element.LCM_STATE);
rtn = graphics &&
graphics.TYPE &&
graphics.TYPE.toLowerCase() == type &&
$.inArray(state, VNC_STATES) != -1;
}
return rtn;
}
function buttonVnc(id = "") {
return '<button class="vnc remote_vm" data-id="' + id + '">\
<i class="fas fa-desktop"></i></button>';

View File

@ -41,7 +41,7 @@
<span id="{{customId}}refresh_buttons" class=" only-sunstone-info only-sunstone-list"></span>
</span>
<span>
<button type='button' data-toggle='{{customId}}vmsremote_buttons' class='only-sunstone-info top_button button dropdown'>
<button type='button' id="vmsremote_buttons" data-toggle='{{customId}}vmsremote_buttons' class='only-sunstone-info top_button button dropdown'>
<i class='fas fa-desktop'/>
</button>
<ul id='{{customId}}vmsremote_buttons' class='only-sunstone-info dropdown-pane menu vertical' data-dropdown></ul>

View File

@ -244,22 +244,19 @@ define(function(require) {
ips = OpenNebulaVM.ipsStr(data.VM);
var wFile = false, rdp = false;
if (OpenNebulaVM.isVNCSupported(data.VM)) {
actions += OpenNebulaVM.buttonVnc(id);
wFile = OpenNebulaVM.isWFileSupported(data.VM);
}
else if (OpenNebulaVM.isSPICESupported(data.VM)) {
actions += OpenNebulaVM.buttonSpice(id);
wFile = OpenNebulaVM.isWFileSupported(data.VM);
}
var wFile = OpenNebulaVM.isWFileSupported(data.VM);
if (wFile) {
actions += OpenNebulaVM.buttonWFile(id, wFile);
}
rdp = OpenNebulaVM.isRDPSupported(data.VM);
var rdp = OpenNebulaVM.isRDPSupported(data.VM);
if (rdp) {
actions += OpenNebulaVM.buttonRDP(rdp.IP, data.VM);
}

View File

@ -41,30 +41,34 @@ define(function(require) {
StateActions.disableAllStateActions();
StateActions.enableStateActions(element.STATE, element.LCM_STATE);
var isWFileSupported = false;
if (OpenNebulaVM.isVNCSupported(element)) {
var isVNCSupported = OpenNebulaVM.isVNCSupported(element),
isSPICESupported = OpenNebulaVM.isSPICESupported(element),
isWFileSupported = OpenNebulaVM.isWFileSupported(element),
isRDPSupported = OpenNebulaVM.isRDPSupported(element);
if (isVNCSupported) {
$(".vnc-sunstone-info").show();
$(".spice-sunstone-info").hide();
isWFileSupported = OpenNebulaVM.isWFileSupported(element);
}
else if (OpenNebulaVM.isSPICESupported(element)) {
else if (isSPICESupported) {
$(".spice-sunstone-info").show();
$(".vnc-sunstone-info").hide();
isWFileSupported = OpenNebulaVM.isWFileSupported(element);
}
else {
$(".spice-sunstone-info").hide();
$(".vnc-sunstone-info").hide();
}
(isWFileSupported)
? $(".vv-sunstone-info").show()
: $(".vv-sunstone-info").hide();
// Enable / disable virt-viewer button
isWFileSupported ? $(".vv-sunstone-info").show() : $(".vv-sunstone-info").hide();
// Enable / disable rdp button
(OpenNebulaVM.isRDPSupported(element))
? $(".rdp-sunstone-info").show()
: $(".rdp-sunstone-info").hide();
isRDPSupported ? $(".rdp-sunstone-info").show() : $(".rdp-sunstone-info").hide();
// All remote buttons are disabled
if (!isVNCSupported && !isSPICESupported && !isWFileSupported && !isRDPSupported) {
$("#vmsremote_buttons").hide()
}
if(config &&
config["system_config"] &&

View File

@ -193,19 +193,18 @@ define(function(require) {
? OpenNebulaVM.shortLcmStateStr(element.LCM_STATE)
: OpenNebulaVM.stateStr(element.STATE);
var actions = "", wFile = false;
var actions = "";
// VNC/SPICE icon
if (OpenNebulaVM.isVNCSupported(element)) {
actions += OpenNebulaVM.buttonVnc(element.ID);
wFile = OpenNebulaVM.isWFileSupported(element);
}
else if (OpenNebulaVM.isSPICESupported(element)) {
actions += OpenNebulaVM.buttonSpice(element.ID);
wFile = OpenNebulaVM.isWFileSupported(element);
}
// virt-viewer file icon
wFile = OpenNebulaVM.isWFileSupported(element);
wFile && (actions += OpenNebulaVM.buttonWFile(element.ID, wFile));
if(config &&