From 508992f8b7f0b02aa01cd809c1ac4f1a9e059a5f Mon Sep 17 00:00:00 2001 From: Frederick Borges Date: Thu, 10 Mar 2022 11:36:33 +0100 Subject: [PATCH] B #5707: Check host VM_MAD to show VirtViewer connection (#1832) --- src/sunstone/public/app/opennebula/action.js | 3 ++- src/sunstone/public/app/opennebula/host.js | 4 ++-- src/sunstone/public/app/opennebula/vm.js | 25 ++++++++++++++++---- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/sunstone/public/app/opennebula/action.js b/src/sunstone/public/app/opennebula/action.js index e07e28945c..5c700a5963 100644 --- a/src/sunstone/public/app/opennebula/action.js +++ b/src/sunstone/public/app/opennebula/action.js @@ -297,7 +297,7 @@ define(function(require) { }); }, - "show": function(params, resource, subresource, path) { + "show": function(params, resource, subresource, path, async = true) { var callback = params.success; var callbackError = params.error; var id = params.data.id; @@ -314,6 +314,7 @@ define(function(require) { type: "GET", dataType: "json", data: data, + async: async, success: function(response) { return callback ? callback(request, response) : null; }, diff --git a/src/sunstone/public/app/opennebula/host.js b/src/sunstone/public/app/opennebula/host.js index 13ebf437ca..bb408a25cf 100644 --- a/src/sunstone/public/app/opennebula/host.js +++ b/src/sunstone/public/app/opennebula/host.js @@ -94,8 +94,8 @@ define(function(require) { "list_in_zone" : function(params) { OpenNebulaAction.list_in_zone(params, RESOURCE); }, - "show": function(params) { - OpenNebulaAction.show(params, RESOURCE); + "show": function(params, async = true) { + OpenNebulaAction.show(params, RESOURCE, null, null, async); }, "update": function(params) { var action_obj = {"template_raw" : params.data.extra_param}; diff --git a/src/sunstone/public/app/opennebula/vm.js b/src/sunstone/public/app/opennebula/vm.js index 90b19097b3..ec0eb93462 100644 --- a/src/sunstone/public/app/opennebula/vm.js +++ b/src/sunstone/public/app/opennebula/vm.js @@ -22,7 +22,9 @@ define(function(require) { OpenNebulaDS = require("./datastore"), Locale = require("utils/locale"), Config = require("sunstone-config"), - Navigation = require("utils/navigation"); + Navigation = require("utils/navigation"), + OpenNebulaHost = require('opennebula/host'); + var RESOURCE = "VM"; var VM_MONITORING_CACHE_NAME = "VM.MONITORING"; @@ -1247,9 +1249,22 @@ define(function(require) { String(element.USER_TEMPLATE.HYPERVISOR).toLowerCase() === "vcenter"); } - function isKVMVM(element = {}){ - return Boolean(element.USER_TEMPLATE && - String(element.USER_TEMPLATE.HYPERVISOR).toLowerCase() === "kvm"); + function isKVMVM(hostID){ + var isKVM = false; + OpenNebulaHost.show({ + data : { + id: hostID + }, + timeout: true, + success: function (_, hostTemplate) { + isKVM = String(hostTemplate.HOST.VM_MAD).toLowerCase() === 'kvm'; + }, + error: function(request, response) { + isKVM = false; + }}, + false + ); + return isKVM; } function isVMRCSupported(element = {}) { @@ -1271,7 +1286,7 @@ define(function(require) { var actionEnabled = Config.isTabActionEnabled("vms-tab", "VM.save_virt_viewer"); var vncSupported = graphicSupported(element, "vnc"); var spiceSupported = graphicSupported(element, "spice"); - var isKVM = isKVMVM(element); + var isKVM = history.HID ? isKVMVM(history.HID) : false; return (actionEnabled && history && (vncSupported || spiceSupported) && isKVM) ? {