From 895e187331c34ad234254056a027f0835a2b895e Mon Sep 17 00:00:00 2001 From: Rima Shah Date: Fri, 12 Aug 2022 12:45:05 -0600 Subject: [PATCH 1/4] Added logic for assigning multiple server capabilities in TPv1 --- .../src/common/api/ServerCapabilityService.js | 13 ++++ .../TableAssignServerSCsController.js | 63 +++++++++++++++++++ ...TableServerServerCapabilitiesController.js | 33 +++++++++- .../table/serverServerCapabilities/index.js | 3 +- .../table.assignServerSCs.tpl.html | 31 +++++++++ .../table.serverServerCapabilities.tpl.html | 3 +- traffic_portal/app/src/scripts/config.js | 2 +- 7 files changed, 143 insertions(+), 5 deletions(-) create mode 100644 traffic_portal/app/src/common/modules/table/serverServerCapabilities/TableAssignServerSCsController.js create mode 100644 traffic_portal/app/src/common/modules/table/serverServerCapabilities/table.assignServerSCs.tpl.html diff --git a/traffic_portal/app/src/common/api/ServerCapabilityService.js b/traffic_portal/app/src/common/api/ServerCapabilityService.js index 25913dc6dd..ca8a827f28 100644 --- a/traffic_portal/app/src/common/api/ServerCapabilityService.js +++ b/traffic_portal/app/src/common/api/ServerCapabilityService.js @@ -68,6 +68,19 @@ var ServerCapabilityService = function($http, ENV, locationUtils, messageModel) ); }; + this.assignSCsServer = function(serverId, serverCapabilities) { + return $http.put(ENV.api.unstable + 'multiple_server_capabilities',{ serverId: serverId, serverCapabilities: serverCapabilities, replace: true } ).then( + function(result) { + messageModel.setMessages(result.data.alerts, false); + return result; + }, + function(err) { + messageModel.setMessages(err.data.alerts, false); + throw err; + } + ); + }; + this.updateServerCapability = function(currentName, serverCapability) { return $http.put(ENV.api.unstable + 'server_capabilities', serverCapability, {params: {"name": currentName}}).then( function(result) { diff --git a/traffic_portal/app/src/common/modules/table/serverServerCapabilities/TableAssignServerSCsController.js b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/TableAssignServerSCsController.js new file mode 100644 index 0000000000..5b49f30136 --- /dev/null +++ b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/TableAssignServerSCsController.js @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** @typedef { import('../../../../common/modules/table/agGrid/CommonGridController').CGC } CGC */ + +var TableAssignServerSCsController = function(server, serverCapabilities, assignedSCs, $scope, $uibModalInstance) { + + $scope.selectedSCs = []; + + $scope.server = server; + + /** @type CGC.ColumnDefinition */ + $scope.columns = [ + { + headerName: "Server Capability", + field: "name", + checkboxSelection: true, + headerCheckboxSelection: true, + } + ]; + + $scope.serverCapabilities = serverCapabilities.map(SCs => { + let isAssigned = assignedSCs.find(assignedSCs => assignedSCs.serverCapability === SCs.name); + if (isAssigned) { + SCs['selected'] = true; + } + return SCs; + }); + + $scope.submit = function() { + const selectedSCNames = this.selectedSCs.map(sc => sc["name"]); + $uibModalInstance.close(selectedSCNames); + }; + + $scope.cancel = function () { + $uibModalInstance.dismiss('cancel'); + }; + + /** @type CGC.GridSettings */ + $scope.gridOptions = { + selectRows: true, + selectionProperty: "selected" + }; +}; + +TableAssignServerSCsController.$inject = ['server', 'serverCapabilities', 'assignedSCs', '$scope', '$uibModalInstance']; +module.exports = TableAssignServerSCsController; diff --git a/traffic_portal/app/src/common/modules/table/serverServerCapabilities/TableServerServerCapabilitiesController.js b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/TableServerServerCapabilitiesController.js index 51b991a44a..c37e69f9ac 100644 --- a/traffic_portal/app/src/common/modules/table/serverServerCapabilities/TableServerServerCapabilitiesController.js +++ b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/TableServerServerCapabilitiesController.js @@ -17,7 +17,7 @@ * under the License. */ -var TableServerServerCapabilitiesController = function(server, serverCapabilities, $scope, $state, $uibModal, locationUtils, serverUtils, serverService, messageModel) { +var TableServerServerCapabilitiesController = function(server, serverCapabilities, $scope, $state, $uibModal, locationUtils, serverUtils, serverService, messageModel, serverCapabilityService) { $scope.server = server[0]; @@ -32,6 +32,35 @@ var TableServerServerCapabilitiesController = function(server, serverCapabilitie } ]; + $scope.selectSCs = function () { + var modalInstance = $uibModal.open({ + templateUrl: 'common/modules/table/serverServerCapabilities/table.assignServerSCs.tpl.html', + controller: 'TableAssignServerSCsController', + size: 'md', + resolve: { + server: function() { + return server; + }, + serverCapabilities: function(serverCapabilityService) { + return serverCapabilityService.getServerCapabilities(); + }, + assignedSCs: function() { + return serverCapabilities + } + } + }); + modalInstance.result.then(function(selectedSCs) { + serverCapabilityService.assignSCsServer(server[0].id, selectedSCs) + .then( + function() { + $scope.refresh(); + } + ); + }, function () { + // do nothing + }); + }; + $scope.addServerCapability = function() { const params = { title: 'Add Server Capability', @@ -116,5 +145,5 @@ var TableServerServerCapabilitiesController = function(server, serverCapabilitie $scope.isCache = serverUtils.isCache; }; -TableServerServerCapabilitiesController.$inject = ['server', 'serverCapabilities', '$scope', '$state', '$uibModal', 'locationUtils', 'serverUtils', 'serverService', 'messageModel']; +TableServerServerCapabilitiesController.$inject = ['server', 'serverCapabilities', '$scope', '$state', '$uibModal', 'locationUtils', 'serverUtils', 'serverService', 'messageModel', 'serverCapabilityService']; module.exports = TableServerServerCapabilitiesController; diff --git a/traffic_portal/app/src/common/modules/table/serverServerCapabilities/index.js b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/index.js index 3913c51555..41ecef54e6 100644 --- a/traffic_portal/app/src/common/modules/table/serverServerCapabilities/index.js +++ b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/index.js @@ -18,4 +18,5 @@ */ module.exports = angular.module('trafficPortal.table.serverServerCapabilities', []) - .controller('TableServerServerCapabilitiesController', require('./TableServerServerCapabilitiesController')); + .controller('TableServerServerCapabilitiesController', require('./TableServerServerCapabilitiesController')) + .controller('TableAssignServerSCsController', require('./TableAssignServerSCsController')); diff --git a/traffic_portal/app/src/common/modules/table/serverServerCapabilities/table.assignServerSCs.tpl.html b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/table.assignServerSCs.tpl.html new file mode 100644 index 0000000000..ada2869832 --- /dev/null +++ b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/table.assignServerSCs.tpl.html @@ -0,0 +1,31 @@ + + + + + diff --git a/traffic_portal/app/src/common/modules/table/serverServerCapabilities/table.serverServerCapabilities.tpl.html b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/table.serverServerCapabilities.tpl.html index 484cdf55bc..ef30a77472 100644 --- a/traffic_portal/app/src/common/modules/table/serverServerCapabilities/table.serverServerCapabilities.tpl.html +++ b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/table.serverServerCapabilities.tpl.html @@ -25,7 +25,8 @@
  • Capabilities
  • - + +
    diff --git a/traffic_portal/app/src/scripts/config.js b/traffic_portal/app/src/scripts/config.js index fd9b322fb7..96dfbda3a4 100644 --- a/traffic_portal/app/src/scripts/config.js +++ b/traffic_portal/app/src/scripts/config.js @@ -23,4 +23,4 @@ angular.module('config', []) -.constant('ENV', { api: { unstable:'/api/4.0/', stable: "/api/3.1/" } }); +.constant('ENV', { api: { unstable:'/api/4.1/', stable: "/api/3.1/" } }); From e61e5f4a22ae75e39bd70c629e86b0d3c27f209a Mon Sep 17 00:00:00 2001 From: Rima Shah Date: Fri, 12 Aug 2022 13:04:13 -0600 Subject: [PATCH 2/4] Updated CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 78c1b611a7..2380756ce7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/). ## [unreleased] ### Added -- [#6033](https://github.com/apache/trafficcontrol/issues/6033) Added ability to assign multiple server capabilities to a server. +- [#6033](https://github.com/apache/trafficcontrol/issues/6033) [Traffic Ops] Added ability to assign multiple server capabilities to a server. +- [Traffic Portal] Added ability to assign multiple server capabilities to a server in TPv1 ### Changed - Traffic Portal now obscures sensitive text in Delivery Service "Raw Remap" fields, private SSL keys, "Header Rewrite" rules, and ILO interface passwords by default. From a4b2a4cb7a04f17824b36a113075258f8ae2c84e Mon Sep 17 00:00:00 2001 From: Rima Shah Date: Thu, 18 Aug 2022 10:25:59 -0600 Subject: [PATCH 3/4] Updated based on review comments. --- .../serverServerCapabilities/TableAssignServerSCsController.js | 1 + .../serverServerCapabilities/table.assignServerSCs.tpl.html | 1 + traffic_portal/app/src/scripts/config.js | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/traffic_portal/app/src/common/modules/table/serverServerCapabilities/TableAssignServerSCsController.js b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/TableAssignServerSCsController.js index 5b49f30136..9992834523 100644 --- a/traffic_portal/app/src/common/modules/table/serverServerCapabilities/TableAssignServerSCsController.js +++ b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/TableAssignServerSCsController.js @@ -61,3 +61,4 @@ var TableAssignServerSCsController = function(server, serverCapabilities, assign TableAssignServerSCsController.$inject = ['server', 'serverCapabilities', 'assignedSCs', '$scope', '$uibModalInstance']; module.exports = TableAssignServerSCsController; + diff --git a/traffic_portal/app/src/common/modules/table/serverServerCapabilities/table.assignServerSCs.tpl.html b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/table.assignServerSCs.tpl.html index ada2869832..cb1bbf09e7 100644 --- a/traffic_portal/app/src/common/modules/table/serverServerCapabilities/table.assignServerSCs.tpl.html +++ b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/table.assignServerSCs.tpl.html @@ -29,3 +29,4 @@