From 430729bf92d86f8e67d436ea893bd6d1acf8b2a9 Mon Sep 17 00:00:00 2001 From: Sergio Betanzos Date: Mon, 8 Feb 2021 13:31:28 +0100 Subject: [PATCH] B #5233: Fix alias ips in service role datatable (#767) --- src/sunstone/public/app/opennebula/vm.js | 141 ++++++++---------- .../tabs/oneflow-services-tab/panels/roles.js | 7 +- .../public/app/tabs/provision-tab/vms/list.js | 57 +------ .../public/app/tabs/vms-tab/datatable.js | 8 +- .../public/app/tabs/vms-tab/panels/info.js | 9 +- .../app/tabs/vms-tab/panels/info/html.hbs | 8 - 6 files changed, 70 insertions(+), 160 deletions(-) diff --git a/src/sunstone/public/app/opennebula/vm.js b/src/sunstone/public/app/opennebula/vm.js index 186a3138e2..f191fa0371 100644 --- a/src/sunstone/public/app/opennebula/vm.js +++ b/src/sunstone/public/app/opennebula/vm.js @@ -672,7 +672,6 @@ define(function(require) { "ipsStr": ipsStr, "ipsDropdown": ipsDropdown, "groupByIpsStr": groupByIpsStr, - "aliasStr": aliasStr, "retrieveExternalIPs": retrieveExternalIPs, "retrieveExternalNetworkAttrs": retrieveExternalNetworkAttrs, "isNICGraphsSupported": isNICGraphsSupported, @@ -788,12 +787,19 @@ define(function(require) { return nics; } - // Return the IP or several IPs of a VM - function ipsStr(element, divider, groupStrFunction) { - var divider = divider || "
"; + // Return the IP or several IPs of a VM + function ipsStr(element, options) { + options = $.extend({ + defaultValue: '--', + divider: '
', + groupStrFunction: groupByIpsStr, + forceGroup: false + }, options) + var nics = getNICs(element); - var ips = []; var monitoring = element && element.MONITORING; + var ips = []; + if (monitoring) { var externalIP; $.each(EXTERNAL_IP_ATTRS, function(index, IPAttr) { @@ -810,46 +816,39 @@ define(function(require) { } // infoextended: alias will be group by nic - return Config.isExtendedVmInfo - ? (groupStrFunction !== null && typeof groupStrFunction === "function"? groupStrFunction(element, nics) : groupByIpsStr(element, nics)) - : (ips.length == 0 && nics && nics.length > 0) - ? $.map(nics, function(nic) { - if (nic["IP"]) { - return nic["IP"]; - } - else{ - var ipv6 = ""; - if (nic["IP6_ULA"]){ - ipv6 += nic["IP6_ULA"]; - } - if (nic["IP6_GLOBAL"]){ - ipv6 = (ipv6 == "") ? "" : ipv6 + "
"; - ipv6 += nic["IP6_GLOBAL"]; - } - return ipv6; - } - }).join(divider) - : "--"; + if (Config.isExtendedVmInfo || options.forceGroup) { + return options.groupStrFunction(element, nics) + } + + return (ips.length === 0 && nics && nics.length > 0) ? ( + $.map(nics, function(nic) { + return $.map(NIC_ALIAS_IP_ATTRS, function(attribute) { + return nic[attribute] + }) + }).join(options.divider) + ) : ( + options.defaultValue + ) }; // Return a dropdown with all the function ipsDropdown(element, divider) { - var ipsStr = this.ipsStr(element,divider,groupByIpsDropdown); - var ips = ipsStr.split("
"); + var ipsHtml = this.ipsStr(element, { divider, groupStrFunction: groupByIpsDropdown }); + var ips = ipsHtml.split("
"); var html = ""; // If its generated by groupByIpsDropdown - if (~ipsStr.indexOf("li")){ + if (~ipsHtml.indexOf("li")){ ips = []; - $.each($.parseHTML(ipsStr), function( index ) { + $.each($.parseHTML(ipsHtml), function() { ips.push($( this ).text()); }); - ipsStr = ""; + ipsHtml = ""; } // If it has less than "numIPs" IPs var numIPs = 2; - if ((ips.length < numIPs)) return ipsStr; + if ((ips.length < numIPs)) return ipsHtml; // Take the first x insideHtml = ""; @@ -903,10 +902,12 @@ define(function(require) { }; function groupByIpsStr(element = {}, nics = []) { - identation = "    "; + var identation = "    "; + return nics.reduce(function(column, nic) { - var ip = (nic.IP) ? nic.IP : nic.IP6_ULA + "
" + identation + nic.IP6_GLOBAL; - var nicSection = $("

").css("margin-bottom", 0).html(nic.NIC_ID + ": " + ip); + var ip = nic.IP || nic.IP6_ULA + "
" + identation + nic.IP6_GLOBAL + + column.append($("

