This is an automated email from the ASF dual-hosted git repository.
mitchell852 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git
The following commit(s) were added to refs/heads/master by this push:
new 8fbae55 Server Layered Profile Blueprint (#6095)
8fbae55 is described below
commit 8fbae55168c272b5c3dbd7d1e4d8b6bafbe2bcb4
Author: Rima Shah <[email protected]>
AuthorDate: Wed Jan 5 13:44:37 2022 -0700
Server Layered Profile Blueprint (#6095)
* blueprint for layered profile
---
blueprints/layered-profile-server.md | 238 +++++++++++++++++++++++++++++++++++
1 file changed, 238 insertions(+)
diff --git a/blueprints/layered-profile-server.md
b/blueprints/layered-profile-server.md
new file mode 100644
index 0000000..6b17b9d
--- /dev/null
+++ b/blueprints/layered-profile-server.md
@@ -0,0 +1,238 @@
+<!--
+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.
+-->
+# Layered Profile
+
+## Problem Description
+
+Profiles are unwieldy and dangerous for Operations.
+
+Currently, we have countless Profiles, in broad categories. For example,
"EDGE_123_FOO_ABC_ATS_714-RC0-42" might represent servers which are
+1. Edges
+2. Amiga 123 machines
+3. In the Foo CDN
+4. In the ABC datacenter
+5. Running ATS 7.14 RC0
+6. Who knows what 42 means?
+
+Suppose we have Amiga 456 machines, at DEF datacenters, and a Bar CDN, and
some servers are running ATS 7.15, 8.0, and 8.1. We make profiles for each
server we have fitting all those categories:
+
+EDGE_123_FOO_ABC_ATS_714-RC0-27, EDGE_456_FOO_ABC_ATS_714-RC0-27,
EDGE_123_BAR_ABC_ATS_714-RC0-42, EDGE_456_FOO_DEF_ATS_714-RC1-27,
EDGE_123_FOO_DEF_ATS_800-RC4-29
+
+- The number of Profiles quickly becomes a combinatorial explosion
+- It's nearly impossible for Ops engineers to figure out what Parameters are
assigned to all Profiles of a given CDN, machine, or datacenter.
+- What about that one random Parameter on a Cloned profile that was changed a
year ago? Is it still in place? Should it be? Did it need to be applied to all
new Profiles cloned from this one?
+
+## Proposed Change
+
+Layered Profiles allow assigning multiple profiles to Servers. If multiple
profiles have a parameter with the same name and config file, the parameter
from the last profile in the ordering is applied.
+
+Layered Profiles is exactly as powerful as the existing profiles, it doesn't
enable any new things. It makes profiles much easier to manage.
+
+With Layered Profiles, hundreds of profiles become a few dozen, each
representing a logical group. For example, a server might have the profiles, in
order:
+1. EDGE
+2. AMIGA_123
+3. CDN_FOO
+4. DATACENTER_ABC
+5. ATS_714
+6. Custom_Hack_42
+
+### Traffic Portal Impact
+
+1. A UI to view all parameters currently applied to a server, as well as the
profile each parameter came from. A new page, linked from Server pages. For eg:
+
+| Name |Config File
| Value | Profile |
+|--------------------------------------------------|--------------------------|--------------------------------------|-----------|
+| location | url_sig_myds.config
| /opt/trafficserver/etc/trafficserver | EDGE |
+| Drive_Prefix | storage.config
| /dev/sd | AMIGA_123 |
+| error_url | url_sig_myotherds.config
| 403 | EDGE |
+| CONFIG proxy.config.exec_thread.autoconfig.scale | records.config
| FLOAT 1.5 | ATS_714 |
+
+2. A UI change to add, remove, and reorder (sortable list) profiles for
Servers, on the existing Server pages.
+3. Filtering based on Profiles will also need to be updated to take into
account the plurality of Profiles.
+
+### Traffic Ops Impact
+
+- Add backend logic to the below-mentioned existing API endpoints, in order to
show/create/update/delete a sorted list of profiles for server.
+
+- `/servers/ GET, POST`
+- `/servers/{id} PUT, DELETE`
+- `/servers/details`
+- `/deliveryservices/{{ID}}/servers`
+- `/deliveryservices/{{ID}}/servers/eligible`
+
+#### REST API Impact
+
+- No new endpoints are required
+
+**Existing Endpoints**
+
+- Modify JSON request and response for existing servers endpoints.
+- **_Note_**: All fields in the response structure for API 4.0 except
`profileId`, `profileDesc` and `profile`, remain same.
+ - In API 4.0 `profile` changes to `profiles` and `profileId` and
`profileDesc` are no longer part of response structure
+
+#### API 4.0 GET
+- JSON **response** with the proposed change will look as follows:
+ `/servers?id=5`
+```JSON
+{
+ "response": [{
+ "id": 5,
+ "profiles": ["MID", "AMIGA_123", "CDN_FOO"]
+ }]
+}
+```
+
+`/servers`
+```JSON
+{
+ "response": [{
+ "profiles": ["MID", "AMIGA_123", "CDN_FOO"]
+ }]
+}
+```
+
+#### API 4.0 POST/PUT
+JSON **request** with the proposed change will look as follows:
+
+`POST /servers `
+```JSON
+{
+ "cachegroupId": 6,
+ "cdnId": 2,
+ "profiles": ["MID", "AMIGA_123", "CDN_FOO"]
+}
+```
+
+`PUT /servers/5`
+```JSON
+{
+ "cachegroupId": 6,
+ "cdnId": 2,
+ "profiles": ["MID", "AMIGA_123", "CDN_FOO"]
+}
+```
+
+return following **response**
+```JSON
+{ "alerts": [
+ {
+ "text": "Server created/updated",
+ "level": "success"
+ }
+],
+ "response": {
+ "cachegroup": "CDN_in_a_Box_Mid",
+ "cachegroupId": 6,
+ "cdnId": 2,
+ "id": 5,
+ "profiles": ["MID", "AMIGA_123", "CDN_FOO"]
+ }
+}
+```
+
+The following table describes the top level `layered_profile` object for
servers:
+
+| field | type | optionality | description
|
+| ----------------| ---------------------| ----------- |
---------------------------------------------------------|
+| server | bigint | required | the server id
associated with a given profile |
+| profiles | text [] | required | the profile names
associated with a server |
+| order | bigint | required | the order in which a
profile is applied to a server |
+
+**API constraints**
+- In API 4.0,
+ - GET `/servers` object, `profiles` field is an array,
+ - and a PUT or POST `/servers` allows multiple profiles to be assigned, and
displayed in the UI, etc.
+ The UI may or may not display a list (which can only add 1), but the
client implements handling multiple, and the API is documented to potentially
return multiple and how their parameters must be applied.
+- Add `Profiles` key to API endpoints for Server objects
+
+#### Client Impact
+- Existing Go client methods will be updated for the `/servers` endpoints in
order to write TO API tests for the exising endpoints.
+- All functions which get Parameters on Servers must be changed to get the
Parameters of all assigned Profiles in order.
+
+#### Data Model / Database Impact
+
+- A new Database Table `server_profiles` as described below, will be created:
+```text
+ Table "traffic_ops.server_profiles"
+ Column | Type | Collation | Nullable | Default
+---------------+--------------------------+-----------+----------+--------
+ server | bigint | | not null |
+ profile_name | text | | not null |
+ order | bigint | | not null |
+Indexes:
+ "pk_server_profile" PRIMARY KEY(profile_name, server, order)
+Foreign-key constraints:
+ "fk_server" FOREIGN KEY (server) REFERENCES server(id)
+ "fk_server" FOREIGN KEY (profile_name) REFERENCES profile(name)
+```
+
+All profiles assigned to a given server will have the same values of:
+- type
+- cdn
+If any of those differ within the same server, it's probably a mistake.
+
+### ORT Impact
+New set of profiles will be created and the profile-parameter relationship
will change.
+
+### Traffic Monitor Impact
+No impact
+
+### Traffic Router Impact
+These changes will affect the Snapshot generation (both crconfig and
monitoring). Even though that is more of a TO impact.
+Reason being that Snapshots and Monitoring Configurations for a CDN include
Profile and Parameter information for the servers, Traffic Monitors, and
Traffic Routersz.
+
+### Traffic Stats Impact
+No impact
+
+### Traffic Vault Impact
+No impact
+
+### Documentation Impact
+All existing endpoints will need to be updated, along with the documentation
explaining `layered_profile`.
+
+### Testing Impact
+Client/API integration tests should be updated to verify the `layered_profile`
functionality on existing API `/servers` endpoints.
+
+### Performance Impact
+We do not anticipate any performance impact with layered_profile approach.
+
+### Security Impact
+We do not anticipate any impact on security.
+
+### Upgrade Impact
+- A Database Migration to:
+ - drop profile column in existing server table
+ - insert existing server profiles along with their order into the new
table(server_profiles)
+
+### Operations Impact
+The profile-parameter relationship will change based on new sets of profile
and Operations will have to learn on how to assign profile order to a server.
+
+### Developer Impact
+Developers will most likely need to use layered_profile, so they'll need to be
familiar with the process
+of adding, sorting, deleting, debugging and working with layered_profiles.
+When searching for any parameters assigned to a profile for a given server,
one will need to look up all profiles assigned to the server and then process
all the parameters in order to get the "final" view of the profile.
+
+## Alternatives
+None, except to keep using existing Profiles.
+
+## Dependencies
+None
+
+## References
+None