Pamela Dragosh | 5fc2fdb | 2019-05-17 09:42:27 -0400 | [diff] [blame] | 1 | .. This work is licensed under a Creative Commons Attribution 4.0 International License. |
Jim Hahn | d5cc948 | 2019-05-29 15:41:48 -0400 | [diff] [blame] | 2 | .. http://creativecommons.org/licenses/by/4.0 |
Pamela Dragosh | 5fc2fdb | 2019-05-17 09:42:27 -0400 | [diff] [blame] | 3 | |
| 4 | .. _pap-label: |
| 5 | |
| 6 | Policy Administration Point (PAP) Architecture |
liamfallon | 4d1d983 | 2019-05-30 20:53:05 +0000 | [diff] [blame^] | 7 | ############################################## |
Jim Hahn | d5cc948 | 2019-05-29 15:41:48 -0400 | [diff] [blame] | 8 | |
liamfallon | 4d1d983 | 2019-05-30 20:53:05 +0000 | [diff] [blame^] | 9 | .. contents:: |
| 10 | :depth: 3 |
Jim Hahn | d5cc948 | 2019-05-29 15:41:48 -0400 | [diff] [blame] | 11 | |
liamfallon | 4d1d983 | 2019-05-30 20:53:05 +0000 | [diff] [blame^] | 12 | The PAP keeps track of PDPs, supporting the deployment of PDP groups and the deployment of a *policy set* across those |
| 13 | PDP groups. Policies are created using the Policy API, but are deployed via the PAP. |
Jim Hahn | d5cc948 | 2019-05-29 15:41:48 -0400 | [diff] [blame] | 14 | |
liamfallon | 4d1d983 | 2019-05-30 20:53:05 +0000 | [diff] [blame^] | 15 | A PAP is stateless in a RESTful sense, using the database (persistent storage) to track PDPs and the deployment of |
| 16 | policies to those PDPs. In short, policy management on PDPs is the responsibility of PAPs; management of policy sets or |
| 17 | policies by any other manner is not permitted. |
| 18 | |
| 19 | Because the PDP is the main unit of scalability in the Policy Framework, the framework is designed to allow PDPs in a |
| 20 | PDP group to arbitrarily appear and disappear and for policy consistency across all PDPs in a PDP group to be easily |
| 21 | maintained. The PAP is responsible for controlling the state across the PDPs in a PDP group. The PAP interacts with the |
| 22 | Policy database and transfers policy sets to PDPs. |
| 23 | |
| 24 | There are a number of rules for PDP group and PDP state management: |
| 25 | |
| 26 | 1. Only one version of a PDP group may be ACTIVE at any time |
| 27 | |
| 28 | 2. If a PDP group with a certain version is ACTIVE and a later version of the same PDP group is activated, then the |
| 29 | system upgrades the PDP group |
| 30 | |
| 31 | 3. If a PDP group with a certain version is ACTIVE and an earlier version of the same PDP group is activated, then the |
| 32 | system downgrades the PDP group |
| 33 | |
| 34 | 4. There is no restriction on the number of PASSIVE versions of a PDP group that can exist in the system |
Pamela Dragosh | 5fc2fdb | 2019-05-17 09:42:27 -0400 | [diff] [blame] | 35 | |
| 36 | |
liamfallon | 4d1d983 | 2019-05-30 20:53:05 +0000 | [diff] [blame^] | 37 | 1 APIs |
| 38 | ====== |
| 39 | The APIs in the subchapters below are supported by the PAP. |
| 40 | |
| 41 | 1.1 REST API |
| 42 | ------------ |
| 43 | |
| 44 | The purpose of this API is to support CRUD of PDP groups and subgroups and to support the deployment and life cycles of |
| 45 | policies on PDP sub groups and PDPs. This API is provided by the *PolicyAdministration* component (PAP) of the Policy |
| 46 | Framework, see the :ref:`ONAP Policy Framework Architecture <architecture-label>` page. |
| 47 | |
| 48 | PDP groups and subgroups may be prefedined in the system. Predefined groups and subgroups may be modified or deleted |
| 49 | over this API. The policies running on predefined groups or subgroups as well as the instance counts and properties may |
| 50 | also be modified. |
| 51 | |
| 52 | A PDP may be preconfigured with its PDP group, PDP subgroup, and policies. The PDP sends this information to the PAP |
| 53 | when it starts. If the PDP group, subgroup, or any policy is unknown to the PAP, the PAP locks the PDP in state PASSIVE. |
Pamela Dragosh | 5fc2fdb | 2019-05-17 09:42:27 -0400 | [diff] [blame] | 54 | |
Jim Hahn | d5cc948 | 2019-05-29 15:41:48 -0400 | [diff] [blame] | 55 | PAP supports the operations listed in the following table, via its REST API: |
| 56 | |
| 57 | .. csv-table:: |
| 58 | :header: "Operation", "Description" |
| 59 | :widths: 25,70 |
| 60 | |
| 61 | "Health check", "Queries the health of the PAP" |
| 62 | "Statistics", "Queries various statistics" |
| 63 | "PDP state change", "Changes the state of all PDPs in a PDP Group" |
| 64 | "PDP Group create/update", "Creates/updates PDP Groups" |
| 65 | "PDP Group delete", "Deletes a PDP Group" |
| 66 | "PDP Group query", "Queries all PDP Groups" |
| 67 | "Deploy policy", "Deploys one or more policies to the PDPs" |
| 68 | "Undeploy policy", "Undeploys a policy from the PDPs" |
| 69 | |
liamfallon | 4d1d983 | 2019-05-30 20:53:05 +0000 | [diff] [blame^] | 70 | 1.2 DMaaP API |
| 71 | ------------- |
Jim Hahn | d5cc948 | 2019-05-29 15:41:48 -0400 | [diff] [blame] | 72 | |
| 73 | PAP interacts with the PDPs via the DMaaP Message Router. The messages listed |
| 74 | in the following table are transmitted via DMaaP: |
| 75 | |
| 76 | .. csv-table:: |
| 77 | :header: "Message", "Direction", "Description" |
| 78 | :widths: 25,10,70 |
| 79 | |
| 80 | "PDP status", "Incoming", "Registers a PDP with PAP; also sent as a periodic heart beat; also sent in response to requests from the PAP" |
| 81 | "PDP update", "Outgoing", "Assigns a PDP to a PDP Group and Subgroup; also deploys or undeploys policies from the PDP" |
| 82 | "PDP state change", "Outgoing", "Changes the state of a PDP or all PDPs within a PDP Group or Subgroup" |
| 83 | |
| 84 | |
liamfallon | 4d1d983 | 2019-05-30 20:53:05 +0000 | [diff] [blame^] | 85 | 2 PAP REST API Swagger |
| 86 | ====================== |
Jim Hahn | d5cc948 | 2019-05-29 15:41:48 -0400 | [diff] [blame] | 87 | |
liamfallon | 4d1d983 | 2019-05-30 20:53:05 +0000 | [diff] [blame^] | 88 | It is worth noting that we use basic authorization for access with user name and password set to *healthcheck* and |
| 89 | *zb!XztG34*, respectively. |
Jim Hahn | d5cc948 | 2019-05-29 15:41:48 -0400 | [diff] [blame] | 90 | |
liamfallon | 4d1d983 | 2019-05-30 20:53:05 +0000 | [diff] [blame^] | 91 | For every call, the client is encouraged to insert a uuid-type *requestID* as parameter. It is helpful for tracking each |
| 92 | http transaction and facilitates debugging. More importantly, it complies with Logging requirements v1.2. If the client |
| 93 | does not provide the requestID in a call, one will be randomly generated and attached to the response header, |
| 94 | *x-onap-requestid*. |
Jim Hahn | d5cc948 | 2019-05-29 15:41:48 -0400 | [diff] [blame] | 95 | |
liamfallon | 4d1d983 | 2019-05-30 20:53:05 +0000 | [diff] [blame^] | 96 | In accordance with `ONAP API Common Versioning Strategy Guidelines |
| 97 | <https://wiki.onap.org/display/DW/ONAP+API+Common+Versioning+Strategy+%28CVS%29+Guidelines>`_, several custom headers |
| 98 | are added in the response to each call: |
Jim Hahn | d5cc948 | 2019-05-29 15:41:48 -0400 | [diff] [blame] | 99 | |
| 100 | .. csv-table:: |
| 101 | :header: "Header", "Example value", "Description" |
| 102 | :widths: 25,10,70 |
| 103 | |
| 104 | "x-latestversion", "1.0.0", "latest version of the API" |
| 105 | "x-minorversion", "0", "MINOR version of the API" |
| 106 | "x-patchversion", "0", "PATCH version of the API" |
| 107 | "x-onap-requestid", "e1763e61-9eef-4911-b952-1be1edd9812b", "described above; used for logging purposes" |
| 108 | |
| 109 | |
| 110 | .. swaggerv2doc:: swagger/health-check-pap.json |
| 111 | |
liamfallon | 4d1d983 | 2019-05-30 20:53:05 +0000 | [diff] [blame^] | 112 | This operation performs a health check on the PAP. |
| 113 | |
Jim Hahn | d5cc948 | 2019-05-29 15:41:48 -0400 | [diff] [blame] | 114 | .. swaggerv2doc:: swagger/statistics-pap.json |
| 115 | |
liamfallon | 4d1d983 | 2019-05-30 20:53:05 +0000 | [diff] [blame^] | 116 | This operation allows statistics for PDP groups, PDP subgroups, and individual PDPs to be retrieved. |
| 117 | |
| 118 | .. note:: |
| 119 | While this API is supported, most of the statistics are not currently updated; that work has been deferred to a later |
| 120 | release. |
Jim Hahn | d5cc948 | 2019-05-29 15:41:48 -0400 | [diff] [blame] | 121 | |
| 122 | .. swaggerv2doc:: swagger/state-change-pap.json |
| 123 | |
liamfallon | 4d1d983 | 2019-05-30 20:53:05 +0000 | [diff] [blame^] | 124 | The state of PDP groups is managed by this operation. PDP groups can be in states PASSIVE, TEST, SAFE, or ACTIVE. For a full |
| 125 | description of PDP group states, see the :ref:`ONAP Policy Framework Architecture <architecture-label>` page. |
| 126 | |
Jim Hahn | d5cc948 | 2019-05-29 15:41:48 -0400 | [diff] [blame] | 127 | .. swaggerv2doc:: swagger/group-pap.json |
| 128 | |
liamfallon | 4d1d983 | 2019-05-30 20:53:05 +0000 | [diff] [blame^] | 129 | This operation allows the PDP groups and subgroups to be created and updated. Many PDP groups can be created or updated |
| 130 | in a single POST operation by specifying more than one PDP group in the POST operation body. |
| 131 | |
| 132 | .. note:: |
| 133 | Due to current limitations, if a subgroup is to be deleted from a PDP Group, then the policies must be removed from |
| 134 | the subgroup in one request, and then the subgroup deleted in a subsequent request. |
Jim Hahn | d5cc948 | 2019-05-29 15:41:48 -0400 | [diff] [blame] | 135 | |
| 136 | .. swaggerv2doc:: swagger/group-delete-pap.json |
| 137 | |
liamfallon | 4d1d983 | 2019-05-30 20:53:05 +0000 | [diff] [blame^] | 138 | The API also allows PDP groups to be deleted. DELETE operations are only permitted on PDP groups in PASSIVE state. |
| 139 | |
Jim Hahn | d5cc948 | 2019-05-29 15:41:48 -0400 | [diff] [blame] | 140 | .. swaggerv2doc:: swagger/group-query-pap.json |
| 141 | |
liamfallon | 4d1d983 | 2019-05-30 20:53:05 +0000 | [diff] [blame^] | 142 | This operation allows the PDP groups and subgroups to be listed as well as the policies that are deployed on each PDP |
| 143 | group and subgroup. |
| 144 | |
Jim Hahn | d5cc948 | 2019-05-29 15:41:48 -0400 | [diff] [blame] | 145 | .. swaggerv2doc:: swagger/policy-deploy-pap.json |
| 146 | |
liamfallon | 4d1d983 | 2019-05-30 20:53:05 +0000 | [diff] [blame^] | 147 | This operation allows policies to be deployed on PDP groups. |
| 148 | |
| 149 | .. note:: |
| 150 | The policy version is optional. If left unspecified, then the latest version of the policy is deployed. On the other |
| 151 | hand, if it is specified, it may be an integer, or it may be a fully qualified version (e.g., "3.0.2"). |
Jim Hahn | d5cc948 | 2019-05-29 15:41:48 -0400 | [diff] [blame] | 152 | |
| 153 | .. swaggerv2doc:: swagger/policy-undeploy-pap.json |
| 154 | |
liamfallon | 4d1d983 | 2019-05-30 20:53:05 +0000 | [diff] [blame^] | 155 | This operation allows policies to be undeployed from PDP groups. |
Jim Hahn | d5cc948 | 2019-05-29 15:41:48 -0400 | [diff] [blame] | 156 | |
liamfallon | 4d1d983 | 2019-05-30 20:53:05 +0000 | [diff] [blame^] | 157 | .. note:: |
| 158 | If the policy version is specified, then it may be an integer, or it may be a fully qualified version (e.g., "3.0.2"). |
| 159 | On the other hand, if left unspecified, then the latest deployed version will be undeployed. |
| 160 | |
| 161 | .. note:: |
| 162 | Due to current limitations, a fully qualified policy version must always be specified. |
| 163 | |
| 164 | 3 Future Features |
| 165 | ================= |
| 166 | |
| 167 | 3.1 Order Health Check on PDPs |
| 168 | ============================== |
| 169 | |
| 170 | This operation will allow a PDP group health check to be ordered on PDP groups and on individual PDPs. The operation |
| 171 | will return a HTTP status code of *202: Accepted* if the health check request has been accepted by the PAP. The PAP will |
| 172 | then order execution of the health check on the PDPs. |
| 173 | |
| 174 | As health checks may be long lived operations, Health checks will be scheduled for execution by this operation. Users |
| 175 | will check the result of a health check test by issuing a PDP Group Query operation and checking the *healthy* field of |
| 176 | PDPs. |
| 177 | |
Pamela Dragosh | 5fc2fdb | 2019-05-17 09:42:27 -0400 | [diff] [blame] | 178 | |
| 179 | End of Document |