").css("margin-bottom", 0).html(nic.NIC_ID + ": " + ip)) if (nic.ALIAS_IDS) { @@ -916,66 +917,42 @@ define(function(require) { var alias = templateAlias.find(function(alias) { return alias.NIC_ID === aliasId; }); if (alias) { - var alias_ip = alias.IP ? alias.IP : alias.IP6_ULA + "
" + identation + "> " + alias.IP6_GLOBAL; - nicSection.append($("

").css({ + var alias_ip = alias.IP + ? identation + "> " + alias.IP + : alias.IP6_ULA + "
" + identation + "> " + alias.IP6_GLOBAL; + + column.append($("

").css({ "margin-bottom": 0, "font-style": "italic", - }).html(identation + "> " + alias_ip)); } + }).html(alias_ip)); } }); } - return column.append(nicSection); + return column; }, $("

")).html(); }; - // Return the Alias or several Aliases of a VM - function aliasStr(element, divider) { - var divider = divider || "
"; - var nic_alias = element.TEMPLATE.NIC_ALIAS; - var ips = []; + function isVNCSupported(element = {}) { + var actionEnabled = Config.isTabActionEnabled('vms-tab', 'VM.startvnc') + var vncSupported = graphicSupported(element, 'vnc') - if (nic_alias == undefined){ - nic_alias = []; - } - - if (!$.isArray(nic_alias)) { - nic_alias = [nic_alias]; - } - - if(ips.length==0) { - $.each(nic_alias, function(index, value) { - $.each(NIC_ALIAS_IP_ATTRS, function(j, attr){ - if (value[attr]) { - ips.push(value[attr]); - } - }); - }); - } - - if (ips.length > 0) { - return ips.join(divider); - } else { - return "--"; - } - }; - - // returns true if the vnc button should be enabled - function isVNCSupported(element) { - return (Config.isTabActionEnabled("vms-tab", "VM.startvnc") && graphicSupported(element, "vnc")) - ? true : false; + return actionEnabled && vncSupported } - function isSPICESupported(element) { - return (Config.isTabActionEnabled("vms-tab", "VM.startspice") && graphicSupported(element, "spice")) - ? true : false; + function isSPICESupported(element = {}) { + var actionEnabled = Config.isTabActionEnabled('vms-tab', 'VM.startspice') + var spiceSupported = graphicSupported(element, 'spice') + + return actionEnabled && spiceSupported } - function isWFileSupported(element) { + function isWFileSupported(element = {}) { var history = retrieveLastHistoryRecord(element); - return ( - Config.isTabActionEnabled("vms-tab", "VM.save_virt_viewer") && history && - (graphicSupported(element, "vnc") || graphicSupported(element, "spice")) - ) + var actionEnabled = Config.isTabActionEnabled("vms-tab", "VM.save_virt_viewer") + var vncSupported = graphicSupported(element, 'vnc') + var spiceSupported = graphicSupported(element, 'spice') + + return (actionEnabled && history && (vncSupported || spiceSupported)) ? { hostname: history.HOSTNAME, type: element.TEMPLATE.GRAPHICS.TYPE.toLowerCase(), @@ -1026,8 +1003,8 @@ define(function(require) { var state = parseInt(element.LCM_STATE); rtn = graphics && graphics.TYPE && - graphics.TYPE.toLowerCase() == type && - $.inArray(state, VNC_STATES) != -1; + graphics.TYPE.toLowerCase() === type && + $.inArray(state, VNC_STATES) !== -1; } return rtn; } diff --git a/src/sunstone/public/app/tabs/oneflow-services-tab/panels/roles.js b/src/sunstone/public/app/tabs/oneflow-services-tab/panels/roles.js index 2534be806b..3b093bfc32 100644 --- a/src/sunstone/public/app/tabs/oneflow-services-tab/panels/roles.js +++ b/src/sunstone/public/app/tabs/oneflow-services-tab/panels/roles.js @@ -26,12 +26,9 @@ define(function(require) { var roles_vm_buttons = require('./roles/roles-vm-buttons'); var Sunstone = require('sunstone'); var DomDataTable = require('utils/dom-datatable'); - var VMsTableUtils = require('tabs/vms-tab/utils/datatable-common'); - var SunstoneConfig = require('sunstone-config'); var Vnc = require('utils/vnc'); var Spice = require('utils/spice'); var Notifier = require('utils/notifier'); - var OpenNebulaAction = require("opennebula/action"); var OpenNebulaVM = require("opennebula/vm"); var VMS_TAB_ID = require('tabs/vms-tab/tabId'); @@ -224,7 +221,7 @@ define(function(require) { : '' } - ips = OpenNebulaVM.ipsStr(data.VM); + ips = OpenNebulaVM.ipsStr(data.VM, { forceGroup: true }); if (OpenNebulaVM.isVNCSupported(data.VM)) { actions += OpenNebulaVM.buttonVnc(id); @@ -251,7 +248,9 @@ define(function(require) { if (that.serviceroleVMsDataTable) { that.serviceroleVMsDataTable.updateView(null, roleVms, true); } + that.remoteButtonSetup(context); + Tips.setup(context); }); diff --git a/src/sunstone/public/app/tabs/provision-tab/vms/list.js b/src/sunstone/public/app/tabs/provision-tab/vms/list.js index 6aff36fae8..12d08c624c 100644 --- a/src/sunstone/public/app/tabs/provision-tab/vms/list.js +++ b/src/sunstone/public/app/tabs/provision-tab/vms/list.js @@ -1017,56 +1017,11 @@ define(function(require) { } function get_provision_ips(data) { - return " " + OpenNebula.VM.ipsStr(data, ", "); - } - - // @params - // data: and IMAGE object - // Example: data.ID - // @returns and object containing the following properties - // color: css class for this state. - // color + '-color' font color class - // color + '-bg' background class - // str: user friendly state string - function get_provision_image_state(data) { - var state = OpenNebula.Image.stateStr(data.STATE); - var state_color; - var state_str; - - switch (state) { - case "READY": - case "USED": - state_color = "running"; - state_str = Locale.tr("READY"); - break; - case "DISABLED": - case "USED_PERS": - state_color = "off"; - state_str = Locale.tr("OFF"); - break; - case "LOCKED": - case "CLONE": - case "INIT": - state_color = "deploying"; - state_str = Locale.tr("DEPLOYING") + " (1/3)"; - break; - case "ERROR": - state_color = "error"; - state_str = Locale.tr("ERROR"); - break; - case "DELETE": - state_color = "error"; - state_str = Locale.tr("DELETING"); - break; - default: - state_color = "powering_off"; - state_str = Locale.tr("UNKNOWN"); - break; - } - - return { - color: state_color, - str: state_str - }; + return ( + "
" + + "" + + "
" + OpenNebula.VM.ipsStr(data, { divider: ", " }) + "
" + + "
" + ); } }); diff --git a/src/sunstone/public/app/tabs/vms-tab/datatable.js b/src/sunstone/public/app/tabs/vms-tab/datatable.js index 2bdd6724d0..056092bb62 100644 --- a/src/sunstone/public/app/tabs/vms-tab/datatable.js +++ b/src/sunstone/public/app/tabs/vms-tab/datatable.js @@ -22,7 +22,6 @@ define(function(require) { var TabDataTable = require('utils/tab-datatable'); var VMsTableUtils = require('./utils/datatable-common'); var OpenNebulaVM = require('opennebula/vm'); - var OpenNebulaAction = require("opennebula/action"); var SunstoneConfig = require('sunstone-config'); var Locale = require('utils/locale'); var StateActions = require('./utils/state-actions'); @@ -32,7 +31,6 @@ define(function(require) { var Notifier = require('utils/notifier'); var DashboardUtils = require('utils/dashboard'); var SearchDropdown = require('hbs!./datatable/search'); - var TemplateUtils = require('utils/template-utils'); /* CONSTANTS @@ -235,16 +233,12 @@ define(function(require) { // Enable actions available to any of the selected VMs var nodes = $('tr', that.dataTable); //visible nodes only - $.each($('input.check_item:checked', nodes), function(){ + $.each($('input.check_item:checked', nodes), function() { StateActions.enableStateActions($(this).attr("state"), $(this).attr("lcm_state")); }); - } return true; }); - } - - }); diff --git a/src/sunstone/public/app/tabs/vms-tab/panels/info.js b/src/sunstone/public/app/tabs/vms-tab/panels/info.js index eb82445f60..cce24d0aed 100644 --- a/src/sunstone/public/app/tabs/vms-tab/panels/info.js +++ b/src/sunstone/public/app/tabs/vms-tab/panels/info.js @@ -74,13 +74,7 @@ define(function(require) { var hostnameHTML = OpenNebula.VM.hostnameStrLink(this.element); var vrouterHTML = "--"; - var IP = OpenNebula.VM.ipsStr(this.element); - - var alias = ( - config.system_config && - config.system_config.get_extended_vm_info && - config.system_config.get_extended_vm_info === "true" - ) ? null : OpenNebula.VM.aliasStr(this.element); + var IP = OpenNebula.VM.ipsStr(this.element, { forceGroup: true }); if (this.element.TEMPLATE.VROUTER_ID != undefined){ vrouterHTML = Navigation.link( @@ -135,7 +129,6 @@ define(function(require) { "prettyStartTime": prettyStartTime, "deployId": deployId, "IP": IP, - "alias": alias, "resched": resched, "permissionsTableHTML": permissionsTableHTML, "templateTableVcenterHTML": templateTableVcenterHTML, diff --git a/src/sunstone/public/app/tabs/vms-tab/panels/info/html.hbs b/src/sunstone/public/app/tabs/vms-tab/panels/info/html.hbs index f49fc8e22d..c7ccd7984c 100644 --- a/src/sunstone/public/app/tabs/vms-tab/panels/info/html.hbs +++ b/src/sunstone/public/app/tabs/vms-tab/panels/info/html.hbs @@ -53,14 +53,6 @@ - {{#if alias }} - - {{tr "Alias"}} - {{{alias}}} - - - {{/if }} - {{tr "Start time"}} {{prettyStartTime}}