From 04e8135a7bb5e9a9b980e96508f2880a880ccd65 Mon Sep 17 00:00:00 2001 From: juanmont Date: Thu, 25 Oct 2018 11:16:12 +0200 Subject: [PATCH] F #2427: Added possibility to select SCHED_REQUIREMENTS from vnet datatable --- .../create/wizard-tabs/network/nic-tab.js | 80 ++++++++++++++++++ .../wizard-tabs/network/nic-tab/html.hbs | 63 ++++++++++---- src/sunstone/public/app/utils/nics-section.js | 84 ++++++++++++++++++- .../public/app/utils/nics-section/dd.hbs | 59 ++++++++++--- 4 files changed, 257 insertions(+), 29 deletions(-) diff --git a/src/sunstone/public/app/tabs/templates-tab/form-panels/create/wizard-tabs/network/nic-tab.js b/src/sunstone/public/app/tabs/templates-tab/form-panels/create/wizard-tabs/network/nic-tab.js index 208e693aa4..97a0bf17d1 100644 --- a/src/sunstone/public/app/tabs/templates-tab/form-panels/create/wizard-tabs/network/nic-tab.js +++ b/src/sunstone/public/app/tabs/templates-tab/form-panels/create/wizard-tabs/network/nic-tab.js @@ -27,6 +27,7 @@ define(function(require) { var UniqueId = require('utils/unique-id'); var CreateUtils = require('../utils'); var Notifier = require('utils/notifier'); + var TemplateUtils = require('utils/template-utils'); /* TEMPLATES @@ -46,6 +47,14 @@ define(function(require) { that = this; this.nicTabId = 'nicTab' + nicTabId + UniqueId.id(); + var options = { + 'select': true, + 'selectOptions': { + 'multiple_choice': true + } + } + this.vnetsTableAuto = new VNetsTable(this.nicTabId + 'TableAuto', options); + this.vnetsTable = new VNetsTable(this.nicTabId + 'Table', {'select': true}); var secgroupSelectOptions = { @@ -68,6 +77,7 @@ define(function(require) { NicTab.prototype.onShow = _onShow; NicTab.prototype.retrieve = _retrieve; NicTab.prototype.fill = _fill; + NicTab.prototype.generateRequirements = _generateRequirements; return NicTab; @@ -79,12 +89,14 @@ define(function(require) { return TemplateHTML({ 'nicTabId': this.nicTabId, 'vnetsTableSelectHTML': this.vnetsTable.dataTableHTML, + 'vnetsTableAutoSelectHTML': this.vnetsTableAuto.dataTableHTML, 'secgroupsTableSelectHTML': this.secgroupsTable.dataTableHTML }); } function _onShow(context, panelForm) { this.vnetsTable.refreshResourceTableSelect(); + this.vnetsTableAuto.refreshResourceTableSelect(); } /** @@ -134,6 +146,20 @@ define(function(require) { that.secgroupsTable.refreshResourceTableSelect(); that.vnetsTable.refreshResourceTableSelect(); + var selectOptions = { + 'selectOptions': { + 'select_callback': function(aData, options) { + that.generateRequirements(context) + }, + 'unselect_callback': function(aData, options) { + that.generateRequirements(context) + } + } + } + + that.vnetsTableAuto.initialize(selectOptions); + that.vnetsTableAuto.refreshResourceTableSelect(); + $("input.pci-type-nic", context).on("change", function(){ var tbody = $(".pci-row tbody", context); @@ -175,6 +201,18 @@ define(function(require) { }); $(".auto", context).hide(); + + context.on("change", "input[name='" + that.nicTabId + "_req_select']", function() { + if ($("input[name='" + that.nicTabId + "_req_select']:checked").val() == "vnet_select") { + $("#"+ that.nicTabId +"_vnetTable",context).show(); + } else { + $("#"+ that.nicTabId +"_vnetTable",context).hide(); + } + }); + + context.on("change", "input[name='" + that.nicTabId + "_rank_select']", function() { + $("input#"+that.nicTabId+"_SCHED_RANK", context).val(this.value); + }); } function _retrieve(context) { @@ -292,8 +330,50 @@ define(function(require) { if ( templateJSON["SCHED_RANK"] ) { $("input#"+this.nicTabId+"_SCHED_RANK", context).val(templateJSON["SCHED_RANK"]); } + + var reqJSON = templateJSON['SCHED_REQUIREMENTS']; + if (reqJSON) { + var req = TemplateUtils.escapeDoubleQuotes(reqJSON); + + var net_id_regexp = /(\s|\||\b)ID=\\"([0-9]+)\\"/g; + + var nets = []; + while (match = net_id_regexp.exec(req)) { + nets.push(match[2]) + } + + var selectedResources = { + ids : nets + } + + this.vnetsTableAuto.selectResourceTableSelect(selectedResources); + } + + var rankJSON = templateJSON["SCHED_RANK"]; + if (rankJSON) { + var striping_regexp = /^-USED_LEASES$/; + var packing_regexp = /^USED_LEASES$/; + + if (striping_regexp.test(rankJSON)) { + $("input[name='" + this.nicTabId + "_rank_select']#stripingRadio", context).click(); + } + else if (packing_regexp.test(rankJSON)) { + $("input[name='" + this.nicTabId + "_rank_select']#packingRadio", context).click(); + } + } } WizardFields.fill(context, templateJSON); } + + function _generateRequirements(context) { + var req_string=[]; + var selected_vnets = this.vnetsTableAuto.retrieveResourceTableSelect(); + + $.each(selected_vnets, function(index, netID) { + req_string.push('ID=\\"'+netID+'\\"'); + }); + + $("input#"+this.nicTabId+"_SCHED_REQUIREMENTS", context).val(req_string.join(" | ")); + }; }); diff --git a/src/sunstone/public/app/tabs/templates-tab/form-panels/create/wizard-tabs/network/nic-tab/html.hbs b/src/sunstone/public/app/tabs/templates-tab/form-panels/create/wizard-tabs/network/nic-tab/html.hbs index aa20467cc5..fc9bce422c 100644 --- a/src/sunstone/public/app/tabs/templates-tab/form-panels/create/wizard-tabs/network/nic-tab/html.hbs +++ b/src/sunstone/public/app/tabs/templates-tab/form-panels/create/wizard-tabs/network/nic-tab/html.hbs @@ -30,21 +30,56 @@
+
+ {{tr "Network Requirements"}} +
+
+ + + + +
+
+
+ +
+
+ + +
+
+
-
- - -
-
-
-
- - -
+
+ {{tr "Network Rank"}} +
+
+ + + + +
+
+
+
+
+ + +
+
+
diff --git a/src/sunstone/public/app/utils/nics-section.js b/src/sunstone/public/app/utils/nics-section.js index 0e999c7a49..f6d517f939 100644 --- a/src/sunstone/public/app/utils/nics-section.js +++ b/src/sunstone/public/app/utils/nics-section.js @@ -24,6 +24,7 @@ define(function(require) { var TemplateDD = require('hbs!./nics-section/dd'); var SecurityGroupsTable = require('tabs/secgroups-tab/datatable'); var VNetsTable = require('tabs/vnets-tab/datatable'); + var TemplateUtils = require('utils/template-utils'); var provision_nic_accordion_dd_id = 0; @@ -120,11 +121,11 @@ define(function(require) { var req = $("input#"+that.id+"_SCHED_REQUIREMENTS", $(this)).val(); var rank = $("input#"+that.id+"_SCHED_RANK", $(this)).val(); - if ( req !== "" ){ + if ( req && req !== "" ){ nic["SCHED_REQUIREMENTS"] = req; } - if ( rank !== "" ){ + if ( rank && rank !== "" ){ nic["SCHED_RANK"] = rank; } } @@ -219,6 +220,14 @@ define(function(require) { options = {}; } + var vnetsTableAuto = new VNetsTable('vnet_nics_section_auto_'+provision_nic_accordion_dd_id, + { + 'select': true, + 'selectOptions': { + 'multiple_choice': true + } + }); + var vnetsTable = new VNetsTable( 'vnet_nics_section_'+provision_nic_accordion_dd_id, { 'select': true }); @@ -238,11 +247,38 @@ define(function(require) { var dd_context = $(TemplateDD({ vnetsTableHTML: vnetsTable.dataTableHTML, + vnetsTableAutoHTML: vnetsTableAuto.dataTableHTML, securityGroupsTableHTML: sgHtml, provision_nic_accordion_dd_id: provision_nic_accordion_dd_id, options: options })).appendTo(context); + var selectOptions = { + 'selectOptions': { + 'select_callback': function(aData, options) { + var req_string=[]; + var selected_vnets = vnetsTableAuto.retrieveResourceTableSelect(); + + $.each(selected_vnets, function(index, netID) { + req_string.push('ID=\\"'+netID+'\\"'); + }); + $(".SCHED_REQUIREMENTS", dd_context).val(req_string.join(" | ")); + }, + 'unselect_callback': function(aData, options) { + var req_string=[]; + var selected_vnets = vnetsTableAuto.retrieveResourceTableSelect(); + + $.each(selected_vnets, function(index, netID) { + req_string.push('ID="'+netID+'"'); + }); + $(".SCHED_REQUIREMENTS", dd_context).val(req_string.join(" | ")); + } + } + } + + vnetsTableAuto.initialize(selectOptions); + vnetsTableAuto.refreshResourceTableSelect(); + $(".nic-section-entry", dd_context).data("template_nic", options.nic); $(".nic-section-entry", dd_context).data("vnetsTable", vnetsTable); $(".nic-section-entry", dd_context).data("sgTable", sgTable); @@ -265,7 +301,20 @@ define(function(require) { } }); + $("input[name='provision_accordion_dd_"+provision_nic_accordion_dd_id+"_req_select']", dd_context).on("change", function() { + if (this.value == "vnet_select") { + $(".net_select",dd_context).show(); + } else { + $(".net_select",dd_context).hide(); + } + }); + + $("input[name='provision_accordion_dd_"+provision_nic_accordion_dd_id+"_rank_select']", dd_context).on("change", function() { + $(".SCHED_RANK", dd_context).val(this.value); + }); + if ( options.nic && options.nic["NETWORK_MODE"] && options.nic["NETWORK_MODE"] === "auto" ) { + $("input#provision_accordion_dd_"+provision_nic_accordion_dd_id+"_network_mode", dd_context).prop("checked", true); $(".no_auto", dd_context).hide(); $(".auto", dd_context).show(); @@ -277,6 +326,37 @@ define(function(require) { if ( options.nic["SCHED_RANK"] ) { $("input#provision_accordion_dd_"+provision_nic_accordion_dd_id+"_SCHED_RANK", dd_context).val(options.nic["SCHED_RANK"]); } + + var reqJSON = options.nic['SCHED_REQUIREMENTS']; + if (reqJSON) { + var req = TemplateUtils.escapeDoubleQuotes(reqJSON); + + var net_id_regexp = /(\s|\||\b)ID=\\"([0-9]+)\\"/g; + + var nets = []; + while (match = net_id_regexp.exec(req)) { + nets.push(match[2]) + } + + var selectedResourcesAuto = { + ids : nets + } + + vnetsTableAuto.selectResourceTableSelect(selectedResourcesAuto); + } + + var rankJSON = options.nic["SCHED_RANK"]; + if (rankJSON) { + var striping_regexp = /^-USED_LEASES$/; + var packing_regexp = /^USED_LEASES$/; + + if (striping_regexp.test(rankJSON)) { + $("input[name='provision_accordion_dd_"+provision_nic_accordion_dd_id+"_rank_select']#stripingRadio", context).click(); + } + else if (packing_regexp.test(rankJSON)) { + $("input[name='provision_accordion_dd_"+provision_nic_accordion_dd_id+"_rank_select']#packingRadio", context).click(); + } + } } Tips.setup(dd_context); diff --git a/src/sunstone/public/app/utils/nics-section/dd.hbs b/src/sunstone/public/app/utils/nics-section/dd.hbs index 5d6b2d072c..765f156e16 100644 --- a/src/sunstone/public/app/utils/nics-section/dd.hbs +++ b/src/sunstone/public/app/utils/nics-section/dd.hbs @@ -37,22 +37,55 @@
-
-
- - +
+ {{tr "Network Requirements"}} +
+
+ + + + +
-
-
-
-
+ +
+ {{tr "Network Rank"}} +
+
+ + + + +
+
+
+
+
+ + +
+
+