diff --git a/CHANGELOG.md b/CHANGELOG.md index 720c4d0872..9ce1e4d024 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/). ## [unreleased] ### Added +- [#7314](https://github.com/apache/trafficcontrol/pull/7314) *Traffic Portal* Added capability feature to Delivery Service Form (HTTP, DNS) - [#7295](https://github.com/apache/trafficcontrol/pull/7295) *Traffic Portal* Added description and priority order for Layered Profile on server form. - [#6234](https://github.com/apache/trafficcontrol/issues/6234) *Traffic Ops, Traffic Portal* Added description field to Server Capabilities - [#6033](https://github.com/apache/trafficcontrol/issues/6033) *Traffic Ops, Traffic Portal* Added ability to assign multiple servers per capability. diff --git a/traffic_portal/app/src/app.js b/traffic_portal/app/src/app.js index 386f77a3bd..92bf0ddec0 100644 --- a/traffic_portal/app/src/app.js +++ b/traffic_portal/app/src/app.js @@ -102,7 +102,6 @@ var trafficPortal = angular.module('trafficPortal', [ require('./modules/private/deliveryServiceRequests/edit').name, require('./modules/private/deliveryServiceRequests/list').name, require('./modules/private/deliveryServices').name, - require('./modules/private/deliveryServices/capabilities').name, require('./modules/private/deliveryServices/clone').name, require('./modules/private/deliveryServices/charts').name, require('./modules/private/deliveryServices/charts/view').name, @@ -373,7 +372,6 @@ var trafficPortal = angular.module('trafficPortal', [ require('./common/modules/table/cdniConfigRequests').name, require('./common/modules/table/coordinates').name, require('./common/modules/table/deliveryServices').name, - require('./common/modules/table/deliveryServiceCapabilities').name, require('./common/modules/table/deliveryServiceJobs').name, require('./common/modules/table/deliveryServiceOrigins').name, require('./common/modules/table/deliveryServiceRegexes').name, diff --git a/traffic_portal/app/src/common/modules/form/_form.scss b/traffic_portal/app/src/common/modules/form/_form.scss index 40acad9407..e6956cc703 100644 --- a/traffic_portal/app/src/common/modules/form/_form.scss +++ b/traffic_portal/app/src/common/modules/form/_form.scss @@ -370,3 +370,17 @@ input:checked + .slider::before { text-shadow: none; } } + +.checkbox-scroll-container { + max-height: 3.5em; + overflow-y: auto; + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-content: space-between; + + div { + min-width: 5em; + width: fit-content; + } +} diff --git a/traffic_portal/app/src/common/modules/form/deliveryService/FormDeliveryServiceController.js b/traffic_portal/app/src/common/modules/form/deliveryService/FormDeliveryServiceController.js index d3146230cd..8f23f9ce75 100644 --- a/traffic_portal/app/src/common/modules/form/deliveryService/FormDeliveryServiceController.js +++ b/traffic_portal/app/src/common/modules/form/deliveryService/FormDeliveryServiceController.js @@ -37,9 +37,10 @@ * @param {import("../../../api/TenantService")} tenantService * @param {import("../../../models/PropertiesModel")} propertiesModel * @param {import("../../../models/UserModel")} userModel + * @param {import("../../../api/ServerCapabilityService")} serverCapabilityService * @param {import("../../../api/ServiceCategoryService")} serviceCategoryService */ -var FormDeliveryServiceController = function(deliveryService, dsCurrent, origin, topologies, type, types, $scope, formUtils, tenantUtils, deliveryServiceUtils, deliveryServiceService, cdnService, profileService, tenantService, propertiesModel, userModel, serviceCategoryService) { +var FormDeliveryServiceController = function(deliveryService, dsCurrent, origin, topologies, type, types, $scope, formUtils, tenantUtils, deliveryServiceUtils, deliveryServiceService, cdnService, profileService, tenantService, propertiesModel, userModel, serverCapabilityService, serviceCategoryService) { /** * This is used to cache TLS version settings when the checkbox is toggled. @@ -197,6 +198,16 @@ var FormDeliveryServiceController = function(deliveryService, dsCurrent, origin, tenantUtils.addLevels($scope.tenants); } + $scope.selectedCapabilities = {}; + /** + * Updates the server Capabilities on the $scope. + * @returns {Promise} + */ + async function getRequiredCapabilities() { + $scope.requiredCapabilities = await serverCapabilityService.getServerCapabilities(); + $scope.selectedCapabilities = Object.fromEntries($scope.requiredCapabilities.map(dsc => [dsc.name, $scope.deliveryService.requiredCapabilities.includes(dsc.name)])) + } + /** * Updates the Service Categories on the $scope. * @returns {Promise} @@ -469,6 +480,7 @@ var FormDeliveryServiceController = function(deliveryService, dsCurrent, origin, getCDNs(); getProfiles(); getTenants(); + getRequiredCapabilities(); getServiceCategories(); getSteeringTargets(); if (!deliveryService.consistentHashQueryParams || deliveryService.consistentHashQueryParams.length < 1) { @@ -488,5 +500,5 @@ var FormDeliveryServiceController = function(deliveryService, dsCurrent, origin, } }; -FormDeliveryServiceController.$inject = ["deliveryService", "dsCurrent", "origin", "topologies", "type", "types", "$scope", "formUtils", "tenantUtils", "deliveryServiceUtils", "deliveryServiceService", "cdnService", "profileService", "tenantService", "propertiesModel", "userModel", "serviceCategoryService"]; +FormDeliveryServiceController.$inject = ["deliveryService", "dsCurrent", "origin", "topologies", "type", "types", "$scope", "formUtils", "tenantUtils", "deliveryServiceUtils", "deliveryServiceService", "cdnService", "profileService", "tenantService", "propertiesModel", "userModel", "serverCapabilityService", "serviceCategoryService"]; module.exports = FormDeliveryServiceController; diff --git a/traffic_portal/app/src/common/modules/form/deliveryService/edit/FormEditDeliveryServiceController.js b/traffic_portal/app/src/common/modules/form/deliveryService/edit/FormEditDeliveryServiceController.js index 4aea4903e7..87ecae043d 100644 --- a/traffic_portal/app/src/common/modules/form/deliveryService/edit/FormEditDeliveryServiceController.js +++ b/traffic_portal/app/src/common/modules/form/deliveryService/edit/FormEditDeliveryServiceController.js @@ -265,6 +265,8 @@ var FormEditDeliveryServiceController = function(deliveryService, origin, topolo * @returns */ $scope.save = async function(deliveryService) { + deliveryService.requiredCapabilities = Object.entries($scope.selectedCapabilities).filter(sc => (sc[1])).map(sc => sc[0]) + if ( deliveryService.sslKeyVersion !== null && deliveryService.sslKeyVersion !== 0 && diff --git a/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.DNS.tpl.html b/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.DNS.tpl.html index 54d77850d1..8a0b3b9afd 100644 --- a/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.DNS.tpl.html +++ b/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.DNS.tpl.html @@ -61,7 +61,6 @@
  • Manage Invalidation Requests
  • Manage Origins
  • Manage Regexes
  • -
  • Manage Required Server Capabilities
  • Manage Servers
  • Manage Static DNS Entries
  • @@ -343,6 +342,33 @@

    Previous Value

    +
    + +
    + + +
    +
    +
    + +
    + + +
    +