Skip to content

Commit

Permalink
Assign multiple servers to a capability (#7079)
Browse files Browse the repository at this point in the history
* Added TO logic to assign multiple servers per capability.

* Added TP logic to assign multiple servers per capability.

* minor corrections and variable name change

* Fixed vairable names.

* Fixed broken links and another variable name change.

* Updated test client.

* Updated based on review comments.

* Changed serverIDs type to int to avoid string to int conversion.

* Added multiple_servers_capabilities() and changed the documents and routes to match the API call to this new function.

* Updated tests, and TP to relate to multiple_servers_capabilities().

* Removed old function for mass-assignment (server or capability)

* Updated route ID

* Updated docs

* Updated docs-1

* Split PUT API call into POST and DELETE.

* Updated tests

* Updated docs-2

* Updated tests, added another condition for simultaneous add, delete.

* Updated tests-1

* Tired to remove database query built from user-controlled sources

* Fix APIv5 test.

* Fixed docs based on review comments and removed duplicate code.

* Added pageType variable to reduce if-else statements.

* Updated per review comments-1

* Updated tests.

* Updated tests and docs.

* Removed unused variable

* Added check for many:many

* Added validation for JSON body.

* Updated tests based on newly added validation logic.
  • Loading branch information
rimashah25 committed Oct 31, 2022
1 parent 22c418f commit 7086637
Show file tree
Hide file tree
Showing 23 changed files with 1,009 additions and 275 deletions.
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ 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) *Traffic Ops, Traffic Portal* Added ability to assign multiple servers per capability.
- [#7081](https://github.com/apache/trafficcontrol/issues/7081) *Traffic Router* Added better log messages for TR connection exceptions.
- [#7089](https://github.com/apache/trafficcontrol/issues/7089) *Traffic Router* Added the ability to specify HTTPS certificate attributes.
- [#7109](https://github.com/apache/trafficcontrol/pull/7109) *Traffic Router* Removed `dnssec.zone.diffing.enabled` and `dnssec.rrsig.cache.enabled` parameters.
Expand All @@ -14,7 +15,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
- [#7063](https://github.com/apache/trafficcontrol/pull/7063) *Traffic Ops* Added API version 5.0 (IN DEVELOPMENT)
- [#2101](https://github.com/apache/trafficcontrol/issues/2101) *Traffic Portal* Added the ability to tell if a Delivery Service is the target of another steering DS.
- [#6021](https://github.com/apache/trafficcontrol/issues/6021) *Traffic Portal* Added the ability to view a change logs message in it's entirety by clicking on it.
- [#6033](https://github.com/apache/trafficcontrol/issues/6033) *Traffic Ops, Traffic Portal* Added ability to assign multiple server capabilities to a server.
- [#7078](https://github.com/apache/trafficcontrol/issues/7078) *Traffic Ops, Traffic Portal* Added ability to assign multiple server capabilities to a server.
- [#7096](https://github.com/apache/trafficcontrol/issues/7096) [Health Client] Added health client parent health
- [#7032](https://github.com/apache/trafficcontrol/issues/7032) *Cache Config* Add t3c-apply flag to use local ATS version for config generation rather than Server package Parameter, to allow managing the ATS OS package via external tools. See 'man t3c-apply' and 'man t3c-generate' for details.
- [#7097](https://github.com/apache/trafficcontrol/issues/7097) *Traffic Ops, Traffic Portal, t3c* Added the `regional` field to Delivery Services, which affects whether `maxOriginConnections` should be per Cache Group
Expand Down
83 changes: 0 additions & 83 deletions docs/source/api/v4/multiple_server_capabilities.rst

This file was deleted.

192 changes: 192 additions & 0 deletions docs/source/api/v4/multiple_servers_capabilities.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
..
..
.. Licensed 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.
..
.. _to-api-v4-multiple_servers_capabilities:

*********************************
``multiple_servers_capabilities``
*********************************

.. versionadded:: 4.1

``POST``
========
Inserts a list of :term:`Server Capability` names associated to a server and vice versa i.e insert a list of :term:`Server` ids associated to a server capability.

:Auth. Required: Yes
:Roles Required: "admin" or "operations"
:Permissions Required: SERVER:READ, SERVER:CREATE, SERVER-CAPABILITY:READ, SERVER-CAPABILITY:CREATE
:Response Type: Object

Request Structure
-----------------
:serverIds: List of :term:`Server` ids (integral, unique identifier) associated with a :term:`Server Capability`
:serverCapabilities: List of :term:`Server Capability` names to associate with a :term:`Server` id
:pageType: To determine which configuration (server or server capabilities) is requesting association. Only two values are permitted: `server` or `sc` (short for server capability). If `server` is chosen, it implies that multiple server capabilities are to be associated with a given server id. If `sc` is chosen, it implies that multiple server ids are to be associated with a given server capability.

.. code-block:: http
:caption: Request Example1
POST /api/4.1/multiple_servers_capabilities/ HTTP/1.1
Host: trafficops.infra.ciab.test
User-Agent: curl/7.47.0
Accept: */*
Cookie: mojolicious=...
Content-Length: 84
Content-Type: application/json
{
"serverIds": [1],
"serverCapabilities": ["test", "disk"]
"pageType": "server"
}
.. code-block:: http
:caption: Request Example2
POST /api/4.1/multiple_servers_capabilities/ HTTP/1.1
Host: trafficops.infra.ciab.test
User-Agent: curl/7.47.0
Accept: */*
Cookie: mojolicious=...
Content-Length: 84
Content-Type: application/json
{
"serverIds": [2, 3]
"serverCapabilities": ["eas"],
"pageType": "sc"
}
Response Structure
------------------
:serverId: List of :term:`Server` ids (integral, unique identifier) associated with a server capability.
:serverCapabilities: List of :term:`Server Capability` names to be associated with a :term:`Server` id.

.. code-block:: http
:caption: Response Example1
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Set-Cookie, Cookie
Access-Control-Allow-Methods: POST,GET,OPTIONS,PUT,DELETE
Access-Control-Allow-Origin: *
Content-Type: application/json
Set-Cookie: mojolicious=...; Path=/; Expires=Mon, 8 Aug 2022 22:40:54 GMT; Max-Age=3600; HttpOnly
Whole-Content-Sha512: eQrl48zWids0kDpfCYmmtYMpegjnFxfOVvlBYxxLSfp7P7p6oWX4uiC+/Cfh2X9i3G+MQ36eH95gukJqOBOGbQ==
X-Server-Name: traffic_ops_golang/
Date: Mon, 08 Aug 2022 16:15:11 GMT
Content-Length: 157
{
"alerts": [{
"text": "Multiple Server Capabilities assigned to a server",
"level": "success"
}],
"response": {
"serverIds": [1],
"serverCapabilities": ["test", "disk"]
}
}
.. code-block:: http
:caption: Response Example2
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Set-Cookie, Cookie
Access-Control-Allow-Methods: POST,GET,OPTIONS,PUT,DELETE
Access-Control-Allow-Origin: *
Content-Type: application/json
Set-Cookie: mojolicious=...; Path=/; Expires=Mon, 8 Aug 2022 22:40:54 GMT; Max-Age=3600; HttpOnly
Whole-Content-Sha512: eQrl48zWids0kDpfCYmmtYMpegjnFxfOVvlBYxxLSfp7P7p6oWX4uiC+/Cfh2X9i3G+MQ36eH95gukJqOBOGbQ==
X-Server-Name: traffic_ops_golang/
Date: Mon, 08 Aug 2022 16:15:11 GMT
Content-Length: 157
{
"alerts": [{
"text": "Multiple Servers assigned to a capability",
"level": "success"
}],
"response": {
"serverIds": [2, 3]
"serverCapabilities": ["eas"],
}
}
``DELETE``
==========
Deletes a list of :term:`Server Capability` names associated to a server and vice versa i.e. deletes a list of :term:`Server` ids associated to a server capability.

:Auth. Required: Yes
:Roles Required: "admin" or "operations"
:Permissions Required: SERVER:READ, SERVER:DELETE, SERVER-CAPABILITY:READ, SERVER-CAPABILITY:DELETE
:Response Type: Object

Request Structure
-----------------
:serverIds: List of :term:`Server` ids (integral, unique identifier) associated with a :term:`Server Capability`
:serverCapabilities: List of :term:`Server Capability` names to associate with a :term:`Server` id
:pageType: To determine which configuration (server or server capabilities) is requesting deletion. Only two values are permitted: `server` or `sc` (short for server capability). If `server` is chosen, it implies that multiple server capabilities are to be deleted for a given server id. If `sc` is chosen, it implies that multiple server ids are to be deleted for a given server capability.

.. code-block:: http
:caption: Request Example
DELETE /api/4.1/multiple_servers_capabilities/ HTTP/1.1
Host: trafficops.infra.ciab.test
User-Agent: curl/7.47.0
Accept: */*
Cookie: mojolicious=...
Content-Length: 84
Content-Type: application/json
{
"serverIds": [2, 3]
"serverCapabilities": ["eas"],
"pageType": "sc"
}
Response Structure
------------------
:serverId: List of :term:`Server` ids (integral, unique identifier) associated with a server capability.
:serverCapabilities: List of :term:`Server Capability` names to be associated with a :term:`Server` id.

.. code-block:: http
:caption: Response Example
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Set-Cookie, Cookie
Access-Control-Allow-Methods: POST,GET,OPTIONS,PUT,DELETE
Access-Control-Allow-Origin: *
Content-Type: application/json
Set-Cookie: mojolicious=...; Path=/; Expires=Mon, 8 Aug 2022 22:40:54 GMT; Max-Age=3600; HttpOnly
Whole-Content-Sha512: eQrl48zWids0kDpfCYmmtYMpegjnFxfOVvlBYxxLSfp7P7p6oWX4uiC+/Cfh2X9i3G+MQ36eH95gukJqOBOGbQ==
X-Server-Name: traffic_ops_golang/
Date: Mon, 08 Aug 2022 16:15:11 GMT
Content-Length: 157
{
"alerts": [{
"text": "Removed multiple servers from capabilities or multiple servers to a capability",
"level": "success"
}],
"response": {
"serverIds": [2, 3]
"serverCapabilities": ["eas"],
}
}
81 changes: 0 additions & 81 deletions docs/source/api/v5/multiple_server_capabilities.rst

This file was deleted.

0 comments on commit 7086637

Please sign in to comment.