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

M #~: Refactor the info tab on resource view (#1091)

(cherry picked from commit a4a7173868d78a86ef9b8b0e88a817f5c714dbc1)
This commit is contained in:
Sergio Betanzos 2021-04-12 14:16:07 +02:00 committed by Ruben S. Montero
parent e7baf0c3fa
commit b44d880f7f
No known key found for this signature in database
GPG Key ID: A0CEA6FA880A1D87
26 changed files with 524 additions and 746 deletions

View File

@ -19,13 +19,18 @@ define(function(require) {
DEPENDENCIES
*/
var TemplateHTML = require("hbs!./info/html");
var Locale = require("utils/locale");
var RenameTr = require("utils/panel/rename-tr");
var TemplateTable = require("utils/panel/template-table");
var Sunstone = require("sunstone");
var TemplateTable = require("utils/panel/template-table");
var TemplateUtils = require("utils/template-utils");
/*
TEMPLATES
*/
var TemplateHTML = require("hbs!./info/html");
/*
CONSTANTS
*/
@ -34,34 +39,17 @@ define(function(require) {
var PANEL_ID = require("./info/panelId");
var RESOURCE = "Cluster";
var XML_ROOT = "CLUSTER";
var OVERCOMMIT_DIALOG_ID = require("utils/dialogs/overcommit/dialogId");
var REGEX_HIDDEN_ATTRS = /^(HOST|RESERVED_CPU|RESERVED_MEM)$/
/*
CONSTRUCTOR
*/
function Panel(info) {
var that = this;
this.title = Locale.tr("Info");
this.icon = "fa-info-circle";
this.element = info[XML_ROOT];
this.percent = false;
// Hide information in the template table. Unshow values are stored
// in the unshownTemplate object to be used when the element info is updated.
that.unshownTemplate = {};
that.strippedTemplate = {};
var unshownKeys = ["HOST", "RESERVED_CPU", "RESERVED_MEM"];
$.each(that.element.TEMPLATE, function(key, value) {
if ($.inArray(key, unshownKeys) > -1) {
that.unshownTemplate[key] = value;
} else {
that.strippedTemplate[key] = value;
}
});
this.percent = false;
return this;
}
@ -77,30 +65,23 @@ define(function(require) {
*/
function _html() {
var renameTrHTML = RenameTr.html(TAB_ID, RESOURCE, this.element.NAME);
var templateTableHTML = TemplateTable.html(
this.strippedTemplate,
RESOURCE,
Locale.tr("Attributes"));
var reservedMem;
var reservedMemInput;
if (this.element.TEMPLATE.RESERVED_MEM != "0%" && this.element.TEMPLATE.RESERVED_MEM != ""){
reservedMem = parseInt(this.element.TEMPLATE.RESERVED_MEM);
reservedMemInput = this.element.TEMPLATE.RESERVED_MEM;
} else {
reservedMem = 0;
reservedMemInput = "0%";
}
var TEMPLATE = this.element.TEMPLATE
var reservedCPU;
var reservedCPUInput;
if (this.element.TEMPLATE.RESERVED_CPU != "0%" && this.element.TEMPLATE.RESERVED_CPU != ""){
reservedCPU = parseInt(this.element.TEMPLATE.RESERVED_CPU);
reservedCPUInput = this.element.TEMPLATE.RESERVED_CPU;
} else {
reservedCPU = 0;
reservedCPUInput = "0%";
}
var renameTrHTML = RenameTr.html(TAB_ID, RESOURCE, this.element.NAME);
var attributes = TemplateTable.getTemplatesAttributes(TEMPLATE, {
regexHidden: REGEX_HIDDEN_ATTRS
})
var templateTableHTML = TemplateTable.html(attributes.general, RESOURCE, Locale.tr('Attributes'));
var hasReservedMem = TEMPLATE.RESERVED_MEM !== '0%' && TEMPLATE.RESERVED_MEM !== '';
var reservedMem = hasReservedMem ? parseInt(TEMPLATE.RESERVED_MEM) : 0;
var reservedMemInput = hasReservedMem ? TEMPLATE.RESERVED_MEM : '0%';
var hasReservedCpu = TEMPLATE.RESERVED_CPU !== '0%' && TEMPLATE.RESERVED_CPU !== '';
var reservedCPU = hasReservedCpu ? parseInt(TEMPLATE.RESERVED_CPU) : 0;
var reservedCPUInput = hasReservedCpu ? TEMPLATE.RESERVED_CPU : '0%';
return TemplateHTML({
"element": this.element,
@ -115,22 +96,20 @@ define(function(require) {
function changeBarColorCPU(){
var cpuValue = parseInt($("#change_bar_cpu").val());
if (cpuValue > 0){
$("#textInput_reserved_cpu").css("background-color", "rgba(111, 220, 111, 0.5)");
}
if (cpuValue < 0){
if (cpuValue > 0) {
$("#textInput_reserved_cpu").css("background-color", "rgba(111, 220, 111, 0.5)");
} else if (cpuValue < 0) {
$("#textInput_reserved_cpu").css("background-color", "rgba(255, 80, 80,0.5)");
}
}
function changeBarColorMEM(){
var memValue = parseInt($("#change_bar_mem").val());
if (memValue > 0){
$("#textInput_reserved_mem").css("background-color", "rgba(111, 220, 111, 0.5)");
}
if (memValue < 0){
if (memValue > 0) {
$("#textInput_reserved_mem").css("background-color", "rgba(111, 220, 111, 0.5)");
} else if (memValue < 0) {
$("#textInput_reserved_mem").css("background-color", "rgba(255, 80, 80,0.5)");
}
}
@ -160,7 +139,11 @@ define(function(require) {
RenameTr.setup(TAB_ID, RESOURCE, this.element.ID, context);
TemplateTable.setup(this.strippedTemplate, RESOURCE, this.element.ID, context, this.unshownTemplate);
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexHidden: REGEX_HIDDEN_ATTRS
})
TemplateTable.setup(attributes.general, RESOURCE, this.element.ID, context, attributes.hidden);
changeBarColorCPU();
changeBarColorMEM();
@ -170,7 +153,9 @@ define(function(require) {
document.getElementById("change_bar_mem").addEventListener("input", changeBarMEM);
document.getElementById("textInput_reserved_mem").addEventListener("input", changeInputMEM);
$(document).off("click", ".update_reserved").on("click", ".update_reserved", function(){
$(document)
.off("click", ".update_reserved")
.on("click", ".update_reserved", function() {
var reservedCPU = document.getElementById("textInput_reserved_cpu").value;
var reservedMem = document.getElementById("textInput_reserved_mem").value;

View File

@ -19,15 +19,14 @@ define(function(require) {
DEPENDENCIES
*/
var Locale = require('utils/locale');
var DatastoreCapacityBar = require('../utils/datastore-capacity-bar');
var Humanize = require('utils/humanize');
var Locale = require('utils/locale');
var OpenNebulaDatastore = require('opennebula/datastore');
var PermissionsTable = require('utils/panel/permissions-table');
var RenameTr = require('utils/panel/rename-tr');
var TemplateTable = require('utils/panel/template-table');
var TemplateTableVcenter = require('utils/panel/template-table');
var PermissionsTable = require('utils/panel/permissions-table');
var OpenNebulaDatastore = require('opennebula/datastore');
var DatastoreCapacityBar = require('../utils/datastore-capacity-bar');
/*
TEMPLATES
*/
@ -41,6 +40,7 @@ define(function(require) {
var TAB_ID = require('../tabId');
var PANEL_ID = require('./info/panelId');
var RESOURCE = "Datastore"
var REGEX_VCENTER_ATTRS = /^VCENTER_(?!(HOST|USER|PASSWORD|DS_IMAGE_DIR|DS_VOLATILE_DIR)$)/
/*
CONSTRUCTOR
@ -68,23 +68,12 @@ define(function(require) {
function _html() {
var renameTrHTML = RenameTr.html(TAB_ID, RESOURCE, this.element.NAME);
var strippedTemplate = {};
var strippedTemplateVcenter = {};
$.each(this.element.TEMPLATE, function(key, value) {
if (!key.match(/^VCENTER_HOST$/) &&
!key.match(/^VCENTER_USER$/) &&
!key.match(/^VCENTER_PASSWORD$/) &&
!key.match(/^VCENTER_DS_IMAGE_DIR$/) &&
!key.match(/^VCENTER_DS_VOLATILE_DIR$/) &&
key.match(/^VCENTER_*/)){
strippedTemplateVcenter[key] = value;
}
else {
strippedTemplate[key] = value;
}
});
var templateTableHTML = TemplateTable.html(strippedTemplate, RESOURCE, Locale.tr("Attributes"), true);
var templateTableVcenterHTML = TemplateTableVcenter.html(strippedTemplateVcenter, RESOURCE, Locale.tr("vCenter information"), false);
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexVCenter: REGEX_VCENTER_ATTRS
})
var templateTableHTML = TemplateTable.html(attributes.general, RESOURCE, Locale.tr("Attributes"));
var templateTableVcenterHTML = TemplateTable.html(attributes.vcenter, RESOURCE, Locale.tr("vCenter information"));
var permissionsTableHTML = PermissionsTable.html(TAB_ID, RESOURCE, this.element);
var capacityBar = DatastoreCapacityBar.html(this.element);
var stateStr = OpenNebulaDatastore.stateStr(this.element.STATE);
@ -110,29 +99,21 @@ define(function(require) {
function _setup(context) {
RenameTr.setup(TAB_ID, RESOURCE, this.element.ID, context);
var strippedTemplate = {};
var strippedTemplateVcenter = {};
$.each(this.element.TEMPLATE, function(key, value) {
if (!key.match(/^VCENTER_HOST$/) &&
!key.match(/^VCENTER_USER$/) &&
!key.match(/^VCENTER_PASSWORD$/) &&
!key.match(/^VCENTER_DS_IMAGE_DIR$/) &&
!key.match(/^VCENTER_DS_VOLATILE_DIR$/) &&
key.match(/^VCENTER_*/)){
strippedTemplateVcenter[key] = value;
}
else {
strippedTemplate[key] = value;
}
});
if($.isEmptyObject(strippedTemplateVcenter)){
PermissionsTable.setup(TAB_ID, RESOURCE, this.element, context);
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexVCenter: REGEX_VCENTER_ATTRS
})
if ($.isEmptyObject(attributes.vcenter)) {
$('.vcenter', context).hide();
}
TemplateTable.setup(strippedTemplate, RESOURCE, this.element.ID, context, undefined, strippedTemplateVcenter);
TemplateTableVcenter.setup(strippedTemplateVcenter, RESOURCE, this.element.ID, context, undefined, strippedTemplate);
// General Attributes section
TemplateTable.setup(attributes.general, RESOURCE, this.element.ID, context, undefined, attributes.vcenter);
// vCenter Attributes section
TemplateTable.setup(attributes.vcenter, RESOURCE, this.element.ID, context, undefined, attributes.general);
PermissionsTable.setup(TAB_ID, RESOURCE, this.element, context);
return false;
}
});

View File

@ -19,16 +19,16 @@ define(function(require) {
DEPENDENCIES
*/
var TemplateInfo = require("hbs!./info/html");
var Locale = require("utils/locale");
var Views = require("../utils/views");
var TemplateTable = require("utils/panel/template-table");
var Tips = require("utils/tips");
var Views = require("../utils/views");
/*
TEMPLATES
*/
var TemplateTable = require("utils/panel/template-table");
var TemplateInfo = require("hbs!./info/html");
/*
CONSTANTS
@ -38,6 +38,7 @@ define(function(require) {
var PANEL_ID = require("./info/panelId");
var RESOURCE = "Group";
var XML_ROOT = "GROUP";
var REGEX_HIDDEN_ATTRS = /^(SUNSTONE|OPENNEBULA|TABLE_DEFAULT_PAGE_LENGTH)$/
/*
CONSTRUCTOR
@ -76,14 +77,12 @@ define(function(require) {
sunstone_template.DEFAULT_VIEW);
}
// TODO: simplify interface?
var strippedTemplate = $.extend({}, this.element.TEMPLATE);
delete strippedTemplate["SUNSTONE"];
delete strippedTemplate["OPENNEBULA"];
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexHidden: REGEX_HIDDEN_ATTRS
})
var templateTableHTML = TemplateTable.html(strippedTemplate, RESOURCE,
Locale.tr("Attributes"));
//====
var templateTableHTML = TemplateTable.html(attributes.general, RESOURCE, Locale.tr("Attributes"));
return TemplateInfo({
"element": this.element,
@ -94,33 +93,13 @@ define(function(require) {
}
function _setup(context) {
var that = this;
Tips.setup(context);
// Template update
// TODO: simplify interface?
var hiddenKeys = [
"SUNSTONE",
"TABLE_DEFAULT_PAGE_LENGTH",
"OPENNEBULA"];
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexHidden: REGEX_HIDDEN_ATTRS
})
var strippedTemplate = $.extend({}, this.element.TEMPLATE);
$.each(hiddenKeys, function(i, key){
delete strippedTemplate[key];
});
var hiddenValues = {};
$.each(hiddenKeys, function(i, key){
if (that.element.TEMPLATE[key] != undefined){
hiddenValues[key] = that.element.TEMPLATE[key];
}
});
TemplateTable.setup(strippedTemplate, RESOURCE, this.element.ID, context, hiddenValues);
//===
TemplateTable.setup(attributes.general, RESOURCE, this.element.ID, context, attributes.hidden);
return false;
}

View File

@ -49,7 +49,7 @@ define(function(require) {
this.element = info[RESOURCE.toUpperCase()];
// Do not create an instance of this panel if no vcenter hypervisor
if (this.element.TEMPLATE.HYPERVISOR != "vcenter") {
if (this.element.TEMPLATE.HYPERVISOR !== "vcenter") {
throw "Panel not available for this element";
}

View File

@ -17,26 +17,26 @@ define(function(require) {
/*
DEPENDENCIES
*/
require("foundation");
var Locale = require("utils/locale");
var Humanize = require("utils/humanize");
var RenameTr = require("utils/panel/rename-tr");
var TemplateTable = require("utils/panel/template-table");
var TemplateTableVcenter = require("utils/panel/template-table");
var PermissionsTable = require("utils/panel/permissions-table");
var ClusterTr = require("utils/panel/cluster-tr");
var OpenNebulaHost = require("opennebula/host");
var CPUBars = require("../utils/cpu-bars");
var MemoryBars = require("../utils/memory-bars");
var Reserved = require("../utils/reserved");
var DatastoresCapacityTable = require("../utils/datastores-capacity-table");
var CanImportWilds = require("../utils/can-import-wilds");
var Sunstone = require("sunstone");
var TemplateUtils = require("utils/template-utils");
var CapacityTable = require("utils/custom-tags-table");
var ClusterTr = require("utils/panel/cluster-tr");
var CPUBars = require("../utils/cpu-bars");
var DatastoresCapacityTable = require("../utils/datastores-capacity-table");
var EC2Tr = require("utils/panel/ec2-tr");
var OpenNebulaAction = require("opennebula/action");
var Humanize = require("utils/humanize");
var Locale = require("utils/locale");
var MemoryBars = require("../utils/memory-bars");
var Notifier = require("utils/notifier");
var OpenNebulaAction = require("opennebula/action");
var OpenNebulaHost = require("opennebula/host");
var PermissionsTable = require("utils/panel/permissions-table");
var RenameTr = require("utils/panel/rename-tr");
var Reserved = require("../utils/reserved");
var Sunstone = require("sunstone");
var TemplateTable = require("utils/panel/template-table");
var TemplateUtils = require("utils/template-utils");
/*
TEMPLATES
@ -52,43 +52,20 @@ define(function(require) {
var PANEL_ID = require("./info/panelId");
var RESOURCE = "Host";
var XML_ROOT = "HOST";
var OVERCOMMIT_DIALOG_ID = require("utils/dialogs/overcommit/dialogId");
var REGEX_VCENTER_ATTRS = /^VCENTER_(?!(RESOURCE_POOL)$)/
var REGEX_NSX_ATTRS = /^NSX_/
var REGEX_HIDDEN_ATTRS = /^(HOST|VM|WILDS|ZOMBIES|RESERVED_CPU|RESERVER_MEM|EC2_ACCESS|EC2_SECRET|CAPACITY|REGION_NAME)$/
/*
CONSTRUCTOR
*/
function Panel(info) {
var that = this;
that.title = Locale.tr("Info");
that.icon = "fa-info-circle";
this.title = Locale.tr("Info");
this.icon = "fa-info-circle";
that.element = info[XML_ROOT];
that.canImportWilds = CanImportWilds(that.element);
// Hide information of the Wild VMs of the Host and the ESX Hosts
// in the template table. Unshow values are stored in the unshownTemplate
// object to be used when the host info is updated.
that.unshownTemplate = {};
that.strippedTemplateVcenter = {};
that.strippedTemplateNSX = {};
that.strippedTemplate = {};
var unshownKeys = ["HOST", "VM", "WILDS", "ZOMBIES", "RESERVED_CPU", "RESERVED_MEM", "EC2_ACCESS", "EC2_SECRET", "CAPACITY", "REGION_NAME"];
$.each(that.element.TEMPLATE, function(key, value) {
if ($.inArray(key, unshownKeys) > -1) {
that.unshownTemplate[key] = value;
}
else if (!key.match(/^VCENTER_RESOURCE_POOL$/) && key.match(/^VCENTER_*/)){
that.strippedTemplateVcenter[key] = value;
}
else if (key.match(/^NSX_*/)){
that.strippedTemplateNSX[key] = value;
}
else {
that.strippedTemplate[key] = value;
}
});
this.element = info[XML_ROOT];
this.canImportWilds = CanImportWilds(this.element);
return this;
};
@ -102,30 +79,35 @@ define(function(require) {
/*
FUNCTION DEFINITIONS
*/
function _html() {
var cache = OpenNebulaAction.cache("CLUSTER");
if (!cache){
if (!cache) {
Sunstone.runAction("Cluster.list");
cache = OpenNebulaAction.cache("CLUSTER");
}
var elementAux = Reserved.updateHostTemplate(cache, this.element);
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexVCenter: REGEX_VCENTER_ATTRS,
regexNSX: REGEX_NSX_ATTRS,
regexHidden: REGEX_HIDDEN_ATTRS,
})
var templateTableHTML = TemplateTable.html(attributes.general, RESOURCE, Locale.tr("Attributes"));
var templateTableVcenterHTML = TemplateTable.html(attributes.vcenter, RESOURCE, Locale.tr("vCenter information"));
var templateTableHTML = TemplateTable.html(
this.strippedTemplate,
RESOURCE,
Locale.tr("Attributes"));
var templateTableVcenterHTML = TemplateTableVcenter.html(
this.strippedTemplateVcenter,
RESOURCE,
Locale.tr("vCenter information"),false);
var renameTrHTML = RenameTr.html(TAB_ID, RESOURCE, this.element.NAME);
var clusterTrHTML = ClusterTr.html(this.element.CLUSTER);
var permissionsTableHTML = PermissionsTable.html(TAB_ID, RESOURCE, this.element);
var cpuBars = CPUBars.html(elementAux);
var memoryBars = MemoryBars.html(elementAux);
var datastoresCapacityTableHTML = DatastoresCapacityTable.html(this.element);
var realCPU = parseInt(this.element.HOST_SHARE.TOTAL_CPU,10);
var realMEM = parseInt(this.element.HOST_SHARE.TOTAL_MEM,10);
var realCPU = parseInt(this.element.HOST_SHARE.TOTAL_CPU, 10);
var realMEM = parseInt(this.element.HOST_SHARE.TOTAL_MEM, 10);
return TemplateInfo({
"element": this.element,
@ -149,29 +131,31 @@ define(function(require) {
}
function changeInputCPU(maxCPU){
if($("#textInput_reserved_cpu_hosts").val() === ""){
if ($("#textInput_reserved_cpu_hosts").val() === "") {
$("#change_bar_cpu_hosts").val(0);
$("#textInput_reserved_cpu_hosts").val("");
} else {
$("#change_bar_cpu_hosts").val(parseInt($("#textInput_reserved_cpu_hosts").val()));
}
changeColorInputCPU(maxCPU);
}
function changeInputMEM(maxMEM){
if($("#textInput_reserved_mem_hosts").val() === ""){
if ($("#textInput_reserved_mem_hosts").val() === "") {
$("#change_bar_mem_hosts").val(0);
} else {
$("#change_bar_mem_hosts").val(Humanize.sizeToMB($("#textInput_reserved_mem_hosts").val())*1024);
$("#change_bar_mem_hosts").val(Humanize.sizeToMB($("#textInput_reserved_mem_hosts").val()) * 1024);
}
changeColorInputMEM(maxMEM);
}
function changeColorInputCPU(maxCPU){
if (parseInt($("#change_bar_cpu_hosts").val()) > parseInt(maxCPU)){
if (parseInt($("#change_bar_cpu_hosts").val()) > parseInt(maxCPU)) {
$("#textInput_reserved_cpu_hosts").css("background-color", "rgba(111, 220, 111, 0.5)");
}
else if (parseInt($("#change_bar_cpu_hosts").val()) < parseInt(maxCPU)){
else if (parseInt($("#change_bar_cpu_hosts").val()) < parseInt(maxCPU)) {
$("#textInput_reserved_cpu_hosts").css("background-color", "rgba(255, 80, 80, 0.5)");
} else {
$("#textInput_reserved_cpu_hosts").css("background-color", "white");
@ -179,10 +163,10 @@ define(function(require) {
}
function changeColorInputMEM(maxMEM){
if (parseInt($("#change_bar_mem_hosts").val()) > parseInt(maxMEM)){
if (parseInt($("#change_bar_mem_hosts").val()) > parseInt(maxMEM)) {
$("#textInput_reserved_mem_hosts").css("background-color", "rgba(111, 220, 111, 0.5)");
}
else if (parseInt($("#change_bar_mem_hosts").val()) < parseInt(maxMEM)){
else if (parseInt($("#change_bar_mem_hosts").val()) < parseInt(maxMEM)) {
$("#textInput_reserved_mem_hosts").css("background-color", "rgba(255, 80, 80, 0.5)");
} else {
$("#textInput_reserved_mem_hosts").css("background-color", "white");
@ -191,24 +175,35 @@ define(function(require) {
function _setup(context) {
var that = this;
$(".ec2", context).show();
RenameTr.setup(TAB_ID, RESOURCE, this.element.ID, context);
ClusterTr.setup(RESOURCE, this.element.ID, this.element.CLUSTER_ID, context);
PermissionsTable.setup(TAB_ID, RESOURCE, this.element, context);
TemplateTable.setup(this.strippedTemplate, RESOURCE, this.element.ID, context, this.unshownTemplate, this.strippedTemplateVcenter);
TemplateTableVcenter.setup(this.strippedTemplateVcenter, RESOURCE, this.element.ID, context, this.unshownTemplate, this.strippedTemplate);
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexVCenter: REGEX_VCENTER_ATTRS,
regexNSX: REGEX_NSX_ATTRS,
regexHidden: REGEX_HIDDEN_ATTRS
});
PermissionsTable.setup(TAB_ID, RESOURCE, this.element, context);
if($.isEmptyObject(this.strippedTemplateVcenter)){
if ($.isEmptyObject(attributes.vcenter)) {
$(".vcenter", context).hide();
}
// General Attributes section
TemplateTable.setup(attributes.general, RESOURCE, this.element.ID, context, attributes.hidden, attributes.vcenter);
// vCenter Attributes section
TemplateTable.setup(attributes.vcenter, RESOURCE, this.element.ID, context, attributes.hidden, attributes.general);
//.off and .on prevent multiple clicks events
$(context).off("click", "#update_reserved_hosts").on("click", "#update_reserved_hosts", function(){
$(context).off("click", "#update_reserved_hosts")
$(context).on("click", "#update_reserved_hosts", function() {
var CPU = that && that.element && that.element.HOST_SHARE && that.element.HOST_SHARE.TOTAL_CPU;
var MEMORY = that && that.element && that.element.HOST_SHARE && that.element.HOST_SHARE.TOTAL_MEM;
if(CPU && MEMORY){
if(CPU && MEMORY) {
$("#update_reserved_hosts", context).prop("disabled", true);
var reservedCPU = parseInt($("#textInput_reserved_cpu_hosts", context).val(),10);
var inputNumber = Humanize.sizeToMB($("#textInput_reserved_mem_hosts").val());
@ -232,13 +227,15 @@ define(function(require) {
var slider = $("#change_bar_cpu_hosts", context);
var min = slider.attr("min");
var max = slider.attr("max");
if(parseInt(element.val(),10) >= parseInt(min, 10) && parseInt(element.val(),10) <= parseInt(max, 10)){
if (parseInt(element.val(), 10) >= parseInt(min, 10) && parseInt(element.val(), 10) <= parseInt(max, 10)) {
slider.prop("disabled", false);
slider.attr("value", element.val());
}else{
if(parseInt(element.val(),10) <= parseInt(min, 10)){
} else {
if (parseInt(element.val(), 10) <= parseInt(min, 10)) {
Notifier.notifyError(Locale.tr("it must not be a negative number"));
}
slider.attr("value", element.attr("mid"));
slider.prop("disabled", true);
}
@ -255,19 +252,24 @@ define(function(require) {
});
$("#update_reserved_hosts", context).prop("disabled", false);
CapacityTable.setup(context, true, RESOURCE, this.element.TEMPLATE, this.element.ID);
EC2Tr.setup(RESOURCE, this.element.ID, context);
CapacityTable.fill(context, this.element.TEMPLATE.CAPACITY);
$(".change_to_vector_attribute", context).hide();
$(".custom_tag_value", context).focusout(function(){
var key = $(".custom_tag_key", this.parentElement.parentElement).val();
if (!that.element.TEMPLATE.CAPACITY){
if (!that.element.TEMPLATE.CAPACITY) {
that.element.TEMPLATE.CAPACITY = {};
}
that.element.TEMPLATE.CAPACITY[key] = this.value;
Sunstone.runAction(RESOURCE + ".update_template", that.element.ID, TemplateUtils.templateToString(that.element.TEMPLATE));
});
if (this.element.TEMPLATE.IM_MAD != "ec2"){
if (this.element.TEMPLATE.IM_MAD !== "ec2") {
$(".ec2", context).hide();
}
}

View File

@ -17,49 +17,58 @@ define(function(require) {
/*
DEPENDENCIES
*/
var Locale = require('utils/locale');
var ResourcePoolCards = require("../utils/cards");
/*
TEMPLATES
*/
var TemplatePool = require('hbs!./pool/html');
/*
CONSTANTS
*/
var PANEL_ID = require('./pool/panelId');
var RESOURCE = "Host"
var RESOURCE = "HOST"
/*
CONSTRUCTOR
*/
function Panel(info) {
var self = this;
this.title = Locale.tr("POOL");
this.icon = "fa-server";
this.element = info[RESOURCE.toUpperCase()];
this.element = info[RESOURCE];
// Do not create an instance of this panel if no vcenter hypervisor
// porque el hypervisor proviene de la monitorizacion de por si no esta en el template
if(this.element && this.element.TEMPLATE && this.element.TEMPLATE.HYPERVISOR){
if(this.element.TEMPLATE.HYPERVISOR != "vcenter"){
if (this.element && this.element.TEMPLATE && this.element.TEMPLATE.HYPERVISOR) {
if (this.element.TEMPLATE.HYPERVISOR !== "vcenter") {
throw "Panel not available for this element";
}
}else{
} else {
throw "Panel not available for this element";
}
return this;
};
Panel.PANEL_ID = PANEL_ID;
Panel.prototype.html = _html;
Panel.prototype.setup = _setup;
return Panel;
/*
FUNCTION DEFINITIONS
*/
function _html() {
return TemplatePool({
"resourcePoolCards": ResourcePoolCards.html(this.element)
});
}
function _setup(context) {
}
function _setup(context) {}
})

View File

@ -16,8 +16,8 @@
{{#each resourcePools}}
<div class="column">
<ul class="provision-pricing-table menu vertical">
<li class="">
<a class="top_button button">
<li>
<a class="button">
{{resourcePoolName}}
</a>
</li>

View File

@ -19,14 +19,14 @@ define(function(require) {
DEPENDENCIES
*/
var Locale = require('utils/locale');
var Humanize = require('utils/humanize');
var RenameTr = require('utils/panel/rename-tr');
var TemplateTable = require('utils/panel/template-table');
var PermissionsTable = require('utils/panel/permissions-table');
var OpenNebulaImage = require('opennebula/image');
var Config = require('sunstone-config');
var Humanize = require('utils/humanize');
var Locale = require('utils/locale');
var OpenNebulaImage = require('opennebula/image');
var PermissionsTable = require('utils/panel/permissions-table');
var RenameTr = require('utils/panel/rename-tr');
var Sunstone = require('sunstone');
var TemplateTable = require('utils/panel/template-table');
/*
TEMPLATES

View File

@ -25,7 +25,6 @@ define(function(require) {
var TemplateTable = require('utils/panel/template-table');
var PermissionsTable = require('utils/panel/permissions-table');
var OpenNebulaMarketPlaceApp = require('opennebula/marketplaceapp');
var Sunstone = require('sunstone');
/*
TEMPLATES
@ -41,6 +40,7 @@ define(function(require) {
var PANEL_ID = require('./info/panelId');
var RESOURCE = "MarketPlaceApp"
var XML_ROOT = "MARKETPLACEAPP"
var REGEX_HIDDEN_ATTRS = /^(VMTEMPLATE64|APPTEMPLATE64)$/
/*
CONSTRUCTOR
@ -65,15 +65,12 @@ define(function(require) {
FUNCTION DEFINITIONS
*/
function _html() {
var strippedTemplate = $.extend({}, this.element.TEMPLATE);
delete strippedTemplate["VMTEMPLATE64"];
delete strippedTemplate["APPTEMPLATE64"];
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexHidden: REGEX_HIDDEN_ATTRS
})
var templateTableHTML = TemplateTable.html(
strippedTemplate, RESOURCE,
Locale.tr("Attributes"));
var templateTableHTML = TemplateTable.html(attributes.general, RESOURCE, Locale.tr("Attributes"));
var renameTrHTML = RenameTr.html(TAB_ID, RESOURCE, this.element.NAME);
var permissionsTableHTML = PermissionsTable.html(TAB_ID, RESOURCE, this.element);
@ -82,7 +79,6 @@ define(function(require) {
var typeStr = OpenNebulaMarketPlaceApp.typeStr(this.element.TYPE);
var sizeStr = Humanize.sizeFromMB(this.element.SIZE);
return TemplateInfo({
'element': this.element,
'renameTrHTML': renameTrHTML,
@ -96,23 +92,15 @@ define(function(require) {
}
function _setup(context) {
var strippedTemplate = $.extend({}, this.element.TEMPLATE);
delete strippedTemplate["VMTEMPLATE64"];
delete strippedTemplate["APPTEMPLATE64"];
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexHidden: REGEX_HIDDEN_ATTRS
})
var hiddenValues = {};
if (this.element.TEMPLATE.VMTEMPLATE64 !== undefined) {
hiddenValues.VMTEMPLATE64 = this.element.TEMPLATE.VMTEMPLATE64;
}
if (this.element.TEMPLATE.APPTEMPLATE64 !== undefined) {
hiddenValues.APPTEMPLATE64 = this.element.TEMPLATE.APPTEMPLATE64;
}
TemplateTable.setup(strippedTemplate, RESOURCE, this.element.ID, context, hiddenValues);
TemplateTable.setup(attributes.general, RESOURCE, this.element.ID, context, attributes.hidden);
RenameTr.setup(TAB_ID, RESOURCE, this.element.ID, context);
PermissionsTable.setup(TAB_ID, RESOURCE, this.element, context);
return false;
}
});

View File

@ -19,12 +19,11 @@ define(function(require) {
DEPENDENCIES
*/
var DatastoreCapacityBar = require('tabs/datastores-tab/utils/datastore-capacity-bar');
var Locale = require('utils/locale');
var Humanize = require('utils/humanize');
var PermissionsTable = require('utils/panel/permissions-table');
var RenameTr = require('utils/panel/rename-tr');
var TemplateTable = require('utils/panel/template-table');
var PermissionsTable = require('utils/panel/permissions-table');
var DatastoreCapacityBar = require('tabs/datastores-tab/utils/datastore-capacity-bar');
/*
TEMPLATES
@ -66,9 +65,7 @@ define(function(require) {
function _html() {
var renameTrHTML = RenameTr.html(TAB_ID, RESOURCE, this.element.NAME);
var templateTableHTML = TemplateTable.html(
this.element.TEMPLATE, RESOURCE,
Locale.tr("Attributes"));
var templateTableHTML = TemplateTable.html(this.element.TEMPLATE, RESOURCE, Locale.tr("Attributes"));
var permissionsTableHTML = PermissionsTable.html(TAB_ID, RESOURCE, this.element);
var capacityBar = DatastoreCapacityBar.html(this.element);

View File

@ -19,11 +19,11 @@ define(function(require) {
DEPENDENCIES
*/
var Locale = require('utils/locale');
var RenameTr = require('utils/panel/rename-tr');
var PermissionsTable = require('utils/panel/permissions-table');
var OpenNebulaService = require('opennebula/service');
var Humanize = require('utils/humanize');
var Locale = require('utils/locale');
var OpenNebulaService = require('opennebula/service');
var PermissionsTable = require('utils/panel/permissions-table');
var RenameTr = require('utils/panel/rename-tr');
/*
TEMPLATES

View File

@ -19,10 +19,10 @@ define(function(require) {
DEPENDENCIES
*/
var Locale = require('utils/locale');
var Humanize = require('utils/humanize');
var RenameTr = require('utils/panel/rename-tr');
var Locale = require('utils/locale');
var PermissionsTable = require('utils/panel/permissions-table');
var RenameTr = require('utils/panel/rename-tr');
/*
TEMPLATES

View File

@ -40,6 +40,7 @@ define(function(require) {
var PANEL_ID = require('./info/panelId');
var RESOURCE = "SecurityGroup";
var XML_ROOT = "SECURITY_GROUP";
var REGEX_HIDDEN_ATTRS = /^(RULE)$/
/*
CONSTRUCTOR
@ -72,17 +73,15 @@ define(function(require) {
var ruleTextList = [];
$.each(rules, function(){
$.each(rules, function() {
ruleTextList.push(Utils.sgRuleToSt(this));
});
// TODO: simplify interface?
var strippedTemplate = $.extend({}, this.element.TEMPLATE);
delete strippedTemplate["RULE"];
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexHidden: REGEX_HIDDEN_ATTRS
})
var templateTableHTML = TemplateTable.html(strippedTemplate, RESOURCE,
Locale.tr("Attributes"));
//====
var templateTableHTML = TemplateTable.html(attributes.general, RESOURCE, Locale.tr("Attributes"));
return TemplateInfo({
'element': this.element,
@ -97,14 +96,11 @@ define(function(require) {
RenameTr.setup(TAB_ID, RESOURCE, this.element.ID, context);
PermissionsTable.setup(TAB_ID, RESOURCE, this.element, context);
// TODO: simplify interface?
var strippedTemplate = $.extend({}, this.element.TEMPLATE);
delete strippedTemplate["RULE"];
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexHidden: REGEX_HIDDEN_ATTRS
})
var hiddenValues = {RULE: this.element.TEMPLATE.RULE};
TemplateTable.setup(strippedTemplate, RESOURCE, this.element.ID, context, hiddenValues);
//===
TemplateTable.setup(attributes.general, RESOURCE, this.element.ID, context, attributes.hidden);
return false;
}

View File

@ -20,6 +20,11 @@ define(function(require) {
*/
var Sunstone = require('sunstone');
/*
CONSTANTS
*/
var TemplateInfo = require('hbs!./info/html');
/*

View File

@ -19,10 +19,10 @@ define(function(require) {
DEPENDENCIES
*/
var Locale = require('utils/locale');
var Humanize = require('utils/humanize');
var RenameTr = require('utils/panel/rename-tr');
var Locale = require('utils/locale');
var PermissionsTable = require('utils/panel/permissions-table');
var RenameTr = require('utils/panel/rename-tr');
/*
TEMPLATES

View File

@ -17,26 +17,25 @@
define(function(require) {
/* DEPENDENCIES */
var TemplateInfo = require('hbs!./auth/html');
var ResourceSelect = require('utils/resource-select');
var TemplateUtils = require('utils/template-utils');
var Locale = require('utils/locale');
var OpenNebulaUser = require('opennebula/user');
var Sunstone = require('sunstone');
var UserCreation = require('tabs/users-tab/utils/user-creation');
/* TEMPLATES */
var TemplateTable = require('utils/panel/template-table');
var TemplateUtils = require('utils/template-utils');
var UserCreation = require('tabs/users-tab/utils/user-creation');
/* TEMPLATES */
var TemplateInfo = require('hbs!./auth/html');
/* CONSTANTS */
var RESOURCE = "User";
var XML_ROOT = "USER";
var PASSWORD_DIALOG_ID = require('tabs/users-tab/dialogs/password/dialogId');
var LOGIN_TOKEN_DIALOG_ID = require('tabs/users-tab/dialogs/login-token/dialogId');
var TWO_FACTOR_AUTH_DIALOG_ID = require('tabs/users-tab/dialogs/two-factor-auth/dialogId');
var CONFIRM_DIALOG_ID = require('utils/dialogs/generic-confirm/dialogId');
var RESOURCE = "User";
var XML_ROOT = "USER";
var REGEX_HIDDEN_ATTRS = /^(SUNSTONE|SSH_PUBLIC_KEY)$/
/* CONSTRUCTOR */
@ -56,16 +55,11 @@ define(function(require) {
/* FUNCTION DEFINITIONS */
function _html() {
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexHidden: REGEX_HIDDEN_ATTRS
})
// TODO: simplify interface?
var strippedTemplate = $.extend({}, this.element.TEMPLATE);
delete strippedTemplate["SSH_PUBLIC_KEY"];
delete strippedTemplate["SUNSTONE"];
var templateTableHTML = TemplateTable.html(strippedTemplate, RESOURCE,
Locale.tr("Attributes"));
//====
var templateTableHTML = TemplateTable.html(attributes.general, RESOURCE, Locale.tr("Attributes"));
return TemplateInfo({
'element': this.element,
@ -78,23 +72,12 @@ define(function(require) {
function _setup(context) {
var that = this;
this.userCreation.setup(context);
// Template update
// TODO: simplify interface?
var strippedTemplate = $.extend({}, this.element.TEMPLATE);
delete strippedTemplate["SSH_PUBLIC_KEY"];
delete strippedTemplate["SUNSTONE"];
var hiddenValues = {};
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexHidden: REGEX_HIDDEN_ATTRS
})
if (this.element.TEMPLATE.SSH_PUBLIC_KEY != undefined) {
hiddenValues.SSH_PUBLIC_KEY = this.element.TEMPLATE.SSH_PUBLIC_KEY;
}
if (this.element.TEMPLATE.SUNSTONE != undefined) {
hiddenValues.SUNSTONE = this.element.TEMPLATE.SUNSTONE;
}
TemplateTable.setup(strippedTemplate, RESOURCE, this.element.ID, context, hiddenValues);
//===
TemplateTable.setup(attributes.general, RESOURCE, this.element.ID, context, attributes.hidden);
// Change two factor auth
if (that.element.ID == config['user_id']) {

View File

@ -19,21 +19,18 @@ define(function(require) {
DEPENDENCIES
*/
var TemplateInfo = require("hbs!./info/html");
var ResourceSelect = require("utils/resource-select");
var TemplateUtils = require("utils/template-utils");
var Locale = require("utils/locale");
var OpenNebulaUser = require("opennebula/user");
var Sunstone = require("sunstone");
var UserCreation = require("tabs/users-tab/utils/user-creation");
var OpenNebula = require('opennebula');
var Notifier = require('utils/notifier');
var OpenNebula = require('opennebula');
var Sunstone = require("sunstone");
var TemplateTable = require("utils/panel/template-table");
var UserCreation = require("tabs/users-tab/utils/user-creation");
/*
TEMPLATES
*/
var TemplateTable = require("utils/panel/template-table");
var TemplateInfo = require("hbs!./info/html");
/*
CONSTANTS
@ -41,9 +38,7 @@ define(function(require) {
var RESOURCE = "User";
var XML_ROOT = "USER";
var PASSWORD_DIALOG_ID = require("tabs/users-tab/dialogs/password/dialogId");
var LOGIN_TOKEN_DIALOG_ID = require("tabs/users-tab/dialogs/login-token/dialogId");
var CONFIRM_DIALOG_ID = require("utils/dialogs/generic-confirm/dialogId");
var REGEX_HIDDEN_ATTRS = /^(SSH_PUBLIC_KEY|SUNSTONE|FIREEDGE)$/
/*
CONSTRUCTOR
@ -54,7 +49,11 @@ define(function(require) {
this.icon = "fa-info-circle";
this.element = info[XML_ROOT];
this.userCreation = new UserCreation(this.tabId, {name: false, password: false, group_select: false});
this.userCreation = new UserCreation(
this.tabId,
{ name: false, password: false, group_select: false }
);
return this;
}
@ -68,45 +67,32 @@ define(function(require) {
*/
function _html() {
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexHidden: REGEX_HIDDEN_ATTRS
})
// TODO: simplify interface?
var strippedTemplate = $.extend({}, this.element.TEMPLATE);
delete strippedTemplate["SSH_PUBLIC_KEY"];
delete strippedTemplate["SUNSTONE"];
var templateTableHTML = TemplateTable.html(attributes.general, RESOURCE, Locale.tr("Attributes"));
var templateTableHTML = TemplateTable.html(strippedTemplate, RESOURCE,
Locale.tr("Attributes"));
//====
render = TemplateInfo({
return TemplateInfo({
"element": this.element,
"enabled": (this.element.ENABLED == 1 ? Locale.tr("Yes") : Locale.tr("No")),
"enabled": this.element.ENABLED == 1 ? Locale.tr("Yes") : Locale.tr("No"),
"sunstone_template": this.element.TEMPLATE.SUNSTONE || {},
"templateTableHTML": templateTableHTML,
"tabId": this.tabId,
"userCreationHTML": this.userCreation.html()
});
return render;
}
function _setup(context) {
var that = this;
this.userCreation.setup(context);
// Template update
// TODO: simplify interface?
var strippedTemplate = $.extend({}, this.element.TEMPLATE);
delete strippedTemplate["SSH_PUBLIC_KEY"];
delete strippedTemplate["SUNSTONE"];
var hiddenValues = {};
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexHidden: REGEX_HIDDEN_ATTRS
})
if (this.element.TEMPLATE.SSH_PUBLIC_KEY != undefined) {
hiddenValues.SSH_PUBLIC_KEY = this.element.TEMPLATE.SSH_PUBLIC_KEY;
}
if (this.element.TEMPLATE.SUNSTONE != undefined) {
hiddenValues.SUNSTONE = this.element.TEMPLATE.SUNSTONE;
}
TemplateTable.setup(strippedTemplate, RESOURCE, this.element.ID, context, hiddenValues);
TemplateTable.setup(attributes.general, RESOURCE, this.element.ID, context, attributes.hidden);
// Change table Order
context.off("click", "#div_edit_table_order");

View File

@ -19,10 +19,15 @@ define(function(require) {
DEPENDENCIES
*/
var TemplateHTML = require('hbs!./info/html');
var Locale = require('utils/locale');
var RenameTr = require('utils/panel/rename-tr');
var TemplateTable = require('utils/panel/template-table');
/*
TEMPLATES
*/
var TemplateHTML = require('hbs!./info/html');
/*
CONSTANTS
@ -40,7 +45,6 @@ define(function(require) {
function Panel(info) {
this.title = Locale.tr("Info");
this.icon = "fa-info-circle";
this.element = info[XML_ROOT];
return this;
@ -58,8 +62,7 @@ define(function(require) {
function _html() {
var renameTrHTML = RenameTr.html(TAB_ID, RESOURCE, this.element.NAME);
var templateTableHTML = TemplateTable.html(this.element.TEMPLATE, RESOURCE,
Locale.tr("Attributes"));
var templateTableHTML = TemplateTable.html(this.element.TEMPLATE, RESOURCE, Locale.tr("Attributes"));
return TemplateHTML({
'element': this.element,
@ -70,7 +73,6 @@ define(function(require) {
function _setup(context) {
RenameTr.setup(TAB_ID, RESOURCE, this.element.ID, context);
TemplateTable.setup(this.element.TEMPLATE, RESOURCE, this.element.ID, context);
}
});

View File

@ -15,34 +15,26 @@
/* -------------------------------------------------------------------------- */
define(function(require) {
/*
DEPENDENCIES
*/
/* DEPENDENCIES */
var TemplateInfo = require('hbs!./info/html');
var Locale = require('utils/locale');
var OpenNebulaVMGroup= require('opennebula/vmgroup');
var PermissionsTable = require('utils/panel/permissions-table');
var Utils = require('../utils/common');
/*
TEMPLATES
*/
var TemplateTable = require('utils/panel/template-table');
var Utils = require('../utils/common');
/* TEMPLATES */
var TemplateInfo = require('hbs!./info/html');
/*
CONSTANTS
*/
/* CONSTANTS */
var TAB_ID = require('../tabId');
var PANEL_ID = require('./info/panelId');
var RESOURCE = "VMGroup";
var XML_ROOT = "VM_GROUP";
var REGEX_HIDDEN_ATTRS = /^(ROLE)$/
/*
CONSTRUCTOR
*/
/* CONSTRUCTOR */
function Panel(info) {
this.title = Locale.tr("Info");
@ -59,24 +51,20 @@ define(function(require) {
return Panel;
/*
FUNCTION DEFINITIONS
*/
/* FUNCTION DEFINITIONS */
function _html() {
//var renameTrHTML = RenameTr.html(TAB_ID, RESOURCE, this.element.NAME);
var roles = Utils.getRoles(this.element);
var groupRoles = Utils.getGroupRoles(this.element);
var permissionsTableHTML = PermissionsTable.html(TAB_ID, RESOURCE, this.element);
var roleTextList = [];
var roleAffinityTextList = [];
if(Array.isArray(roles["ROLE"])){
if (Array.isArray(roles["ROLE"])) {
$.each(roles["ROLE"], function(){
roleTextList.push(Utils.sgRoleToSt(this));
});
}else{
} else {
$.each(roles, function(){
roleTextList.push(Utils.sgRoleToSt(this));
});
@ -88,13 +76,11 @@ define(function(require) {
roleAffinityTextList.push(text);
});
// TODO: simplify interface?
var strippedTemplate = $.extend({}, this.element.TEMPLATE);
delete strippedTemplate["ROLE"];
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexHidden: REGEX_HIDDEN_ATTRS
})
var templateTableHTML = TemplateTable.html(strippedTemplate, RESOURCE,
Locale.tr("Attributes"));
//====
var templateTableHTML = TemplateTable.html(attributes.general, RESOURCE, Locale.tr("Attributes"));
return TemplateInfo({
'element': this.element,
@ -107,13 +93,14 @@ define(function(require) {
function _setup(context) {
PermissionsTable.setup(TAB_ID, RESOURCE, this.element, context);
var strippedTemplate = $.extend({}, this.element.TEMPLATE);
delete strippedTemplate["ROLE"];
var hiddenValues = {ROLE: this.element.ROLE};
var hiddenAttributes = { ROLE: this.element.ROLE };
TemplateTable.setup(strippedTemplate, RESOURCE, this.element.ID, context, hiddenValues);
//===
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexHidden: REGEX_HIDDEN_ATTRS
})
TemplateTable.setup(attributes.general, RESOURCE, this.element.ID, context, hiddenAttributes);
return false;
}

View File

@ -19,16 +19,15 @@ define(function(require) {
DEPENDENCIES
*/
var Locale = require("utils/locale");
var Humanize = require("utils/humanize");
var RenameTr = require("utils/panel/rename-tr");
var PermissionsTable = require("utils/panel/permissions-table");
var TemplateTable = require("utils/panel/template-table");
var TemplateTableVcenter = require("utils/panel/template-table");
var OpenNebula = require("opennebula");
var Locale = require("utils/locale");
var Navigation = require("utils/navigation");
var TemplateUtils = require('utils/template-utils');
var OpenNebula = require("opennebula");
var PermissionsTable = require("utils/panel/permissions-table");
var RenameTr = require("utils/panel/rename-tr");
var Sunstone = require('sunstone');
var TemplateTable = require("utils/panel/template-table");
var TemplateUtils = require('utils/template-utils');
/*
TEMPLATES
@ -44,6 +43,9 @@ define(function(require) {
var PANEL_ID = require("./info/panelId");
var RESOURCE = "VM";
var XML_ROOT = "VM";
var REGEX_VCENTER_ATTRS = /^VCENTER_/
// Get rid of the unwanted (for show) SCHED_* keys
var REGEX_HIDDEN_ATTRS = /^(USER_INPUTS|BACKUP)$|SCHED_|ERROR/
/*
CONSTRUCTOR
@ -53,6 +55,7 @@ define(function(require) {
this.title = Locale.tr("Info");
this.icon = "fa-info-circle";
this.element = info[XML_ROOT];
return this;
}
@ -76,42 +79,30 @@ define(function(require) {
var lcmStateStr = OpenNebula.VM.lcmStateStr(this.element.LCM_STATE);
var lcmStateClass = OpenNebula.VM.lcmStateClass(this.element.LCM_STATE);
var hostnameHTML = OpenNebula.VM.hostnameStrLink(this.element);
var vrouterHTML = "--";
var IP = OpenNebula.VM.ipsStr(this.element, { forceGroup: true });
var vrouterHTML = "--";
if (this.element.TEMPLATE.VROUTER_ID != undefined){
vrouterHTML = Navigation.link(
OpenNebula.VirtualRouter.getName(this.element.TEMPLATE.VROUTER_ID),
"vrouters-tab", this.element.TEMPLATE.VROUTER_ID);
"vrouters-tab", this.element.TEMPLATE.VROUTER_ID
);
}
var deployId = (typeof(this.element.DEPLOY_ID) == "object" ? "--" : this.element.DEPLOY_ID);
var resched = (parseInt(this.element.RESCHED) ? Locale.tr("yes") : Locale.tr("no"));
// Get rid of the unwanted (for show) SCHED_* keys
var that = this;
var strippedTemplate = {};
var strippedTemplateVcenter = {};
var unshownValues = {};
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexVCenter: REGEX_VCENTER_ATTRS,
regexHidden: REGEX_HIDDEN_ATTRS
})
$.each(that.element.USER_TEMPLATE, function(key, value) {
if (key.match(/^SCHED_*/) || key.match(/^ERROR/) || key == "USER_INPUTS" || key == "BACKUP") {
unshownValues[key] = value;
}
else if (key.match(/^VCENTER_*/)){
strippedTemplateVcenter[key] = value;
}
else {
strippedTemplate[key] = value;
}
});
var templateTableHTML = TemplateTable.html(strippedTemplate, RESOURCE, Locale.tr("Attributes"), true);
var templateTableVcenterHTML = TemplateTableVcenter.html(strippedTemplateVcenter, RESOURCE, Locale.tr("vCenter information"), false);
var templateTableHTML = TemplateTable.html(attributes.general, RESOURCE, Locale.tr("Attributes"));
var templateTableVcenterHTML = TemplateTable.html(attributes.vcenter, RESOURCE, Locale.tr("vCenter information"));
var monitoring = $.extend({}, this.element.MONITORING);
delete monitoring.CPU;
delete monitoring.MEMORY;
delete monitoring.NETTX;
@ -119,10 +110,8 @@ define(function(require) {
delete monitoring.STATE;
delete monitoring.DISK_SIZE;
delete monitoring.SNAPSHOT_SIZE;
var monitoringTableContentHTML;
if (!$.isEmptyObject(monitoring)) {
monitoringTableContentHTML = Humanize.prettyPrintJSON(monitoring);
}
var monitoringTableContentHTML = !$.isEmptyObject(monitoring) && Humanize.prettyPrintJSON(monitoring);
var errorMessageHTML = ""
if (this.element &&
@ -173,29 +162,24 @@ define(function(require) {
}
function _setup(context) {
var that = this;
RenameTr.setup(TAB_ID, RESOURCE, this.element.ID, context);
PermissionsTable.setup(TAB_ID, RESOURCE, this.element, context);
// Get rid of the unwanted (for show) SCHED_* keys
var that = this;
var strippedTemplate = {};
var strippedTemplateVcenter = {};
var unshownValues = {};
$.each(that.element.USER_TEMPLATE, function(key, value) {
if (key.match(/^SCHED_*/) || key.match(/^ERROR/) || key == "USER_INPUTS") {
unshownValues[key] = value;
}
else if (key.match(/^VCENTER_*/)){
strippedTemplateVcenter[key] = value;
}
else {
strippedTemplate[key] = value;
}
});
if($.isEmptyObject(strippedTemplateVcenter)){
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexVCenter: REGEX_VCENTER_ATTRS,
regexHidden: REGEX_HIDDEN_ATTRS
})
if($.isEmptyObject(attributes.vcenter)){
$(".vcenter", context).hide();
}
TemplateTable.setup(strippedTemplate, RESOURCE, this.element.ID, context, unshownValues, strippedTemplateVcenter);
TemplateTableVcenter.setup(strippedTemplateVcenter, RESOURCE, this.element.ID, context, unshownValues, strippedTemplate);
// General Attributes section
TemplateTable.setup(attributes.general, RESOURCE, this.element.ID, context, attributes.hidden, attributes.vcenter);
// vCenter Attributes section
TemplateTable.setup(attributes.vcenter, RESOURCE, this.element.ID, context, attributes.hidden, attributes.general);
context.off("click", "#close_vm_async_error");
context.on("click", "#close_vm_async_error", function() {
@ -207,12 +191,10 @@ define(function(require) {
Sunstone.runAction(RESOURCE + ".update_template", resourceId, template_str);
});
if (this.element &&
this.element.USER_TEMPLATE &&
this.element.USER_TEMPLATE.HYPERVISOR &&
this.element.USER_TEMPLATE.HYPERVISOR === "vcenter")
if (OpenNebula.VM.isvCenterVM(this.element)) {
$('button[href="VM.upload_marketplace_dialog"]').attr('disabled','disabled');
else
} else {
$('button[href="VM.upload_marketplace_dialog"]').removeAttr('disabled');
}
}
});

View File

@ -19,19 +19,18 @@ define(function(require) {
DEPENDENCIES
*/
var TemplateInfo = require('hbs!./info/html');
var Locale = require('utils/locale');
var Navigation = require('utils/navigation');
var OpenNebulaNetwork = require('opennebula/network');
var PermissionsTable = require('utils/panel/permissions-table');
var RenameTr = require('utils/panel/rename-tr');
var OpenNebulaNetwork = require('opennebula/network');
var Navigation = require('utils/navigation');
var TemplateTable = require('utils/panel/template-table');
/*
TEMPLATES
*/
var TemplateTable = require('utils/panel/template-table');
var TemplateTableVcenter = require('utils/panel/template-table');
var TemplateInfo = require('hbs!./info/html');
/*
CONSTANTS
@ -41,6 +40,8 @@ define(function(require) {
var PANEL_ID = require('./info/panelId');
var RESOURCE = "Network";
var XML_ROOT = "VNET";
var REGEX_VCENTER_ATTRS = /^VCENTER_/
var REGEX_HIDDEN_ATTRS = /^(SECURITY_GROUPS|INBOUND_AVG_BW|INBOUND_PEAK_BW|INBOUND_PEAK_KB|OUTBOUND_AVG_BW|OUTBOUND_PEAK_BW|OUTBOUND_PEAK_KB)$/
/*
CONSTRUCTOR
@ -69,49 +70,23 @@ define(function(require) {
var renameTrHTML = RenameTr.html(TAB_ID, RESOURCE, this.element.NAME);
var permissionsTableHTML = PermissionsTable.html(TAB_ID, RESOURCE, this.element);
// TODO: simplify interface?
var hiddenKeys = [
"SECURITY_GROUPS",
"INBOUND_AVG_BW",
"INBOUND_PEAK_BW",
"INBOUND_PEAK_KB",
"OUTBOUND_AVG_BW",
"OUTBOUND_PEAK_BW",
"OUTBOUND_PEAK_KB" ];
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexVCenter: REGEX_VCENTER_ATTRS,
regexHidden: REGEX_HIDDEN_ATTRS
})
var strippedTemplate = {};
var strippedTemplateVcenter = {};
$.each(this.element.TEMPLATE, function(key, value) {
if (!$.inArray(key, hiddenKeys) > -1) {
if (key.match(/^VCENTER_*/)){
strippedTemplateVcenter[key] = value;
}
else {
strippedTemplate[key] = value;
}
}
});
var templateTableHTML = TemplateTable.html(
strippedTemplate,
RESOURCE,
Locale.tr("Attributes")
);
var templateTableVcenterHTML = TemplateTableVcenter.html(
strippedTemplateVcenter,
RESOURCE,
Locale.tr("vCenter information"),
false
);
var templateTableHTML = TemplateTable.html(attributes.general, RESOURCE, Locale.tr("Attributes"));
var templateTableVcenterHTML = TemplateTable.html(attributes.vcenter, RESOURCE, Locale.tr("vCenter information"));
var reservationTrHTML = '';
if(this.element.PARENT_NETWORK_ID.length > 0){
if (this.element.PARENT_NETWORK_ID.length > 0) {
reservationTrHTML =
'<tr>\
<td class="key_td">'+Locale.tr("Reservation parent")+'</td>\
<td class="value_td">'+Navigation.link(OpenNebulaNetwork.getName(this.element.PARENT_NETWORK_ID), "vnets-tab", this.element.PARENT_NETWORK_ID)+'</td>\
<td class="key_td">' + Locale.tr("Reservation parent") + '</td>\
<td class="value_td">' +
Navigation.link(OpenNebulaNetwork.getName(this.element.PARENT_NETWORK_ID), "vnets-tab", this.element.PARENT_NETWORK_ID) +
'</td>\
<td></td>\
</tr>';
@ -124,16 +99,9 @@ define(function(require) {
$(".reserve-sunstone-info").removeAttr("title");
}
var auto_vlan_id = Locale.tr("NO");
var auto_outer_vlan_id = Locale.tr("NO");
var auto_vlan_id = (this.element.VLAN_ID_AUTOMATIC == "1") ? Locale.tr("YES") : Locale.tr("NO");
var auto_outer_vlan_id = (this.element.OUTER_VLAN_ID_AUTOMATIC == "1") ? Locale.tr("YES") : Locale.tr("NO");
if (this.element.VLAN_ID_AUTOMATIC == "1") {
auto_vlan_id = Locale.tr("YES");
}
if (this.element.OUTER_VLAN_ID_AUTOMATIC == "1") {
auto_outer_vlan_id = Locale.tr("YES");
}
this.element.VLAN_ID = jQuery.isEmptyObject(this.element.VLAN_ID) &&
this.element.TEMPLATE &&
this.element.TEMPLATE.VCENTER_VLAN_ID?
@ -153,43 +121,20 @@ define(function(require) {
}
function _setup(context) {
var that = this;
RenameTr.setup(TAB_ID, RESOURCE, this.element.ID, context);
PermissionsTable.setup(TAB_ID, RESOURCE, this.element, context);
// TODO: simplify interface?
var hiddenKeys = [
"SECURITY_GROUPS",
"INBOUND_AVG_BW",
"INBOUND_PEAK_BW",
"INBOUND_PEAK_KB",
"OUTBOUNDD_AVG_BW",
"OUTBOUND_PEAK_BW",
"OUTBOUND_PEAK_KB" ];
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexVCenter: REGEX_VCENTER_ATTRS,
regexHidden: REGEX_HIDDEN_ATTRS
})
var hiddenValues = {};
var strippedTemplate = {};
var strippedTemplateVcenter = {};
$.each(that.element.TEMPLATE, function(key, value) {
if ($.inArray(key, hiddenKeys) > -1) {
hiddenValues[key] = value;
}
if (key.match(/^VCENTER_*/)){
strippedTemplateVcenter[key] = value;
}
else {
strippedTemplate[key] = value;
}
});
if($.isEmptyObject(strippedTemplateVcenter)){
if ($.isEmptyObject(attributes.vcenter)) {
$('.vcenter', context).hide();
}
TemplateTable.setup(strippedTemplate, RESOURCE, this.element.ID, context, hiddenValues, strippedTemplateVcenter);
TemplateTableVcenter.setup(strippedTemplateVcenter, RESOURCE, this.element.ID, context, hiddenValues, strippedTemplate);
//===
TemplateTable.setup(attributes.general, RESOURCE, this.element.ID, context, attributes.hidden, attributes.vcenter);
TemplateTable.setup(attributes.vcenter, RESOURCE, this.element.ID, context, attributes.hidden, attributes.general);
return false;
}

View File

@ -19,17 +19,16 @@ define(function(require) {
DEPENDENCIES
*/
var TemplateInfo = require('hbs!tabs/vnets-tab/panels/info/html');
var Locale = require('utils/locale');
var PermissionsTable = require('utils/panel/permissions-table');
var RenameTr = require('utils/panel/rename-tr');
var TemplateTable = require('utils/panel/template-table');
/*
TEMPLATES
*/
var TemplateTable = require('utils/panel/template-table');
var TemplateTableVcenter = require('utils/panel/template-table');
var TemplateInfo = require('hbs!tabs/vnets-tab/panels/info/html');
/*
CONSTANTS
@ -39,8 +38,8 @@ define(function(require) {
var PANEL_ID = require('./info/panelId');
var RESOURCE = "VNTemplate";
var XML_ROOT = "VNTEMPLATE";
var HIDE_ATTRIBUTES = ["AR", "CLUSTERS"];
var REGEX_VCENTER_ATTRS = /^VCENTER_/
var REGEX_HIDDEN_ATTRS = /^(AR|CLUSTERS|SECURITY_GROUPS|INBOUND_AVG_BW|INBOUND_PEAK_BW|INBOUND_PEAK_KB|OUTBOUND_AVG_BW|OUTBOUND_PEAK_BW|OUTBOUND_PEAK_KB)$/
/*
CONSTRUCTOR
@ -69,58 +68,21 @@ define(function(require) {
var renameTrHTML = RenameTr.html(TAB_ID, RESOURCE, this.element.NAME);
var permissionsTableHTML = PermissionsTable.html(TAB_ID, RESOURCE, this.element);
// TODO: simplify interface?
var hiddenKeys = [
"SECURITY_GROUPS",
"INBOUND_AVG_BW",
"INBOUND_PEAK_BW",
"INBOUND_PEAK_KB",
"OUTBOUND_AVG_BW",
"OUTBOUND_PEAK_BW",
"OUTBOUND_PEAK_KB" ];
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexVCenter: REGEX_VCENTER_ATTRS,
regexHidden: REGEX_HIDDEN_ATTRS
})
var strippedTemplate = {};
var strippedTemplateVcenter = {};
$.each(this.element.TEMPLATE, function(key, value) {
if (!$.inArray(key, hiddenKeys) > -1) {
if (key.match(/^VCENTER_*/)){
strippedTemplateVcenter[key] = value;
}
else if ( HIDE_ATTRIBUTES.indexOf(key) > -1 ) {
;
}
else {
strippedTemplate[key] = value;
}
}
});
var templateTableHTML = TemplateTable.html(
strippedTemplate,
RESOURCE,
Locale.tr("Attributes")
);
var templateTableVcenterHTML = TemplateTableVcenter.html(
strippedTemplateVcenter,
RESOURCE,
Locale.tr("vCenter information"),
false
);
var templateTableHTML = TemplateTable.html(attributes.general, RESOURCE, Locale.tr("Attributes"));
var templateTableVcenterHTML = TemplateTable.html(attributes.vcenter, RESOURCE, Locale.tr("vCenter information"));
var reservationTrHTML = '';
var auto_vlan_id = Locale.tr("NO");
var auto_outer_vlan_id = Locale.tr("NO");
var auto_vlan_id = (this.element.VLAN_ID_AUTOMATIC == "1") ? Locale.tr("YES") : Locale.tr("NO");
var auto_outer_vlan_id = (this.element.OUTER_VLAN_ID_AUTOMATIC == "1") ? Locale.tr("YES") : Locale.tr("NO");
if (this.element.VLAN_ID_AUTOMATIC == "1") {
auto_vlan_id = Locale.tr("YES");
}
if (this.element.OUTER_VLAN_ID_AUTOMATIC == "1") {
auto_outer_vlan_id = Locale.tr("YES");
}
return TemplateInfo({
'element': this.element,
'renameTrHTML': renameTrHTML,
'reservationTrHTML': reservationTrHTML,
'reservationTrHTML': '',
'permissionsTableHTML': permissionsTableHTML,
'templateTableHTML': templateTableHTML,
'templateTableVcenterHTML': templateTableVcenterHTML,
@ -130,43 +92,22 @@ define(function(require) {
}
function _setup(context) {
var that = this;
RenameTr.setup(TAB_ID, RESOURCE, this.element.ID, context);
PermissionsTable.setup(TAB_ID, RESOURCE, this.element, context);
// TODO: simplify interface?
var hiddenKeys = [
"SECURITY_GROUPS",
"INBOUND_AVG_BW",
"INBOUND_PEAK_BW",
"INBOUND_PEAK_KB",
"OUTBOUNDD_AVG_BW",
"OUTBOUND_PEAK_BW",
"OUTBOUND_PEAK_KB" ];
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexVCenter: REGEX_VCENTER_ATTRS,
regexHidden: REGEX_HIDDEN_ATTRS
})
var hiddenValues = {};
var strippedTemplate = {};
var strippedTemplateVcenter = {};
$.each(that.element.TEMPLATE, function(key, value) {
if ($.inArray(key, hiddenKeys) > -1) {
hiddenValues[key] = value;
}
if (key.match(/^VCENTER_*/)){
strippedTemplateVcenter[key] = value;
}
else {
strippedTemplate[key] = value;
}
});
if($.isEmptyObject(strippedTemplateVcenter)){
if ($.isEmptyObject(attributes.vcenter)) {
$('.vcenter', context).hide();
}
TemplateTable.setup(strippedTemplate, RESOURCE, this.element.ID, context, hiddenValues, strippedTemplateVcenter);
TemplateTableVcenter.setup(strippedTemplateVcenter, RESOURCE, this.element.ID, context, hiddenValues, strippedTemplate);
//===
// General Attributes section
TemplateTable.setup(attributes.general, RESOURCE, this.element.ID, context, attributes.hidden, attributes.vcenter);
// vCenter Attributes section
TemplateTable.setup(attributes.vcenter, RESOURCE, this.element.ID, context, attributes.hidden, attributes.general);
return false;
}

View File

@ -15,40 +15,31 @@
/* -------------------------------------------------------------------------- */
define(function(require) {
/*
DEPENDENCIES
*/
/* DEPENDENCIES */
var TemplateInfo = require('hbs!./info/html');
var Locale = require('utils/locale');
var Config = require('sunstone-config');
var Sunstone = require('sunstone');
var Locale = require('utils/locale');
var Navigation = require('utils/navigation');
var PermissionsTable = require('utils/panel/permissions-table');
var RenameTr = require('utils/panel/rename-tr');
var OpenNebulaVirtualRouter = require('opennebula/virtualrouter');
var Navigation = require('utils/navigation');
/*
TEMPLATES
*/
var Sunstone = require('sunstone');
var TemplateTable = require('utils/panel/template-table');
/* TEMPLATES */
var TemplateInfo = require('hbs!./info/html');
/*
CONSTANTS
*/
/* CONSTANTS */
var ATTACH_NIC_DIALOG_ID = require('../dialogs/attach-nic/dialogId');
var CONFIRM_DIALOG_ID = require('utils/dialogs/generic-confirm/dialogId');
var TAB_ID = require('../tabId');
var PANEL_ID = require('./info/panelId');
var RESOURCE = "VirtualRouter";
var XML_ROOT = "VROUTER";
var REGEX_HIDDEN_ATTRS = /^(NIC)$/
var ATTACH_NIC_DIALOG_ID = require('../dialogs/attach-nic/dialogId');
var CONFIRM_DIALOG_ID = require('utils/dialogs/generic-confirm/dialogId');
/*
CONSTRUCTOR
*/
/* CONSTRUCTOR */
function Panel(info) {
this.title = Locale.tr("Info");
@ -65,9 +56,7 @@ define(function(require) {
return Panel;
/*
FUNCTION DEFINITIONS
*/
/* FUNCTION DEFINITIONS */
function _html() {
var renameTrHTML = RenameTr.html(TAB_ID, RESOURCE, this.element.NAME);
@ -112,13 +101,11 @@ define(function(require) {
}
});
// TODO: simplify interface?
var strippedTemplate = $.extend({}, this.element.TEMPLATE);
delete strippedTemplate["NIC"];
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexHidden: REGEX_HIDDEN_ATTRS
})
var templateTableHTML = TemplateTable.html(strippedTemplate, RESOURCE,
Locale.tr("Attributes"));
//====
var templateTableHTML = TemplateTable.html(attributes.general, RESOURCE, Locale.tr("Attributes"));
return TemplateInfo({
'element': this.element,
@ -135,7 +122,6 @@ define(function(require) {
RenameTr.setup(TAB_ID, RESOURCE, this.element.ID, context);
PermissionsTable.setup(TAB_ID, RESOURCE, this.element, context);
if (Config.isTabActionEnabled(TAB_ID, "VirtualRouter.attachnic")) {
context.off('click', '.attach_nic');
context.on('click', '.attach_nic', function() {
@ -169,18 +155,11 @@ define(function(require) {
});
}
// TODO: simplify interface?
var strippedTemplate = $.extend({}, this.element.TEMPLATE);
delete strippedTemplate["NIC"];
var attributes = TemplateTable.getTemplatesAttributes(this.element.TEMPLATE, {
regexHidden: REGEX_HIDDEN_ATTRS
})
var hiddenValues = {};
if (this.element.TEMPLATE.NIC != undefined){
hiddenValues.NIC = this.element.TEMPLATE.NIC;
}
TemplateTable.setup(strippedTemplate, RESOURCE, this.element.ID, context, hiddenValues);
//===
TemplateTable.setup(attributes.general, RESOURCE, this.element.ID, context, attributes.hidden);
return false;
}

View File

@ -19,15 +19,15 @@ define(function(require) {
DEPENDENCIES
*/
var TemplateInfo = require('hbs!./info/html');
var Locale = require('utils/locale');
var RenameTr = require('utils/panel/rename-tr');
var TemplateTable = require('utils/panel/template-table');
/*
TEMPLATES
*/
var TemplateTable = require('utils/panel/template-table');
var TemplateInfo = require('hbs!./info/html');
/*
CONSTANTS
@ -62,8 +62,7 @@ define(function(require) {
function _html() {
var renameTrHTML = RenameTr.html(TAB_ID, RESOURCE, this.element.NAME);
var templateTableHTML = TemplateTable.html(this.element.TEMPLATE, RESOURCE,
Locale.tr("Attributes"));
var templateTableHTML = TemplateTable.html(this.element.TEMPLATE, RESOURCE, Locale.tr("Attributes"));
if (this.element.SERVER_POOL.SERVER){
var serverPool = this.element.SERVER_POOL.SERVER;

View File

@ -21,44 +21,73 @@ define(function(require) {
*/
var Locale = require('utils/locale');
var Notifier = require('utils/notifier');
var Sunstone = require('sunstone');
var TemplateUtils = require('utils/template-utils');
var Notifier = require('utils/notifier');
/*
Generate the table HTML with the template of the resource and an edit icon
@param {Object} templateJSON Resource template (i.e: ZONE.TEMPLATE, IMAGE.TEMPLATE...)
@param {String} resourceType Resource type (i.e: Zone, Host, Image...)
@param {String} tableName Header of the table (i.e: Locale.tr("Attributes"))
@returns {String} HTML table
*/
function _html(templateJSON, resourceType, tableName, modify) {
if (!modify) {
modify = true;
}
var str = '<table id="' + resourceType.toLowerCase() + '_template_table" class="dataTable configuration_attrs"><thead><tr><th colspan="3">' + tableName + '</th></tr></thead>' + fromJSONtoHTMLTable(templateJSON, resourceType, undefined, undefined, modify);
if (modify) {
str += '<tr><td class="key_td"><input type="text" name="new_key" id="new_key" /></td><td class="value_td"><textarea type="text" name="new_value" id="new_value"></textarea></td><td class="text-right"><button type="button" id="button_add_value" class="button small secondary"><i class="fas fa-lg fa-plus-circle"></i></button>\</td></tr>';
}
str += '</table>';
return str;
// This attributes has special restrictions
var special_restrictions = {
// vCenter
VCENTER_CCR_REF: { edit: false, delete: false },
VCENTER_HOST: { edit: false, delete: false },
VCENTER_INSTANCE_ID: { edit: false, delete: false },
VCENTER_PASSWORD: { edit: true, delete: false },
VCENTER_USER: { edit: false, delete: false },
VCENTER_VERSION: { edit: false, delete: false },
HOT_RESIZE: { edit: false, delete: false, show: false }
}
/*
Initialize the table, clicking the edit icon will add an input to edit the value
@param {Object} templateJSON Resource template (i.e: ZONE.TEMPLATE, IMAGE.TEMPLATE...)
@param {String} resourceType Resource type (i.e: Zone, Host, Image...)
@param {String} resourceId ID of the resource
@param {jQuery Object} context Selector including the tr
@param {Object} unshownValues Values from the origianl resource template that
have been deleted from the templateJSON param. Whithout this, a template
update would permanently delete the missing values from OpenNebula
/**
* Generate the table HTML with the template of the resource and an edit icon
* @param {Object} templateJSON Resource template (e.g: ZONE.TEMPLATE, IMAGE.TEMPLATE...)
* @param {String} resourceType Resource type (e.g: Zone, Host, Image...)
* @param {String} tableName Header of the table (e.g: Locale.tr("Attributes"))
* @returns {String} HTML table
*/
function _html(templateJSON, resourceType, tableName) {
// Start - TEMPLATE TABLE
var html = '<table id="' + resourceType.toLowerCase() + '_template_table" class="dataTable configuration_attrs">\
<thead>\
<tr><th colspan="3">' + tableName + '</th></tr>\
</thead>' +
fromJSONtoHTMLTable(templateJSON, resourceType, undefined, undefined, true);
// Row with form to create new attribute
html += '<tr>\
<td class="key_td">\
<input type="text" name="new_key" id="new_key" />\
</td>\
<td class="value_td">\
<textarea type="text" name="new_value" id="new_value" />\
</td>\
<td class="text-right">\
<button type="button" id="button_add_value" class="button small secondary">\
<i class="fas fa-lg fa-plus-circle" />\
</button>\
</td>\
</tr>';
// Close - TEMPLATE TABLE
html += '</table>';
return html;
}
/**
* Initialize the table, clicking the edit icon will add an input to edit the value
* @param {Object} templateJSON Resource template (e.g: ZONE.TEMPLATE, IMAGE.TEMPLATE...)
* @param {String} resourceType Resource type (e.g: Zone, Host, Image...)
* @param {String} resourceId ID of the resource
* @param {jQuery Object} context Selector including the tr
* @param {Object} unshownValues Values from the original resource template that
* have been deleted from the templateJSON param. Without this, a template
* update would permanently delete the missing values from OpenNebula
*/
var _setup = function(templateJSON, resourceType, resourceId, context, unshownValues, templateJSON_Others) {
if (!templateJSON_Others){
if (!templateJSON_Others) {
templateJSON_Others = templateJSON;
}
// Remove previous listeners
context.off("keypress", "#new_key");
context.off("keypress", "#new_value");
@ -72,8 +101,6 @@ define(function(require) {
context.off("click", "#button_add_value");
context.off("click", "#button_add_value_vectorial");
context.off("click", "#div_add_vectorial");
this.templateJSON_Others = templateJSON_Others;
var that = this;
// Add listener for add key and add value for Extended Template
context.on("click", '#button_add_value', function() {
@ -113,24 +140,28 @@ define(function(require) {
// Listener for key,value pair remove action
context.on("click", "#div_minus", function() {
// Remove div_minus_ from the id
field = this.firstElementChild.id.substring(10, this.firstElementChild.id.length);
var field = this.firstElementChild.id.substring(10, this.firstElementChild.id.length);
var list_of_classes = this.firstElementChild.className.split(" ");
var ocurrence = null;
if (list_of_classes.length != 1) {
$.each(list_of_classes, function(index, value) {
$.each(list_of_classes, function(_, value) {
if (value.match(/^ocurrence_/))
ocurrence = value.substring(10, value.length);;
});
}
var newTemplate = $.extend({}, templateJSON, templateJSON_Others);
// Erase the value from the template
if (ocurrence != null){
that.templateJSON_Others[field].splice(ocurrence, 1);
}else{
delete that.templateJSON_Others[field];
if (ocurrence != null) {
newTemplate[field].splice(ocurrence, 1);
} else {
delete newTemplate[field];
}
templateJSON = $.extend({}, templateJSON_Others, templateJSON);
template_str = TemplateUtils.templateToString(templateJSON, unshownValues);
// Let OpenNebula know
template_str = TemplateUtils.templateToString(newTemplate, unshownValues);
Sunstone.runAction(resourceType + ".update_template", resourceId, template_str);
});
@ -154,12 +185,15 @@ define(function(require) {
context.on("change", ".input_edit_value", function() {
var key_str = $.trim(this.id.substring(11, this.id.length));
var value_str = $.trim(this.value);
var templateJSON_bk = $.extend({}, templateJSON_Others);
delete templateJSON_Others[key_str];
templateJSON_Others[key_str] = value_str;
templateJSON = $.extend({}, templateJSON_Others, templateJSON);
templateJSON = $.extend({}, templateJSON, templateJSON_Others);
template_str = TemplateUtils.templateToString(templateJSON, unshownValues);
// Let OpenNebula know
Sunstone.runAction(resourceType + ".update_template", resourceId, template_str);
templateJSON = templateJSON_bk;
});
@ -263,19 +297,18 @@ define(function(require) {
// Listener for vectorial key,value pair add action
context.on("click", "#div_add_vectorial", function() {
if (!$('#button_add_value_vectorial').html()) {
var field = this.firstElementChild.id.substring(18, this.firstElementChild.id.length);
var list_of_classes = this.firstElementChild.className.split(" ");
var ocurrence = null;
var vectorial_key = null;
if (list_of_classes.length != 1) {
$.each(list_of_classes, function(index, value) {
$.each(list_of_classes, function(_, value) {
if (value.match(/^ocurrence_/)){
ocurrence = value;
}
});
}
if (list_of_classes.length != 1) {
$.each(list_of_classes, function(index, value) {
$.each(list_of_classes, function(_, value) {
if (value.match(/^vectorial_key_/)){
vectorial_key = value;
}
@ -358,18 +391,6 @@ define(function(require) {
return str;
}
// This attributes has special restrictions
var special_restrictions = {
// vCenter
VCENTER_CCR_REF: {edit: false, delete: false},
VCENTER_HOST: {edit: false, delete: false},
VCENTER_INSTANCE_ID: {edit: false, delete: false},
VCENTER_PASSWORD: {edit: true, delete: false},
VCENTER_USER: {edit: false, delete: false},
VCENTER_VERSION: {edit: false, delete: false},
HOT_RESIZE: {edit: false, delete: false, show: false}
}
// Helper for fromJSONtoHTMLTable function
function fromJSONtoHTMLRow(field, value, resourceType, vectorial_key, ocurrence, modify) {
var str = "";
@ -385,24 +406,11 @@ define(function(require) {
str += '<td class="text-right nowrap"><span id="div_add_vectorial"><a id="div_add_vectorial_' + field + '" class="add_vectorial_a ocurrence_' + it + ' vectorial_key_' + field + '" href="#"><i class="fas fa-plus-sign"/></a></span>&emsp;<span id="div_minus"><a id="div_minus_' + field + '" class="remove_vectorial_x ocurrence_' + it + '" href="#"><i class="fas fa-trash-alt"/></a></span></td>';
}
str += '</tr>';
str += fromJSONtoHTMLTable(
current_value,
resourceType,
field,
it,
modify
);
str += fromJSONtoHTMLTable(current_value, resourceType, field, it, modify);
} else {
// if it is a single value, create the row for this occurence of the key
// if it is a single value, create the row for this occurrence of the key
if (!special_restrictions[field] || (special_restrictions[field] && special_restrictions[field]['show'])){
str += fromJSONtoHTMLRow(
field,
current_value,
resourceType,
false,
it,
modify
);
str += fromJSONtoHTMLRow(field, current_value, resourceType, false, it, modify);
}
}
}
@ -426,13 +434,7 @@ define(function(require) {
if (modify) {
str += '<td class="text-right nowrap"><span id="div_add_vectorial"><a id="div_add_vectorial_' + field + '" class="add_vectorial_a' + ocurrence_str + ' vectorial_key_' + field + '" href="#"><i class="fas fa-plus-sign"/></a></span>&emsp;<span id="div_minus"><a id="div_minus_' + field + '" class="remove_vectorial_x' + ocurrence_str + '" href="#"><i class="fas fa-trash-alt"/></a></span></td>';
}
str += fromJSONtoHTMLTable(
value,
resourceType,
field,
ocurrence,
modify
);
str += fromJSONtoHTMLTable(value, resourceType, field, ocurrence, modify);
}
} else {
str += '<tr><td class="key_td">' + Locale.tr(field) + '</td><td class="value_td" id="value_td_input_' + field + '">';
@ -458,9 +460,50 @@ define(function(require) {
}
return str;
}
/**
* @param {Object} template Template from database resource (vm, host, etc)
* @param {Object} options Options to filter attributes
* @param {Array} options.hidden Array of attribute names to hide
* @param {RegExp} options.regexVCenter Regex to split vCenter attributes
* @param {RegExp} options.regexNSX Regex to split NSX attributes
* @return {{
* general: Object,
* nsx: Object,
* vcenter: Object,
* hidden: Object
* }} All resource attributes
*/
function getTemplatesAttributes(template, options) {
var options = $.extend({
regexHidden: /^$/,
regexVCenter: /^VCENTER_/,
regexNSX: /^$/,
}, options);
var general = {}, nsx = {}, vcenter = {}, hidden = {};
$.each(template, function(key, value) {
if (key.match(options.regexHidden)) {
hidden[key] = value
}
else if (key.match(options.regexNSX)) {
nsx[key] = value;
}
else if (key.match(options.regexVCenter)) {
vcenter[key] = value;
}
else {
general[key] = value;
}
});
return { general, nsx, vcenter, hidden }
}
return {
'html': _html,
'setup': _setup
getTemplatesAttributes: getTemplatesAttributes,
html: _html,
setup: _setup,
};
});

View File

@ -9,8 +9,6 @@
word-break: break-word;
padding: 0;
padding-bottom: 0.5rem;
//padding: 1rem;
//color: $black;
font-size: 1.1rem;
font-weight: bold;
}
@ -18,8 +16,6 @@
.without-link {
padding: 0;
padding-bottom: 0.5rem;
//padding: 1rem;
//color: $black;
font-size: 1.1rem;
display: block;
font-weight: bold;
@ -29,7 +25,6 @@
.provision-bullet-item {
padding-bottom: 0.2rem;
//padding: 0.2rem 1rem;
i {
color: $dark-gray;
}
@ -41,15 +36,9 @@
.provision-bullet-item-last {
padding-top: 0.5rem;
//padding: 0.5rem 1rem;
color: $dark-gray;
i {
color: $dark-gray;
}
}
.provision-bullet-item-buttons {
//padding-top: 1rem;
//padding: 0 1rem 0.5rem 1rem;
}
}