diff options
Diffstat (limited to 'docs/pap')
-rw-r--r-- | docs/pap/InternalPapPdp.rst | 428 | ||||
-rw-r--r-- | docs/pap/images/PolicyImplPDPSubGroup.svg | 2 | ||||
-rw-r--r-- | docs/pap/pap.rst | 139 | ||||
-rw-r--r-- | docs/pap/response/consolidated-healthcheck-pap-resp.json | 48 | ||||
-rw-r--r-- | docs/pap/response/deployed-policy-pap-resp.json | 38 | ||||
-rw-r--r-- | docs/pap/response/pdp-statistics-pap-resp.json | 45 | ||||
-rw-r--r-- | docs/pap/swagger/consolidated-healthcheck-pap.json | 101 | ||||
-rw-r--r-- | docs/pap/swagger/deployed-policy-pap.json | 322 | ||||
-rw-r--r-- | docs/pap/swagger/deployments-batch-pap.json | 4 | ||||
-rw-r--r-- | docs/pap/swagger/group-delete-pap.json | 4 | ||||
-rw-r--r-- | docs/pap/swagger/group-query-pap.json | 4 | ||||
-rw-r--r-- | docs/pap/swagger/groups-batch-pap.json | 4 | ||||
-rw-r--r-- | docs/pap/swagger/pdp-statistics-pap.json | 368 | ||||
-rw-r--r-- | docs/pap/swagger/policy-deploy-pap.json | 4 | ||||
-rw-r--r-- | docs/pap/swagger/policy-undeploy-pap.json | 6 | ||||
-rw-r--r-- | docs/pap/swagger/state-change-pap.json | 4 |
16 files changed, 1477 insertions, 44 deletions
diff --git a/docs/pap/InternalPapPdp.rst b/docs/pap/InternalPapPdp.rst new file mode 100644 index 00000000..998514af --- /dev/null +++ b/docs/pap/InternalPapPdp.rst @@ -0,0 +1,428 @@ +.. This work is licensed under a +.. Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 + +.. _pap-pdp-label: + +The Internal Policy Framework PAP-PDP API +######################################### + +.. contents:: + :depth: 3 + +This page describes the API between the PAP and PDPs. The APIs in this section are implemented using `DMaaP +API <https://wiki.onap.org/display/DW/DMaaP+API>`__ messaging. The APIs in this section are used for internal +communication in the Policy Framework. The APIs are NOT supported for use by components outside the Policy Framework and +are subject to revision and change at any time. + +There are four messages on the API: + +1. PDP_STATUS: PDP→PAP, used by PDPs to report to the PAP + +2. PDP_UPDATE: PAP→PDP, used by the PAP to update the policies running on PDPs, triggers a PDP_STATUS message with + the result of the PDP_UPDATE operation + +3. PDP_STATE_CHANGE: PAP→PDP, used by the PAP to change the state of PDPs, triggers a PDP_STATUS message with the result + of the PDP_STATE_CHANGE operation + +4. PDP_HEALTH_CHECK: PAP→PDP, used by the PAP to order a health check on PDPs, triggers a PDP_STATUS message with the + result of the PDP_HEALTH_CHECK operation + +The fields in the table below are valid on API calls: + +=============================== ======== ======== ======== ======= ===================================================== +**Field** **PDP **PDP **PDP **PDP **Comment** + STATUS** UPDATE** STATE HEALTH + CHANGE** CHECK** +=============================== ======== ======== ======== ======= ===================================================== +(message_name) M M M M pdp_status, pdp_update, pdp_state_change, or + pdp_health_check +name M M C C The name of the PDP, for state changes and health + checks, the PDP group and subgroup can be used to + specify the scope of the operation +version M N/A N/A N/A The version of the PDP +pdp_type M M N/A N/A The type of the PDP, currently xacml, drools, or apex +state M N/A M N/A The administrative state of the PDP group: PASSIVE, + SAFE, TEST, ACTIVE, or TERMINATED +healthy M N/A N/A N/A The result of the latest health check on the PDP: + HEALTHY/NOT_HEALTHY/TEST_IN_PROGRESS +description O O N/A N/A The description of the PDP +pdp_group O M C C The PDP group to which the PDP belongs, the PDP group + and subgroup can be used to specify the scope of the + operation +pdp_subgroup O M C C The PDP subgroup to which the PDP belongs, the PDP + group and subgroup can be used to specify the scope + of the operation +supported_policy_types M N/A N/A N/A A list of the policy types supported by the PDP +policies O M N/A N/A The list of policies running on the PDP +->(name) O M N/A N/A The name of a TOSCA policy running on the PDP +->policy_type O M N/A N/A The TOSCA policy type of the policyWhen a PDP starts, + it commences periodic sending of *PDP_STATUS* + messages on DMaaP. The PAP receives these messages + and acts in whatever manner is appropriate. +->policy_type_version O M N/A N/A The version of the TOSCA policy type of the policy +->properties O M N/A N/A The properties of the policy for the XACML, Drools, + or APEX PDP for details +instance M N/A N/A N/A The instance ID of the PDP running in a Kuberenetes + Pod +deployment_instance_info M N/A N/A N/A Information on the node running the PDP +properties O O N/A N/A Other properties specific to the PDP +statistics M N/A N/A N/A Statistics on policy execution in the PDP +->policy_download_count M N/A N/A N/A The number of policies downloaded into the PDP +->policy_download_success_count M N/A N/A N/A The number of policies successfully downloaded into + the PDP +->policy_download_fail_count M N/A N/A N/A The number of policies downloaded into the PDP where + the download failed +->policy_executed_count M N/A N/A N/A The number of policy executions on the PDP +->policy_executed_success_count M N/A N/A N/A The number of policy executions on the PDP that + completed successfully +->policy_executed_fail_count M N/A N/A N/A The number of policy executions on the PDP that + failed +response O N/A N/A N/A The response to the last operation that the PAP + executed on the PDP +->response_to M N/A N/A N/A The PAP to PDP message to which this is a response +->response_status M N/A N/A N/A SUCCESS or FAIL +->response_message O N/A N/A N/A Message giving further information on the successful + or failed operation +=============================== ======== ======== ======== ======= ===================================================== + +YAML is used for illustrative purposes in the examples in this section. JSON (application/json) is used as the content +type in the implementation of this API. + +1 PAP API for PDPs +================== +The purpose of this API is for PDPs to provide heartbeat, status, health, and statistical information to Policy +Administration. There is a single *PDP_STATUS* message on this API. PDPs send this message to the PAP using the +*POLICY_PDP_PAP* DMaaP topic. The PAP listens on this topic for messages. + +When a PDP starts, it commences periodic sending of *PDP_STATUS* messages on DMaaP. The PAP receives these messages and +acts in whatever manner is appropriate. *PDP_UPDATE*, *PDP_STATE_CHANGE*, and *PDP_HEALTH_CHECK* operations trigger a +*PDP_STATUS* message as a response. + +The *PDP_STATUS* message is used for PDP heartbeat monitoring. A PDP sends a *PDP_STATUS* message with a state of +*TERMINATED* when it terminates normally. If a *PDP_STATUS* message is not received from a PDP periodically or in +response to a pdp_update, pdp-state_change, or pdp_health_check message in a certain configurable time, then the PAP +assumes the PDP has failed. + +A PDP may be preconfigured with its PDP group, PDP subgroup, and policies. If the PDP group, subgroup, or any policy +sent to the PAP in a *PDP_STATUS* message is unknown to the PAP, the PAP locks the PDP in state PASSIVE. + +.. code-block:: yaml + :caption: PDP_STATUS message from an XACML PDP running control loop policies + :linenos: + + pdp_status: + name: xacml_1 + version: 1.2.3 + pdp_type: xacml + state: active + healthy: true + description: XACML PDP running control loop policies + pdp_group: onap.pdpgroup.controlloop.operational + pdp_subgroup: xacml + supported_policy_types: + - onap.policies.controlloop.guard.FrequencyLimiter + - onap.policies.controlloop.guard.BlackList + - onap.policies.controlloop.guard.MinMax + policies: + - onap.policies.controlloop.guard.frequencylimiter.EastRegion: + policy_type: onap.policies.controlloop.guard.FrequencyLimiter + policy_type_version: 1.0.0 + properties: + # Omitted for brevity + - onap.policies.controlloop.guard.blacklist.eastRegion: + policy_type: onap.policies.controlloop.guard.BlackList + policy_type_version: 1.0.0 + properties: + # Omitted for brevity + - onap.policies.controlloop.guard.minmax.eastRegion: + policy_type: onap.policies.controlloop.guard.MinMax + policy_type_version: 1.0.0 + properties: + # Omitted for brevity + instance: xacml_1 + deployment_instance_info: + node_address: xacml_1_pod + # Other deployment instance info + statistics: + policy_download_count: 0 + policy_download_success_count: 0 + policy_download_fail_count: 0 + policy_executed_count: 123 + policy_executed_success_count: 122 + policy_executed_fail_count: 1 + +.. code-block:: yaml + :caption: PDP_STATUS message from a Drools PDP running control loop policies + :linenos: + + pdp_status: + name: drools_2 + version: 2.3.4 + pdp_type: drools + state: safe + healthy: true + description: Drools PDP running control loop policies + pdp_group: onap.pdpgroup.controlloop.operational + pdp_subgroup: drools + supported_policy_types: + - onap.controllloop.operational.drools.vCPE + - onap.controllloop.operational.drools.vFW + policies: + - onap.controllloop.operational.drools.vcpe.EastRegion: + policy_type: onap.controllloop.operational.drools.vCPE + policy_type_version: 1.0.0 + properties: + # Omitted for brevity + - onap.controllloop.operational.drools.vfw.EastRegion: + policy_type: onap.controllloop.operational.drools.vFW + policy_type_version: 1.0.0 + properties: + # Omitted for brevity + instance: drools_2 + deployment_instance_info: + node_address: drools_2_pod + # Other deployment instance info + statistics: + policy_download_count: 3 + policy_download_success_count: 3 + policy_download_fail_count: 0 + policy_executed_count: 123 + policy_executed_success_count: 122 + policy_executed_fail_count: 1 + response: + response_to: PDP_HEALTH_CHECK + response_status: SUCCESS + +.. code-block:: yaml + :caption: PDP_STATUS message from an APEX PDP running control loop policies + :linenos: + + pdp_status: + name: drools_2 + version: 2.3.4 + pdp_type: drools + state: safe + healthy: true + description: Drools PDP running control loop policies + pdp_group: onap.pdpgroup.controlloop.operational + pdp_subgroup: drools + supported_policy_types: + - onap.controllloop.operational.drools.vCPE + - onap.controllloop.operational.drools.vFW + policies: + - onap.controllloop.operational.drools.vcpe.EastRegion: + policy_type: onap.controllloop.operational.drools.vCPE + policy_type_version: 1.0.0 + properties: + # Omitted for brevity + - onap.controllloop.operational.drools.vfw.EastRegion: + policy_type: onap.controllloop.operational.drools.vFW + policy_type_version: 1.0.0 + properties: + # Omitted for brevity + instance: drools_2 + deployment_instance_info: + node_address: drools_2_pod + # Other deployment instance info + statistics: + policy_download_count: 3 + policy_download_success_count: 3 + policy_download_fail_count: 0 + policy_executed_count: 123 + policy_executed_success_count: 122 + policy_executed_fail_count: 1 + response: + response_to: PDP_HEALTH_CHECK + response_status: SUCCESS + +.. code-block:: yaml + :caption: PDP_STATUS message from an XACML PDP running monitoring policies + :linenos: + + pdp_status: + name: xacml_1 + version: 1.2.3 + pdp_type: xacml + state: active + healthy: true + description: XACML PDP running monitoring policies + pdp_group: onap.pdpgroup.Monitoring + pdp_subgroup: xacml + supported_policy_types: + - onap.monitoring.cdap.tca.hi.lo.app + policies: + - onap.scaleout.tca:message + policy_type: onap.policies.monitoring.cdap.tca.hi.lo.app + policy_type_version: 1.0.0 + properties: + # Omitted for brevity + instance: xacml_1 + deployment_instance_info: + node_address: xacml_1_pod + # Other deployment instance info + statistics: + policy_download_count: 0 + policy_download_success_count: 0 + policy_download_fail_count: 0 + policy_executed_count: 123 + policy_executed_success_count: 122 + policy_executed_fail_count: 1 + +2 PDP API for PAPs +================== + +The purpose of this API is for the PAP to load and update policies on PDPs and to change the state of PDPs. It also +allows the PAP to order health checks to run on PDPs. The PAP sends *PDP_UPDATE*, *PDP_STATE_CHANGE*, and +*PDP_HEALTH_CHECK* messages to PDPs using the *POLICY_PAP_PDP* DMaaP topic. PDPs listen on this topic for messages. + +The PAP can set the scope of *PDP_STATE_CHANGE* and *PDP_HEALTH_CHECK* messages: + +- PDP Group: If a PDP group is specified in a message, then the PDPs in that PDP group respond to the message and all + other PDPs ignore it. + +- PDP Group and subgroup: If a PDP group and subgroup are specified in a message, then only the PDPs of that subgroup + in the PDP group respond to the message and all other PDPs ignore it. + +- Single PDP: If the name of a PDP is specified in a message, then only that PDP responds to the message and all other + PDPs ignore it. + +Note: *PDP_UPDATE* messages must be issued individually to PDPs because the *PDP_UPDATE* operation can change the PDP +group to which a PDP belongs. + +2.1 PDP Update +-------------- + +The *PDP_UPDATE* operation allows the PAP to modify the PDP group to which a PDP belongs and the policies in a PDP. + +The following examples illustrate how the operation is used. + +.. code-block:: yaml + :caption: PDP_UPDATE message to upgrade XACML PDP control loop policies to version 1.0.1 + :linenos: + + pdp_update: + name: xacml_1 + pdp_type: xacml + description: XACML PDP running control loop policies, Upgraded + pdp_group: onap.pdpgroup.controlloop.operational + pdp_subgroup: xacml + policies: + - onap.policies.controlloop.guard.frequencylimiter.EastRegion: + policy_type: onap.policies.controlloop.guard.FrequencyLimiter + policy_type_version: 1.0.1 + properties: + # Omitted for brevity + - onap.policies.controlloop.guard.blackList.EastRegion: + policy_type: onap.policies.controlloop.guard.BlackList + policy_type_version: 1.0.1 + properties: + # Omitted for brevity + - onap.policies.controlloop.guard.minmax.EastRegion: + policy_type: onap.policies.controlloop.guard.MinMax + policy_type_version: 1.0.1 + properties: + # Omitted for brevity + +.. code-block:: yaml + :caption: PDP_UPDATE message to a Drools PDP to add an extra control loop policy + :linenos: + + pdp_update: + name: drools_2 + pdp_type: drools + description: Drools PDP running control loop policies, extra policy added + pdp_group: onap.pdpgroup.controlloop.operational + pdp_subgroup: drools + policies: + - onap.controllloop.operational.drools.vcpe.EastRegion: + policy_type: onap.controllloop.operational.drools.vCPE + policy_type_version: 1.0.0 + properties: + # Omitted for brevity + - onap.controllloop.operational.drools.vfw.EastRegion: + policy_type: onap.controllloop.operational.drools.vFW + policy_type_version: 1.0.0 + properties: + # Omitted for brevity + - onap.controllloop.operational.drools.vfw.WestRegion: + policy_type: onap.controllloop.operational.drools.vFW + policy_type_version: 1.0.0 + properties: + # Omitted for brevity + +.. code-block:: yaml + :caption: PDP_UPDATE message to an APEX PDP to remove a control loop policy + :linenos: + + pdp_update: + name: apex_3 + pdp_type: apex + description: APEX PDP updated to remove a control loop policy + pdp_group: onap.pdpgroup.controlloop.operational + pdp_subgroup: apex + policies: + - onap.controllloop.operational.apex.bbs.EastRegion: + policy_type: onap.controllloop.operational.apex.BBS + policy_type_version: 1.0.0 + properties: + # Omitted for brevity + +2.2 PDP State Change +-------------------- + +The *PDP_STATE_CHANGE* operation allows the PAP to order state changes on PDPs in PDP groups and subgroups. The +following examples illustrate how the operation is used. + +.. code-block:: yaml + :caption: Change the state of all control loop Drools PDPs to ACTIVE + :linenos: + + pdp_state_change: + state: active + pdp_group: onap.pdpgroup.controlloop.Operational + pdp_subgroup: drools + +.. code-block:: yaml + :caption: Change the state of all monitoring PDPs to SAFE + :linenos: + + pdp_state_change: + state: safe + pdp_group: onap.pdpgroup.Monitoring + +.. code-block:: yaml + :caption: Change the state of a single APEX PDP to TEST + :linenos: + + pdp_state_change: + state: test + name: apex_3 + +2.3 PDP Health Check +-------------------- + +The *PDP_HEALTH_CHECK* operation allows the PAP to order health checks on PDPs in PDP groups and subgroups. The +following examples illustrate how the operation is used. + +.. code-block:: yaml + :caption: Perform a health check on all control loop Drools PDPs + :linenos: + + pdp_health_check: + pdp_group: onap.pdpgroup.controlloop.Operational + pdp_subgroup: drools + +.. code-block:: yaml + :caption: perform a health check on all monitoring PDPs + :linenos: + + pdp_health_check: + pdp_group: onap.pdpgroup.Monitoring + +.. code-block:: yaml + :caption: Perform a health check on a single APEX PDP + :linenos: + + pdp_health_check: + name: apex_3 diff --git a/docs/pap/images/PolicyImplPDPSubGroup.svg b/docs/pap/images/PolicyImplPDPSubGroup.svg new file mode 100644 index 00000000..8987ed22 --- /dev/null +++ b/docs/pap/images/PolicyImplPDPSubGroup.svg @@ -0,0 +1,2 @@ +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" style="background-color: rgb(255, 255, 255);" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="761px" height="406px" viewBox="-0.5 -0.5 761 406" content="<mxfile modified="2019-05-29T13:20:08.554Z" host="wiki.onap.org" agent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:67.0) Gecko/20100101 Firefox/67.0" version="10.6.3" etag="Rm5bP2sccrUGuJUsMc-9" type="atlas"><mxAtlasLibraries/><diagram id="37cad116-6517-64d4-de82-baa76c18656a" name="Page-1">5Vxbj5s6EP41eUwFmFses0m756hbaaWtdLZPFQlOsEpwZJxN0l9/bDAQsNnQDSGQtg8FX8b4m/E347HTEZhtDo/E2wbfsA/DkaH5hxGYjwxDBxOL/cNLjqLE0Ny0ZE2QL8qKghf0G4pCTZTukA/jUkOKcUjRtly4xFEEl7RU5hGC9+VmKxyWR916azGiVhS8LL0QSs3+Qz4N0lLXOmn9D0TrIBtZ10TNwlv+WhO8i8R4IwOskj9p9cbLZIn2ceD5eH9SBD6PwIxgTNOnzWEGQw5uBlva70tNbf7dBEa0SQcz7fDmhTsx9ef58yObwFZ8Hz1mmCSzgryfNgIP+wBR+LL1lrx2z8yAlQV0E7I3nT2+QUIRw3MaonXEyijmDWJK8C84wyEmiUzw4PK/rEb+bjEVLggeTorEPB4h3kBKjqyJqB3rpgBVWN1YWOG+0KCe4R6caA9kVucJq1nnsgvk2IMATw2kpQLyZbcYKpagjKWhKcDUFGBOWsDSvnMsG0LptgClI0Ep4bcuUG0yz5x0vUV4yqHvzN8oz9+S5+8opm+2MH1XZUnj18tsaIXC8MRWGLkby6XKinx7YVu20oqcGnRrUdTLGGavJxjaKmprAcPJ8DHsAKVMITdeaVaZaYC81FwFAFYbAOgSANxOpre3k1w1jRebUXV+nS023bgfFG9HWTq4AxS7wEkZ/t9PpKXrHYZaurwFuIUHqCBgyqvuah5AGbeP5z1YdVYNwH30AHLIPlgUb+gB1JH/sFDsACdTXrPTpAFDK+btIj7AiNu/HbJxHxB7WPOHkqNI69hgeTXrQna8Mw0gR9zbQKUUHKLl8d/NNlQLqWgrDrwtf4wwhefVFad5Rebl6tyRJ95CuOLjxUwUitbfed18bMsa9y3o+qZK466xAHaNxi9cNqo8FrgSh5sNEgYw8qc8x5roIeJ68L04SNaQXlYAg4AcX8XaSl5+8JdPFn89IPqatWPPaY1hqcCdOHPNcd4DN8Y7shTfJ0yaemQNadnMoZ/lfc8vOesdiAkMPYreytliFe5ihGeM2AcXbhpU/AtwrLKMdD6iW6E+WVKeOskkGRVJKQySpMQQ8ok3sw2ZUy+xDaX+W1B/ll7qia71iVtW0Ec1LYV21vU0Led8vic0zkg/JfaI0STvQGOJ0nmzM6yuoTj3DLsI8VniFVcjI+hE8F9J+xX9ThoeX7RB+5mMW9G+08K6z0K+Eu9PesUFY6usYtf9GBfYFSZwr8YElpzVm34sGkyWPI8kv+4WkESQwvhE0KJoWZE8h9sQHzdc80rBedmi3ajRHRh7jIFWCRuNT00DR6vekBsziJxKaoNB9HoG0boIHDP77wuB1BylXUogFRfSIn8oz8XjfHfoxSeM0IwQnrEfN6cCKTgR4omi29++75QoRFfkvZQxiNkGgyhSETWu5j0/k6RY45qOZ3wUgw5RlDgmitkKCCBpxxQGZwm6WT5JHOdp8y6yENaVshCpl8j9yek2tPAtP4RvudCZmApn0rMsRN3FjD/fmlb8SXWP26I/kXMQM8z0icMnjLcyuw/2NptRjeashlQM2rg3Y8kJgNnTz+mWfbsK4sGeGEonFK4to6y85uZeDnK2aMogP+484t83ysyZqLYmyoPZNnCW97AShNc+mJUOFB1p/te6A2cb0vR7coHL/mNLut2Boq2+UjIsFLvAqUEe4OqLTa9cgzOAgm+udQ3CVm55+3D5KNfNAK5B2OrLJINE8Yaspb5MMiwUu8BJsa14+jknGIfxfcdibtPfdYAWUJZ3Fd37huopqqFKk1/LN2QxXv+uJeW6GYBvcNRXzQeJ4u18g6PeFwwLxS5wkiP/bzhCFJPkqsLdZJyA9PPJhhknvY1dqiNHzWdQHqwLBpVbAB2nQxw5su7cC4NKwrjDdIijDol7sJHPFTME59HfX1Y2R7F9nNhr8dv99Hij+B8SwOf/AQ==</diagram></mxfile>"><defs/><g><rect x="160" y="95" width="120" height="310" fill="#ffffff" stroke="#b8b8b8" pointer-events="none"/><g transform="translate(190.5,102.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="59" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 60px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PDPGroup</div></div></foreignObject><text x="30" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDPGroup</text></switch></g><rect x="170" y="305" width="100" height="90" fill="#ffffff" stroke="#b8b8b8" pointer-events="none"/><g transform="translate(179.5,312.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="81" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 82px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PDPSubGroup</div></div></foreignObject><text x="41" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDPSubGroup</text></switch></g><rect x="170" y="125" width="100" height="80" fill="#ffffff" stroke="#b8b8b8" pointer-events="none"/><g transform="translate(179.5,132.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="81" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 82px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PDPSubGroup</div></div></foreignObject><text x="41" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDPSubGroup</text></switch></g><rect x="190" y="165" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(201.5,173.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="37" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 38px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PDP-X</div></div></foreignObject><text x="19" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDP-X</text></switch></g><rect x="180" y="155" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(191.5,163.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="37" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 38px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PDP-X</div></div></foreignObject><text x="19" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDP-X</text></switch></g><rect x="195" y="355" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(206.5,363.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="37" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 38px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PDP-A</div></div></foreignObject><text x="19" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDP-A</text></switch></g><rect x="185" y="345" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(196.5,353.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="37" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 38px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PDP-A</div></div></foreignObject><text x="19" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDP-A</text></switch></g><rect x="175" y="335" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(186.5,343.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="37" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 38px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PDP-A</div></div></foreignObject><text x="19" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDP-A</text></switch></g><rect x="170" y="215" width="100" height="80" fill="#ffffff" stroke="#b8b8b8" pointer-events="none"/><g transform="translate(179.5,222.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="81" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 82px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PDPSubGroup</div></div></foreignObject><text x="41" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDPSubGroup</text></switch></g><rect x="200" y="260" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(210.5,268.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="38" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 39px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PDP-D</div></div></foreignObject><text x="19" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDP-D</text></switch></g><rect x="190" y="250" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(200.5,258.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="38" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 39px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PDP-D</div></div></foreignObject><text x="19" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDP-D</text></switch></g><rect x="180" y="240" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(190.5,248.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="38" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 39px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PDP-D</div></div></foreignObject><text x="19" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDP-D</text></switch></g><path d="M 310 95 L 426 95 L 440 109 L 440 145 L 310 145 L 310 95 Z" fill="#d5e8d4" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><path d="M 426 95 L 426 109 L 440 109" fill="none" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(312.5,96.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="126" height="41" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 126px; white-space: normal; overflow-wrap: normal;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">All PDPs in a <i>PDPSubGroup</i> run the same <i>PolicyImpl</i></div></div></foreignObject><text x="63" y="27" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 270 145 L 310 120" fill="none" stroke="#97d077" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 120 243 L 180 255" fill="none" stroke="#97d077" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 320 195 L 426 195 L 440 209 L 440 245 L 320 245 L 320 195 Z" fill="#d5e8d4" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><path d="M 426 195 L 426 209 L 440 209" fill="none" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(322.5,196.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="116" height="41" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 116px; white-space: normal; overflow-wrap: normal;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">The PDP running its<i> PolicyImpl</i> is the unit of scaling</div></div></foreignObject><text x="58" y="27" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 240 263 L 320 220" fill="none" stroke="#97d077" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 0 97.5 L 122 97.5 L 130 105.5 L 130 152.5 L 0 152.5 L 0 97.5 Z" fill="#d5e8d4" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><path d="M 122 97.5 L 122 105.5 L 130 105.5" fill="none" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(2.5,99.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="126" height="41" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 126px; white-space: normal; overflow-wrap: normal;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">A <i>PDPSubGroup</i> is a Kubernetes <b><i>Deployment</i></b></div></div></foreignObject><text x="63" y="27" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 170 145 L 130 125" fill="none" stroke="#97d077" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 0 220 L 106 220 L 120 234 L 120 265 L 0 265 L 0 220 Z" fill="#d5e8d4" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><path d="M 106 220 L 106 234 L 120 234" fill="none" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(2.5,221.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="116" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 116px; white-space: normal; overflow-wrap: normal;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PDPs run as Kubernets <b><i>Pods</i></b><i><br /></i></div></div></foreignObject><text x="58" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 155 0 L 281 0 L 285 4 L 285 50 L 155 50 L 155 0 Z" fill="#d5e8d4" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><path d="M 281 0 L 281 4 L 285 4" fill="none" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(157.5,1.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="126" height="41" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 126px; white-space: normal; overflow-wrap: normal;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">A <i>PDPGroup</i> groups <i>PDPSubGroup</i> entities together</div></div></foreignObject><text x="63" y="27" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 220 95 L 188 50" fill="none" stroke="#97d077" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><rect x="500" y="50" width="120" height="340" fill="#ffffff" stroke="#b8b8b8" pointer-events="none"/><g transform="translate(525.5,57.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="68" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 69px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">ControlLoop<br />PDPGroup</div></div></foreignObject><text x="34" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">ControlLoop<br>PDPGroup</text></switch></g><rect x="510" y="286" width="100" height="98" fill="#ffffff" stroke="#b8b8b8" pointer-events="none"/><g transform="translate(519.5,293.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="81" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 82px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">CL_Apex<br />PDPSubGroup</div></div></foreignObject><text x="41" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">CL_Apex<br>PDPSubGroup</text></switch></g><rect x="510" y="89.5" width="100" height="88" fill="#ffffff" stroke="#b8b8b8" pointer-events="none"/><g transform="translate(519.5,97.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="81" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 82px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">CL_Guard<br />PDPSubGroup</div></div></foreignObject><text x="41" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">CL_Guard<br>PDPSubGroup</text></switch></g><rect x="530" y="137" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(541.5,145.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="37" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 38px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PDP-X</div></div></foreignObject><text x="19" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDP-X</text></switch></g><rect x="520" y="127" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(531.5,135.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="37" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 38px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PDP-X</div></div></foreignObject><text x="19" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDP-X</text></switch></g><rect x="535" y="343.5" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(546.5,352.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="37" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 38px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PDP-A</div></div></foreignObject><text x="19" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDP-A</text></switch></g><rect x="525" y="333.5" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(536.5,342.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="37" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 38px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PDP-A</div></div></foreignObject><text x="19" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDP-A</text></switch></g><rect x="515" y="323.5" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(526.5,332.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="37" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 38px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PDP-A</div></div></foreignObject><text x="19" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDP-A</text></switch></g><rect x="510" y="185" width="100" height="93" fill="#ffffff" stroke="#b8b8b8" pointer-events="none"/><g transform="translate(519.5,192.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="81" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 82px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">CL_Drools<br />PDPSubGroup</div></div></foreignObject><text x="41" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">CL_Drools<br>PDPSubGroup</text></switch></g><rect x="540" y="242.5" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(550.5,251.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="38" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 39px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PDP-D</div></div></foreignObject><text x="19" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDP-D</text></switch></g><rect x="530" y="232.5" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(540.5,241.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="38" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 39px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PDP-D</div></div></foreignObject><text x="19" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDP-D</text></switch></g><rect x="520" y="222.5" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(530.5,231.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="38" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 39px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PDP-D</div></div></foreignObject><text x="19" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDP-D</text></switch></g><rect x="640" y="50" width="120" height="140" fill="#ffffff" stroke="#b8b8b8" pointer-events="none"/><g transform="translate(670.5,57.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="59" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 60px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Monitoring<br />PDPGroup</div></div></foreignObject><text x="30" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Monitoring<br>PDPGroup</text></switch></g><rect x="650" y="89.5" width="100" height="88" fill="#ffffff" stroke="#b8b8b8" pointer-events="none"/><g transform="translate(659.5,97.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="81" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 82px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Monitoring<br />PDPSubGroup</div></div></foreignObject><text x="41" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Monitoring<br>PDPSubGroup</text></switch></g><rect x="670" y="137" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(681.5,145.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="37" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 38px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PDP-X</div></div></foreignObject><text x="19" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDP-X</text></switch></g><rect x="660" y="127" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(671.5,135.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="37" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 38px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PDP-X</div></div></foreignObject><text x="19" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDP-X</text></switch></g></g></svg>
\ No newline at end of file diff --git a/docs/pap/pap.rst b/docs/pap/pap.rst index bca9334f..21b5b42b 100644 --- a/docs/pap/pap.rst +++ b/docs/pap/pap.rst @@ -9,29 +9,78 @@ Policy Administration Point (PAP) Architecture .. contents:: :depth: 3 -The PAP keeps track of PDPs, supporting the deployment of PDP groups and the deployment of a *policy set* across those -PDP groups. Policies are created using the Policy API, but are deployed via the PAP. +.. toctree:: + InternalPapPdp.rst -A PAP is stateless in a RESTful sense, using the database (persistent storage) to track PDPs and the deployment of -policies to those PDPs. In short, policy management on PDPs is the responsibility of PAPs; management of policy sets or -policies by any other manner is not permitted. +The Policy Administration Point (PAP) keeps track of PDPs, supporting the deployment of PDP groups and the deployment +of policies across those PDP groups. Policies are created using the Policy API, but are deployed via the PAP. + +The PAP is stateless in a RESTful sense, using the database (persistent storage) to track PDPs and the deployment of +policies to those PDPs. In short, policy management on PDPs is the responsibility of PAP; management of policies by +any other manner is not permitted. Because the PDP is the main unit of scalability in the Policy Framework, the framework is designed to allow PDPs in a PDP group to arbitrarily appear and disappear and for policy consistency across all PDPs in a PDP group to be easily maintained. The PAP is responsible for controlling the state across the PDPs in a PDP group. The PAP interacts with the -Policy database and transfers policy sets to PDPs. - -There are a number of rules for PDP group and PDP state management: - -1. Only one version of a PDP group may be ACTIVE at any time - -2. If a PDP group with a certain version is ACTIVE and a later version of the same PDP group is activated, then the - system upgrades the PDP group - -3. If a PDP group with a certain version is ACTIVE and an earlier version of the same PDP group is activated, then the - system downgrades the PDP group - -4. There is no restriction on the number of PASSIVE versions of a PDP group that can exist in the system +policy database and transfers policies to PDPs. + +The unit of execution and scaling in the Policy Framework is a *PolicyImpl* entity. A *PolicyImpl* entity runs on a PDP. +As is explained above, a *PolicyImpl* entity is a *PolicyTypeImpl* implementation parameterized with a TOSCA *Policy*. + +.. image:: images/PolicyImplPDPSubGroup.svg + +In order to achieve horizontal scalability, we group the PDPs running instances of a given *PolicyImpl* entity logically +together into a *PDPSubGroup*. The number of PDPs in a *PDPSubGroup* can then be scaled up and down using Kubernetes. In +other words, all PDPs in a subgroup run the same *PolicyImpl*, that is the same policy template implementation (in +XACML, Drools, or APEX) with the same parameters. + +The figure above shows the layout of *PDPGroup* and *PDPSubGroup* entities. The figure shows examples of PDP groups for +Control Loop and Monitoring policies on the right. + +The health of PDPs is monitored by the PAP in order to alert operations teams managing policies. The PAP manages the life +cycle of policies running on PDPs. + +The table below shows the deployment methods in which *PolicyImpl* entities can be deployed to PDP Subgroups. + +========== =========================================== ============================== ================================== +**Method** **Description** **Advantages** **Disadvantages** +========== =========================================== ============================== ================================== +Cold The *PolicyImpl* (*PolicyTypeImpl* and No run time configuration Very restrictive, no run time + TOSCA *Policy*) are predeployed on the PDP. required and run time configuration of PDPs is possible. + PDP is fully configured and ready to administration is simple. + execute when started. + + PDPs register with the PAP when they + start, providing the *pdpGroup* they + have been preconfigured with. + +Warm The *PolicyTypeImpl* entity is predeployed The configuration, parameters, Administration and management is + on the PDP. A TOSCA *Policy* may be loaded and PDP group of PDPs may be required. The configuration and + at startup. The PDP may be configured or changed at run time by loading life cycle of the TOSCA policies + reconfigured with a new or updated TOSCA or updating a TOSCA *Policy* can change at run time and must be + *Policy* at run time. into the PDP. administered and managed. + + PDPs register with the PAP when they start, Support TOSCA *Policy* entity + providing the *pdpGroup* they have been life cycle managgement is + predeployed with if any. The PAP may update supported, allowing features + the TOSCA *Policy* on a PDP at any time such as *PolicyImpl* Safe Mode + after registration. and *PolicyImpl* retirement. + +Hot The *PolicyImpl* (*PolicyTypeImpl* and The policy logic, rules, Administration and management is + TOSCA *Policy*) are deployed at run time. configuration, parameters, and more complex. The *PolicyImpl* + The *PolicyImpl* (*PolicyTypeImpl* and PDP group of PDPs may be itself and its configuration and + TOSCA *Policy*) may be loaded at startup. changed at run time by loading life cycle as well as the life + The PDP may be configured or reconfigured or updating a TOSCA *Policy* cycle of the TOSCA policies can + with a new or updated *PolicyTypeImpl* and *PolicyTypeImpl* into the change at run time and must be + and/or TOSCA *Policy* at run time. PDP. administered and managed. + + PDPs register with the PAP when they Lifecycle management of TOSCA + start, providing the *pdpGroup* they have *Policy* entities and + been preconfigured with if any. The PAP may *PolicyTypeImpl* entites is + update the TOSCA *Policy* and supported, allowing features + *PolicyTypeImpl* on a PDP at any time after such as *PolicyImpl* Safe Mode + registration and *PolicyImpl* retirement. +========== =========================================== ============================== ================================== 1 APIs @@ -59,13 +108,17 @@ PAP supports the operations listed in the following table, via its REST API: :widths: 25,70 "Health check", "Queries the health of the PAP" + "Consolidated healthcheck", "Queries the health of all policy components" "Statistics", "Queries various statistics" "PDP state change", "Changes the state of all PDPs in a PDP Group" "PDP Group create/update", "Creates/updates PDP Groups" "PDP Group delete", "Deletes a PDP Group" "PDP Group query", "Queries all PDP Groups" + "Deployment update", "Deploy/undeploy one or more policies in specified PdpGroups" "Deploy policy", "Deploys one or more policies to the PDPs" "Undeploy policy", "Undeploys a policy from the PDPs" + "Policy deployment status", "Queries the status of all deployed policies" + "PDP statistics", "Queries the statistics of PDPs" 1.2 DMaaP API ------------- @@ -124,6 +177,18 @@ Here is a sample response: .. literalinclude:: response/health-check-pap-resp.json :language: json +.. swaggerv2doc:: swagger/consolidated-healthcheck-pap.json + +This operation performs a health check of all policy components. The response +contains the health check result of each component. The consolidated health check +is reported as healthy only if all the components are healthy, otherwise the +"healthy" flag is marked as false. + +Here is a sample response: + +.. literalinclude:: response/consolidated-healthcheck-pap-resp.json + :language: json + .. swaggerv2doc:: swagger/statistics-pap.json This operation allows statistics for PDP groups, PDP subgroups, and individual PDPs to be retrieved. @@ -223,20 +288,36 @@ This operation allows policies to be undeployed from PDP groups. .. note:: Due to current limitations, a fully qualified policy version must always be specified. - -3 Future Features -================= -3.1 Order Health Check on PDPs -============================== +.. swaggerv2doc:: swagger/deployed-policy-pap.json -This operation will allow a PDP group health check to be ordered on PDP groups and on individual PDPs. The operation -will return a HTTP status code of *202: Accepted* if the health check request has been accepted by the PAP. The PAP will -then order execution of the health check on the PDPs. +This operation allows the deployed policies to be listed together with their respective deployment status. +The result can be filtered based on policy name & version. + +Here is a sample response: + +.. literalinclude:: response/deployed-policy-pap-resp.json + :language: json + +.. swaggerv2doc:: swagger/pdp-statistics-pap.json + +This operation allows the PDP statistics to be retrieved for all registered PDPs. +The result can be filtered based on PDP group, PDP subgroup & PDP instance. + +Here is a sample response: + +.. literalinclude:: response/pdp-statistics-pap-resp.json + :language: json + + +3 Future Features +================= -As health checks may be long lived operations, Health checks will be scheduled for execution by this operation. Users -will check the result of a health check test by issuing a PDP Group Query operation and checking the *healthy* field of -PDPs. +3.1 Disable policies in PDP +=========================== +This operation will allow disabling individual policies running in PDP engine. It is mainly beneficial +in scenarios where network operators/administrators want to disable a particular policy in PDP engine +for a period of time due to a failure in the system or for scheduled maintenance. End of Document diff --git a/docs/pap/response/consolidated-healthcheck-pap-resp.json b/docs/pap/response/consolidated-healthcheck-pap-resp.json new file mode 100644 index 00000000..6155bb30 --- /dev/null +++ b/docs/pap/response/consolidated-healthcheck-pap-resp.json @@ -0,0 +1,48 @@ +{ + "pdps": { + "xacml": [ + { + "instanceId": "dev-policy-xacml-pdp-5b6697c845-9j8lb", + "pdpState": "ACTIVE", + "healthy": "HEALTHY" + } + ], + "drools": [ + { + "instanceId": "dev-drools-0", + "pdpState": "ACTIVE", + "healthy": "HEALTHY" + } + ], + "apex": [ + { + "instanceId": "dev-policy-apex-pdp-0", + "pdpState": "ACTIVE", + "healthy": "HEALTHY", + "message": "Pdp Heartbeat" + } + ] + }, + "healthy": true, + "api": { + "name": "Policy API", + "url": "https://dev-policy-api-7fb479754f-7nr5s:6969/policy/api/v1/healthcheck", + "healthy": true, + "code": 200, + "message": "alive" + }, + "distribution": { + "name": "Policy SSD", + "url": "https://dev-policy-distribution-84854cd6c7-zn8vh:6969/healthcheck", + "healthy": true, + "code": 200, + "message": "alive" + }, + "pap": { + "name": "Policy PAP", + "url": "https://dev-pap-79fd8f78d4-hwx7j:6969/policy/pap/v1/healthcheck", + "healthy": true, + "code": 200, + "message": "alive" + } +}
\ No newline at end of file diff --git a/docs/pap/response/deployed-policy-pap-resp.json b/docs/pap/response/deployed-policy-pap-resp.json new file mode 100644 index 00000000..fa768a1b --- /dev/null +++ b/docs/pap/response/deployed-policy-pap-resp.json @@ -0,0 +1,38 @@ +[ + { + "policy-type": "onap.policies.monitoring.cdap.tca.hi.lo.app", + "policy-type-version": "1.0.0", + "policy-id": "MICROSERVICE_vFW_CDS_Service_v2_0_app_1_0_0_I95", + "policy-version": "1.0.0", + "success-count": 1, + "failure-count": 0, + "incomplete-count": 0 + }, + { + "policy-type": "onap.policies.controlloop.Operational", + "policy-type-version": "1.0.0", + "policy-id": "OPERATIONAL_vFW_CDS_Service_v2_0_OperationalPolicyLegacy_1_0_0_Ly6", + "policy-version": "1.0.0", + "success-count": 1, + "failure-count": 0, + "incomplete-count": 0 + }, + { + "policy-type": "onap.policies.monitoring.cdap.tca.hi.lo.app", + "policy-type-version": "1.0.0", + "policy-id": "MICROSERVICE_vFW_CDS_Service_v2_0_app_1_0_0_WNX", + "policy-version": "1.0.0", + "success-count": 1, + "failure-count": 0, + "incomplete-count": 0 + }, + { + "policy-type": "onap.policies.controlloop.operational.common.Drools", + "policy-type-version": "1.0.0", + "policy-id": "OPERATIONAL_vFW_CDS_Service_v2_0_Drools_1_0_0_6SN", + "policy-version": "1.0.0", + "success-count": 1, + "failure-count": 0, + "incomplete-count": 0 + } +]
\ No newline at end of file diff --git a/docs/pap/response/pdp-statistics-pap-resp.json b/docs/pap/response/pdp-statistics-pap-resp.json new file mode 100644 index 00000000..77b03444 --- /dev/null +++ b/docs/pap/response/pdp-statistics-pap-resp.json @@ -0,0 +1,45 @@ +{ + "defaultGroup": { + "apex": [ + { + "pdpInstanceId": "dev-policy-apex-pdp-0", + "timeStamp": "Apr 29, 2020, 6:15:29 PM", + "pdpGroupName": "defaultGroup", + "pdpSubGroupName": "apex", + "policyDeployCount": 0, + "policyDeploySuccessCount": 0, + "policyDeployFailCount": 0, + "policyExecutedCount": 0, + "policyExecutedSuccessCount": 0, + "policyExecutedFailCount": 0, + "engineStats": [] + }, + { + "pdpInstanceId": "dev-policy-apex-pdp-0", + "timeStamp": "Apr 29, 2020, 6:17:29 PM", + "pdpGroupName": "defaultGroup", + "pdpSubGroupName": "apex", + "policyDeployCount": 0, + "policyDeploySuccessCount": 0, + "policyDeployFailCount": 0, + "policyExecutedCount": 0, + "policyExecutedSuccessCount": 0, + "policyExecutedFailCount": 0, + "engineStats": [] + }, + { + "pdpInstanceId": "dev-policy-apex-pdp-0", + "timeStamp": "Apr 29, 2020, 6:19:29 PM", + "pdpGroupName": "defaultGroup", + "pdpSubGroupName": "apex", + "policyDeployCount": 0, + "policyDeploySuccessCount": 0, + "policyDeployFailCount": 0, + "policyExecutedCount": 0, + "policyExecutedSuccessCount": 0, + "policyExecutedFailCount": 0, + "engineStats": [] + } + ] + } +}
\ No newline at end of file diff --git a/docs/pap/swagger/consolidated-healthcheck-pap.json b/docs/pap/swagger/consolidated-healthcheck-pap.json new file mode 100644 index 00000000..2044bc8a --- /dev/null +++ b/docs/pap/swagger/consolidated-healthcheck-pap.json @@ -0,0 +1,101 @@ +{ + "swagger": "2.0", + "basePath": "/", + "tags": [ + { + "name": "Consolidated Healthcheck" + } + ], + "schemes": [ + "http", + "https" + ], + "consumes": [ + "application/json", + "application/yaml" + ], + "produces": [ + "application/json", + "application/yaml" + ], + "paths": { + "/policy/pap/v1/components/healthcheck": { + "get": { + "tags": [ + "Consolidated Healthcheck" + ], + "summary": "Returns health status of all policy components, including PAP, API, Distribution, and PDPs", + "description": "Queries health status of all policy components, returning all policy components health status", + "operationId": "policyComponentsHealthCheck", + "produces": [ + "application/json", + "application/yaml" + ], + "parameters": [ + { + "name": "X-ONAP-RequestID", + "in": "header", + "description": "RequestID for http transaction", + "required": false, + "type": "string", + "format": "uuid" + } + ], + "responses": { + "200": { + "description": "successful operation", + "headers": { + "X-MinorVersion": { + "type": "string", + "description": "Used to request or communicate a MINOR version back from the client to the server, and from the server back to the client" + }, + "X-PatchVersion": { + "type": "string", + "description": "Used only to communicate a PATCH version in a response for troubleshooting purposes only, and will not be provided by the client on request" + }, + "X-LatestVersion": { + "type": "string", + "description": "Used only to communicate an API's latest version" + }, + "X-ONAP-RequestID": { + "type": "string", + "format": "uuid", + "description": "Used to track REST transactions for logging purpose" + } + }, + "schema": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + }, + "401": { + "description": "Authentication Error" + }, + "403": { + "description": "Authorization Error" + }, + "500": { + "description": "Internal Server Error" + } + }, + "security": [ + { + "basicAuth": [] + } + ], + "x-interface info": { + "api-version": "1.0.0", + "last-mod-release": "Frankfurt" + } + } + } + }, + "securityDefinitions": { + "basicAuth": { + "description": "", + "type": "basic" + } + } +}
\ No newline at end of file diff --git a/docs/pap/swagger/deployed-policy-pap.json b/docs/pap/swagger/deployed-policy-pap.json new file mode 100644 index 00000000..09280c7b --- /dev/null +++ b/docs/pap/swagger/deployed-policy-pap.json @@ -0,0 +1,322 @@ +{ + "swagger": "2.0", + "basePath": "/", + "tags": [ + { + "name": "Policy Deployment Status" + } + ], + "schemes": [ + "http", + "https" + ], + "consumes": [ + "application/json", + "application/yaml" + ], + "produces": [ + "application/json", + "application/yaml" + ], + "paths": { + "/policy/pap/v1/policies/deployed": { + "get": { + "tags": [ + "Policy Deployment Status" + ], + "summary": "Queries status of all deployed policies", + "description": "Queries status of all deployed policies, returning success and failure counts of the PDPs", + "operationId": "queryAllDeployedPolicies", + "produces": [ + "application/json", + "application/yaml" + ], + "parameters": [ + { + "name": "X-ONAP-RequestID", + "in": "header", + "description": "RequestID for http transaction", + "required": false, + "type": "string", + "format": "uuid" + } + ], + "responses": { + "200": { + "description": "successful operation", + "headers": { + "X-MinorVersion": { + "type": "string", + "description": "Used to request or communicate a MINOR version back from the client to the server, and from the server back to the client" + }, + "X-PatchVersion": { + "type": "string", + "description": "Used only to communicate a PATCH version in a response for troubleshooting purposes only, and will not be provided by the client on request" + }, + "X-LatestVersion": { + "type": "string", + "description": "Used only to communicate an API's latest version" + }, + "X-ONAP-RequestID": { + "type": "string", + "format": "uuid", + "description": "Used to track REST transactions for logging purpose" + } + }, + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/PolicyStatus" + } + } + }, + "401": { + "description": "Authentication Error" + }, + "403": { + "description": "Authorization Error" + }, + "500": { + "description": "Internal Server Error" + } + }, + "security": [ + { + "basicAuth": [] + } + ], + "x-interface info": { + "api-version": "1.0.0", + "last-mod-release": "Dublin" + } + } + }, + "/policy/pap/v1/policies/deployed/{name}": { + "get": { + "tags": [ + "Policy Deployment Status" + ], + "summary": "Queries status of specific deployed policies", + "description": "Queries status of specific deployed policies, returning success and failure counts of the PDPs", + "operationId": "queryDeployedPolicies", + "produces": [ + "application/json", + "application/yaml" + ], + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Policy Id", + "required": true, + "type": "string" + }, + { + "name": "X-ONAP-RequestID", + "in": "header", + "description": "RequestID for http transaction", + "required": false, + "type": "string", + "format": "uuid" + } + ], + "responses": { + "200": { + "description": "successful operation", + "headers": { + "X-MinorVersion": { + "type": "string", + "description": "Used to request or communicate a MINOR version back from the client to the server, and from the server back to the client" + }, + "X-PatchVersion": { + "type": "string", + "description": "Used only to communicate a PATCH version in a response for troubleshooting purposes only, and will not be provided by the client on request" + }, + "X-LatestVersion": { + "type": "string", + "description": "Used only to communicate an API's latest version" + }, + "X-ONAP-RequestID": { + "type": "string", + "format": "uuid", + "description": "Used to track REST transactions for logging purpose" + } + }, + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/PolicyStatus" + } + } + }, + "401": { + "description": "Authentication Error" + }, + "403": { + "description": "Authorization Error" + }, + "500": { + "description": "Internal Server Error" + } + }, + "security": [ + { + "basicAuth": [] + } + ], + "x-interface info": { + "api-version": "1.0.0", + "last-mod-release": "Dublin" + } + } + }, + "/policy/pap/v1/policies/deployed/{name}/{version}": { + "get": { + "tags": [ + "Policy Deployment Status" + ], + "summary": "Queries status of a specific deployed policy", + "description": "Queries status of a specific deployed policy, returning success and failure counts of the PDPs", + "operationId": "queryDeployedPolicy", + "produces": [ + "application/json", + "application/yaml" + ], + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Policy Id", + "required": true, + "type": "string" + }, + { + "name": "version", + "in": "path", + "description": "Policy Version", + "required": true, + "type": "string" + }, + { + "name": "X-ONAP-RequestID", + "in": "header", + "description": "RequestID for http transaction", + "required": false, + "type": "string", + "format": "uuid" + } + ], + "responses": { + "200": { + "description": "successful operation", + "headers": { + "X-MinorVersion": { + "type": "string", + "description": "Used to request or communicate a MINOR version back from the client to the server, and from the server back to the client" + }, + "X-PatchVersion": { + "type": "string", + "description": "Used only to communicate a PATCH version in a response for troubleshooting purposes only, and will not be provided by the client on request" + }, + "X-LatestVersion": { + "type": "string", + "description": "Used only to communicate an API's latest version" + }, + "X-ONAP-RequestID": { + "type": "string", + "format": "uuid", + "description": "Used to track REST transactions for logging purpose" + } + }, + "schema": { + "$ref": "#/definitions/PolicyStatus" + } + }, + "401": { + "description": "Authentication Error" + }, + "403": { + "description": "Authorization Error" + }, + "500": { + "description": "Internal Server Error" + } + }, + "security": [ + { + "basicAuth": [] + } + ], + "x-interface info": { + "api-version": "1.0.0", + "last-mod-release": "Dublin" + } + } + } + }, + "securityDefinitions": { + "basicAuth": { + "description": "", + "type": "basic" + } + }, + "definitions": { + "ToscaPolicyIdentifier": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "ToscaPolicyTypeIdentifier": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "PolicyStatus": { + "type": "object", + "properties": { + "policyTypeId": { + "type": "string" + }, + "policyTypeVersion": { + "type": "string" + }, + "policyId": { + "type": "string" + }, + "policyVersion": { + "type": "string" + }, + "successCount": { + "type": "integer", + "format": "int32" + }, + "failureCount": { + "type": "integer", + "format": "int32" + }, + "incompleteCount": { + "type": "integer", + "format": "int32" + }, + "policy": { + "$ref": "#/definitions/ToscaPolicyIdentifier" + }, + "policyType": { + "$ref": "#/definitions/ToscaPolicyTypeIdentifier" + } + } + } + } +}
\ No newline at end of file diff --git a/docs/pap/swagger/deployments-batch-pap.json b/docs/pap/swagger/deployments-batch-pap.json index 58289fb9..29d96941 100644 --- a/docs/pap/swagger/deployments-batch-pap.json +++ b/docs/pap/swagger/deployments-batch-pap.json @@ -2,7 +2,7 @@ "swagger" : "2.0", "basePath" : "/", "tags" : [ { - "name" : "DeploymentsUpdate" + "name" : "Deployments Update" } ], "schemes" : [ "http", "https" ], "consumes" : [ "application/json", "application/yaml" ], @@ -10,7 +10,7 @@ "paths" : { "/policy/pap/v1/pdps/deployments/batch" : { "post" : { - "tags" : [ "DeploymentsUpdate" ], + "tags" : [ "Deployments Update" ], "summary" : "Updates policy deployments within specific PDP groups", "description" : "Updates policy deployments within specific PDP groups, returning optional error details", "operationId" : "updateGroupPolicies", diff --git a/docs/pap/swagger/group-delete-pap.json b/docs/pap/swagger/group-delete-pap.json index e670b5db..4b5c217c 100644 --- a/docs/pap/swagger/group-delete-pap.json +++ b/docs/pap/swagger/group-delete-pap.json @@ -2,7 +2,7 @@ "swagger" : "2.0", "basePath" : "/", "tags" : [ { - "name" : "PdpGroupDelete" + "name" : "PdpGroup Delete" } ], "schemes" : [ "http", "https" ], "consumes" : [ "application/json" ], @@ -10,7 +10,7 @@ "paths" : { "/policy/pap/v1/pdps/groups/{name}" : { "delete" : { - "tags" : [ "PdpGroupDelete" ], + "tags" : [ "PdpGroup Delete" ], "summary" : "Delete PDP Group", "description" : "Deletes a PDP Group, returning optional error details", "operationId" : "deleteGroup", diff --git a/docs/pap/swagger/group-query-pap.json b/docs/pap/swagger/group-query-pap.json index 959ecc3c..b31515c8 100644 --- a/docs/pap/swagger/group-query-pap.json +++ b/docs/pap/swagger/group-query-pap.json @@ -2,7 +2,7 @@ "swagger" : "2.0", "basePath" : "/", "tags" : [ { - "name" : "PdpGroupQuery" + "name" : "PdpGroup Query" } ], "schemes" : [ "http", "https" ], "consumes" : [ "application/json" ], @@ -10,7 +10,7 @@ "paths" : { "/policy/pap/v1/pdps" : { "get" : { - "tags" : [ "PdpGroupQuery" ], + "tags" : [ "PdpGroup Query" ], "summary" : "Query details of all PDP groups", "description" : "Queries details of all PDP groups, returning all group details", "operationId" : "queryGroupDetails", diff --git a/docs/pap/swagger/groups-batch-pap.json b/docs/pap/swagger/groups-batch-pap.json index 8a1899e3..2d02e998 100644 --- a/docs/pap/swagger/groups-batch-pap.json +++ b/docs/pap/swagger/groups-batch-pap.json @@ -2,7 +2,7 @@ "swagger" : "2.0", "basePath" : "/", "tags" : [ { - "name" : "PdpGroupUpdate" + "name" : "PdpGroup Create/Update" } ], "schemes" : [ "http", "https" ], "consumes" : [ "application/json", "application/yaml" ], @@ -10,7 +10,7 @@ "paths" : { "/policy/pap/v1/pdps/groups/batch" : { "post" : { - "tags" : [ "PdpGroupUpdate" ], + "tags" : [ "PdpGroup Create/Update" ], "summary" : "Create or update PDP Groups", "description" : "Create or update one or more PDP Groups, returning optional error details", "operationId" : "createOrUpdateGroups", diff --git a/docs/pap/swagger/pdp-statistics-pap.json b/docs/pap/swagger/pdp-statistics-pap.json new file mode 100644 index 00000000..7b652adb --- /dev/null +++ b/docs/pap/swagger/pdp-statistics-pap.json @@ -0,0 +1,368 @@ +{ + "swagger": "2.0", + "basePath": "/", + "tags": [ + { + "name": "PDP Statistics" + } + ], + "schemes": [ + "http", + "https" + ], + "consumes": [ + "application/json", + "application/yaml" + ], + "produces": [ + "application/json", + "application/yaml" + ], + "paths": { + "/policy/pap/v1/pdps/statistics": { + "get": { + "tags": [ + "PDP Statistics" + ], + "summary": "Fetch statistics for all PDP Groups and subgroups in the system", + "description": "Returns for all PDP Groups and subgroups statistics of the Policy Administration component", + "operationId": "pdpStatistics", + "produces": [ + "application/json", + "application/yaml" + ], + "parameters": [ + { + "name": "X-ONAP-RequestID", + "in": "header", + "description": "RequestID for http transaction", + "required": false, + "type": "string", + "format": "uuid" + } + ], + "responses": { + "200": { + "description": "successful operation", + "headers": { + "X-MinorVersion": { + "type": "string", + "description": "Used to request or communicate a MINOR version back from the client to the server, and from the server back to the client" + }, + "X-PatchVersion": { + "type": "string", + "description": "Used only to communicate a PATCH version in a response for troubleshooting purposes only, and will not be provided by the client on request" + }, + "X-LatestVersion": { + "type": "string", + "description": "Used only to communicate an API's latest version" + }, + "X-ONAP-RequestID": { + "type": "string", + "format": "uuid", + "description": "Used to track REST transactions for logging purpose" + } + }, + "schema": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + }, + "401": { + "description": "Authentication Error" + }, + "403": { + "description": "Authorization Error" + }, + "500": { + "description": "Internal Server Error" + } + }, + "security": [ + { + "basicAuth": [] + } + ], + "x-interface info": { + "api-version": "1.0.0", + "last-mod-release": "Dublin" + } + } + }, + "/policy/pap/v1/pdps/statistics/{group}": { + "get": { + "tags": [ + "PDP Statistics" + ], + "summary": "Fetch current statistics for given PDP Group", + "description": "Returns statistics for given PDP Group of the Policy Administration component", + "operationId": "pdpGroupStatistics", + "produces": [ + "application/json", + "application/yaml" + ], + "parameters": [ + { + "name": "X-ONAP-RequestID", + "in": "header", + "description": "RequestID for http transaction", + "required": false, + "type": "string", + "format": "uuid" + }, + { + "name": "group", + "in": "path", + "description": "PDP Group Name", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "successful operation", + "headers": { + "X-MinorVersion": { + "type": "string", + "description": "Used to request or communicate a MINOR version back from the client to the server, and from the server back to the client" + }, + "X-PatchVersion": { + "type": "string", + "description": "Used only to communicate a PATCH version in a response for troubleshooting purposes only, and will not be provided by the client on request" + }, + "X-LatestVersion": { + "type": "string", + "description": "Used only to communicate an API's latest version" + }, + "X-ONAP-RequestID": { + "type": "string", + "format": "uuid", + "description": "Used to track REST transactions for logging purpose" + } + }, + "schema": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + }, + "401": { + "description": "Authentication Error" + }, + "403": { + "description": "Authorization Error" + }, + "500": { + "description": "Internal Server Error" + } + }, + "security": [ + { + "basicAuth": [] + } + ], + "x-interface info": { + "api-version": "1.0.0", + "last-mod-release": "Dublin" + } + } + }, + "/policy/pap/v1/pdps/statistics/{group}/{type}": { + "get": { + "tags": [ + "PDP Statistics" + ], + "summary": "Fetch statistics for the specified subgroup", + "description": "Returns statistics for the specified subgroup of the Policy Administration component", + "operationId": "pdpSubGroupStatistics", + "produces": [ + "application/json", + "application/yaml" + ], + "parameters": [ + { + "name": "X-ONAP-RequestID", + "in": "header", + "description": "RequestID for http transaction", + "required": false, + "type": "string", + "format": "uuid" + }, + { + "name": "group", + "in": "path", + "description": "PDP Group Name", + "required": true, + "type": "string" + }, + { + "name": "type", + "in": "path", + "description": "PDP SubGroup type", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "successful operation", + "headers": { + "X-MinorVersion": { + "type": "string", + "description": "Used to request or communicate a MINOR version back from the client to the server, and from the server back to the client" + }, + "X-PatchVersion": { + "type": "string", + "description": "Used only to communicate a PATCH version in a response for troubleshooting purposes only, and will not be provided by the client on request" + }, + "X-LatestVersion": { + "type": "string", + "description": "Used only to communicate an API's latest version" + }, + "X-ONAP-RequestID": { + "type": "string", + "format": "uuid", + "description": "Used to track REST transactions for logging purpose" + } + }, + "schema": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + }, + "401": { + "description": "Authentication Error" + }, + "403": { + "description": "Authorization Error" + }, + "500": { + "description": "Internal Server Error" + } + }, + "security": [ + { + "basicAuth": [] + } + ], + "x-interface info": { + "api-version": "1.0.0", + "last-mod-release": "Dublin" + } + } + }, + "/policy/pap/v1/pdps/statistics/{group}/{type}/{pdp}": { + "get": { + "tags": [ + "PDP Statistics" + ], + "summary": "Fetch statistics for the specified pdp", + "description": "Returns statistics for the specified pdp of the Policy Administration component", + "operationId": "pdpInstanceStatistics", + "produces": [ + "application/json", + "application/yaml" + ], + "parameters": [ + { + "name": "X-ONAP-RequestID", + "in": "header", + "description": "RequestID for http transaction", + "required": false, + "type": "string", + "format": "uuid" + }, + { + "name": "group", + "in": "path", + "description": "PDP Group Name", + "required": true, + "type": "string" + }, + { + "name": "type", + "in": "path", + "description": "PDP SubGroup type", + "required": true, + "type": "string" + }, + { + "name": "pdp", + "in": "path", + "description": "PDP Instance name", + "required": true, + "type": "string" + }, + { + "name": "recordCount", + "in": "query", + "description": "Record Count", + "required": false, + "type": "integer", + "default": 0, + "format": "int32" + } + ], + "responses": { + "200": { + "description": "successful operation", + "headers": { + "X-MinorVersion": { + "type": "string", + "description": "Used to request or communicate a MINOR version back from the client to the server, and from the server back to the client" + }, + "X-PatchVersion": { + "type": "string", + "description": "Used only to communicate a PATCH version in a response for troubleshooting purposes only, and will not be provided by the client on request" + }, + "X-LatestVersion": { + "type": "string", + "description": "Used only to communicate an API's latest version" + }, + "X-ONAP-RequestID": { + "type": "string", + "format": "uuid", + "description": "Used to track REST transactions for logging purpose" + } + }, + "schema": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + }, + "401": { + "description": "Authentication Error" + }, + "403": { + "description": "Authorization Error" + }, + "500": { + "description": "Internal Server Error" + } + }, + "security": [ + { + "basicAuth": [] + } + ], + "x-interface info": { + "api-version": "1.0.0", + "last-mod-release": "Dublin" + } + } + } + }, + "securityDefinitions": { + "basicAuth": { + "description": "", + "type": "basic" + } + } +}
\ No newline at end of file diff --git a/docs/pap/swagger/policy-deploy-pap.json b/docs/pap/swagger/policy-deploy-pap.json index a6d49346..0fc1a9e7 100644 --- a/docs/pap/swagger/policy-deploy-pap.json +++ b/docs/pap/swagger/policy-deploy-pap.json @@ -2,7 +2,7 @@ "swagger" : "2.0", "basePath" : "/", "tags" : [ { - "name" : "PdpPolicyDeploy" + "name" : "Deploy Policy" } ], "schemes" : [ "http", "https" ], "consumes" : [ "application/json" ], @@ -10,7 +10,7 @@ "paths" : { "/policy/pap/v1/pdps/policies" : { "post" : { - "tags" : [ "PdpPolicyDeploy" ], + "tags" : [ "Deploy Policy" ], "summary" : "Deploy or update PDP Policies", "description" : "Deploys or updates PDP Policies, returning optional error details", "operationId" : "deployPolicies", diff --git a/docs/pap/swagger/policy-undeploy-pap.json b/docs/pap/swagger/policy-undeploy-pap.json index 4235b04e..7ba66141 100644 --- a/docs/pap/swagger/policy-undeploy-pap.json +++ b/docs/pap/swagger/policy-undeploy-pap.json @@ -2,7 +2,7 @@ "swagger" : "2.0", "basePath" : "/", "tags" : [ { - "name" : "PdpPolicyUndeploy" + "name" : "Undeploy Policy" } ], "schemes" : [ "http", "https" ], "consumes" : [ "application/json" ], @@ -10,7 +10,7 @@ "paths" : { "/policy/pap/v1/pdps/policies/{name}" : { "delete" : { - "tags" : [ "PdpPolicyUndeploy" ], + "tags" : [ "Undeploy Policy" ], "summary" : "Undeploy a PDP Policy from PDPs", "description" : "Undeploys the latest version of a policy from the PDPs, returning optional error details", "operationId" : "deletePolicy", @@ -76,7 +76,7 @@ }, "/policy/pap/v1/pdps/policies/{name}/versions/{version}" : { "delete" : { - "tags" : [ "PdpPolicyUndeploy" ], + "tags" : [ "Undeploy Policy" ], "summary" : "Undeploy version of a PDP Policy from PDPs", "description" : "Undeploys a specific version of a policy from the PDPs, returning optional error details", "operationId" : "deletePolicyVersion", diff --git a/docs/pap/swagger/state-change-pap.json b/docs/pap/swagger/state-change-pap.json index 16ef6360..d5ca9a08 100644 --- a/docs/pap/swagger/state-change-pap.json +++ b/docs/pap/swagger/state-change-pap.json @@ -2,7 +2,7 @@ "swagger" : "2.0", "basePath" : "/", "tags" : [ { - "name" : "PdpGroupStateChange" + "name" : "PdpGroup State Change" } ], "schemes" : [ "http", "https" ], "consumes" : [ "application/json" ], @@ -10,7 +10,7 @@ "paths" : { "/policy/pap/v1/pdps/groups/{name}" : { "put" : { - "tags" : [ "PdpGroupStateChange" ], + "tags" : [ "PdpGroup State Change" ], "summary" : "Change state of a PDP Group", "description" : "Changes state of PDP Group, returning optional error details", "operationId" : "changeGroupState", |