diff options
author | 2019-05-30 20:53:05 +0000 | |
---|---|---|
committer | 2019-06-03 16:29:29 +0000 | |
commit | 21b8895270fdce164ba3a43e971cb4cc54cea098 (patch) | |
tree | 793d824916e657300f8731e540de712c927a69ff /docs | |
parent | 8f61ace86baf3a42fc3bb39a82c3763ce2223781 (diff) |
Design and Public API documentation completed.
The draw.io diagrams are in Gerrit. If the page is ever deleted, they
will be lost. They ae now saved in XML format in gerrit.
The design documentation links to the examples in github rather than
quoting them in the document. General tidy up and cleaning of links,
rewording, and reformatting of desgin document.
Added missing diagram to the Design document.
Updated and tidied up the internal PAP/PDP document.
General improvement of documentation.
Issue-ID: POLICY-1676
Change-Id: Ie5c9f32693f047beafe14a3e412a32cdf9ed6fde
Signed-off-by: liamfallon <liam.fallon@est.tech>
(cherry picked from commit 4d1d9830d51d3df59cadaa0ac9c9b004f2cb0d17)
Diffstat (limited to 'docs')
31 files changed, 1383 insertions, 5091 deletions
diff --git a/docs/architecture/architecture.rst b/docs/architecture/architecture.rst index 727cb6c9..175bb20d 100644 --- a/docs/architecture/architecture.rst +++ b/docs/architecture/architecture.rst @@ -2,6 +2,7 @@ .. Creative Commons Attribution 4.0 International License. .. http://creativecommons.org/licenses/by/4.0 +.. _architecture-label: Architecture ############ @@ -94,7 +95,7 @@ of conflicts across all policies running in an ONAP installation. The diagram below shows the architecture of the ONAP Policy Framework at its highest level. -.. image:: images/highest.png +.. image:: images/PFHighestLevel.svg The *PolicyDevelopment* component implements the functionality for development of policy types and policies. *PolicyAdministration* is responsible for the deployment life cycle of policies as well as interworking with the @@ -113,7 +114,7 @@ with *PolicyAdministration*, *PolicyExecution* or any other run-time ONAP compon The diagram below shows a more detailed view of the architecture, as inspired by `RFC-2753 <https://tools.ietf.org/html/rfc2753>`__ and `RFC-3198 <https://tools.ietf.org/html/rfc3198>`__. -.. image:: images/detailed.png +.. image:: images/PFDesignAndAdmin.svg *PolicyDevelopment* provides a `CRUD <https://en.wikipedia.org/wiki/Create,_read,_update_and_delete>`__ API for policy types and policies. The policy types and policy artifacts and their metadata (Information about policies, policy types, @@ -142,7 +143,7 @@ three APIs: *PolicyExecution* is the set of running PDPs that are executing policies, logically partitioned into PDP groups and subgroups. -.. image:: images/execution.png +.. image:: images/PolicyExecution.svg The figure above shows how *PolicyExecution* looks at run time with PDPs running in Kubernetes. A *PDPGroup* is a purely logical construct that collects all the PDPs that are running policies for a particular domain together. A *PDPSubGroup* @@ -179,12 +180,12 @@ for :ref:`Policy Administration Point (PAP) Architecture <pap-label>`. This section describes the structure of and relations between the main concepts in the Policy Framework. This model is implemented as a common model and is used by *PolicyDevelopment*, *PolicyDeployment,* and *PolicyExecution.* -.. image:: images/objectmodel1.png +.. image:: images/ClassStructure.svg The UML class diagram above shows the portion of the Policy Framework Object Model that applies to *PolicyDeployment* and *PolicyExecution.* -.. image:: images/objectmodel2.png +.. image:: images/DesignTimeComponents.svg The UML class diagram above shows the portion of the Policy Framework Object Model that applies to *PolicyDevelopment* and *PolicyDeployment.* @@ -498,7 +499,7 @@ On receipt or a shutdown request, the PDP completes or aborts any ongoing policy Policy execution is the execution of a policy in a PDP. Policy enforcement occurs in the component that receives a policy decision. -.. image:: images/PolicyExecution.svg +.. image:: images/PolicyExecutionFlow.svg Policy execution can be *synchronous* or *asynchronous*. In *synchronous* policy execution, the component requesting a policy decision requests a policy decision and waits for the result. The PDP-X and PDP-A implement synchronous policy diff --git a/docs/architecture/draw.io/ClassStructure.xml b/docs/architecture/draw.io/ClassStructure.xml new file mode 100644 index 00000000..9619a8e2 --- /dev/null +++ b/docs/architecture/draw.io/ClassStructure.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mxGraphModel dx="1395" dy="808" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="1169" pageHeight="827" background="#ffffff" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="36" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>MicroService</b></p><hr size="1"><div style="height: 2px"></div><hr size="1"><div style="height: 2px"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="520" y="170" width="100" height="65" as="geometry"/></mxCell><mxCell id="3" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PDPGroup</b></p><hr size="1"><div style="height: 2px"></div><hr size="1"><div style="height: 2px"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="180" y="80" width="140" height="60" as="geometry"/></mxCell><mxCell id="5" value="" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;exitX=0.5;exitY=1;" parent="1" source="3" target="8" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="20" y="100" as="sourcePoint"/><mxPoint x="150" y="340" as="targetPoint"/></mxGeometry></mxCell><mxCell id="6" value="1" style="resizable=0;html=1;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="5" connectable="0" vertex="1"><mxGeometry x="-1" relative="1" as="geometry"><mxPoint x="10" as="offset"/></mxGeometry></mxCell><mxCell id="7" value="1..n" style="resizable=0;html=1;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="5" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"><mxPoint x="30" y="-40" as="offset"/></mxGeometry></mxCell><mxCell id="8" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PDPSubGroup</b></p><hr size="1"><div style="height: 2px"></div><hr size="1"><div style="height: 2px"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="400" y="265" width="110" height="60" as="geometry"/></mxCell><mxCell id="9" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PDP</b></p><hr size="1"><div style="height: 2px"></div><hr size="1"><div style="height: 2px"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="430" y="400" width="50" height="60" as="geometry"/></mxCell><mxCell id="10" value="" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" parent="1" source="8" target="9" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="100" y="90" as="sourcePoint"/><mxPoint x="460" y="240" as="targetPoint"/></mxGeometry></mxCell><mxCell id="11" value="1" style="resizable=0;html=1;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="10" connectable="0" vertex="1"><mxGeometry x="-1" relative="1" as="geometry"><mxPoint x="10" as="offset"/></mxGeometry></mxCell><mxCell id="12" value="1..n" style="resizable=0;html=1;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="10" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"><mxPoint x="30" y="-40" as="offset"/></mxGeometry></mxCell><mxCell id="13" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>&lt;&lt;enumeration&gt;&gt;<br>PDPType</b></p><hr size="1">PDP-X<br><div style="height: 2px">PDP-D<br>PDP-A<br></div>" style="verticalAlign=top;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="175" y="265" width="140" height="90" as="geometry"/></mxCell><mxCell id="14" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;entryX=1;entryY=0.5;exitX=0;exitY=0.25;" parent="1" source="8" target="13" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="-10" y="470" as="sourcePoint"/><mxPoint x="150" y="470" as="targetPoint"/></mxGeometry></mxCell><mxCell id="15" value="1" style="resizable=0;html=1;align=left;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="14" connectable="0" vertex="1"><mxGeometry x="-1" relative="1" as="geometry"><mxPoint x="-20" y="-5" as="offset"/></mxGeometry></mxCell><mxCell id="16" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="14" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="17" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PDP-X</b></p><hr size="1"><div style="height: 2px"></div><hr size="1"><div style="height: 2px"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="360" y="510" width="50" height="60" as="geometry"/></mxCell><mxCell id="18" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PDP-D</b></p><hr size="1"><div style="height: 2px"></div><hr size="1">" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="430" y="510" width="50" height="60" as="geometry"/></mxCell><mxCell id="19" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PDP-A</b></p><hr size="1"><div style="height: 2px"></div><hr size="1">" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="490" y="510" width="60" height="60" as="geometry"/></mxCell><mxCell id="20" value="" style="endArrow=block;endSize=8;endFill=0;html=1;entryX=0.5;entryY=1;exitX=0.5;exitY=0;" parent="1" source="17" target="9" edge="1"><mxGeometry width="160" relative="1" as="geometry"><mxPoint x="-20" y="590" as="sourcePoint"/><mxPoint x="140" y="590" as="targetPoint"/></mxGeometry></mxCell><mxCell id="21" value="" style="endArrow=block;endSize=8;endFill=0;html=1;exitX=0.5;exitY=0;entryX=0.5;entryY=1;" parent="1" source="18" target="9" edge="1"><mxGeometry width="160" relative="1" as="geometry"><mxPoint x="395" y="520" as="sourcePoint"/><mxPoint x="450" y="410" as="targetPoint"/></mxGeometry></mxCell><mxCell id="22" value="" style="endArrow=block;endSize=8;endFill=0;html=1;exitX=0.5;exitY=0;entryX=0.5;entryY=1;" parent="1" source="19" target="9" edge="1"><mxGeometry width="160" relative="1" as="geometry"><mxPoint x="465" y="520" as="sourcePoint"/><mxPoint x="520" y="460" as="targetPoint"/></mxGeometry></mxCell><mxCell id="24" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>Kubernetes</b></p><hr size="1"><div style="height: 2px"></div><hr size="1"><div style="height: 2px"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#f5f5f5;strokeColor=#666666;gradientColor=#b3b3b3;" parent="1" vertex="1"><mxGeometry x="385" y="95" width="100" height="30" as="geometry"/></mxCell><mxCell id="39" value="manages" style="endArrow=open;html=1;endSize=12;startArrow=none;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;exitX=1;exitY=0.5;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitDx=0;exitDy=0;" parent="1" source="24" target="36" edge="1"><mxGeometry x="0.0345" y="-20" relative="1" as="geometry"><mxPoint x="580" y="165" as="sourcePoint"/><mxPoint x="500" y="200" as="targetPoint"/><mxPoint as="offset"/><Array as="points"><mxPoint x="570" y="110"/></Array></mxGeometry></mxCell><mxCell id="40" value="" style="resizable=0;html=1;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="39" connectable="0" vertex="1"><mxGeometry x="-1" relative="1" as="geometry"/></mxCell><mxCell id="41" value="<div>0..n</div>" style="resizable=0;html=1;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="39" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"><mxPoint y="-30" as="offset"/></mxGeometry></mxCell><mxCell id="42" value="" style="endArrow=block;endSize=8;endFill=0;html=1;entryX=0.25;entryY=1;exitX=0.75;exitY=0;" parent="1" source="8" target="36" edge="1"><mxGeometry width="160" relative="1" as="geometry"><mxPoint x="395" y="520" as="sourcePoint"/><mxPoint x="465" y="470" as="targetPoint"/></mxGeometry></mxCell><mxCell id="49" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PolicyImpl</b></p><hr size="1"><div style="height: 2px"></div><hr size="1"><div style="height: 2px"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="15" y="400" width="85" height="60" as="geometry"/></mxCell><mxCell id="50" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>XACMLPolicyImpl<br></b></p><hr size="1"><div style="height: 2px"></div><hr size="1"><div style="height: 2px"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="-155" y="510" width="135" height="60" as="geometry"/></mxCell><mxCell id="51" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>DroolsPolicyImpl</b></p><hr size="1"><div style="height: 2px"></div><hr size="1">" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="-5" y="510" width="120" height="60" as="geometry"/></mxCell><mxCell id="52" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>ApexPolicyImpl</b></p><hr size="1"><div style="height: 2px"></div><hr size="1">" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="130" y="510" width="115" height="60" as="geometry"/></mxCell><mxCell id="53" value="" style="endArrow=block;endSize=8;endFill=0;html=1;entryX=0.5;entryY=1;exitX=0.5;exitY=0;strokeWidth=1;" parent="1" source="50" target="49" edge="1"><mxGeometry width="160" relative="1" as="geometry"><mxPoint x="-365" y="590" as="sourcePoint"/><mxPoint x="-205" y="590" as="targetPoint"/></mxGeometry></mxCell><mxCell id="54" value="" style="endArrow=block;endSize=8;endFill=0;html=1;exitX=0.5;exitY=0;entryX=0.5;entryY=1;strokeWidth=1;" parent="1" source="51" target="49" edge="1"><mxGeometry width="160" relative="1" as="geometry"><mxPoint x="50" y="520" as="sourcePoint"/><mxPoint x="105" y="410" as="targetPoint"/></mxGeometry></mxCell><mxCell id="55" value="" style="endArrow=block;endSize=8;endFill=0;html=1;exitX=0.5;exitY=0;entryX=0.5;entryY=1;" parent="1" source="52" target="49" edge="1"><mxGeometry width="160" relative="1" as="geometry"><mxPoint x="120" y="520" as="sourcePoint"/><mxPoint x="175" y="460" as="targetPoint"/></mxGeometry></mxCell><mxCell id="56" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;entryX=0;entryY=0.5;exitX=1;exitY=0.25;" parent="1" source="49" target="13" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="410" y="290" as="sourcePoint"/><mxPoint x="320" y="355" as="targetPoint"/></mxGeometry></mxCell><mxCell id="57" value="1" style="resizable=0;html=1;align=left;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="56" connectable="0" vertex="1"><mxGeometry x="-1" relative="1" as="geometry"><mxPoint x="10" y="15" as="offset"/></mxGeometry></mxCell><mxCell id="58" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="56" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="60" value="executes" style="endArrow=open;html=1;endSize=12;startArrow=none;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=1;entryY=0.75;exitX=0;exitY=0.25;" parent="1" source="9" target="49" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="350" y="420" as="sourcePoint"/><mxPoint x="190" y="460" as="targetPoint"/></mxGeometry></mxCell><mxCell id="61" value="" style="resizable=0;html=1;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="60" connectable="0" vertex="1"><mxGeometry x="-1" relative="1" as="geometry"/></mxCell><mxCell id="62" value="<div>0..n</div>" style="resizable=0;html=1;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="60" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"><mxPoint x="30" y="-6" as="offset"/></mxGeometry></mxCell><mxCell id="79" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PolicySet</b></p><hr size="1"><div style="height: 2px"></div><hr size="1"><div style="height: 2px"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="-40" y="160" width="80" height="60" as="geometry"/></mxCell><mxCell id="83" value="executes" style="endArrow=openThin;html=1;endSize=12;startArrow=none;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;strokeWidth=1;exitX=0;exitY=0.5;entryX=1;entryY=0.25;endFill=0;" parent="1" source="3" target="79" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="-170" y="90" as="sourcePoint"/><mxPoint x="-270" y="180" as="targetPoint"/></mxGeometry></mxCell><mxCell id="84" value="1" style="resizable=0;html=1;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="83" connectable="0" vertex="1"><mxGeometry x="-1" relative="1" as="geometry"><mxPoint x="-30" as="offset"/></mxGeometry></mxCell><mxCell id="85" value="1" style="resizable=0;html=1;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="83" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"><mxPoint x="20" y="2.5" as="offset"/></mxGeometry></mxCell><mxCell id="86" value="" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" parent="1" source="79" target="49" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="260" y="150" as="sourcePoint"/><mxPoint x="465" y="275" as="targetPoint"/><Array as="points"><mxPoint y="330"/><mxPoint x="58" y="330"/></Array></mxGeometry></mxCell><mxCell id="87" value="1" style="resizable=0;html=1;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="86" connectable="0" vertex="1"><mxGeometry x="-1" relative="1" as="geometry"><mxPoint x="10" as="offset"/></mxGeometry></mxCell><mxCell id="88" value="1..n" style="resizable=0;html=1;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="86" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"><mxPoint x="30" y="-40" as="offset"/></mxGeometry></mxCell><mxCell id="91" value="All the PDPs in a given PDPSubGroup instance must be of the same type" style="shape=note;whiteSpace=wrap;html=1;size=14;verticalAlign=top;align=left;spacingTop=-6;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="530" y="330" width="160" height="50" as="geometry"/></mxCell><mxCell id="93" value="" style="endArrow=none;dashed=1;html=1;entryX=1;entryY=0.75;exitX=0;exitY=0.5;strokeColor=#97D077;" parent="1" source="91" target="8" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="-180" y="800" as="sourcePoint"/><mxPoint x="-130" y="750" as="targetPoint"/></mxGeometry></mxCell><mxCell id="94" value="" style="endArrow=none;dashed=1;html=1;entryX=1;entryY=0.25;exitX=0;exitY=0.5;strokeColor=#97D077;" parent="1" source="91" target="9" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="570" y="410" as="sourcePoint"/><mxPoint x="520" y="320" as="targetPoint"/></mxGeometry></mxCell><mxCell id="WxIZwHBQDS0929NCy7-o-94" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PolicyTypeImpl<br></b></p><hr size="1"><div style="height: 2px"></div><hr size="1"><div style="height: 2px"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="-330" y="408.5" width="140" height="58" as="geometry"/></mxCell><mxCell id="WxIZwHBQDS0929NCy7-o-98" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>&lt;&lt;TOSCA&gt;&gt;<br>Policy</b></p><hr size="1"><div style="height: 2px"></div><hr size="1"><div style="height: 2px"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="-328" y="329" width="95" height="52" as="geometry"/></mxCell><mxCell id="WxIZwHBQDS0929NCy7-o-99" value="has implementation" style="endArrow=openThin;html=1;endSize=12;startArrow=none;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;strokeWidth=1;endFill=0;exitX=0;exitY=0.867;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;exitPerimeter=0;" parent="1" source="49" target="WxIZwHBQDS0929NCy7-o-94" edge="1"><mxGeometry x="0.1923" y="-10" relative="1" as="geometry"><mxPoint x="-252" y="340" as="sourcePoint"/><mxPoint x="-290" y="413" as="targetPoint"/><mxPoint as="offset"/><Array as="points"><mxPoint x="-110" y="452"/><mxPoint x="-110" y="423"/></Array></mxGeometry></mxCell><mxCell id="WxIZwHBQDS0929NCy7-o-100" value="<div>n</div>" style="resizable=0;html=1;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="WxIZwHBQDS0929NCy7-o-99" connectable="0" vertex="1"><mxGeometry x="-1" relative="1" as="geometry"><mxPoint x="-20" y="-25" as="offset"/></mxGeometry></mxCell><mxCell id="WxIZwHBQDS0929NCy7-o-101" value="1" style="resizable=0;html=1;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="WxIZwHBQDS0929NCy7-o-99" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"><mxPoint x="27.5" y="-23" as="offset"/></mxGeometry></mxCell><mxCell id="WxIZwHBQDS0929NCy7-o-102" value="is specified by" style="endArrow=openThin;html=1;endSize=12;startArrow=none;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;strokeWidth=1;endFill=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;" parent="1" source="49" target="WxIZwHBQDS0929NCy7-o-98" edge="1"><mxGeometry x="-0.0333" relative="1" as="geometry"><mxPoint x="-10" y="455" as="sourcePoint"/><mxPoint x="-280" y="423" as="targetPoint"/><mxPoint as="offset"/><Array as="points"><mxPoint x="-90" y="430"/><mxPoint x="-90" y="342"/></Array></mxGeometry></mxCell><mxCell id="WxIZwHBQDS0929NCy7-o-103" value="<div>n</div>" style="resizable=0;html=1;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="WxIZwHBQDS0929NCy7-o-102" connectable="0" vertex="1"><mxGeometry x="-1" relative="1" as="geometry"><mxPoint x="-20" y="-25" as="offset"/></mxGeometry></mxCell><mxCell id="WxIZwHBQDS0929NCy7-o-104" value="1" style="resizable=0;html=1;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="WxIZwHBQDS0929NCy7-o-102" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"><mxPoint x="27.5" y="-23" as="offset"/></mxGeometry></mxCell><mxCell id="yHxFdaB63uvkelnHd-nB-94" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>&lt;&lt;TOSCA&gt;&gt;<br>PolicyType</b></p><hr size="1"><div style="height: 2px"></div><hr size="1"><div style="height: 2px"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="-330" y="209" width="95" height="52" as="geometry"/></mxCell><mxCell id="yHxFdaB63uvkelnHd-nB-100" value="is defined by" style="endArrow=openThin;html=1;endSize=12;startArrow=none;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;strokeWidth=1;endFill=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="WxIZwHBQDS0929NCy7-o-98" target="yHxFdaB63uvkelnHd-nB-94" edge="1"><mxGeometry x="0.1714" relative="1" as="geometry"><mxPoint x="-390" y="290" as="sourcePoint"/><mxPoint x="-230" y="280" as="targetPoint"/><mxPoint as="offset"/><Array as="points"><mxPoint x="-282" y="320"/><mxPoint x="-282" y="320"/></Array></mxGeometry></mxCell><mxCell id="yHxFdaB63uvkelnHd-nB-101" value="<div>n</div>" style="resizable=0;html=1;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="yHxFdaB63uvkelnHd-nB-100" connectable="0" vertex="1"><mxGeometry x="-1" relative="1" as="geometry"><mxPoint x="-18" y="-30" as="offset"/></mxGeometry></mxCell><mxCell id="yHxFdaB63uvkelnHd-nB-102" value="1" style="resizable=0;html=1;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="yHxFdaB63uvkelnHd-nB-100" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"><mxPoint x="22" as="offset"/></mxGeometry></mxCell></root></mxGraphModel>
\ No newline at end of file diff --git a/docs/architecture/draw.io/DesignTimeComponents.xml b/docs/architecture/draw.io/DesignTimeComponents.xml new file mode 100644 index 00000000..032d8558 --- /dev/null +++ b/docs/architecture/draw.io/DesignTimeComponents.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mxGraphModel dx="2595" dy="1608" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="1169" pageHeight="827" background="#ffffff" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="12" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>&lt;&lt;enumeration&gt;&gt;<br>PDPType</b></p><hr size="1">PDP-X<br><div style="height: 2px">PDP-D<br>PDP-A<br></div>" style="verticalAlign=top;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="-900" y="-9.5" width="140" height="90" as="geometry"/></mxCell><mxCell id="28" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>XACMLPolicy<br></b></p><hr size="1"><div style="height: 2px"></div><hr size="1"><div style="height: 2px"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="-440" y="-164.5" width="100" height="60" as="geometry"/></mxCell><mxCell id="29" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>DroolsPolicy</b></p><hr size="1"><div style="height: 2px"></div><hr size="1">" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="-330" y="-164.5" width="90" height="60" as="geometry"/></mxCell><mxCell id="30" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>ApexPolicy</b></p><hr size="1"><div style="height: 2px"></div><hr size="1">" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="-230" y="-164.5" width="80" height="60" as="geometry"/></mxCell><mxCell id="31" value="" style="endArrow=block;endSize=8;endFill=0;html=1;exitX=0.5;exitY=0;strokeWidth=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="28" target="JLu5tQw5rpazg5sk-l6F-103" edge="1"><mxGeometry width="160" relative="1" as="geometry"><mxPoint x="-615" y="40" as="sourcePoint"/><mxPoint x="-215" y="-100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="32" value="" style="endArrow=block;endSize=8;endFill=0;html=1;exitX=0.5;exitY=0;entryX=0.5;entryY=1;strokeWidth=1;entryDx=0;entryDy=0;" parent="1" source="29" target="JLu5tQw5rpazg5sk-l6F-103" edge="1"><mxGeometry width="160" relative="1" as="geometry"><mxPoint x="-200" y="-30" as="sourcePoint"/><mxPoint x="-215" y="-100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="33" value="" style="endArrow=block;endSize=8;endFill=0;html=1;exitX=0.5;exitY=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="30" target="JLu5tQw5rpazg5sk-l6F-103" edge="1"><mxGeometry width="160" relative="1" as="geometry"><mxPoint x="-130" y="-30" as="sourcePoint"/><mxPoint x="-215" y="-100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="34" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;entryX=1;entryY=0.5;exitX=0;exitY=0.75;dashed=1;strokeColor=#7EA6E0;exitDx=0;exitDy=0;" parent="1" source="JLu5tQw5rpazg5sk-l6F-103" target="12" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="10" y="-260" as="sourcePoint"/><mxPoint x="-80" y="-195" as="targetPoint"/><Array as="points"><mxPoint x="-460" y="-243"/><mxPoint x="-460" y="40"/><mxPoint x="-760" y="40"/></Array></mxGeometry></mxCell><mxCell id="35" value="1" style="resizable=0;html=1;align=left;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="34" connectable="0" vertex="1"><mxGeometry x="-1" relative="1" as="geometry"><mxPoint x="-20" y="20" as="offset"/></mxGeometry></mxCell><mxCell id="36" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="34" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"><mxPoint x="25" y="-6" as="offset"/></mxGeometry></mxCell><mxCell id="54" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>XACMLImpl<br></b></p><hr size="1"><div style="height: 2px"></div><hr size="1"><div style="height: 2px"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="-772.5" y="-61.5" width="100" height="36" as="geometry"/></mxCell><mxCell id="55" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>DroolsImpl<br></b></p><hr size="1"><div style="height: 2px"></div><hr size="1"><div style="height: 2px"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="-662.5" y="-61.5" width="100" height="35" as="geometry"/></mxCell><mxCell id="56" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>ApexImpl<br></b></p><hr size="1"><div style="height: 2px"></div><hr size="1"><div style="height: 2px"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="-552.5" y="-61.5" width="80" height="36" as="geometry"/></mxCell><mxCell id="59" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PolicyTypeImpl<br></b></p><hr size="1"><div style="height: 2px"></div><hr size="1"><div style="height: 2px"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="-675" y="-164.5" width="140" height="58" as="geometry"/></mxCell><mxCell id="60" value="" style="endArrow=block;endSize=8;endFill=0;html=1;exitX=0.5;exitY=0;strokeWidth=1;entryX=0.5;entryY=1;" parent="1" source="54" target="59" edge="1"><mxGeometry width="160" relative="1" as="geometry"><mxPoint x="-775" y="204.5" as="sourcePoint"/><mxPoint x="-625" y="94.5" as="targetPoint"/></mxGeometry></mxCell><mxCell id="61" value="" style="endArrow=block;endSize=8;endFill=0;html=1;strokeWidth=1;entryX=0.5;entryY=1;" parent="1" source="55" target="59" edge="1"><mxGeometry width="160" relative="1" as="geometry"><mxPoint x="-670" y="204.5" as="sourcePoint"/><mxPoint x="-685" y="174.5" as="targetPoint"/></mxGeometry></mxCell><mxCell id="62" value="" style="endArrow=block;endSize=8;endFill=0;html=1;exitX=0.5;exitY=0;entryX=0.5;entryY=1;" parent="1" source="56" target="59" edge="1"><mxGeometry width="160" relative="1" as="geometry"><mxPoint x="-575" y="204.5" as="sourcePoint"/><mxPoint x="-660" y="154.5" as="targetPoint"/></mxGeometry></mxCell><mxCell id="63" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;entryX=0.5;entryY=0;exitX=0;exitY=0.75;dashed=1;strokeColor=#7EA6E0;entryDx=0;entryDy=0;exitDx=0;exitDy=0;" parent="1" source="59" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="-350" y="-110" as="sourcePoint"/><mxPoint x="-805" y="-9" as="targetPoint"/><Array as="points"><mxPoint x="-805" y="-117"/></Array></mxGeometry></mxCell><mxCell id="64" value="1" style="resizable=0;html=1;align=left;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="63" connectable="0" vertex="1"><mxGeometry x="-1" relative="1" as="geometry"><mxPoint x="-20" y="-4" as="offset"/></mxGeometry></mxCell><mxCell id="65" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="63" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="66" value="<b>PolicyTypeXACML<br></b><hr size="1"><div style="height: 2px" align="left"><br></div>" style="verticalAlign=top;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="-1245" y="-61.5" width="130" height="37" as="geometry"/></mxCell><mxCell id="69" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>&lt;&lt;TOSCA&gt;&gt;<br>PolicyType<br></b></p><hr size="1"><div style="height: 2px"></div><hr size="1"><div style="height: 2px"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="-1115" y="-165.5" width="140" height="56" as="geometry"/></mxCell><mxCell id="70" value="" style="endArrow=block;endSize=8;endFill=0;html=1;exitX=0.5;exitY=0;strokeWidth=1;entryX=0.5;entryY=1;" parent="1" source="66" target="69" edge="1"><mxGeometry width="160" relative="1" as="geometry"><mxPoint x="-1215" y="200.5" as="sourcePoint"/><mxPoint x="-1065" y="90.5" as="targetPoint"/></mxGeometry></mxCell><mxCell id="71" value="" style="endArrow=block;endSize=8;endFill=0;html=1;strokeWidth=1;entryX=0.5;entryY=1;exitX=0.5;exitY=0;" parent="1" source="74" target="69" edge="1"><mxGeometry width="160" relative="1" as="geometry"><mxPoint x="-1051" y="-59.5" as="sourcePoint"/><mxPoint x="-1125" y="170.5" as="targetPoint"/></mxGeometry></mxCell><mxCell id="72" value="" style="endArrow=block;endSize=8;endFill=0;html=1;exitX=0.5;exitY=0;entryX=0.5;entryY=1;" parent="1" target="69" edge="1"><mxGeometry width="160" relative="1" as="geometry"><mxPoint x="-935" y="-59.5" as="sourcePoint"/><mxPoint x="-1100" y="150.5" as="targetPoint"/></mxGeometry></mxCell><mxCell id="73" value="" style="resizable=0;html=1;align=left;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="1" connectable="0" vertex="1"><mxGeometry x="-960" y="-109.5" as="geometry"><mxPoint x="171" y="188" as="offset"/></mxGeometry></mxCell><mxCell id="74" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PolicyTypeDrools<br></b></p><hr size="1"><div style="height: 2px"><br></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="-1105" y="-61.5" width="120" height="38" as="geometry"/></mxCell><mxCell id="75" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PolicyTypeApex<br></b></p><hr size="1"><div style="height: 2px"><i><br></i></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="-975" y="-61.5" width="110" height="38" as="geometry"/></mxCell><mxCell id="78" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;dashed=1;strokeColor=#7EA6E0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=1;exitY=0.75;exitDx=0;exitDy=0;" parent="1" source="69" target="12" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="-950" y="-100" as="sourcePoint"/><mxPoint x="-900" y="40" as="targetPoint"/><Array as="points"><mxPoint x="-830" y="-119"/></Array></mxGeometry></mxCell><mxCell id="79" value="1" style="resizable=0;html=1;align=left;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="78" connectable="0" vertex="1"><mxGeometry x="-1" relative="1" as="geometry"><mxPoint x="10" as="offset"/></mxGeometry></mxCell><mxCell id="80" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="78" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"><mxPoint x="25" y="-6" as="offset"/></mxGeometry></mxCell><mxCell id="82" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PolicyCreator<br></b></p><hr size="1"><div style="height: 2px"></div><hr size="1"><div style="height: 2px"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="-850" y="-410" width="120" height="60" as="geometry"/></mxCell><mxCell id="83" value="applies" style="endArrow=open;html=1;endSize=12;startArrow=none;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;strokeWidth=1;entryX=0.5;entryY=0;endFill=0;exitX=1;exitY=0.75;exitDx=0;exitDy=0;" parent="1" source="82" target="59" edge="1"><mxGeometry x="-0.2222" y="30" relative="1" as="geometry"><mxPoint x="-730" y="-160" as="sourcePoint"/><mxPoint x="235" y="-230" as="targetPoint"/><mxPoint x="-30" y="30" as="offset"/></mxGeometry></mxCell><mxCell id="84" value="1" style="resizable=0;html=1;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="83" connectable="0" vertex="1"><mxGeometry x="-1" relative="1" as="geometry"><mxPoint x="-10" as="offset"/></mxGeometry></mxCell><mxCell id="85" value="1" style="resizable=0;html=1;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="83" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"><mxPoint y="-30" as="offset"/></mxGeometry></mxCell><mxCell id="86" value="parameterizes" style="endArrow=open;html=1;endSize=12;startArrow=none;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;strokeWidth=1;entryX=0.75;entryY=0;endFill=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="82" target="69" edge="1"><mxGeometry x="-0.1579" y="60" relative="1" as="geometry"><mxPoint x="-370" y="220" as="sourcePoint"/><mxPoint x="-980" y="-150" as="targetPoint"/><mxPoint x="-60" y="60" as="offset"/></mxGeometry></mxCell><mxCell id="87" value="1" style="resizable=0;html=1;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="86" connectable="0" vertex="1"><mxGeometry x="-1" relative="1" as="geometry"><mxPoint x="10" y="5" as="offset"/></mxGeometry></mxCell><mxCell id="88" value="1" style="resizable=0;html=1;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="86" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"><mxPoint y="-30" as="offset"/></mxGeometry></mxCell><mxCell id="89" value="creates" style="endArrow=open;html=1;endSize=12;startArrow=none;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;strokeWidth=1;endFill=0;exitX=1;exitY=0.25;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="82" target="JLu5tQw5rpazg5sk-l6F-103" edge="1"><mxGeometry x="0.1183" relative="1" as="geometry"><mxPoint x="-570" y="-440" as="sourcePoint"/><mxPoint x="-330" y="-395" as="targetPoint"/><mxPoint as="offset"/><Array as="points"><mxPoint x="-285" y="-395"/></Array></mxGeometry></mxCell><mxCell id="90" value="1" style="resizable=0;html=1;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="89" connectable="0" vertex="1"><mxGeometry x="-1" relative="1" as="geometry"><mxPoint x="10" y="-20" as="offset"/></mxGeometry></mxCell><mxCell id="91" value="1" style="resizable=0;html=1;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="89" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"><mxPoint y="-30" as="offset"/></mxGeometry></mxCell><mxCell id="92" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PDPXCreator<br></b></p><hr size="1"><div style="height: 2px"></div><hr size="1"><div style="height: 2px"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="-945" y="-270" width="100" height="60" as="geometry"/></mxCell><mxCell id="93" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PDPDCreator</b></p><hr size="1"><div style="height: 2px"></div><hr size="1">" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="-835" y="-270" width="95" height="60" as="geometry"/></mxCell><mxCell id="94" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PDPACreator</b></p><hr size="1"><div style="height: 2px"></div><hr size="1">" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="-735" y="-270" width="95" height="60" as="geometry"/></mxCell><mxCell id="95" value="" style="endArrow=block;endSize=8;endFill=0;html=1;entryX=0.5;entryY=1;exitX=0.5;exitY=0;strokeWidth=1;" parent="1" source="92" target="82" edge="1"><mxGeometry width="160" relative="1" as="geometry"><mxPoint x="-1180" y="-170" as="sourcePoint"/><mxPoint x="-780" y="-310" as="targetPoint"/></mxGeometry></mxCell><mxCell id="96" value="" style="endArrow=block;endSize=8;endFill=0;html=1;exitX=0.5;exitY=0;strokeWidth=1;entryX=0.5;entryY=1;" parent="1" source="93" target="82" edge="1"><mxGeometry width="160" relative="1" as="geometry"><mxPoint x="-765" y="-240" as="sourcePoint"/><mxPoint x="-770" y="-350" as="targetPoint"/></mxGeometry></mxCell><mxCell id="97" value="" style="endArrow=block;endSize=8;endFill=0;html=1;exitX=0.5;exitY=0;entryX=0.5;entryY=1;" parent="1" source="94" target="82" edge="1"><mxGeometry width="160" relative="1" as="geometry"><mxPoint x="-695" y="-240" as="sourcePoint"/><mxPoint x="-780" y="-310" as="targetPoint"/></mxGeometry></mxCell><mxCell id="98" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;exitX=1;exitY=0.5;dashed=1;strokeColor=#7EA6E0;startArrow=none;startFill=0;endFill=0;" parent="1" source="82" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="-550" y="-120" as="sourcePoint"/><mxPoint x="-760" y="36" as="targetPoint"/><Array as="points"><mxPoint x="-460" y="-380"/><mxPoint x="-460" y="40"/><mxPoint x="-760" y="40"/></Array></mxGeometry></mxCell><mxCell id="99" value="1" style="resizable=0;html=1;align=left;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="98" connectable="0" vertex="1"><mxGeometry x="-1" relative="1" as="geometry"><mxPoint x="10" as="offset"/></mxGeometry></mxCell><mxCell id="100" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="98" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"><mxPoint x="25" y="-6" as="offset"/></mxGeometry></mxCell><mxCell id="WnAEskrEjoqfPgaEkT4R-103" value="implements" style="endArrow=none;html=1;endSize=12;startArrow=none;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;strokeWidth=1;endFill=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;exitX=0;exitY=0.25;exitDx=0;exitDy=0;" parent="1" source="59" target="69" edge="1"><mxGeometry x="-0.0507" relative="1" as="geometry"><mxPoint x="-740" y="-170" as="sourcePoint"/><mxPoint x="-910" y="-130" as="targetPoint"/><mxPoint as="offset"/><Array as="points"><mxPoint x="-675" y="-151"/></Array></mxGeometry></mxCell><mxCell id="WnAEskrEjoqfPgaEkT4R-104" value="m" style="resizable=0;html=1;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="WnAEskrEjoqfPgaEkT4R-103" connectable="0" vertex="1"><mxGeometry x="-1" relative="1" as="geometry"><mxPoint x="-30" y="-25" as="offset"/></mxGeometry></mxCell><mxCell id="WnAEskrEjoqfPgaEkT4R-105" value="n" style="resizable=0;html=1;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;" parent="WnAEskrEjoqfPgaEkT4R-103" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"><mxPoint x="15" y="-21" as="offset"/></mxGeometry></mxCell><mxCell id="JLu5tQw5rpazg5sk-l6F-103" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>&lt;&lt;TOSCA&gt;&gt;<br>Policy</b></p><hr size="1"><div style="height: 2px"></div><hr size="1"><div style="height: 2px"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="-332.5" y="-280" width="95" height="52" as="geometry"/></mxCell></root></mxGraphModel>
\ No newline at end of file diff --git a/docs/architecture/draw.io/PFDesignAndAdmin.xml b/docs/architecture/draw.io/PFDesignAndAdmin.xml new file mode 100644 index 00000000..9ba43502 --- /dev/null +++ b/docs/architecture/draw.io/PFDesignAndAdmin.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mxGraphModel dx="995" dy="808" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" background="#ffffff" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="2" value="PolicyDevelopment" style="html=1;fillColor=#fff2cc;strokeColor=#d6b656;gradientColor=#ffd966;" parent="1" vertex="1"><mxGeometry x="260" y="220" width="150" height="30" as="geometry"/></mxCell><mxCell id="3" value="Portal" style="html=1;fillColor=#f5f5f5;strokeColor=#666666;gradientColor=#b3b3b3;" parent="1" vertex="1"><mxGeometry x="150" y="120" width="50" height="30" as="geometry"/></mxCell><mxCell id="4" value="PolicyDevAPIUser" style="html=1;fillColor=#f5f5f5;strokeColor=#666666;gradientColor=#b3b3b3;" parent="1" vertex="1"><mxGeometry x="210" y="120" width="120" height="30" as="geometry"/></mxCell><mxCell id="5" value="PolicyDistribution" style="html=1;fillColor=#fff2cc;strokeColor=#d6b656;gradientColor=#ffd966;" parent="1" vertex="1"><mxGeometry x="340" y="120" width="120" height="30" as="geometry"/></mxCell><mxCell id="8" value="SDC" style="html=1;fillColor=#f5f5f5;strokeColor=#666666;gradientColor=#b3b3b3;" parent="1" vertex="1"><mxGeometry x="375" y="70" width="50" height="30" as="geometry"/></mxCell><mxCell id="10" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" parent="1" source="8" target="5" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="80" y="270" as="sourcePoint"/><mxPoint x="450" y="130" as="targetPoint"/></mxGeometry></mxCell><mxCell id="12" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="10" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="14" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" parent="1" source="3" target="2" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="580" y="90" as="sourcePoint"/><mxPoint x="580" y="130" as="targetPoint"/><Array as="points"><mxPoint x="175" y="170"/><mxPoint x="335" y="170"/></Array></mxGeometry></mxCell><mxCell id="15" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="14" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="16" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;entryX=0.5;entryY=0;exitX=0.5;exitY=1;" parent="1" source="4" target="2" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="390" y="150" as="sourcePoint"/><mxPoint x="445" y="230" as="targetPoint"/><Array as="points"><mxPoint x="270" y="170"/><mxPoint x="335" y="170"/></Array></mxGeometry></mxCell><mxCell id="17" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="16" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="18" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;entryX=0.5;entryY=0;exitX=0.5;exitY=1;" parent="1" source="5" target="2" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="395" y="160" as="sourcePoint"/><mxPoint x="445" y="230" as="targetPoint"/><Array as="points"><mxPoint x="400" y="170"/><mxPoint x="335" y="170"/></Array></mxGeometry></mxCell><mxCell id="19" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="18" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="20" value="PolicyDevGUI" style="html=1;fillColor=#fff2cc;strokeColor=#d6b656;gradientColor=#ffd966;" parent="1" vertex="1"><mxGeometry x="40" y="120" width="100" height="30" as="geometry"/></mxCell><mxCell id="21" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" parent="1" source="20" target="2" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="255" y="160" as="sourcePoint"/><mxPoint x="440" y="220" as="targetPoint"/><Array as="points"><mxPoint x="90" y="170"/><mxPoint x="335" y="170"/></Array></mxGeometry></mxCell><mxCell id="22" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="21" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="24" value="PolicyDB" style="shape=cylinder;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;fillColor=#f5f5f5;strokeColor=#666666;gradientColor=#b3b3b3;" parent="1" vertex="1"><mxGeometry x="502" y="290" width="80" height="30" as="geometry"/></mxCell><mxCell id="31" value="PolicyAdminGUI" style="html=1;fillColor=#fff2cc;strokeColor=#d6b656;gradientColor=#ffd966;" parent="1" vertex="1"><mxGeometry x="472" y="80" width="110" height="30" as="geometry"/></mxCell><mxCell id="33" value="PolicyAdministration" style="html=1;fillColor=#fff2cc;strokeColor=#d6b656;gradientColor=#ffd966;" parent="1" vertex="1"><mxGeometry x="522" y="220" width="140" height="30" as="geometry"/></mxCell><mxCell id="34" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;exitX=0.5;exitY=1;" parent="1" source="31" target="33" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="372" y="160" as="sourcePoint"/><mxPoint x="307" y="230" as="targetPoint"/><Array as="points"><mxPoint x="527" y="130"/><mxPoint x="592" y="130"/></Array></mxGeometry></mxCell><mxCell id="35" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="34" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="46" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;entryX=0.5;entryY=0;exitX=0.75;exitY=1;" parent="1" source="2" target="24" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="270" y="280" as="sourcePoint"/><mxPoint x="425" y="375" as="targetPoint"/><Array as="points"><mxPoint x="370" y="250"/><mxPoint x="370" y="270"/><mxPoint x="542" y="270"/></Array></mxGeometry></mxCell><mxCell id="47" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="46" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="48" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;entryX=0.5;entryY=0;exitX=0.5;exitY=1;" parent="1" source="33" target="24" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="670" y="310" as="sourcePoint"/><mxPoint x="730" y="360" as="targetPoint"/><Array as="points"><mxPoint x="592" y="270"/><mxPoint x="542" y="270"/></Array></mxGeometry></mxCell><mxCell id="49" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="48" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="58" value="PolicyAdminAPIUser" style="html=1;fillColor=#f5f5f5;strokeColor=#666666;gradientColor=#b3b3b3;" parent="1" vertex="1"><mxGeometry x="597" y="80" width="135" height="30" as="geometry"/></mxCell><mxCell id="59" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" parent="1" source="58" target="33" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="537" y="160" as="sourcePoint"/><mxPoint x="522" y="200" as="targetPoint"/><Array as="points"><mxPoint x="665" y="130"/><mxPoint x="592" y="130"/></Array></mxGeometry></mxCell><mxCell id="60" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="59" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="62" value="PolicyExecution" style="html=1;fillColor=#fff2cc;strokeColor=#d6b656;gradientColor=#ffd966;" parent="1" vertex="1"><mxGeometry x="920" y="220" width="100" height="30" as="geometry"/></mxCell><mxCell id="63" value="DMaaP" style="html=1;fillColor=#f5f5f5;strokeColor=#666666;gradientColor=#b3b3b3;" parent="1" vertex="1"><mxGeometry x="770" y="305" width="100" height="30" as="geometry"/></mxCell><mxCell id="64" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" parent="1" source="63" target="33" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="410" y="160" as="sourcePoint"/><mxPoint x="710" y="235" as="targetPoint"/><Array as="points"><mxPoint x="750" y="320"/><mxPoint x="750" y="235"/></Array></mxGeometry></mxCell><mxCell id="65" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="64" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="66" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" parent="1" source="62" target="63" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="780" y="245" as="sourcePoint"/><mxPoint x="710" y="245" as="targetPoint"/></mxGeometry></mxCell><mxCell id="67" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="66" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="68" value="AsyncCaller" style="html=1;fillColor=#f5f5f5;strokeColor=#666666;gradientColor=#b3b3b3;" parent="1" vertex="1"><mxGeometry x="870" y="120" width="90" height="30" as="geometry"/></mxCell><mxCell id="69" value="SyncCaller" style="html=1;fillColor=#f5f5f5;strokeColor=#666666;gradientColor=#b3b3b3;" parent="1" vertex="1"><mxGeometry x="970" y="120" width="80" height="30" as="geometry"/></mxCell><mxCell id="70" value="" style="endArrow=classic;startArrow=classic;html=1;entryX=0.5;entryY=1;exitX=0.75;exitY=0;" parent="1" source="62" target="69" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="50" y="440" as="sourcePoint"/><mxPoint x="100" y="390" as="targetPoint"/></mxGeometry></mxCell><mxCell id="73" value="" style="endArrow=classic;html=1;entryX=0.25;entryY=0;exitX=0.5;exitY=1;" parent="1" source="68" target="62" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="50" y="440" as="sourcePoint"/><mxPoint x="100" y="390" as="targetPoint"/></mxGeometry></mxCell><mxCell id="74" value="" style="endArrow=classic;html=1;entryX=0.75;entryY=1;exitX=0.5;exitY=0;" parent="1" source="62" target="68" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="900" y="400" as="sourcePoint"/><mxPoint x="955" y="230" as="targetPoint"/></mxGeometry></mxCell><mxCell id="75" value="" style="endArrow=classic;html=1;entryX=0.25;entryY=0;exitX=0;exitY=0.75;" parent="1" source="68" target="63" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="980" y="230" as="sourcePoint"/><mxPoint x="948" y="160" as="targetPoint"/></mxGeometry></mxCell><mxCell id="76" value="" style="endArrow=classic;html=1;entryX=0.25;entryY=1;exitX=0.5;exitY=0;" parent="1" source="63" target="68" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="930" y="460" as="sourcePoint"/><mxPoint x="910" y="150" as="targetPoint"/></mxGeometry></mxCell><mxCell id="78" value="<div>Policy Artifacts and Metadata</div><div>PDP Group and Subgroup Definitions</div><div>Policy to PDP Group and Subgroup Mappings<br></div>" style="shape=note;whiteSpace=wrap;html=1;size=14;verticalAlign=top;align=left;spacingTop=-6;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="352" y="341.5" width="240" height="60" as="geometry"/></mxCell><mxCell id="80" value="" style="endArrow=none;dashed=1;html=1;entryX=0.5;entryY=0;exitX=0.5;exitY=1;strokeColor=#97D077;" parent="1" source="24" target="78" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="535" y="425" as="sourcePoint"/><mxPoint x="135" y="505" as="targetPoint"/></mxGeometry></mxCell><mxCell id="82" value="CRUD API for Policy Groups and Sub-Groups<br>API for Policy Deployment" style="shape=note;whiteSpace=wrap;html=1;size=14;verticalAlign=top;align=left;spacingTop=-6;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="630" y="150" width="190" height="50" as="geometry"/></mxCell><mxCell id="84" value="<div>Policies for a given</div><div>domain execute in a</div><div> PDP Group. PDP Groups</div><div> have subgroups for each</div><div> PDP type in a PDP group<br></div>" style="shape=note;whiteSpace=wrap;html=1;size=14;verticalAlign=top;align=left;spacingTop=-6;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="960" y="311" width="160" height="89" as="geometry"/></mxCell><mxCell id="85" value="" style="endArrow=none;dashed=1;html=1;entryX=0.75;entryY=0;exitX=0.75;exitY=1;strokeColor=#97D077;" parent="1" source="62" target="84" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="550" y="360" as="sourcePoint"/><mxPoint x="590" y="390" as="targetPoint"/></mxGeometry></mxCell><mxCell id="87" value="" style="endArrow=none;dashed=1;html=1;entryX=1;entryY=0.5;exitX=0.5;exitY=0;" parent="1" source="2" target="90" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="260" y="233" as="sourcePoint"/><mxPoint x="333" y="402" as="targetPoint"/></mxGeometry></mxCell><mxCell id="88" value="<div>Deploy</div><div>Retire</div><div>Archive<br>Upgrade</div><div>Rollback<br></div>" style="shape=note;whiteSpace=wrap;html=1;size=14;verticalAlign=top;align=left;spacingTop=-6;fillColor=#D5E8D4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="673" y="297.5" width="68" height="75" as="geometry"/></mxCell><mxCell id="89" value="" style="endArrow=none;dashed=1;html=1;entryX=0.5;entryY=0;strokeColor=#97D077;" parent="1" target="88" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="662" y="235" as="sourcePoint"/><mxPoint x="565" y="402" as="targetPoint"/></mxGeometry></mxCell><mxCell id="90" value="CRUD API for Policy Artifacts" style="shape=note;whiteSpace=wrap;html=1;size=14;verticalAlign=top;align=left;spacingTop=-6;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="130" y="185" width="110" height="35" as="geometry"/></mxCell><mxCell id="93" value="" style="endArrow=none;dashed=1;html=1;entryX=0;entryY=0.5;exitX=0.5;exitY=0;strokeColor=#97D077;" parent="1" source="33" target="82" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="672" y="253" as="sourcePoint"/><mxPoint x="700" y="335" as="targetPoint"/></mxGeometry></mxCell><mxCell id="94" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="10" y="278" width="30" height="13" as="geometry"/></mxCell><mxCell id="95" value="Policy Framework Component" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"><mxGeometry x="32" y="274" width="200" height="20" as="geometry"/></mxCell><mxCell id="97" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;gradientColor=#b3b3b3;" parent="1" vertex="1"><mxGeometry x="10" y="295" width="30" height="13" as="geometry"/></mxCell><mxCell id="98" value="Other Component" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"><mxGeometry x="32" y="291" width="128" height="20" as="geometry"/></mxCell></root></mxGraphModel>
\ No newline at end of file diff --git a/docs/architecture/draw.io/PFHighestLevel.xml b/docs/architecture/draw.io/PFHighestLevel.xml new file mode 100644 index 00000000..a307574f --- /dev/null +++ b/docs/architecture/draw.io/PFHighestLevel.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mxGraphModel dx="995" dy="808" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" background="#ffffff" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="3" value="PolicyDevelopment" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="50" y="50" width="130" height="30" as="geometry"/></mxCell><mxCell id="4" value="PolicyDB" style="shape=cylinder;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;fillColor=#f5f5f5;strokeColor=#666666;gradientColor=#b3b3b3;" parent="1" vertex="1"><mxGeometry x="230" y="115" width="70" height="30" as="geometry"/></mxCell><mxCell id="7" value="" style="endArrow=none;html=1;entryX=0.5;entryY=1;exitX=0.5;exitY=0;" parent="1" source="4" target="3" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="185" y="125" as="sourcePoint"/><mxPoint x="120" y="90" as="targetPoint"/></mxGeometry></mxCell><mxCell id="8" value="PolicyAdministration" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="270" y="50" width="135" height="30" as="geometry"/></mxCell><mxCell id="9" value="" style="endArrow=none;html=1;entryX=0.5;entryY=1;exitX=0.5;exitY=0;" parent="1" source="4" target="8" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="275" y="125" as="sourcePoint"/><mxPoint x="120" y="90" as="targetPoint"/></mxGeometry></mxCell><mxCell id="13" value="PolicyExecution" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="470" y="50" width="140" height="30" as="geometry"/></mxCell><mxCell id="14" value="" style="endArrow=none;html=1;entryX=0;entryY=0.5;exitX=1;exitY=0.5;" parent="1" source="8" target="13" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="40" y="220" as="sourcePoint"/><mxPoint x="90" y="170" as="targetPoint"/></mxGeometry></mxCell><mxCell id="15" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="388" y="112" width="30" height="13" as="geometry"/></mxCell><mxCell id="16" value="Policy Framework Component" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"><mxGeometry x="410" y="108" width="200" height="20" as="geometry"/></mxCell><mxCell id="17" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;gradientColor=#b3b3b3;" parent="1" vertex="1"><mxGeometry x="388" y="129" width="30" height="13" as="geometry"/></mxCell><mxCell id="18" value="Other Component" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"><mxGeometry x="410" y="125" width="128" height="20" as="geometry"/></mxCell></root></mxGraphModel>
\ No newline at end of file diff --git a/docs/architecture/draw.io/PolicyExecution.xml b/docs/architecture/draw.io/PolicyExecution.xml new file mode 100644 index 00000000..1dbf4da3 --- /dev/null +++ b/docs/architecture/draw.io/PolicyExecution.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mxGraphModel dx="1395" dy="1208" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="1169" pageHeight="827" background="#ffffff" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="31" value="PDPGroup" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;strokeColor=#B8B8B8;" parent="1" vertex="1"><mxGeometry x="328" y="-80" width="120" height="310" as="geometry"/></mxCell><mxCell id="30" value="PDPGroup" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;strokeColor=#B8B8B8;" parent="1" vertex="1"><mxGeometry x="318" y="-90" width="120" height="310" as="geometry"/></mxCell><mxCell id="14" value="PDPGroup" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;strokeColor=#B8B8B8;" parent="1" vertex="1"><mxGeometry x="308" y="-100" width="120" height="310" as="geometry"/></mxCell><mxCell id="27" value="PDPSubGroup" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;strokeColor=#B8B8B8;" parent="1" vertex="1"><mxGeometry x="318" y="110" width="100" height="90" as="geometry"/></mxCell><mxCell id="21" value="PDPSubGroup" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;strokeColor=#B8B8B8;" parent="1" vertex="1"><mxGeometry x="318" y="-70" width="100" height="80" as="geometry"/></mxCell><mxCell id="11" value="" style="group" parent="1" vertex="1" connectable="0"><mxGeometry x="328" y="-40" width="70" height="40" as="geometry"/></mxCell><mxCell id="4" value="PDP-X" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="11" vertex="1"><mxGeometry x="10" y="10" width="60" height="30" as="geometry"/></mxCell><mxCell id="6" value="PDP-X" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="11" vertex="1"><mxGeometry width="60" height="30" as="geometry"/></mxCell><mxCell id="13" value="" style="group" parent="1" vertex="1" connectable="0"><mxGeometry x="323" y="140" width="80" height="50" as="geometry"/></mxCell><mxCell id="10" value="PDP-A" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="13" vertex="1"><mxGeometry x="20" y="20" width="60" height="30" as="geometry"/></mxCell><mxCell id="9" value="PDP-A" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="13" vertex="1"><mxGeometry x="10" y="10" width="60" height="30" as="geometry"/></mxCell><mxCell id="5" value="PDP-A" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="13" vertex="1"><mxGeometry width="60" height="30" as="geometry"/></mxCell><mxCell id="22" value="PDPSubGroup" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;strokeColor=#B8B8B8;" parent="1" vertex="1"><mxGeometry x="318" y="20" width="100" height="80" as="geometry"/></mxCell><mxCell id="23" value="" style="group" parent="1" vertex="1" connectable="0"><mxGeometry x="328" y="45" width="80" height="50" as="geometry"/></mxCell><mxCell id="24" value="PDP-D" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="23" vertex="1"><mxGeometry x="20" y="20" width="60" height="30" as="geometry"/></mxCell><mxCell id="25" value="PDP-D" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="23" vertex="1"><mxGeometry x="10" y="10" width="60" height="30" as="geometry"/></mxCell><mxCell id="26" value="PDP-D" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="23" vertex="1"><mxGeometry width="60" height="30" as="geometry"/></mxCell><mxCell id="32" value="PolicyAdministration" style="html=1;fillColor=#fff2cc;strokeColor=#d6b656;gradientColor=#ffd966;" parent="1" vertex="1"><mxGeometry x="-90" y="-10" width="140" height="30" as="geometry"/></mxCell><mxCell id="33" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="1" connectable="0" vertex="1"><mxGeometry x="10" y="491.5" as="geometry"/></mxCell><mxCell id="34" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="1" connectable="0" vertex="1"><mxGeometry x="-40" y="618.5" as="geometry"/></mxCell><mxCell id="37" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="1" connectable="0" vertex="1"><mxGeometry x="10" y="491.5" as="geometry"/></mxCell><mxCell id="39" value="DMaaP" style="html=1;fillColor=#f5f5f5;strokeColor=#666666;gradientColor=#b3b3b3;" parent="1" vertex="1"><mxGeometry x="120" y="180" width="100" height="30" as="geometry"/></mxCell><mxCell id="40" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;fillColor=#fff2cc;strokeColor=#d6b656;entryX=1;entryY=0.5;exitX=0;exitY=0.75;" parent="1" source="39" target="32" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="60" y="220" as="sourcePoint"/><mxPoint x="-10" y="-90" as="targetPoint"/><Array as="points"><mxPoint x="80" y="203"/><mxPoint x="80" y="5"/></Array></mxGeometry></mxCell><mxCell id="41" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="40" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="42" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;entryX=1;entryY=0.75;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" target="39" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="328" y="-20" as="sourcePoint"/><mxPoint x="128" y="516.5" as="targetPoint"/><Array as="points"><mxPoint x="270" y="-20"/><mxPoint x="270" y="203"/></Array></mxGeometry></mxCell><mxCell id="43" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="42" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="44" value="<div>AsyncCaller</div>" style="html=1;fillColor=#f5f5f5;strokeColor=#666666;gradientColor=#b3b3b3;" parent="1" vertex="1"><mxGeometry x="-90" y="-55" width="140" height="30" as="geometry"/></mxCell><mxCell id="61" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;exitX=0;exitY=0.75;fillColor=#fff2cc;strokeColor=#d6b656;entryX=1;entryY=0.75;" parent="1" source="5" target="39" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="338" y="-15" as="sourcePoint"/><mxPoint x="180" y="195" as="targetPoint"/><Array as="points"><mxPoint x="270" y="163"/><mxPoint x="270" y="203"/></Array></mxGeometry></mxCell><mxCell id="62" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="61" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="63" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;exitX=0;exitY=0.75;entryX=1;entryY=0.75;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" source="26" target="39" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="348" y="-5" as="sourcePoint"/><mxPoint x="220" y="220" as="targetPoint"/><Array as="points"><mxPoint x="270" y="68"/><mxPoint x="270" y="203"/></Array></mxGeometry></mxCell><mxCell id="64" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="63" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="67" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;fillColor=#dae8fc;strokeColor=#6c8ebf;entryX=1;entryY=0.5;exitX=0;exitY=0.25;" parent="1" source="39" target="44" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="140" y="40" as="sourcePoint"/><mxPoint y="15" as="targetPoint"/><Array as="points"><mxPoint x="100" y="188"/><mxPoint x="100" y="-40"/></Array></mxGeometry></mxCell><mxCell id="68" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="67" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="69" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;fillColor=#dae8fc;strokeColor=#6c8ebf;exitX=1;exitY=0.25;" parent="1" source="39" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="98" y="198" as="sourcePoint"/><mxPoint x="328" y="-25" as="targetPoint"/><Array as="points"><mxPoint x="230" y="188"/><mxPoint x="230" y="-25"/></Array></mxGeometry></mxCell><mxCell id="70" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="69" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="71" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;fillColor=#dae8fc;strokeColor=#6c8ebf;exitX=1;exitY=0.25;" parent="1" source="39" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="108" y="208" as="sourcePoint"/><mxPoint x="328" y="60" as="targetPoint"/><Array as="points"><mxPoint x="230" y="188"/><mxPoint x="230" y="60"/></Array></mxGeometry></mxCell><mxCell id="72" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="71" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="73" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;fillColor=#dae8fc;strokeColor=#6c8ebf;exitX=1;exitY=0.25;" parent="1" source="39" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="190" y="190" as="sourcePoint"/><mxPoint x="323" y="155" as="targetPoint"/><Array as="points"><mxPoint x="230" y="188"/><mxPoint x="230" y="155"/></Array></mxGeometry></mxCell><mxCell id="74" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="73" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="77" value="SyncCaller" style="html=1;fillColor=#f5f5f5;strokeColor=#666666;gradientColor=#b3b3b3;" parent="1" vertex="1"><mxGeometry x="-90" y="-100" width="80" height="30" as="geometry"/></mxCell><mxCell id="80" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;fillColor=#cdeb8b;strokeColor=#97D077;exitX=1;exitY=0.5;entryX=0;entryY=0.25;" parent="1" source="77" target="6" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="198" y="198" as="sourcePoint"/><mxPoint x="320" y="-40" as="targetPoint"/><Array as="points"><mxPoint x="200" y="-80"/><mxPoint x="200" y="-32"/></Array></mxGeometry></mxCell><mxCell id="81" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="80" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="82" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;fillColor=#cdeb8b;strokeColor=#97D077;entryX=0;entryY=0.25;" parent="1" target="26" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="180" y="-80" as="sourcePoint"/><mxPoint x="338" y="-22" as="targetPoint"/><Array as="points"><mxPoint x="200" y="-80"/><mxPoint x="200" y="53"/></Array></mxGeometry></mxCell><mxCell id="83" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="82" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="84" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;fillColor=#cdeb8b;strokeColor=#97D077;entryX=0;entryY=0.25;exitX=1;exitY=0.5;" parent="1" source="77" target="5" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="200" y="-110" as="sourcePoint"/><mxPoint x="338" y="63" as="targetPoint"/><Array as="points"><mxPoint x="200" y="-80"/><mxPoint x="200" y="148"/></Array></mxGeometry></mxCell><mxCell id="85" value="" style="resizable=0;html=1;align=right;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontSize=10;" parent="84" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="86" value="Each PDP is deployed as a Kubernetes <i><b>Pod</b></i>" style="shape=note;whiteSpace=wrap;html=1;size=14;verticalAlign=top;align=left;spacingTop=-6;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="500" width="110" height="50" as="geometry"/></mxCell><mxCell id="87" value="In Kubernetes, a PDPSubGroup is a Kubernetes <b><i>Deployment</i></b> " style="shape=note;whiteSpace=wrap;html=1;size=14;verticalAlign=top;align=left;spacingTop=-6;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="500" y="-100" width="130" height="60" as="geometry"/></mxCell><mxCell id="88" value="" style="endArrow=none;dashed=1;html=1;entryX=0;entryY=0.5;exitX=1;exitY=0.25;strokeColor=#97D077;" parent="1" source="21" target="87" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="-90" y="300" as="sourcePoint"/><mxPoint x="-40" y="250" as="targetPoint"/></mxGeometry></mxCell><mxCell id="89" value="" style="endArrow=none;dashed=1;html=1;entryX=0;entryY=0.5;exitX=1;exitY=0.75;strokeColor=#97D077;" parent="1" source="6" target="86" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="428" y="-40" as="sourcePoint"/><mxPoint x="510" y="-60" as="targetPoint"/></mxGeometry></mxCell></root></mxGraphModel>
\ No newline at end of file diff --git a/docs/architecture/draw.io/TOSCAPolicyConcepts.xml b/docs/architecture/draw.io/TOSCAPolicyConcepts.xml new file mode 100644 index 00000000..0d3900dd --- /dev/null +++ b/docs/architecture/draw.io/TOSCAPolicyConcepts.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mxfile modified="2019-05-29T11:50:35.523Z" 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="yEDpeBBf71gBWF177uGV" type="atlas"><mxAtlasLibraries/><diagram id="04337635-102b-1824-bf5a-1496629f81aa" name="Page-1">7VttT+M4EP41le4+UOW1Lx9pYfdOYiV0IB18WrmJm1jrxpHrQru//saJnfewKWQD6IKQiMfjsT3PeGY8CRN7vTt+5SgOvzEf04ll+MeJfTWxLNNeuvBHUk4pZWEsUkLAia+YcsId+YkV0VDUA/HxvsQoGKOCxGWix6IIe6JEQ5yz5zLbltHyrDEK1IxGTrjzEMU1tn+JL0K1C7fA/RcmQahnNg3Vs0Hej4CzQ6Tmm1j2NvlJu3dIy1L8+xD57LlAsq8n9pozJtKn3XGNqdStVls67ktLb7ZujiPRZYBexxOiB7X3W0aJd1LLEyetkv0z2VEUQWu1ZZG4Uz0GtL2QUP8GndhBzrkXoAPdWoWMk5/Ajyh0mUCAbi4U4tZMSiOUrhllPJlHqsvyvNLIOylRzcXxHsbe6g2aFdI3dCwx3qC90KtklKJ4TzbJuuXAHeIBiVZMCLZTTHvB2Q9cWI4/28xcucy6ZpWynzAX+FggKU1/xWyHBQdNGrp3rrStToXpzNP2c25jlq14wqJ9GY6ybWXXQSY7xxYeFLwtUJs1qCfWSu6Jsxj2QOSBu1QNuWofb0lEBGERNCgBRVZtAvYtXlRaG7aIkiACGsVbKUCqkMDpu1RkwWIpNkYeiYKbhOfKySn/KM1IEoOxW5ocoZD4Po4k9EwggTaZfcaMRCLRnLuCX1Dw2pi6ExeWtIa2mbfhV7JzsWYR7AqRBGsMRvSMpSE1WEF2gn5tBgp2sPpOqGu+N4FutYAOpzDAUimXCaQc1Jpo52oEuReQXWtAkO02kDkJAswVyqo1HuY+cZ4vhsPZbgvW96cYjwG7/4B9sSgH7CHDtd0pXOftMWJ3PeT2h47Y9hix3wfkISO2PUbsd8N5yIjt1CN2DUVZLoi7B6us6KE0PCkWDhqDmO2+8tppzYy3q8Csx7F7bdZjxvKLjMXpbt2DJCVmW3DCT7Dm70LmocX4ZBl/JD3wEKEd/nN0YU1pafe89B3yEbMtVO29EPsHqgC/Jzv8dyQwB74R5V5QHjIhMZ0Xs87vABBgm0KtT7SijWD3AfagdYQ2sCGz8NPrYwK0l+8XGhQd9vUqw4j2WVFap2A6GA8Ct9sOd7bDEe/firfGdhC8Zy14x5gT5qsEDXSP+MUhImIqIHaPQPcDtDtkqWjemo0DBUlHrgoJsFfcdOMaQX4VyIshS0WLFpBBUpidZnXdGuHtAV7LGDIXW7bAi7w8Ectu00zWAmW5H6VF/hHvPvC2B0zGnKbce0blXnzyBI9BgmCMPbIFCFKY034QXWBpGMW2bawVO8GRfym/koJWxJJ6Wyh2unoGnap2Zlq6mFbhLhbYTEcTvhC56wRh7AdYl+8AvZAFLEL0Oqeu8JGIBz0jPD/KkVNjOUtXUJQVgYofkm5XNx91H4y8hawGYJC304TWcBtTCmAH7ikNaHjT660+9ylNLv5Fu9GFVWNqm4Yqj3BMAawnXJqxyVCUuFuWptlZkXZZLtI6i0rtNV29GpbbW01SVZBpVQSlW35BkGZk2+0el3gS484U0c3e65cPDUduj0khteAgCtbYyTNRtMF0lX16V/Zw8uM7VVBWFttsJfpkNpfXz3ptbJ5pE52dRz2zN6bTehzooE+eurXPodBz9VkxaHUSLiyrPKQfA29Kwmuu2UPylfwGd/bl6tUf9uWw0yfy62f57ofC82PG1s2D23UPrstuZ3hwuJk7/Xjw7BtgXdGrWFtXB36RBadq8eCdPHj9AvJapzOAE5+/mxNvC+xlMC+qSWQ/GNVvER85MPQGUk8YWRWInN8AkX4JX4Ao+9jj8/hxc2oYTsmTT03TLXpzYFiWPLppZa6/mqq/On23GtL3c50/rNTUN/0M+Xk/BlX90F/Pc34ssNyyJHd+ZixQkqpyKgvqx8Trn3p83Eihz+P/LFLol8qfI1L0B1I/GFnLCkTLt0MEzfz/vVL2/J/q7Ov/AA==</diagram></mxfile>
\ No newline at end of file diff --git a/docs/architecture/images/ClassStructure.svg b/docs/architecture/images/ClassStructure.svg new file mode 100644 index 00000000..650e5a31 --- /dev/null +++ b/docs/architecture/images/ClassStructure.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="1021px" height="491px" viewBox="-0.5 -0.5 1021 491" content="<mxfile modified="2019-05-29T11:48:04.413Z" host="wiki.onap.org" agent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:67.0) Gecko/20100101 Firefox/67.0" etag="zgXaW_pTuo0MciUNTLlH" version="10.6.3" type="atlas"><mxAtlasLibraries/><diagram id="cc2518d8-65ea-84d8-8e3f-abfc6d914d1d" name="Page-1">7V1td6K4Hv80vrSHZ/BlW3eme3bnbvd0ztmZfYcSlTNIvIit3k9/E0gQQtAIwcaW6ZlWkhBC/g/5/R8SR+bjev818TerbzAA0cjQgv3InI4MQzcnNvqDSw55iad5ecEyCQPS6FjwEv4PkEKNlO7CAGwrDVMIozTcVAvnMI7BPK2U+UkC36rNFjCqPnXjL8kTtWPBy9yPQK3ZP2GQrkip7kyOFU8gXK7Ioz3DzStm/vzXMoG7mDxvZJiL7F9evfZpX+S525UfwLdSkfnbyHxMIEzzT+v9I4jw3NJpy+/70lBbjDsBcSpyg+nkd7z60Q7QITsRuvdhg4eXHsiUOP/d4TE9rP1kGcYj8x7Vaps9+o0KszfD5eMUbvI6q1SXgn069qNwSe6bo8GB5Ngn+rQkf7Mnz2jBt3CewBeQvIZzQCvRu8zYG1DZhi1bJXj8lLPoo/TmpwbhK/eNV4TOeOQGfqumDtAosj5UG4dR6c54BUkaIla/zwkyzUj2QMgzjcAC3wVRq0WUceYiRBxjPixgnBJB1Q1y/cVfhxEW8ScQvQLcKx5nuo5wI9wG3foII5hkT8aSYMznqHybJvAXKNUEzsyxnWK0Zf4lLI1HDfalIsLPXwFcgzQ5oCak1qayRXSP7pLrt5Ika6RsVRJihygtnyiPZdH1UYDQByJDDfKksjg9T5+/It20GURpECUhUdK9qih5HEmyeJKkdZckmyNJzPSDOLjHiz26ghsQVycMVZbneJv6SUpbB6G/hnHwfYVFL6+ibS1a8CWj1RTLHAgQOCCPhUm6gksY+9Fvx9IHsA/TH7j1nU2ufpJhNFJhC3fJHFS0BnrsElBEkRfhR5+kVAIiPw1fq7iFN+/k1mcYooEUFGZ1pcZQLh8luamMI5h+dLvakWkxHeXvVuso44LidYQYo45Y9BpnJACpCX+WXWpVvmCkky/CkT8D0UOB5aqCh9FcVYg1LqHtCkYlozlCP3ExHJMX7EhrnSEJXCy2oCs13Do17u7iNgRJcv1xExSRQxCzKjNjVmakEMhTHJG87GYDKBlAibjsWVpVbArcXkYlek+oZKK4NA1SNEiRmBQxi08hVSUpsnsSIiqc743t9Y7YHs1+cihV4cufBOAI4X6vjvsn18H9OqNEJy1xv+Uwyrg/3K/rNa5RFPhT/v7YyF83bgn6y6PJDWF/XWl3JPrrrzMC169AvFuDBE0wjIuK6k3VPpMSBvp+2PQXLUD9j3/UH9sZluB+p9zXGd83P64TiCGEumkYo7v2eWOA56JkF7xWOMa6CMfEMAYMjjkPPijEKPDGzwoU+UGUKoUl2p1hd0AfVGH0DT/GOoM+3Zb4g/U71jqSiD/qHmmZ+GMG0xSupS13lmIQZMx4msdMsE3OeseLZsuDI6qS6FIKCeu3unNXIfhQWYkHf8fg7zgpIyZjqNr6Ff0dqvvgj8jzA8vRJ2N41sF3VYZX3U1+tKkGhv8wDD85z/BOTwxfYDYxS3AWwfmvUdmP7eVXpaSTirub72fWR03eaWEPNIV4bVzQZRObTqJkK8Fu65cubP6mjuTZhQWn9kP7Rvqe4gox2ncIP/RA+yJpnJLMaEl7i/UJsO5vibQ3bpX2E6VobzmSaM8m/1qsdpdIe573TxmQ88duBpIYpGD7CZDOhzeRbfzDA1BO9g/VLBM/CBFzlOpm2Y8ccGV6VQGdcNzsvJx6UwK4MuvWxNqP/SVm7WZde1nWAPHNS0wFpgq85K8/kS6QXUz3lavD6OjbP1bhC1ojpOqpniqrerrt56yuJ+TX7jTTqnJAAdU6qn6byTHX2W0YwqqfzQtjc5kbVP+xo2ZfNGIT/1BqscF3bE+8lMu8lF7ZhoU+5D22XXssAXtDiVQIKrvvEIcQVS8WD7+XVpR8NdCy1AahdUKNhAd5M98xAET1BbsUSIn4WP0C8KPGNk5Y3m4r05tjfQmrZaXNLwbL9xiStdT2M8IonB9+X2+iAYLfPgS/TjoLIzqcpFwKxKXvt+NBCmVk6cf947c/6wLFzYgaRGwQsVM40mYWOk6cQDf7krJmsKmAlE0TCKPtp1q3Phv3C/C+wfHjSOF9HlZXhvfvN2A/cP7H5XxdIB9C1/tS+7xE/D7M1Aviw/ls0+ONhCNHFCeW7VbrHUNHY5ONHbWNGY8N7UxP8ixX+7LU8asEDtsyhK4WQzDR39Z+DJ3hhh7DyPZlh52oE0amS7oqtNcNWcRn9pX0GEe2BZLWZe0i0cpUru4iqcarxHeRUHK/xzYSi9lG0nobq8nwjWnbvZGbc2JKjd6qbCOhvKnMNhKG4Hofu0hsXrr25QS6zi4SeRTqK75GNWdpOsEezHepovH7hh13rowtdxxdKbxcdo3vsFlxrZdGJs+2x6XREUitVCLMTadA4TC30+x9ueUwt7yZ72dfv9PDAuXeQNjzBb/lh/ehDSEZKU5pJlm/sAbLYc+enNJe3TMnik7IEUNXRyh1Pw0fllRyDhk0Q9JZyh4DIQDDOanUvRKAGetMUl17Px+bnef1hmC8up9P0UOLqCAoY+r1kzDmSTrF4QrQRh5F5BCE8ZEYd30Y395l3jBlz33ufDac+462ouGwbhZJuYCGK+ZXE863pv46Uzs5DurS4TfvnI7t9evTk6lTVHXoyVUidQ+ewkfTyaPJDR1NN6m7du6zBukKoN/P0+ctbh3j56L/S/Q6cV5+PDAaVSOVHePvhtHWuy1+hRn+DBdFP1t/jf+k2ZFwDPW3K38DMmSeYl3+tgpT8LLxMwX8lvibKkNsSwuFkEG2RV2F8fI7rpuOnbpxFdjACyyeceUZM9OR9XUoDDmp7uOG38rWFavzWx2XfFneA7GRAn+7AgGZd16eg7hrlrtpbuJONdcV9tly4tui385w5qwNWtbZMqp9T0db04jNknFZLpBnGk1anZ53KW8YV+eNFuHvHnmD3YlWy2Jou7PaZOMH8jjjn/3v/749Pfw9fdEmxuQ/jwd3DMdcdlHM6YlPHh3S0+WO47P5Qs3awezeneCZptTK6bJi82VP6QPMRifOEf7+18vjfVEkdoJwJsqDwA4CKyiwBuNcoAigJK4TTl4xzZ2TL6318ODKz6wptDSBNXpVcq72abeaQuGNSpyCD+Y8xx2dOirhTCDk9OkLzyAJEW3wYdniDjxeYtxJZCN+GIM+oYEYaqPrkiyJgispM7PGv3iQhU0ToUmB73Acw1hnz5smr9lsB7E3kAmX5THkMkJxgsrpHA2JCRr9OxxPaihlvJC106mNPmIbDUSve8JUjUj1TExJYSr3jj2pxrweMY0aMUO89G43YB4uQhCgz7PDx1p6qYdF8sIreZEVddlRjYCPPDJNOdqltvq0POJobHj8ZeldFlV2gT8Tg2Pbm1ZlDe5rSW3+CpwPtaQWmmdYU/FkSEq7ea81VSI1b2pRPTztvwT+g2PuXn+BKH4KxvGD4p7fXrxPvX6F1eCB+mgeKMZlbGjX80BxJZZnyGYwOACLML51EHxqt/0ZR1LDNtxuB3yexLtlYHxSu17gfXLpVxd1zvBkIGGHlF5WBARTensBxobHONGMM8j4zA2doXGDkAodfHlT0Pi0NlIHGuvVkEE/qc4Nk1H3UKgKjfumpiRobHSnHbpMIMY2x+aJv1l9gwHALf4P</diagram></mxfile>"><defs><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="mx-gradient-f5f5f5-1-b3b3b3-1-s-0"><stop offset="0%" style="stop-color:#f5f5f5"/><stop offset="100%" style="stop-color:#b3b3b3"/></linearGradient></defs><g><rect x="850" y="90" width="100" height="65" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(850.5,90.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="98" height="63" 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: 99px; height: 64px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>MicroService</b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /><div style="height: 2px"></div></div></foreignObject><text x="49" y="38" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="510" y="0" width="140" height="60" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(510.5,0.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="138" height="58" 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: 139px; height: 59px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PDPGroup</b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /><div style="height: 2px"></div></div></foreignObject><text x="69" y="35" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 580 75.99 L 580 113 Q 580 123 590 123 L 775 123 Q 785 123 785 133 L 785 182.76" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 580 60.99 L 584.41 68.49 L 580 75.99 L 575.59 68.49 Z" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 778.5 170.88 L 785 183.88 L 791.5 170.88" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(592.5,67.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1</div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1</text></switch></g><g transform="translate(794.5,152.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="18" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: right;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1..n</div></div></foreignObject><text x="9" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1..n</text></switch></g><rect x="730" y="185" width="110" height="60" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(730.5,185.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="108" height="58" 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: 109px; height: 59px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PDPSubGroup</b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /><div style="height: 2px"></div></div></foreignObject><text x="54" y="35" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="760" y="320" width="50" height="60" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(760.5,320.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="48" height="58" 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: 49px; height: 59px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PDP</b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /><div style="height: 2px"></div></div></foreignObject><text x="24" y="35" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 785 260.99 L 785 317.76" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 785 245.99 L 789.41 253.49 L 785 260.99 L 780.59 253.49 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 778.5 305.88 L 785 318.88 L 791.5 305.88" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(797.5,252.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1</div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1</text></switch></g><g transform="translate(794.5,287.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="18" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: right;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1..n</div></div></foreignObject><text x="9" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1..n</text></switch></g><rect x="505" y="185" width="140" height="90" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(505.5,185.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="138" height="88" 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: 139px; height: 89px; overflow: hidden; white-space: nowrap; text-align: center;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b><<enumeration>><br />PDPType</b></p><hr size="1" />PDP-X<br /><div style="height: 2px">PDP-D<br />PDP-A<br /></div></div></foreignObject><text x="69" y="50" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 730 200 L 698 200 Q 688 200 688 210 L 688 220 Q 688 230 678 230 L 645 230" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(712.5,181.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1</div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1</text></switch></g><rect x="690" y="430" width="50" height="60" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(690.5,430.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="48" height="58" 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: 49px; height: 59px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PDP-X</b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /><div style="height: 2px"></div></div></foreignObject><text x="24" y="35" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="760" y="430" width="50" height="60" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(760.5,430.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="48" height="58" 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: 49px; height: 59px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PDP-D</b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /></div></foreignObject><text x="24" y="35" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="820" y="430" width="60" height="60" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(820.5,430.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="58" height="58" 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: 59px; height: 59px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PDP-A</b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /></div></foreignObject><text x="29" y="35" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 715 430 L 776.77 385.88" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 784.09 380.65 L 779.38 389.54 L 774.15 382.22 Z" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 785 430 L 785 390.12" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 785 381.12 L 789.5 390.12 L 780.5 390.12 Z" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 850 430 L 793.02 386.17" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 785.89 380.68 L 795.76 382.6 L 790.28 389.74 Z" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="715" y="15" width="100" height="30" fill="url(#mx-gradient-f5f5f5-1-b3b3b3-1-s-0)" stroke="#666666" pointer-events="none"/><g transform="translate(715.5,15.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="98" height="28" 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: 99px; height: 29px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>Kubernetes</b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /><div style="height: 2px"></div></div></foreignObject><text x="49" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 815 30 L 890 30 Q 900 30 900 40 L 900 87.76" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 893.5 75.88 L 900 88.88 L 906.5 75.88" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(867.5,44.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="45" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">manages</div></div></foreignObject><text x="23" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">manages</text></switch></g><g transform="translate(879.5,67.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="18" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: right;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;"><div>0..n</div></div></div></foreignObject><text x="9" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 813 185 L 865.89 159.41" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 873.99 155.49 L 867.85 163.46 L 863.93 155.36 Z" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="345" y="320" width="85" height="60" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(345.5,320.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="83" height="58" 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: 84px; height: 59px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PolicyImpl</b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /><div style="height: 2px"></div></div></foreignObject><text x="42" y="35" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="175" y="430" width="135" height="60" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(175.5,430.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="133" height="58" 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: 134px; height: 59px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>XACMLPolicyImpl<br /></b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /><div style="height: 2px"></div></div></foreignObject><text x="67" y="35" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="325" y="430" width="120" height="60" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(325.5,430.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="118" height="58" 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: 119px; height: 59px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>DroolsPolicyImpl</b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /></div></foreignObject><text x="59" y="35" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="460" y="430" width="115" height="60" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(460.5,430.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="113" height="58" 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: 114px; height: 59px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>ApexPolicyImpl</b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /></div></foreignObject><text x="57" y="35" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 243 430 L 378.43 383.3" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 386.94 380.36 L 379.9 387.55 L 376.97 379.04 Z" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 385 430 L 387.39 390.1" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 387.93 381.12 L 391.89 390.37 L 382.9 389.83 Z" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 518 430 L 397.44 383.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 389.04 380.4 L 399.06 379.43 L 395.83 387.83 Z" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 430 335 L 458 335 Q 468 335 468 325 L 468 240 Q 468 230 478 230 L 505 230" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(442.5,336.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1</div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1</text></switch></g><path d="M 760 335 L 605 335 Q 595 335 595 345 L 595 355 Q 595 365 585 365 L 432.24 365" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 444.12 358.5 L 431.12 365 L 444.12 371.5" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(572.5,344.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="45" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">executes</div></div></foreignObject><text x="23" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">executes</text></switch></g><g transform="translate(439.5,366.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="18" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: right;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;"><div>0..n</div></div></div></foreignObject><text x="9" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="290" y="80" width="80" height="60" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(290.5,80.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="78" height="58" 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: 79px; height: 59px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PolicySet</b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /><div style="height: 2px"></div></div></foreignObject><text x="39" y="35" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 510 30 L 450 30 Q 440 30 440 40 L 440 85 Q 440 95 430 95 L 372.24 95" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 384.12 90.67 L 371.12 95 L 384.12 99.33" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(417.5,57.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="45" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">executes</div></div></foreignObject><text x="23" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">executes</text></switch></g><g transform="translate(482.5,37.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1</div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1</text></switch></g><g transform="translate(381.5,105.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: right;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1</div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1</text></switch></g><path d="M 330 155.99 L 330 240 Q 330 250 340 250 L 378 250 Q 388 250 388 260 L 388 317.76" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 330 140.99 L 334.41 148.49 L 330 155.99 L 325.59 148.49 Z" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 381.5 305.88 L 388 318.88 L 394.5 305.88" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(342.5,147.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1</div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1</text></switch></g><g transform="translate(397.5,287.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="18" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: right;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1..n</div></div></foreignObject><text x="9" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1..n</text></switch></g><path d="M 860 250 L 1006 250 L 1020 264 L 1020 300 L 860 300 L 860 250 Z" fill="#d5e8d4" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><path d="M 1006 250 L 1006 264 L 1020 264" fill="none" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(862.5,251.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="156" 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: 156px; 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 the PDPs in a given PDPSubGroup instance must be of the same type</div></div></foreignObject><text x="78" y="27" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 860 275 L 840 230" fill="none" stroke="#97d077" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 860 275 L 810 335" fill="none" stroke="#97d077" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><rect x="0" y="328.5" width="140" height="58" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(0.5,329.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="138" height="56" 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: 139px; height: 57px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PolicyTypeImpl<br /></b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /><div style="height: 2px"></div></div></foreignObject><text x="69" y="34" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="2" y="249" width="95" height="52" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(2.5,249.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="93" height="50" 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: 94px; height: 51px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b><<TOSCA>><br />Policy</b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /><div style="height: 2px"></div></div></foreignObject><text x="47" y="31" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 345 372 L 230 372 Q 220 372 220 362 L 220 352.5 Q 220 343 210 343 L 142.24 343" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 154.12 338.67 L 141.12 343 L 154.12 347.33" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(183.5,352.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="93" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">has implementation</div></div></foreignObject><text x="47" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">has implementation</text></switch></g><g transform="translate(327.5,354.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;"><div>n</div></div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><g transform="translate(159.5,327.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: right;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1</div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1</text></switch></g><path d="M 345 350 L 250 350 Q 240 350 240 340 L 240 272 Q 240 262 230 262 L 99.24 262" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 111.12 257.67 L 98.12 262 L 111.12 266.33" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(204.5,287.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="70" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">is specified by</div></div></foreignObject><text x="35" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">is specified by</text></switch></g><g transform="translate(327.5,332.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;"><div>n</div></div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><g transform="translate(116.5,246.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: right;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1</div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1</text></switch></g><rect x="0" y="129" width="95" height="52" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(0.5,129.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="93" height="50" 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: 94px; height: 51px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b><<TOSCA>><br />PolicyType</b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /><div style="height: 2px"></div></div></foreignObject><text x="47" y="31" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 50 249 L 49 249 Q 48 249 48 244.5 L 48 242.25 Q 48 240 48 230 L 48 183.24" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 52.33 195.12 L 48 182.12 L 43.67 195.12" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(16.5,204.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="62" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">is defined by</div></div></foreignObject><text x="31" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">is defined by</text></switch></g><g transform="translate(34.5,226.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;"><div>n</div></div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><g transform="translate(61.5,188.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: right;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1</div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1</text></switch></g></g></svg>
\ No newline at end of file diff --git a/docs/architecture/images/DesignTimeComponents.svg b/docs/architecture/images/DesignTimeComponents.svg new file mode 100644 index 00000000..3766c4cc --- /dev/null +++ b/docs/architecture/images/DesignTimeComponents.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="1096px" height="492px" viewBox="-0.5 -0.5 1096 492" content="<mxfile modified="2019-05-29T11:48:19.079Z" host="wiki.onap.org" agent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:67.0) Gecko/20100101 Firefox/67.0" etag="TgGO2uxYwQk9-0toFjvi" version="10.6.3" type="atlas"><mxAtlasLibraries/><diagram id="4fe262cb-fef2-56cb-b8af-46ed0329d089" name="Page-1">7V1bd6M2EP41fnQOF3N7dOJsL6d7mnb3nKaP2JZtGmxRTLJ2f32FkQyMhI1BxCLxPmyCEEJovtHMfCMpA/Nhvfsp9qPVVzxH4cDQ5ruBORkYhmF5FvmRluyzEt3W3KxkGQdzWpYXfAv+Q7RQo6WvwRxtSxUTjMMkiMqFM7zZoFlSKvPjGP8oV1vgsPzWyF/SN2p5wbeZHyKu2l/BPFnRUt328hs/o2C5oq92DSe7MfVnL8sYv27o+waGuTj8y26vfdYWfe925c/xj0KR+TgwH2KMk+y39e4BhengsmHLnvtScffY7xhtkloPGNkTb374iliX7ZA8ex+l3Uv2dEjsf1/TPt2v/XgZbAbmmNzVoh35nxQeviwtHyY4yu6NCvcStEuGfhgs6XMz0jkU522S35b05+HN00KBvyYN3of8Fdq8rlHsJwHeHG+UHyq3GbNGnyZP3/cRYjfI2ExhB0hZBMtWcToeDKms6zr/FaT94TP/WlYyD96EA7uicEoHyEgHT9TuRPg5w3H168inHN7ISo3Sy403FCcBwf04k87kIL97KqsJFZR5j0m9RXgA6iIgADLvF3iTUL0lGMquv/jrIExV/mcUvqG03fS7knWYVkrrkEcfcIjjw7vNuY/cxYyUb5MYv6DCHXvmouni2N8inCnC036jXaGIwvsnhNcoifekCr079DSqa3tWcEenpx8F1R7RSquCVnu0zKezyfLYeK5R5BeqVGIFM1yVFex5/PD1tyccBrP9SQjJ1ZDWqlAFblX6cZGShWiRdKVixPAYM6GKze2pbdmSVGw0Aiqm2yORkmkCJbNlKJmnspJNiDkPt2Ut+8A69dnAb5q1wO91hH32djWxP47Q7ob8D4p8ox7y3a6QrwuQD2SANvNxGg+Sq2mIZy+DNHBgAaebXX05jPtEKw8p2gXJc1pMvii7+ptWygaVxYWHuhvS9ULl9PLv4r3Jjj6bXe3pVaUQtvg1nqGyB5kQ/US02q+/vVrJHz+sOPL/W1rbl2FofxnqmpnVRHMW3VYIsGiTmSRiFJJg6q0cAIvEQ5t7wgHpdA4GW7dKYBgBCWefRJ8qRqSwIQM0NDy6DaypbCS4pg54OX5lPQiJwt93gNApwFTAqxWEvF5AyICRmtkLDJnqYag1YtjIK44YHVqgfiBmdBFiNniDACjIWH+jdXGcrPASb/zwMS/NwaEXoZGD6JlBgwHqzklvzf3tCs1LE1HBeXAex/YjeypHV3pxEbhOA6kIOUZPngVXSyDpAEacf1IbRy50iRgXfgZGRNj+vlAtSitsT0B/ZMM+j8zTXYNPjLTT9Z2T9ckvWZ8ba4HFaQHDSq4GMSKutz89XIKZETjS0Nue4iTBa3Ij9KcovD/y8mU3OWXmyy63GMVMZWnCgfZocOTxL/CadVnGsiQcAwAWLxZb1Hqiss9PVDUkFGd+f29EJEdCBjAodgcCskSWRJng/8Au/7KOwhu3fOOWS1p0wXTpOMYd1CS9Lrls2tVaW5dmsHg7pZCOZeTyTcluStZGyWy7jZJZEpRM5Gkoo2Qpi31TsZuKtVExy6qnYiK2XIoZUzpHmuWI0nU5Nz276VkrU+ZAIk+8FkG04Mdy2+sZI03UzkpVjnSRp2PRZZGRY9PIVeheB8iWTD53wPmoTdTZID73uKbkEb52p5nKLiRvKSZ524F0VwvJu2XJ606XojeuMx20h4CtGAQsmcoPqG3d6hIClyUIW6V7gLS1gZR0z4lsYstUUG1EtUWPacHEjN48xQM8DK8Wci7O8HDv0XUHQLFdBsbm2WN1MzBMi5TNwAxH5RakEPy2iHy8XELvk4GRJ6JLJVTbOa+mmQSh6CF/cVks+h7xnsakmhceNLA6yhZ1XdVdIe8UJurGqBbhaYroGEcCEpWmYwYnNl59//3bw3hw2Zaro0rdmJ0bs9NYZXVujZZt1aZ2JFCozsehdmxBdGdfM7rT4QI8Mss1Du90zQbkDteWvPDOUYjcqcZQLVQ4AsLvuqjQLL2s8pbXHBW6AYmfLmHRJ+JHGYF7piVR3hpkebqUdw2WR5VYunx6QptQ2oOrUHWNE1iN5bdOWct1FyRipMTSDk93KORy5z5ytqSnj56y5EDzQ/iskMQTh5mGKMyUkI10RPyRgphPV9j0EfFBLRXgan12tfBgkl6sFXpXWiE6lKPaN2uSkbkktVKVuDmTdjlu7ykndVpmZJj7d41tOEOPy9LAXVi1vT947AvcjyotS8NtgtY9gMV2WRqHZwrVzdIwzVImSwOzfFI8SbcGEaRMVkaeSPqzL8YVBd+KuT0PMfITHPfR67kx4mq4US40lyM23Z2LLWScv+HyjIcfRWGAtqecKRyhDXCmjpTXYbi3xDInwPU6lLFKI1ZQoMbOO2T1idTM2yoSb915W2yiarTKisFAuyOzqlFCgimJj3P4I14aOmQGZPYMuFe/wiMTrOXRhN8q14J0uzYmm4qk2HdXuYUx3fhckraLVzldSkqkpUCqTsWQIxB+LQ0ZBJ+0gGIyPP0zAk5NK1BeSNmREaidhcmNgG6xUHFfNvKt107CxdfwsIH6QTl3PIbV1AiAxAM0S3Ig7vTGCNiKGQFwoorVhXR4Fk9ZiyBNPEpbBJ6pmqVBbn9swXmn37AGzVnbxtag5dFbFDvEROjMN2m/GwOGno0P/OMOUDVrnpmUN1UN44v5XAPsDjr2Rhaf6/HkoapGxVPbqAyhHyJlFvP49VzKmhVpAlLZrHgGJxCVyNzJ0/ONyr1RuW0z4nA7wnG18XscoO+JFq+ppGIToGIfWKE+G/JdjhgWIJ95hNKBr/aawMnT+Ab8jwp856rAr7GxtMXy9EZ7FPiIvHKYiwEz8w+LATMLoq+za0HnaE6naXDswKZMmF2Rt4Tdq3Hca0/2N3mCw6SvignHhsremC9xIPVi1iTRm0CCZ8DfBRLtASDYynRVANiePAC855zQ/VJZMdF6wfkklQRxkc0tYbAWhGrDpTWXyq16bZxgg2e2w5MDOzt93nTPnCav2OnzXp9W1XqfYlXtkd3oxbJaeTLpz7Lavzbjx+1L/PgP/nfxtPQfX76P/szTUAWxBesoRGtE55ALjIUamb+KP56S5/7O7MoorxAxJCwRYWsCWy4R0SzNkePOONyf/Gwc4ngwraNfvDJQYv6PPz+UbkGXZXkqlIgnotYS7ZHEpNPpSUAZEwVXiQ47WYNSMRg8ubKRacl6JE1J/gaMnfQOZHl6kYWaDPGgi4OaPgHXfMtaSqGwTZM71P64Oe4MiW0Z1ZNABYlNLmOcyiFX8NiPVl/xHKU1/gc=</diagram></mxfile>"><defs/><g><rect x="345" y="400.5" width="140" height="90" fill="#dae8fc" stroke="#6c8ebf" pointer-events="none"/><g transform="translate(345.5,401.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="138" height="88" 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: 139px; height: 89px; overflow: hidden; white-space: nowrap; text-align: center;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b><<enumeration>><br />PDPType</b></p><hr size="1" />PDP-X<br /><div style="height: 2px">PDP-D<br />PDP-A<br /></div></div></foreignObject><text x="69" y="50" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="805" y="245.5" width="100" height="60" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(805.5,246.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="98" height="58" 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: 99px; height: 59px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>XACMLPolicy<br /></b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /><div style="height: 2px"></div></div></foreignObject><text x="49" y="35" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="915" y="245.5" width="90" height="60" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(915.5,246.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="88" height="58" 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: 89px; height: 59px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>DroolsPolicy</b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /></div></foreignObject><text x="44" y="35" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="1015" y="245.5" width="80" height="60" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(1015.5,246.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="78" height="58" 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: 79px; height: 59px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>ApexPolicy</b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /></div></foreignObject><text x="39" y="35" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 855 246 L 951.36 187.27" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 959.05 182.58 L 953.7 191.11 L 949.02 183.42 Z" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 960 246 L 960 192.12" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 960 183.12 L 964.5 192.12 L 955.5 192.12 Z" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 1055 246 L 968.39 187.65" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 960.93 182.62 L 970.91 183.92 L 965.88 191.39 Z" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 913 169 L 913 168 Q 913 167 903 167 L 795 167 Q 785 167 785 177 L 785 440 Q 785 450 775 450 L 495 450 Q 485 450 485 448 L 485 446" fill="none" stroke="#7ea6e0" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><g transform="translate(895.5,175.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1</div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1</text></switch></g><rect x="472.5" y="348.5" width="100" height="36" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(473.5,349.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="98" height="34" 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: 99px; height: 35px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>XACMLImpl<br /></b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /><div style="height: 2px"></div></div></foreignObject><text x="49" y="23" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="582.5" y="348.5" width="100" height="35" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(583.5,349.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="98" height="33" 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: 99px; height: 34px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>DroolsImpl<br /></b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /><div style="height: 2px"></div></div></foreignObject><text x="49" y="23" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="692.5" y="348.5" width="80" height="36" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(693.5,349.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="78" height="34" 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: 79px; height: 35px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>ApexImpl<br /></b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /><div style="height: 2px"></div></div></foreignObject><text x="39" y="23" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="570" y="245.5" width="140" height="58" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(570.5,246.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="138" height="56" 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: 139px; height: 57px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PolicyTypeImpl<br /></b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /><div style="height: 2px"></div></div></foreignObject><text x="69" y="34" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 523 349 L 630.56 307.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 638.96 304.4 L 632.17 311.83 L 628.94 303.43 Z" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 634.62 348.5 L 638.78 314.04" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 639.87 305.11 L 643.25 314.59 L 634.32 313.5 Z" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 733 349 L 649.11 308.41" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 641.01 304.49 L 651.07 304.36 L 647.15 312.46 Z" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 570 289 L 570 291 Q 570 293 560 293 L 450 293 Q 440 293 440 303 L 440 401" fill="none" stroke="#7ea6e0" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><g transform="translate(552.5,271.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1</div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1</text></switch></g><rect x="0" y="348.5" width="130" height="37" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(0.5,349.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="128" height="35" 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: 129px; height: 36px; overflow: hidden; white-space: nowrap; text-align: center;"><b>PolicyTypeXACML<br /></b><hr size="1" /><div style="height: 2px" align="left"><br /></div></div></foreignObject><text x="64" y="24" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="130" y="244.5" width="140" height="56" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(130.5,245.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="138" height="54" 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: 139px; height: 55px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b><<TOSCA>><br />PolicyType<br /></b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /><div style="height: 2px"></div></div></foreignObject><text x="69" y="33" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 65 349 L 190.47 304.39" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 198.95 301.37 L 191.97 308.63 L 188.96 300.15 Z" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 200 349 L 200 311.12" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 200 302.12 L 204.5 311.12 L 195.5 311.12 Z" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 310 350.5 L 209.23 305.15" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 201.02 301.46 L 211.07 301.05 L 207.38 309.26 Z" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="140" y="348.5" width="120" height="38" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(140.5,349.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="118" height="36" 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: 119px; height: 37px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PolicyTypeDrools<br /></b></p><hr size="1" /><div style="height: 2px"><br /></div></div></foreignObject><text x="59" y="24" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="270" y="348.5" width="110" height="38" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(270.5,349.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="108" height="36" 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: 109px; height: 37px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PolicyTypeApex<br /></b></p><hr size="1" /><div style="height: 2px"><i><br /></i></div></div></foreignObject><text x="54" y="24" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 270 287 L 270 289 Q 270 291 280 291 L 405 291 Q 415 291 415 301 L 415 401" fill="none" stroke="#7ea6e0" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><g transform="translate(282.5,273.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1</div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1</text></switch></g><rect x="395" y="0" width="120" height="60" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(395.5,0.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="118" height="58" 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: 119px; height: 59px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PolicyCreator<br /></b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /><div style="height: 2px"></div></div></foreignObject><text x="59" y="35" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 515 45 L 630 45 Q 640 45 640 55 L 640 243.76" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 633.5 231.88 L 640 244.88 L 646.5 231.88" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(622.5,71.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="34" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">applies</div></div></foreignObject><text x="17" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">applies</text></switch></g><g transform="translate(507.5,52.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1</div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1</text></switch></g><g transform="translate(631.5,223.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: right;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1</div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1</text></switch></g><path d="M 395 30 L 245 30 Q 235 30 235 40 L 235 242.76" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 228.5 230.88 L 235 243.88 L 241.5 230.88" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(141.5,144.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="70" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">parameterizes</div></div></foreignObject><text x="35" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">parameterizes</text></switch></g><g transform="translate(407.5,42.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1</div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1</text></switch></g><g transform="translate(226.5,222.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: right;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1</div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1</text></switch></g><path d="M 515 15 L 950 15 Q 960 15 960 25 L 960 127.76" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 953.5 115.88 L 960 128.88 L 966.5 115.88" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(809.5,9.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="37" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">creates</div></div></foreignObject><text x="19" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">creates</text></switch></g><g transform="translate(527.5,2.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1</div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1</text></switch></g><g transform="translate(951.5,107.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: right;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1</div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1</text></switch></g><rect x="300" y="140" width="100" height="60" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(300.5,140.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="98" height="58" 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: 99px; height: 59px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PDPXCreator<br /></b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /><div style="height: 2px"></div></div></foreignObject><text x="49" y="35" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="410" y="140" width="95" height="60" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(410.5,140.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="93" height="58" 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: 94px; height: 59px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PDPDCreator</b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /></div></foreignObject><text x="47" y="35" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="510" y="140" width="95" height="60" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(510.5,140.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="93" height="58" 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: 94px; height: 59px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>PDPACreator</b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /></div></foreignObject><text x="47" y="35" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 350 140 L 446.95 66.13" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 454.11 60.68 L 449.68 69.71 L 444.22 62.55 Z" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 458 140 L 455.38 70.11" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 455.04 61.12 L 459.88 69.94 L 450.88 70.28 Z" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 558 140 L 462.99 66.21" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 455.88 60.69 L 465.75 62.65 L 460.23 69.76 Z" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 515 30 L 775 30 Q 785 30 785 40 L 785 440 Q 785 450 775 450 L 495 450 Q 485 450 485 448 L 485 446" fill="none" stroke="#7ea6e0" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><g transform="translate(527.5,16.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1</div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1</text></switch></g><path d="M 570 260 L 570 259.5 Q 570 259 560 259 L 270 259" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(400.5,253.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="55" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">implements</div></div></foreignObject><text x="28" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">implements</text></switch></g><g transform="translate(542.5,242.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="8" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">m</div></div></foreignObject><text x="4" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">m</text></switch></g><g transform="translate(276.5,245.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: right;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">n</div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">n</text></switch></g><rect x="912.5" y="130" width="95" height="52" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(913.5,130.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="93" height="50" 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: 94px; height: 51px; overflow: hidden; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><b><<TOSCA>><br />Policy</b></p><hr size="1" /><div style="height: 2px"></div><hr size="1" /><div style="height: 2px"></div></div></foreignObject><text x="47" y="31" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g></g></svg>
\ No newline at end of file diff --git a/docs/architecture/images/PFDesignAndAdmin.svg b/docs/architecture/images/PFDesignAndAdmin.svg new file mode 100644 index 00000000..f91d3084 --- /dev/null +++ b/docs/architecture/images/PFDesignAndAdmin.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="1111px" height="333px" viewBox="-0.5 -0.5 1111 333" content="<mxfile modified="2019-05-29T11:47:21.032Z" host="wiki.onap.org" agent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:67.0) Gecko/20100101 Firefox/67.0" etag="vJRmICOpGRSJj4XFN2EV" version="10.6.3" type="atlas"><mxAtlasLibraries/><diagram name="Page-1" id="b5b7bab2-c9e2-2cf4-8b2a-24fd1a2a6d21">7V1bb6M4FP41eZwR98tjm3S6I2011XSrnX10wE3QEIyAXjK/fu1gE7BNaigkoJlWquAYjDnH37n5mC7M5e7tNgPp9g6FMF4YWvi2MFcLw/B9G/8lhH1J8DSvJGyyKCxJ+pHwEP2ClKhR6nMUwrxxYYFQXERpkxigJIFB0aCBLEOvzcueUNx8ago2UCA8BCAWqf9GYbGlVN3xjw1/wWizpY/2DLdsWIPg5yZDzwl93sIwnw4/ZfMOsL7oi+ZbEKLXGsm8WZjLDKGiPNq9LWFMWMvYVt73paW1GncGk0LlBqO84QXEz/TV71EcBfsVfIExSnekm3KgxZ4xZ1vsYnykL8zrpyiOlyhG2aGFvKoRBJieFxn6CWstobN2bAe3bDIQRrjXxl2h75A2cfD0fV5gVsC3Gom+zC1EO1hke3wJbTUcylg68SpGv9bEaFPatiZBk9IAnTmbqusj9/ABZaCcmaaEmVkB4i4ctMmvjIPO4UfOwfXhdxgOVtyhHNQlHByLgVb7bLy6//qYw2xWrKzU2QlWVrSheWm38TLC/IjWz0WEkllB27QuyE1P4ObDajmryWi6doN97vlgzWBQ457AOpiEV8Rw47MEJZh4XWMmDLF1ptdijbpFG5SA+OZIvYZvUfEDt2qfbXr2H7s3waOtNZFT0qadYmuOnrMANkRfgGwDiwa2yLBOsj6DMSiil6ZTIeMkvfUeRcTeMpF5nC1zOVmUo6Q31Y0814/Fq3ReqOW7CR0d5Fq9jpqoRYdCEHUG8+gXWB9OtaagQRxtEnyclRPwmkzvCLtlV5S+RkWBdrghBmsYX1fOVlNREXcLIxAlBfUs9RZhUzZQL5IOaVH5DB2MZnmDsryVkSNaxBkhxxSRY5wHOTYHHb8ncvh+VJGDBQL2tctSckHePl6dU866q50cl2mevB4flCPoDWPRe5gwjK3Jw9gZH8YnwNoOcSUYWxeDselz8LP7WkCriRfBrRkIx5WJngqO3Tnh2Jk8jsUwYEY4ti+IY26aOxPHsaVNDMf+nHDsTR3HhhiQVomm28evAmunnBZRyYpoIwX21WhnGZ4wTl1AIRr2YAqxJd89sELkHbEL60Mmp1noQ26xaor6sDXxfi2wNd+ClBwG+zhKQojZcf26jQr4kIIDsF4zkDa5vSasg+Hf64pQMfTbc4F7gS269eI5U1szmujyReXqjaRbTVG3ljK5CndRMjsr5TY56UmslD4WJ2XrchUnyXIImN1iiG1wM1Nm9q2xGHrJrKSSaWfgqZt2Ng1GD3a4qd7btpua25TxSMGObTSfw5KcrUlR3zh1/YeNuzmn5KM5+eSjNZXko9sLyoaIZOaujO6lc9m8ymp19tKNpjtcrcUOjGSTH7D9jpvOX/+OW29bxqnrP4x8a07pSmvy6Upr1ulKU7Z8eCbkOxwwTL0n8l2T64h3Boay4f5JZJ4fyXNKWFqTT1jaIpJrIcwca+Nsv+l0ygJC5ggOXhqnMDmnm7a0JQVJ54ptbJMLFfrGNkL8qo2jFx2HS0ReOLZh/JqFXmQ4ma5edIwWvXjzBoP5lbj6BuePn3MxxxHTZKs7AO5nZVZc3nHT7DNy8Ix5sZpVqRmSH3Ujc2xTsiuOxN8+l12x+Er5vnbF5TqqkkkD2xWXK6k1+X0271zPxjWYXZlTzsyZfM7MOUPObEQkGyKSnTMh2eWL1i0OgL2RzHc0XNG6M6e0kzP5tJMjBqtX+T4JliCOZxalenw9p8Qh88fyJsQo9WGeXPQVuDjWMrqrEHDVNHkQgzyPyiAAZIVIruv4lkheb1/1UA7ypSrcV1Th72zpYrSP5gKaQq0qkboqep2rtTT5zRrDKXpXDHHUJoNc6sbQKW9HktphM+GP1HtLvVtY9p7U3RNgHw7r3qSk7nPSsvh0narYfbtfAXcfsSuERMOAveHBu+puugztqm76meTOe/O8uJTlztZY2gL8AeXeLXbrJvch4C7Js0wN7tyqpdU3HePzeR1+A9eAYpctdjsxCcjC6AUfbshhmR3Gl13hGO0JBCTHo4EkxH/vYAFCUAB2F35g7UZZX6t7fNstjuXSqpOH5/WGElbwKUoikoPO1btkwysQ/vPOA+5AmkbJpup9nfE988/jUMBKeRNUkIzEO2W8OQ1LLUmIW6C0FgjH8Ik8L8dd4fH9Q9pWnxwxMglt6IWWLDLxjLU52HcjbKPpaVj6ZzEpbMiKJflp3+vLEd0CEJpKCkG+hSHlvELMcdr5FPjruyvNdVU1lmwHqDstjWVzGw6qiqvOfinXka2NlnbyDGFmLL8/rohyuv+6IF+tyogSYCrhoAeO6gorgk+MxONfev8KpjHaS7/o9HsoAsdsMUb1tSFZNoc3Wr3UgCwIkev/COaV9LA10jYYFomyCQnRDkQJQeZhCRSSMSRlT4o9NC3P5+apui0jTAQv5Pk5tVnH14Ig2HYfT7FP669DqdQc/rGBpzJw3GfRTF0Xp74jmfqeP8DU7xaIqVtAt0ux8QdtoCxIZ5ieig3k1yR7F+dwu/1GzM14CksvPeaGZOXsg1GbRPyMKxMRv/DpQ7Z433nfCbuxSvYYo4lfKWgrPRdle/EdFlEGlS+/yoIt4bpgQR5Tsi6i3tF3FMdka+NsbdHKvvFW47thbnN6Gb4ricdYRqQOFH7XRC9j1Kv2s0841sPgNIzLtAIshxnAtsIaZePCVWSOqF18MfQ+FWDVUkITA+Z5nESdj488Se2cdJPuALj0uy3NKeOyiyPwQRdRtmGFxfhTQTG3N9Wwe/oILr98p1hn1wfFCst3WfmJASrHd/DZvex3CHDxO+08AVumRO662S5iZWi1fQoY075kYAdfUYadFm2JdimGlSQ/hN+x4HRcg1cUjXXGUhLTdAHu9vCtCF4h7qIwjNuUalOsA0jB5KY/WxquJ4Jl1cH8V1V6iUGlyuwj8/jidT78HPdF+zHaHBcDiW/FltRJ/Y7T2pdkdwyJQ91jWuPT438nKLX58T9AmDf/Aw==</diagram></mxfile>"><defs><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="mx-gradient-fff2cc-1-ffd966-1-s-0"><stop offset="0%" style="stop-color:#fff2cc"/><stop offset="100%" style="stop-color:#ffd966"/></linearGradient><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="mx-gradient-f5f5f5-1-b3b3b3-1-s-0"><stop offset="0%" style="stop-color:#f5f5f5"/><stop offset="100%" style="stop-color:#b3b3b3"/></linearGradient></defs><g><rect x="250" y="150" width="150" height="30" fill="url(#mx-gradient-fff2cc-1-ffd966-1-s-0)" stroke="#d6b656" pointer-events="none"/><g transform="translate(271.5,158.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="106" 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; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PolicyDevelopment</div></div></foreignObject><text x="53" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PolicyDevelopment</text></switch></g><rect x="140" y="50" width="50" height="30" fill="url(#mx-gradient-f5f5f5-1-b3b3b3-1-s-0)" stroke="#666666" pointer-events="none"/><g transform="translate(148.5,58.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="32" 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; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Portal</div></div></foreignObject><text x="16" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Portal</text></switch></g><rect x="200" y="50" width="120" height="30" fill="url(#mx-gradient-f5f5f5-1-b3b3b3-1-s-0)" stroke="#666666" pointer-events="none"/><g transform="translate(209.5,58.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="100" 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; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PolicyDevAPIUser</div></div></foreignObject><text x="50" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PolicyDevAPIUser</text></switch></g><rect x="330" y="50" width="120" height="30" fill="url(#mx-gradient-fff2cc-1-ffd966-1-s-0)" stroke="#d6b656" pointer-events="none"/><g transform="translate(342.5,58.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="95" 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; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PolicyDistribution</div></div></foreignObject><text x="48" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PolicyDistribution</text></switch></g><rect x="365" y="0" width="50" height="30" fill="url(#mx-gradient-f5f5f5-1-b3b3b3-1-s-0)" stroke="#666666" pointer-events="none"/><g transform="translate(376.5,8.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="26" 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; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">SDC</div></div></foreignObject><text x="13" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">SDC</text></switch></g><path d="M 390 30 L 390 50" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 165 80 L 165 90 Q 165 100 175 100 L 315 100 Q 325 100 325 110 L 325 150" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 260 80 L 260 90 Q 260 100 270 100 L 315 100 Q 325 100 325 110 L 325 150" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 390 80 L 390 90 Q 390 100 380 100 L 335 100 Q 325 100 325 110 L 325 150" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="30" y="50" width="100" height="30" fill="url(#mx-gradient-fff2cc-1-ffd966-1-s-0)" stroke="#d6b656" pointer-events="none"/><g transform="translate(41.5,58.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="76" 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; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PolicyDevGUI</div></div></foreignObject><text x="38" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PolicyDevGUI</text></switch></g><path d="M 80 80 L 80 90 Q 80 100 90 100 L 315 100 Q 325 100 325 110 L 325 150" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 492 226 C 492 218 572 218 572 226 L 572 244 C 572 252 492 252 492 244 Z" fill="url(#mx-gradient-f5f5f5-1-b3b3b3-1-s-0)" stroke="#666666" stroke-miterlimit="10" pointer-events="none"/><path d="M 492 226 C 492 232 572 232 572 226" fill="none" stroke="#666666" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(506.5,232.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="50" 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: 51px; 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;">PolicyDB</div></div></foreignObject><text x="25" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PolicyDB</text></switch></g><rect x="462" y="10" width="110" height="30" fill="url(#mx-gradient-fff2cc-1-ffd966-1-s-0)" stroke="#d6b656" pointer-events="none"/><g transform="translate(472.5,18.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="89" 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; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PolicyAdminGUI</div></div></foreignObject><text x="45" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PolicyAdminGUI</text></switch></g><rect x="512" y="150" width="140" height="30" fill="url(#mx-gradient-fff2cc-1-ffd966-1-s-0)" stroke="#d6b656" pointer-events="none"/><g transform="translate(526.5,158.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="111" 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; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PolicyAdministration</div></div></foreignObject><text x="56" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PolicyAdministration</text></switch></g><path d="M 517 40 L 517 50 Q 517 60 527 60 L 572 60 Q 582 60 582 70 L 582 150" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 363 180 L 361.5 180 Q 360 180 360 190 L 360 195 Q 360 200 370 200 L 522 200 Q 532 200 532 210 L 532 220" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 582 180 L 582 190 Q 582 200 572 200 L 542 200 Q 532 200 532 210 L 532 220" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="587" y="10" width="135" height="30" fill="url(#mx-gradient-f5f5f5-1-b3b3b3-1-s-0)" stroke="#666666" pointer-events="none"/><g transform="translate(597.5,18.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="113" 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; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PolicyAdminAPIUser</div></div></foreignObject><text x="57" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PolicyAdminAPIUser</text></switch></g><path d="M 655 40 L 655 50 Q 655 60 645 60 L 592 60 Q 582 60 582 70 L 582 150" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="910" y="150" width="100" height="30" fill="url(#mx-gradient-fff2cc-1-ffd966-1-s-0)" stroke="#d6b656" pointer-events="none"/><g transform="translate(916.5,158.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="87" 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; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PolicyExecution</div></div></foreignObject><text x="44" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PolicyExecution</text></switch></g><rect x="760" y="235" width="100" height="30" fill="url(#mx-gradient-f5f5f5-1-b3b3b3-1-s-0)" stroke="#666666" pointer-events="none"/><g transform="translate(789.5,243.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="41" 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; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">DMaaP</div></div></foreignObject><text x="21" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">DMaaP</text></switch></g><path d="M 760 250 L 750 250 Q 740 250 740 240 L 740 175 Q 740 165 730 165 L 652 165" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 910 165 L 895 165 Q 885 165 885 175 L 885 240 Q 885 250 875 250 L 860 250" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="860" y="50" width="90" height="30" fill="url(#mx-gradient-f5f5f5-1-b3b3b3-1-s-0)" stroke="#666666" pointer-events="none"/><g transform="translate(871.5,58.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="66" 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; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">AsyncCaller</div></div></foreignObject><text x="33" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">AsyncCaller</text></switch></g><rect x="960" y="50" width="80" height="30" fill="url(#mx-gradient-f5f5f5-1-b3b3b3-1-s-0)" stroke="#666666" pointer-events="none"/><g transform="translate(969.5,58.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="60" 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; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">SyncCaller</div></div></foreignObject><text x="30" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">SyncCaller</text></switch></g><path d="M 986.33 143.77 L 998.67 86.23" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 985.23 148.91 L 983.28 141.33 L 986.33 143.77 L 990.12 142.8 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 999.77 81.09 L 1001.72 88.67 L 998.67 86.23 L 994.88 87.2 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 905 80 L 932.49 144.15" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 934.56 148.97 L 928.59 143.92 L 932.49 144.15 L 935.02 141.16 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 960 150 L 930.65 85.79" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 928.46 81.02 L 934.56 85.93 L 930.65 85.79 L 928.19 88.84 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 860 73 L 787.68 229.22" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 785.47 233.99 L 785.23 226.16 L 787.68 229.22 L 791.59 229.1 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 810 235 L 880.29 85.76" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 882.52 81.01 L 882.71 88.84 L 880.29 85.76 L 876.37 85.85 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 342 271.5 L 568 271.5 L 582 285.5 L 582 331.5 L 342 331.5 L 342 271.5 Z" fill="#d5e8d4" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><path d="M 568 271.5 L 568 285.5 L 582 285.5" fill="none" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(344.5,273.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="236" height="56" 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: 236px; white-space: normal; overflow-wrap: normal;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><div>Policy Artifacts and Metadata</div><div>PDP Group and Subgroup Definitions</div><div>Policy to PDP Group and Subgroup Mappings<br /></div></div></div></foreignObject><text x="118" y="34" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 532 250 L 462 272" fill="none" stroke="#97d077" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 620 80 L 796 80 L 810 94 L 810 130 L 620 130 L 620 80 Z" fill="#d5e8d4" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><path d="M 796 80 L 796 94 L 810 94" fill="none" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(622.5,81.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="186" 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: 186px; white-space: normal; overflow-wrap: normal;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">CRUD API for Policy Groups and Sub-Groups<br />API for Policy Deployment</div></div></foreignObject><text x="93" y="27" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">CRUD API for Policy Groups and Sub-Groups<br>API for Policy Deployment</text></switch></g><path d="M 950 241 L 1096 241 L 1110 255 L 1110 330 L 950 330 L 950 241 Z" fill="#d5e8d4" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><path d="M 1096 241 L 1096 255 L 1110 255" fill="none" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(952.5,242.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="137" height="70" 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: 138px; white-space: nowrap; overflow-wrap: normal;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><div>Policies for a given</div><div>domain execute in a</div><div> PDP Group. PDP Groups</div><div> have subgroups for each</div><div> PDP type in a PDP group<br /></div></div></div></foreignObject><text x="69" y="41" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 985 180 L 1070 241" fill="none" stroke="#97d077" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 325 150 L 230 133" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 663 227.5 L 717 227.5 L 731 241.5 L 731 302.5 L 663 302.5 L 663 227.5 Z" fill="#d5e8d4" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><path d="M 717 227.5 L 717 241.5 L 731 241.5" fill="none" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(665.5,229.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="48" height="70" 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: 49px; white-space: nowrap; overflow-wrap: normal;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><div>Deploy</div><div>Retire</div><div>Archive<br />Upgrade</div><div>Rollback<br /></div></div></div></foreignObject><text x="24" y="41" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 652 165 L 697 228" fill="none" stroke="#97d077" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 120 115 L 216 115 L 230 129 L 230 150 L 120 150 L 120 115 Z" fill="#d5e8d4" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><path d="M 216 115 L 216 129 L 230 129" fill="none" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(122.5,116.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="106" 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: 106px; white-space: normal; overflow-wrap: normal;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">CRUD API for Policy Artifacts</div></div></foreignObject><text x="53" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">CRUD API for Policy Artifacts</text></switch></g><path d="M 582 150 L 620 105" fill="none" stroke="#97d077" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><rect x="0" y="208" width="30" height="13" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(39.5,207.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="164" 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: 165px; 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;">Policy Framework Component</div></div></foreignObject><text x="82" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Policy Framework Component</text></switch></g><rect x="0" y="225" width="30" height="13" fill="url(#mx-gradient-f5f5f5-1-b3b3b3-1-s-0)" stroke="#666666" pointer-events="none"/><g transform="translate(37.5,224.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="97" 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: 98px; 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;">Other Component</div></div></foreignObject><text x="49" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Other Component</text></switch></g></g></svg>
\ No newline at end of file diff --git a/docs/architecture/images/PFHighestLevel.svg b/docs/architecture/images/PFHighestLevel.svg new file mode 100644 index 00000000..9f1afd6a --- /dev/null +++ b/docs/architecture/images/PFHighestLevel.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="561px" height="96px" viewBox="-0.5 -0.5 561 96" content="<mxfile modified="2019-05-29T11:47:04.912Z" host="wiki.onap.org" agent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:67.0) Gecko/20100101 Firefox/67.0" etag="4cUGng7DaMA2niqdvUOu" version="10.6.3" type="atlas"><mxAtlasLibraries/><diagram name="Page-1" id="c4acf3e9-155e-7222-9cf6-157b1a14988f">5VjLcpswFP0ath0exsZLx3l00U4y40WTpQwKaCIQI8sP+vW9AgmQBY2bxG08tWc80rlI+J5zj5BwgmV+uOOozL6zBFPHd5ODE1w7vj+fh/ArgaoBIjdqgJSTpIG8DliRn1iBrkK3JMEb40LBGBWkNMGYFQWOhYEhztnevOyZUfOuJUqxBaxiRG30B0lEprII3Q7/ikma6Tt7roqsUfyScrYt1P0cP3iuP004R3oudf0mQwnb96DgxgmWnDHRtPLDElNJraatGXc7Em3/N8eFOGVA0AzYIbpVqT8wSuLqGu8wZWUup2n+qKg0OXV6WE7gOsHVPiMCr0oUy+geqgGwTOQUeh40nwmlS0YZr8dKMvw4BnwjOHvBvUgyXU/DKUTsFFRWO8wFPvQgldIdZjkWvIJLVFTrVJndfSelFygs68moMaSqJ20n7hiEhiJxmNDJGKFXFo+gfSmbcUUJEMpfJ3PdMP9t3QJtud1vBcyCR1gP5XeI9Wn9gUjKUUKA8V5sXX8/RpGW20o7JrQ0mZ1JkpkliSUFLpKFXDagVzDJYp91yJpXj7Lcv4S6+6RjByJ6Ieg9KV+MkrZhWx5jo1oE4inWGTcQTowVyia2R1w4QJzGOKZIkJ25rg2xqe7wwIi0vNbNi0JTNz80p2iyUaP6C83xRL5ZAPMjYRsKrHlqbdusT5I7GnHgIslJQcABwAcrLnBVaw3yu2UtPI+H5hfloehTecifXZyHvLF9wc0Bx9sL9c/kBP9MzvQM8ux9wVsN1LdPZ5nHnpm6yEkGimwDeZ/rKTQxhWt3z39qoPnRJmR2PgOFr+v9+R0TRJFJmOdblhnaSOvyeZdjpiNLEGC3HOV4z/gLtJcsL8EtA+cUSFKYJJpkKZP1mVUQoiQtoBvDtPW+XFJG4Hi4UIGcJIm8zaBqpq4fsXB5R3WrT9M9GXx3QIdjn7xJhxO2z++q5H9+NrGqXO92/kaV27vVe5FBzf2fhe3bp0JPP5/eWdjQ7V6rNCt69+oquPkF</diagram></mxfile>"><defs><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="mx-gradient-f5f5f5-1-b3b3b3-1-s-0"><stop offset="0%" style="stop-color:#f5f5f5"/><stop offset="100%" style="stop-color:#b3b3b3"/></linearGradient></defs><g><rect x="0" y="0" width="130" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(11.5,8.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="106" 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: 107px; 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;">PolicyDevelopment</div></div></foreignObject><text x="53" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PolicyDevelopment</text></switch></g><path d="M 180 71 C 180 63 250 63 250 71 L 250 89 C 250 97 180 97 180 89 Z" fill="url(#mx-gradient-f5f5f5-1-b3b3b3-1-s-0)" stroke="#666666" stroke-miterlimit="10" pointer-events="none"/><path d="M 180 71 C 180 77 250 77 250 71" fill="none" stroke="#666666" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(189.5,77.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="50" 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: 51px; 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;">PolicyDB</div></div></foreignObject><text x="25" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PolicyDB</text></switch></g><path d="M 215 65 L 65 30" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="220" y="0" width="135" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(231.5,8.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="111" 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: 112px; 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;">PolicyAdministration</div></div></foreignObject><text x="56" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PolicyAdministration</text></switch></g><path d="M 215 65 L 288 30" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="420" y="0" width="140" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(446.5,8.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="87" 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: 88px; 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;">PolicyExecution</div></div></foreignObject><text x="44" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PolicyExecution</text></switch></g><path d="M 355 15 L 420 15" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="338" y="62" width="30" height="13" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(377.5,61.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="164" 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: 165px; 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;">Policy Framework Component</div></div></foreignObject><text x="82" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Policy Framework Component</text></switch></g><rect x="338" y="79" width="30" height="13" fill="url(#mx-gradient-f5f5f5-1-b3b3b3-1-s-0)" stroke="#666666" pointer-events="none"/><g transform="translate(375.5,78.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="97" 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: 98px; 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;">Other Component</div></div></foreignObject><text x="49" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Other Component</text></switch></g></g></svg>
\ No newline at end of file diff --git a/docs/architecture/images/PolicyExecution.svg b/docs/architecture/images/PolicyExecution.svg index c9b2f7f6..23a00770 100644 --- a/docs/architecture/images/PolicyExecution.svg +++ b/docs/architecture/images/PolicyExecution.svg @@ -1,34 +1,2 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="324px" preserveAspectRatio="none" style="width:424px;height:324px;" version="1.1" viewBox="0 0 424 324" width="424px" zoomAndPan="magnify"><defs><filter height="300%" id="fso0gk0egkro" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="128" x="148.5" y="22.9951">Policy Execution</text><rect fill="#FFFFFF" filter="url(#fso0gk0egkro)" height="62.2656" style="stroke: #A80036; stroke-width: 1.0;" width="10" x="373.5" y="123.8594"/><rect fill="#FFFFFF" filter="url(#fso0gk0egkro)" height="29.1328" style="stroke: #A80036; stroke-width: 1.0;" width="10" x="373.5" y="230.0625"/><rect fill="#FFFFFF" filter="url(#fso0gk0egkro)" height="181.6016" style="stroke: #000000; stroke-width: 2.0;" width="399" x="13" y="85.5938"/><rect fill="#FFFFFF" height="73.0703" style="stroke: none; stroke-width: 1.0;" width="399" x="13" y="194.125"/><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="76" x2="76" y1="68.5938" y2="284.1953"/><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="191" x2="191" y1="68.5938" y2="284.1953"/><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="378" x2="378" y1="68.5938" y2="284.1953"/><rect fill="#FEFECE" filter="url(#fso0gk0egkro)" height="30.2969" style="stroke: #A80036; stroke-width: 1.5;" width="102" x="23" y="33.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="88" x="30" y="53.292">REQUESTOR</text><rect fill="#FEFECE" filter="url(#fso0gk0egkro)" height="30.2969" style="stroke: #A80036; stroke-width: 1.5;" width="102" x="23" y="283.1953"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="88" x="30" y="303.1904">REQUESTOR</text><rect fill="#FEFECE" filter="url(#fso0gk0egkro)" height="30.2969" style="stroke: #A80036; stroke-width: 1.5;" width="101" x="139" y="33.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="87" x="146" y="53.292">RESPONDEE</text><rect fill="#FEFECE" filter="url(#fso0gk0egkro)" height="30.2969" style="stroke: #A80036; stroke-width: 1.5;" width="101" x="139" y="283.1953"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="87" x="146" y="303.1904">RESPONDEE</text><rect fill="#FEFECE" filter="url(#fso0gk0egkro)" height="30.2969" style="stroke: #A80036; stroke-width: 1.5;" width="43" x="355" y="33.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="29" x="362" y="53.292">PDP</text><rect fill="#FEFECE" filter="url(#fso0gk0egkro)" height="30.2969" style="stroke: #A80036; stroke-width: 1.5;" width="43" x="355" y="283.1953"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="29" x="362" y="303.1904">PDP</text><rect fill="#FFFFFF" filter="url(#fso0gk0egkro)" height="62.2656" style="stroke: #A80036; stroke-width: 1.0;" width="10" x="373.5" y="123.8594"/><rect fill="#FFFFFF" filter="url(#fso0gk0egkro)" height="29.1328" style="stroke: #A80036; stroke-width: 1.0;" width="10" x="373.5" y="230.0625"/><path d="M13,85.5938 L77,85.5938 L77,92.5938 L67,102.5938 L13,102.5938 L13,85.5938 " fill="#EEEEEE" style="stroke: #000000; stroke-width: 1.0;"/><rect fill="none" height="181.6016" style="stroke: #000000; stroke-width: 2.0;" width="399" x="13" y="85.5938"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="19" x="28" y="98.6606">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="163" x="92" y="97.8042">[Synchronous Invocation]</text><polygon fill="#A80036" points="361.5,119.8594,371.5,123.8594,361.5,127.8594,365.5,123.8594" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="76" x2="367.5" y1="123.8594" y2="123.8594"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="9" x="83" y="118.7935">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="91" x="96" y="118.7935">Execute Policy</text><polygon fill="#FBFB77" filter="url(#fso0gk0egkro)" points="61,136.8594,90,136.8594,100,147.8594,90,159.8594,61,159.8594,51,147.8594,61,136.8594" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="25" x="63" y="152.9263">wait</text><polygon fill="#A80036" points="87,182.125,77,186.125,87,190.125,83,186.125" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="81" x2="377.5" y1="186.125" y2="186.125"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="9" x="93" y="181.0591">2</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="145" x="106" y="181.0591">Policy Execution Result</text><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="13" x2="412" y1="195.125" y2="195.125"/><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="170" x="18" y="205.3354">[Asynchronous Invocation]</text><polygon fill="#A80036" points="361.5,226.0625,371.5,230.0625,361.5,234.0625,365.5,230.0625" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="76" x2="367.5" y1="230.0625" y2="230.0625"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="9" x="83" y="224.9966">3</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="91" x="96" y="224.9966">Execute Policy</text><polygon fill="#A80036" points="202.5,255.1953,192.5,259.1953,202.5,263.1953,198.5,259.1953" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="196.5" x2="377.5" y1="259.1953" y2="259.1953"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="9" x="208.5" y="254.1294">4</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="145" x="221.5" y="254.1294">Policy Execution Result</text><!-- -@startuml
-title Policy Execution
-
-participant REQUESTOR
-participant RESPONDEE
-participant PDP
-
-autonumber
-
-alt Synchronous Invocation
- REQUESTOR - -> PDP: Execute Policy
- activate PDP
- hnote over REQUESTOR : wait
- PDP - -> REQUESTOR: Policy Execution Result
- deactivate PDP
-else Asynchronous Invocation
- REQUESTOR - -> PDP: Execute Policy
- activate PDP
- PDP - -> RESPONDEE: Policy Execution Result
- deactivate PDP
-end
-@enduml
- -PlantUML version 1.2019.07beta1(Unknown compile time) -(GPL source distribution) -Java Runtime: Java(TM) SE Runtime Environment -JVM: Java HotSpot(TM) 64-Bit Server VM -Java Version: 1.7.0_25-b15 -Operating System: Linux -Default Encoding: UTF-8 -Language: en -Country: US ---></g></svg>
\ No newline at end of file +<!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="721px" height="331px" viewBox="-0.5 -0.5 721 331" content="<mxfile modified="2019-05-29T13:08:59.539Z" 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="0Y5-XN-p0uPUC7Svdhwe" type="atlas"><mxAtlasLibraries/><diagram id="e8d91cf9-6c44-7d7c-13bd-2923ac8db669" name="Page-1">5Vxdb6M4FP01ecwIQ/h6bJNud7UaKVJW2u6jAZegITgipG3m168JNgHbpCQxFNJW0wHbGPv4nnuvr20mxnzz8ZzC7fonDlA80bXgY2IsJroODNck/+UpB5qia06REqZRQNNOCavoN6KJGk3dRwHa1QpmGMdZtK0n+jhJkJ/V0mCa4vd6sVcc19+6hSF9o3ZKWPkwRkKxf6MgW9NUYLmnjD9RFK7pqx3dLjI86P8KU7xP6PsmuvF6/CmyN5DVRd+7W8MAv1eSjKeJMU8xzoqrzcccxTm4DLbiuT8acst2pyjJ2jxg0CfeYLynfV8uls+kB1vawOzAQDl2C+UPahPj8X0dZWi1hX6e+07kgKSts01M7gC5fENpFhFAH+IoTEhahvMCuyzFv9Acxzg91mk8OvkvyREbzlpGKkIflSTakWeENyhLD6QIzTV0KmRU6qYOBfm9MoQM+HVl9AwmdpCKTVjWfYKOXFD0GpDU7ghJwCHp9okkmN0RkhqHJND6hJKppTqUq703UjQ5uQRAAqYmAdNVgaVUVd4NllO7JZaOCoqLWAoAhidY23S0dAagx2rQzgPAm4uZCIAt6f9MQf+lGm76cpsQvUZxXBEW4nTovi8To8DyLNOSi9HFcsQoeKjfVkC0ZNpNAYjWHYDYA0zAGALXjLqUSLjmSPpvqui/1DGbPgxATowGfBtx1Otk0/sjm3s/IH6dxjLvAMQeYGIK6k49LQlrO3O09EEo/3r/Z2Zvur/B0Vp8PeP0Een+Br01ShS/Tvk3+KvjQrEHnAyJ9sdx5B8egk2URKRjMItwIsB2EyhhCoOIAFJ7KnCtBnN5qdSVAbRTGEi0AbOuAG1hA1K0i35Tha7VJQxSS5kWrRIsqIezDG9IRgw9FD+WAfD6AOQhcDIwOMlotB9o56CVm5gbiD5zwQ9TAZaiQfkGWJahEQqmBRwlYIrRyW8AZkeCKU7QFj8hXF6iJs38V6YmreOPXE16x181ahJwPg6QreDIXGUVapLJ+DlpREnwkC8vkrsEJ6gujygI0YqWxWm2xiFOYPx0Sr3CLhEs08MLe0F+819OhB/5MKGPKHuhtMivixzbPDcWO7xPfVQXmQymIWJA0j7nfTk7YimKiRl+Q7XaZfDTR5c4Ik0pR9rinFmdG8CinfSh0xgK9Uw5Nk35SH/ROaEiMorwUCm2zQvsmtvr8M63cbZZXHGTk8Pi7SepLHFtJ6gtgueDUZuMVQr0ZvFAa8FrzXvR31TN+yYWH7mqJH4jYbLbD5OFZZRrqQy4ikxg8YZREZnLZR2uyU0t48tz7L+d0GNy0BldBkxomY9uxTk0QfRGLsP88mF3SPw5jGOUslxScaWAMARD9pyECaYpBtk6m2BaLQzSrRq02ddR51S1d53ML9S3Br+jhFOSrfUt56QAtx9tC6zzvlPX2tZqYe8Ho20tddPOjrSt1cJ4dUf+vjyrKvlZIPdL2D/j2H8l+YXVBN5r64j8lvO13B9T+I4xa8DcbxHAUxsyCSByXqUctnwHea9XhUz0m0ImzN3smvqAC8Ly+9A+pT6zv92Y+TIuV8buzlOdL89izMqo7oyJ6vbgqS7GlwdAdUpncCOdu6auy21bZveXWm0x1tKRy25cxmW+/FRxxJN5BePgsjt0Ltvdz9fvl8tA43dzKSKz1ZEHfiOXLbVm2R7T7Nse/Ozb7n72fcdUdvkI2JVLF8L2dnOYdpm1SxmZxzSdtgc/nbbF6fSqskjBATuq5QjZsUfZpl8VyxFOC29RrU70A+Q5ngxw115oZFibdGIthKnV4xXt9SWTm2pUwupLhSqb2sjDAcpVKB92cD5Z++XL0x0yqlSoM6bNHIxZw1WhTgv3sn/uX8XwKpt7o7MjZ8fldOZXKdk4DIzOptr1BWdMOzkYVwbM5hb+5bDY3Gzmr7bkZj/UF5gE+A9QXMt9to41MOqDWW3ydDv3xVNSA+b+bPDcF49LPUF/TVKWi2VejoiGFqBtjA8oKN5F/pB/f+89lCYoQ3kC29oVnXZ1FQkeS1jioLL/y+PLkbSocUfYbg236Kh4slyXfHJUa0dHZCYZ3eIYKpOBGL3m79uRqqIk/CfPW0wtSSzGRE4wk2krR/cMVYeXTNkna4Bk8qbixKYjzoH/SrhRndORrh0KLgSiUQCEgS1HdXGUoU2Oj3TMZbKhfXdROPs5I0MiG3x0+yrZaLGkK7oDAdytj6cpAecbNNjxZjOuS2MqpWPQysLLvHsm85+a+ArI5hn+3egJ8MEbQ7vSEeCPjQkKosETuMb4XrU8rU40bAWiIdlW5rSd9/UjGbOmTyZdKhkmf2yn5eLX55JBbk9fTyyKn75RaTz9Dw==</diagram></mxfile>"><defs><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="mx-gradient-fff2cc-1-ffd966-1-s-0"><stop offset="0%" style="stop-color:#fff2cc"/><stop offset="100%" style="stop-color:#ffd966"/></linearGradient><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="mx-gradient-f5f5f5-1-b3b3b3-1-s-0"><stop offset="0%" style="stop-color:#f5f5f5"/><stop offset="100%" style="stop-color:#b3b3b3"/></linearGradient></defs><g><rect x="418" y="20" width="120" height="310" fill="#ffffff" stroke="#b8b8b8" pointer-events="none"/><g transform="translate(448.5,27.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="408" y="10" width="120" height="310" fill="#ffffff" stroke="#b8b8b8" pointer-events="none"/><g transform="translate(438.5,17.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="398" y="0" width="120" height="310" fill="#ffffff" stroke="#b8b8b8" pointer-events="none"/><g transform="translate(428.5,7.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="408" y="210" width="100" height="90" fill="#ffffff" stroke="#b8b8b8" pointer-events="none"/><g transform="translate(417.5,217.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="408" y="30" width="100" height="80" fill="#ffffff" stroke="#b8b8b8" pointer-events="none"/><g transform="translate(417.5,37.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="428" y="70" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(439.5,78.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="418" y="60" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(429.5,68.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="433" y="260" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(444.5,268.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="423" y="250" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(434.5,258.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="413" y="240" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(424.5,248.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="408" y="120" width="100" height="80" fill="#ffffff" stroke="#b8b8b8" pointer-events="none"/><g transform="translate(417.5,127.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="438" y="165" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(448.5,173.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="428" y="155" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(438.5,163.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="418" y="145" width="60" height="30" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(428.5,153.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="0" y="90" width="140" height="30" fill="url(#mx-gradient-fff2cc-1-ffd966-1-s-0)" stroke="#d6b656" pointer-events="none"/><g transform="translate(14.5,98.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="111" 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; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PolicyAdministration</div></div></foreignObject><text x="56" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PolicyAdministration</text></switch></g><rect x="210" y="280" width="100" height="30" fill="url(#mx-gradient-f5f5f5-1-b3b3b3-1-s-0)" stroke="#666666" pointer-events="none"/><g transform="translate(239.5,288.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="41" 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; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">DMaaP</div></div></foreignObject><text x="21" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">DMaaP</text></switch></g><path d="M 210 303 L 180 303 Q 170 303 170 293 L 170 115 Q 170 105 160 105 L 140 105" fill="none" stroke="#d6b656" stroke-miterlimit="10" pointer-events="none"/><path d="M 418 80 L 370 80 Q 360 80 360 90 L 360 293 Q 360 303 350 303 L 310 303" fill="none" stroke="#d6b656" stroke-miterlimit="10" pointer-events="none"/><rect x="0" y="45" width="140" height="30" fill="url(#mx-gradient-f5f5f5-1-b3b3b3-1-s-0)" stroke="#666666" pointer-events="none"/><g transform="translate(36.5,53.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="66" 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; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><div>AsyncCaller</div></div></div></foreignObject><text x="33" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica"><div>AsyncCaller</div></text></switch></g><path d="M 413 263 L 370 263 Q 360 263 360 273 L 360 293 Q 360 303 350 303 L 310 303" fill="none" stroke="#d6b656" stroke-miterlimit="10" pointer-events="none"/><path d="M 418 168 L 370 168 Q 360 168 360 178 L 360 293 Q 360 303 350 303 L 310 303" fill="none" stroke="#d6b656" stroke-miterlimit="10" pointer-events="none"/><path d="M 210 288 L 200 288 Q 190 288 190 278 L 190 70 Q 190 60 180 60 L 140 60" fill="none" stroke="#6c8ebf" stroke-miterlimit="10" pointer-events="none"/><path d="M 310 288 L 315 288 Q 320 288 320 278 L 320 85 Q 320 75 330 75 L 418 75" fill="none" stroke="#6c8ebf" stroke-miterlimit="10" pointer-events="none"/><path d="M 310 288 L 315 288 Q 320 288 320 278 L 320 170 Q 320 160 330 160 L 418 160" fill="none" stroke="#6c8ebf" stroke-miterlimit="10" pointer-events="none"/><path d="M 310 288 L 315 288 Q 320 288 320 278 L 320 265 Q 320 255 330 255 L 413 255" fill="none" stroke="#6c8ebf" stroke-miterlimit="10" pointer-events="none"/><rect x="0" y="0" width="80" height="30" fill="url(#mx-gradient-f5f5f5-1-b3b3b3-1-s-0)" stroke="#666666" pointer-events="none"/><g transform="translate(9.5,8.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="60" 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; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">SyncCaller</div></div></foreignObject><text x="30" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">SyncCaller</text></switch></g><path d="M 80 15 L 80 17.5 Q 80 20 90 20 L 280 20 Q 290 20 290 30 L 290 58 Q 290 68 300 68 L 418 68" fill="none" stroke="#97d077" stroke-miterlimit="10" pointer-events="none"/><path d="M 270 20 L 280 20 Q 290 20 290 30 L 290 143 Q 290 153 300 153 L 418 153" fill="none" stroke="#97d077" stroke-miterlimit="10" pointer-events="none"/><path d="M 80 15 L 80 17.5 Q 80 20 90 20 L 280 20 Q 290 20 290 30 L 290 238 Q 290 248 300 248 L 413 248" fill="none" stroke="#97d077" stroke-miterlimit="10" pointer-events="none"/><path d="M 590 100 L 686 100 L 700 114 L 700 150 L 590 150 L 590 100 Z" fill="#d5e8d4" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><path d="M 686 100 L 686 114 L 700 114" fill="none" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(592.5,101.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="106" 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: 106px; white-space: normal; overflow-wrap: normal;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Each PDP is deployed as a Kubernetes <i><b>Pod</b></i></div></div></foreignObject><text x="53" y="27" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 590 0 L 706 0 L 720 14 L 720 60 L 590 60 L 590 0 Z" fill="#d5e8d4" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><path d="M 706 0 L 706 14 L 720 14" fill="none" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(592.5,1.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="126" height="56" 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;">In Kubernetes, a PDPSubGroup is a Kubernetes <b><i>Deployment</i></b> </div></div></foreignObject><text x="63" y="34" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 508 50 L 590 30" fill="none" stroke="#97d077" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 478 83 L 590 125" fill="none" stroke="#97d077" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/></g></svg>
\ No newline at end of file diff --git a/docs/architecture/images/PolicyExecutionFlow.svg b/docs/architecture/images/PolicyExecutionFlow.svg new file mode 100644 index 00000000..c9b2f7f6 --- /dev/null +++ b/docs/architecture/images/PolicyExecutionFlow.svg @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="324px" preserveAspectRatio="none" style="width:424px;height:324px;" version="1.1" viewBox="0 0 424 324" width="424px" zoomAndPan="magnify"><defs><filter height="300%" id="fso0gk0egkro" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="128" x="148.5" y="22.9951">Policy Execution</text><rect fill="#FFFFFF" filter="url(#fso0gk0egkro)" height="62.2656" style="stroke: #A80036; stroke-width: 1.0;" width="10" x="373.5" y="123.8594"/><rect fill="#FFFFFF" filter="url(#fso0gk0egkro)" height="29.1328" style="stroke: #A80036; stroke-width: 1.0;" width="10" x="373.5" y="230.0625"/><rect fill="#FFFFFF" filter="url(#fso0gk0egkro)" height="181.6016" style="stroke: #000000; stroke-width: 2.0;" width="399" x="13" y="85.5938"/><rect fill="#FFFFFF" height="73.0703" style="stroke: none; stroke-width: 1.0;" width="399" x="13" y="194.125"/><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="76" x2="76" y1="68.5938" y2="284.1953"/><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="191" x2="191" y1="68.5938" y2="284.1953"/><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="378" x2="378" y1="68.5938" y2="284.1953"/><rect fill="#FEFECE" filter="url(#fso0gk0egkro)" height="30.2969" style="stroke: #A80036; stroke-width: 1.5;" width="102" x="23" y="33.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="88" x="30" y="53.292">REQUESTOR</text><rect fill="#FEFECE" filter="url(#fso0gk0egkro)" height="30.2969" style="stroke: #A80036; stroke-width: 1.5;" width="102" x="23" y="283.1953"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="88" x="30" y="303.1904">REQUESTOR</text><rect fill="#FEFECE" filter="url(#fso0gk0egkro)" height="30.2969" style="stroke: #A80036; stroke-width: 1.5;" width="101" x="139" y="33.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="87" x="146" y="53.292">RESPONDEE</text><rect fill="#FEFECE" filter="url(#fso0gk0egkro)" height="30.2969" style="stroke: #A80036; stroke-width: 1.5;" width="101" x="139" y="283.1953"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="87" x="146" y="303.1904">RESPONDEE</text><rect fill="#FEFECE" filter="url(#fso0gk0egkro)" height="30.2969" style="stroke: #A80036; stroke-width: 1.5;" width="43" x="355" y="33.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="29" x="362" y="53.292">PDP</text><rect fill="#FEFECE" filter="url(#fso0gk0egkro)" height="30.2969" style="stroke: #A80036; stroke-width: 1.5;" width="43" x="355" y="283.1953"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="29" x="362" y="303.1904">PDP</text><rect fill="#FFFFFF" filter="url(#fso0gk0egkro)" height="62.2656" style="stroke: #A80036; stroke-width: 1.0;" width="10" x="373.5" y="123.8594"/><rect fill="#FFFFFF" filter="url(#fso0gk0egkro)" height="29.1328" style="stroke: #A80036; stroke-width: 1.0;" width="10" x="373.5" y="230.0625"/><path d="M13,85.5938 L77,85.5938 L77,92.5938 L67,102.5938 L13,102.5938 L13,85.5938 " fill="#EEEEEE" style="stroke: #000000; stroke-width: 1.0;"/><rect fill="none" height="181.6016" style="stroke: #000000; stroke-width: 2.0;" width="399" x="13" y="85.5938"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="19" x="28" y="98.6606">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="163" x="92" y="97.8042">[Synchronous Invocation]</text><polygon fill="#A80036" points="361.5,119.8594,371.5,123.8594,361.5,127.8594,365.5,123.8594" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="76" x2="367.5" y1="123.8594" y2="123.8594"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="9" x="83" y="118.7935">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="91" x="96" y="118.7935">Execute Policy</text><polygon fill="#FBFB77" filter="url(#fso0gk0egkro)" points="61,136.8594,90,136.8594,100,147.8594,90,159.8594,61,159.8594,51,147.8594,61,136.8594" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="25" x="63" y="152.9263">wait</text><polygon fill="#A80036" points="87,182.125,77,186.125,87,190.125,83,186.125" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="81" x2="377.5" y1="186.125" y2="186.125"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="9" x="93" y="181.0591">2</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="145" x="106" y="181.0591">Policy Execution Result</text><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="13" x2="412" y1="195.125" y2="195.125"/><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="170" x="18" y="205.3354">[Asynchronous Invocation]</text><polygon fill="#A80036" points="361.5,226.0625,371.5,230.0625,361.5,234.0625,365.5,230.0625" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="76" x2="367.5" y1="230.0625" y2="230.0625"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="9" x="83" y="224.9966">3</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="91" x="96" y="224.9966">Execute Policy</text><polygon fill="#A80036" points="202.5,255.1953,192.5,259.1953,202.5,263.1953,198.5,259.1953" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="196.5" x2="377.5" y1="259.1953" y2="259.1953"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="9" x="208.5" y="254.1294">4</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="145" x="221.5" y="254.1294">Policy Execution Result</text><!-- +@startuml
+title Policy Execution
+
+participant REQUESTOR
+participant RESPONDEE
+participant PDP
+
+autonumber
+
+alt Synchronous Invocation
+ REQUESTOR - -> PDP: Execute Policy
+ activate PDP
+ hnote over REQUESTOR : wait
+ PDP - -> REQUESTOR: Policy Execution Result
+ deactivate PDP
+else Asynchronous Invocation
+ REQUESTOR - -> PDP: Execute Policy
+ activate PDP
+ PDP - -> RESPONDEE: Policy Execution Result
+ deactivate PDP
+end
+@enduml
+ +PlantUML version 1.2019.07beta1(Unknown compile time) +(GPL source distribution) +Java Runtime: Java(TM) SE Runtime Environment +JVM: Java HotSpot(TM) 64-Bit Server VM +Java Version: 1.7.0_25-b15 +Operating System: Linux +Default Encoding: UTF-8 +Language: en +Country: US +--></g></svg>
\ No newline at end of file diff --git a/docs/architecture/images/TOSCAPolicyConcepts.svg b/docs/architecture/images/TOSCAPolicyConcepts.svg new file mode 100644 index 00000000..fd8f18e6 --- /dev/null +++ b/docs/architecture/images/TOSCAPolicyConcepts.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="751px" height="404px" viewBox="-0.5 -0.5 751 404" content="<mxfile modified="2019-05-29T11:50:25.562Z" 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="HIMId35ezUBr_5G7AN1h" type="atlas"><mxAtlasLibraries/><diagram id="04337635-102b-1824-bf5a-1496629f81aa" name="Page-1">7VttT+M4EP41le4+UOW1Lx9pYfdOYiV0IB18WrmJm1jrxpHrQru//saJnfewKWQD6IKQiMfjsT3PeGY8CRN7vTt+5SgOvzEf04ll+MeJfTWxLNNeuvBHUk4pZWEsUkLAia+YcsId+YkV0VDUA/HxvsQoGKOCxGWix6IIe6JEQ5yz5zLbltHyrDEK1IxGTrjzEMU1tn+JL0K1C7fA/RcmQahnNg3Vs0Hej4CzQ6Tmm1j2NvlJu3dIy1L8+xD57LlAsq8n9pozJtKn3XGNqdStVls67ktLb7ZujiPRZYBexxOiB7X3W0aJd1LLEyetkv0z2VEUQWu1ZZG4Uz0GtL2QUP8GndhBzrkXoAPdWoWMk5/Ajyh0mUCAbi4U4tZMSiOUrhllPJlHqsvyvNLIOylRzcXxHsbe6g2aFdI3dCwx3qC90KtklKJ4TzbJuuXAHeIBiVZMCLZTTHvB2Q9cWI4/28xcucy6ZpWynzAX+FggKU1/xWyHBQdNGrp3rrStToXpzNP2c25jlq14wqJ9GY6ybWXXQSY7xxYeFLwtUJs1qCfWSu6Jsxj2QOSBu1QNuWofb0lEBGERNCgBRVZtAvYtXlRaG7aIkiACGsVbKUCqkMDpu1RkwWIpNkYeiYKbhOfKySn/KM1IEoOxW5ocoZD4Po4k9EwggTaZfcaMRCLRnLuCX1Dw2pi6ExeWtIa2mbfhV7JzsWYR7AqRBGsMRvSMpSE1WEF2gn5tBgp2sPpOqGu+N4FutYAOpzDAUimXCaQc1Jpo52oEuReQXWtAkO02kDkJAswVyqo1HuY+cZ4vhsPZbgvW96cYjwG7/4B9sSgH7CHDtd0pXOftMWJ3PeT2h47Y9hix3wfkISO2PUbsd8N5yIjt1CN2DUVZLoi7B6us6KE0PCkWDhqDmO2+8tppzYy3q8Csx7F7bdZjxvKLjMXpbt2DJCVmW3DCT7Dm70LmocX4ZBl/JD3wEKEd/nN0YU1pafe89B3yEbMtVO29EPsHqgC/Jzv8dyQwB74R5V5QHjIhMZ0Xs87vABBgm0KtT7SijWD3AfagdYQ2sCGz8NPrYwK0l+8XGhQd9vUqw4j2WVFap2A6GA8Ct9sOd7bDEe/firfGdhC8Zy14x5gT5qsEDXSP+MUhImIqIHaPQPcDtDtkqWjemo0DBUlHrgoJsFfcdOMaQX4VyIshS0WLFpBBUpidZnXdGuHtAV7LGDIXW7bAi7w8Ectu00zWAmW5H6VF/hHvPvC2B0zGnKbce0blXnzyBI9BgmCMPbIFCFKY034QXWBpGMW2bawVO8GRfym/koJWxJJ6Wyh2unoGnap2Zlq6mFbhLhbYTEcTvhC56wRh7AdYl+8AvZAFLEL0Oqeu8JGIBz0jPD/KkVNjOUtXUJQVgYofkm5XNx91H4y8hawGYJC304TWcBtTCmAH7ikNaHjT660+9ylNLv5Fu9GFVWNqm4Yqj3BMAawnXJqxyVCUuFuWptlZkXZZLtI6i0rtNV29GpbbW01SVZBpVQSlW35BkGZk2+0el3gS484U0c3e65cPDUduj0khteAgCtbYyTNRtMF0lX16V/Zw8uM7VVBWFttsJfpkNpfXz3ptbJ5pE52dRz2zN6bTehzooE+eurXPodBz9VkxaHUSLiyrPKQfA29Kwmuu2UPylfwGd/bl6tUf9uWw0yfy62f57ofC82PG1s2D23UPrstuZ3hwuJk7/Xjw7BtgXdGrWFtXB36RBadq8eCdPHj9AvJapzOAE5+/mxNvC+xlMC+qSWQ/GNVvER85MPQGUk8YWRWInN8AkX4JX4Ao+9jj8/hxc2oYTsmTT03TLXpzYFiWPLppZa6/mqq/On23GtL3c50/rNTUN/0M+Xk/BlX90F/Pc34ssNyyJHd+ZixQkqpyKgvqx8Trn3p83Eihz+P/LFLol8qfI1L0B1I/GFnLCkTLt0MEzfz/vVL2/J/q7Ov/AA==</diagram></mxfile>"><defs><clipPath id="mx-clip-525-174-220-24-0"><rect x="525" y="174" width="220" height="24"/></clipPath><clipPath id="mx-clip-525-200-220-24-0"><rect x="525" y="200" width="220" height="24"/></clipPath><clipPath id="mx-clip-525-226-220-24-0"><rect x="525" y="226" width="220" height="24"/></clipPath><clipPath id="mx-clip-275-34-220-24-0"><rect x="275" y="34" width="220" height="24"/></clipPath><clipPath id="mx-clip-275-60-220-24-0"><rect x="275" y="60" width="220" height="24"/></clipPath><clipPath id="mx-clip-275-86-220-24-0"><rect x="275" y="86" width="220" height="24"/></clipPath><clipPath id="mx-clip-5-174-220-24-0"><rect x="5" y="174" width="220" height="24"/></clipPath><clipPath id="mx-clip-5-200-220-24-0"><rect x="5" y="200" width="220" height="24"/></clipPath><clipPath id="mx-clip-5-226-220-24-0"><rect x="5" y="226" width="220" height="24"/></clipPath><clipPath id="mx-clip-5-252-220-24-0"><rect x="5" y="252" width="220" height="24"/></clipPath><clipPath id="mx-clip-5-278-220-24-0"><rect x="5" y="278" width="220" height="24"/></clipPath><clipPath id="mx-clip-5-304-220-24-0"><rect x="5" y="304" width="220" height="24"/></clipPath><clipPath id="mx-clip-5-330-220-24-0"><rect x="5" y="330" width="220" height="24"/></clipPath><clipPath id="mx-clip-5-356-220-24-0"><rect x="5" y="356" width="220" height="24"/></clipPath><clipPath id="mx-clip-5-382-220-24-0"><rect x="5" y="382" width="220" height="24"/></clipPath></defs><g><path d="M 520 168 L 520 142 L 750 142 L 750 168" fill="#fff2cc" stroke="#d6b656" stroke-miterlimit="10" pointer-events="none"/><path d="M 520 168 L 520 246 L 750 246 L 750 168" fill="none" stroke="#d6b656" stroke-miterlimit="10" pointer-events="none"/><path d="M 520 168 L 750 168" fill="none" stroke="#d6b656" stroke-miterlimit="10" pointer-events="none"/><g fill="#000000" font-family="Helvetica" text-anchor="middle" font-size="12px"><text x="634.5" y="159.5">Policy</text></g><rect x="520" y="168" width="230" height="26" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-525-174-220-24-0)" font-size="12px"><text x="526.5" y="186.5">+ properties:property definition list</text></g><rect x="520" y="194" width="230" height="26" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-525-200-220-24-0)" font-size="12px"><text x="526.5" y="212.5">+ targets: string[]</text></g><rect x="520" y="220" width="230" height="26" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-525-226-220-24-0)" font-size="12px"><text x="526.5" y="238.5">+ triggers: trigger list</text></g><path d="M 270 28 L 270 2 L 500 2 L 500 28" fill="#fff2cc" stroke="#d6b656" stroke-miterlimit="10" pointer-events="none"/><path d="M 270 28 L 270 106 L 500 106 L 500 28" fill="none" stroke="#d6b656" stroke-miterlimit="10" pointer-events="none"/><path d="M 270 28 L 500 28" fill="none" stroke="#d6b656" stroke-miterlimit="10" pointer-events="none"/><g fill="#000000" font-family="Helvetica" text-anchor="middle" font-size="12px"><text x="384.5" y="19.5">PolicyType</text></g><rect x="270" y="28" width="230" height="26" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-275-34-220-24-0)" font-size="12px"><text x="276.5" y="46.5">+ properties: property definition list</text></g><rect x="270" y="54" width="230" height="26" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-275-60-220-24-0)" font-size="12px"><text x="276.5" y="72.5">+ targets: string[]</text></g><rect x="270" y="80" width="230" height="26" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-275-86-220-24-0)" font-size="12px"><text x="276.5" y="98.5">+ triggers: trigger list</text></g><path d="M 0 168 L 0 142 L 230 142 L 230 168" fill="#fff2cc" stroke="#d6b656" stroke-miterlimit="10" pointer-events="none"/><path d="M 0 168 L 0 246 L 230 246 L 230 168" fill="none" stroke="#d6b656" stroke-miterlimit="10" pointer-events="none"/><path d="M 0 168 L 230 168" fill="none" stroke="#d6b656" stroke-miterlimit="10" pointer-events="none"/><g fill="#000000" font-family="Helvetica" text-anchor="middle" font-size="12px"><text x="114.5" y="159.5">Trigger</text></g><rect x="0" y="168" width="230" height="26" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-5-174-220-24-0)" font-size="12px"><text x="6.5" y="186.5">+ event_type: string (event name)</text></g><rect x="0" y="194" width="230" height="26" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-5-200-220-24-0)" font-size="12px"><text x="6.5" y="212.5">+ schedule: TimeInterval</text></g><rect x="0" y="220" width="230" height="26" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-5-226-220-24-0)" font-size="12px"><text x="6.5" y="238.5">+ target_filter: event filter</text></g><rect x="0" y="246" width="230" height="26" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-5-252-220-24-0)" font-size="12px"><text x="6.5" y="264.5">+ condition: constraint clause</text></g><rect x="0" y="272" width="230" height="26" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-5-278-220-24-0)" font-size="12px"><text x="6.5" y="290.5">+ constraint: constraint clause</text></g><rect x="0" y="298" width="230" height="26" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-5-304-220-24-0)" font-size="12px"><text x="6.5" y="316.5">+ period: scalar-unit.time</text></g><rect x="0" y="324" width="230" height="26" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-5-330-220-24-0)" font-size="12px"><text x="6.5" y="342.5">+ evaluations: integer</text></g><rect x="0" y="350" width="230" height="26" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-5-356-220-24-0)" font-size="12px"><text x="6.5" y="368.5">+ method: string</text></g><rect x="0" y="376" width="230" height="26" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-5-382-220-24-0)" font-size="12px"><text x="6.5" y="394.5">+ action: string or operation</text></g><path d="M 500 12 L 625 12 Q 635 12 635 22 L 635 142" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(560.5,-0.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="61" height="24" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;"><div>specification</div><div>of</div></div></div></foreignObject><text x="31" y="18" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><g transform="translate(502.5,19.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">1</div></div></foreignObject><text x="3" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">1</text></switch></g><g transform="translate(614.5,127.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="18" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: right;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">0..n</div></div></foreignObject><text x="9" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">0..n</text></switch></g><path d="M 270 93 L 125 93 Q 115 93 115 103 L 115 142" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(151.5,80.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="58" height="24" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;"><div>can be</div><div>triggered by</div></div></div></foreignObject><text x="29" y="18" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><g transform="translate(242.5,74.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="18" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">0..n</div></div></foreignObject><text x="9" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">0..n</text></switch></g><g transform="translate(92.5,125.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="18" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: right;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">0..n</div></div></foreignObject><text x="9" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">0..n</text></switch></g><path d="M 522 155 L 385 155 Q 375 155 375 154.5 L 375 154.25 Q 375 154 365 154 L 231 154" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(381.5,139.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="37" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">triggers</div></div></foreignObject><text x="19" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">triggers</text></switch></g><g transform="translate(494.5,136.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="18" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">0..n</div></div></foreignObject><text x="9" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">0..n</text></switch></g><g transform="translate(239.5,132.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="18" height="10" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: right;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">0..n</div></div></foreignObject><text x="9" y="10" fill="#000000" text-anchor="middle" font-size="10px" font-family="Helvetica">0..n</text></switch></g></g></svg>
\ No newline at end of file diff --git a/docs/architecture/images/ToscaPolicyStructure.png b/docs/architecture/images/ToscaPolicyStructure.png Binary files differdeleted file mode 100644 index f1e6cb47..00000000 --- a/docs/architecture/images/ToscaPolicyStructure.png +++ /dev/null diff --git a/docs/architecture/images/detailed.png b/docs/architecture/images/detailed.png Binary files differdeleted file mode 100644 index 9ac8cf30..00000000 --- a/docs/architecture/images/detailed.png +++ /dev/null diff --git a/docs/architecture/images/execution.png b/docs/architecture/images/execution.png Binary files differdeleted file mode 100644 index 4e564856..00000000 --- a/docs/architecture/images/execution.png +++ /dev/null diff --git a/docs/architecture/images/highest.png b/docs/architecture/images/highest.png Binary files differdeleted file mode 100644 index bfe07ae8..00000000 --- a/docs/architecture/images/highest.png +++ /dev/null diff --git a/docs/architecture/images/objectmodel1.png b/docs/architecture/images/objectmodel1.png Binary files differdeleted file mode 100644 index ef3c7d12..00000000 --- a/docs/architecture/images/objectmodel1.png +++ /dev/null diff --git a/docs/architecture/images/objectmodel2.png b/docs/architecture/images/objectmodel2.png Binary files differdeleted file mode 100644 index 44f79746..00000000 --- a/docs/architecture/images/objectmodel2.png +++ /dev/null diff --git a/docs/architecture/plantuml/PolicyExecution.puml b/docs/architecture/plantuml/PolicyExecutionFlow.puml index a06fdf5f..a06fdf5f 100644 --- a/docs/architecture/plantuml/PolicyExecution.puml +++ b/docs/architecture/plantuml/PolicyExecutionFlow.puml diff --git a/docs/architecture/tosca-policy-primer.rst b/docs/architecture/tosca-policy-primer.rst index 686d3564..3f8e78e7 100644 --- a/docs/architecture/tosca-policy-primer.rst +++ b/docs/architecture/tosca-policy-primer.rst @@ -15,7 +15,7 @@ This page gives a short overview of how Policy is modelled in the TOSCA defines three concepts for Policy: Policy Type, Policy, and Trigger. -.. image:: images/ToscaPolicyStructure.png +.. image:: images/TOSCAPolicyConcepts.svg :width: 800 Policy Type @@ -64,12 +64,12 @@ More formally, TOSCA defines a Trigger as an artifact that "defines the event, * its event_type, which defines the name of the event that fires the policy * its schedule, which defines the time interval in which the trigger is active * its target_filter, which defines specific filters for firing such as specific characteristics of the nodes or -relations for which the trigger should or should not fire + relations for which the trigger should or should not fire * its condition, which defines extra conditions on the incoming event for firing the trigger * its constraint, which defines extra conditions on the incoming event for not firing the trigger * its period, which defines the period to use for evaluating conditions and constraints * its evaluations, which defines the number of evaluations that must be performed over the period to assert the -condition or constraint exists + condition or constraint exists * its method, the method to use for evaluation of conditions and constraints * its action, the workflow or operation to invoke when the trigger fires diff --git a/docs/design/InternalPapPdp.rst b/docs/design/InternalPapPdp.rst new file mode 100644 index 00000000..998514af --- /dev/null +++ b/docs/design/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/design/design.png b/docs/design/design.png Binary files differdeleted file mode 100644 index e36c1b2c..00000000 --- a/docs/design/design.png +++ /dev/null diff --git a/docs/design/design.rst b/docs/design/design.rst index e8a4cacc..cceba0fc 100644 --- a/docs/design/design.rst +++ b/docs/design/design.rst @@ -5,123 +5,795 @@ .. _design-label: Policy Design and Development ------------------------------ +############################# .. contents:: :depth: 3 -This document provides examples that illustrate how to write, deploy, and run policies -of various types using the framework. - -The figure below shows the Artifacts (Blue) in the ONAP Policy -Framework, the Activities (Yellow) that manipulate them, and important -components (Pink) that interact with them. - -.. image:: design.png - -Please see the `TOSCA Policy -Primer <tosca-label>`__ page for an -introduction to TOSCA policy concepts. - -TOSCA defines a *PolicyType*, the definition of a type of policy that -can be applied to a service. It also defines a *Policy*, the definition -of an instance of a *PolicyType*. In the Policy Framework, we must -handle and manage these TOSCA definitions and tie them to real -implementations of policies that can run on PDPs. - -The diagram above outlines how this is achieved. Each TOSCA *PolicyType* -must have a corresponding *PolicyTypeImpl* in the Policy Framework. The -TOSCA \ *PolicyType* definition can be used to create a TOSCA *Policy* -definition, either directly by the Policy Framework, by CLAMP, or by -some other system. Once the \ *Policy* artifact exists, it can be used -together with the *PolicyTypeImpl* artifact to create a *PolicyImpl* -artifact. A *PolicyImpl* artifact is an executable policy implementation -that can run on a PDP. - -The TOSCA *PolicyType* artifact defines the external characteristics of -the policy; defining its properties, the types of entities it acts on, -and its triggers. A *PolicyTypeImpl* artifact is an XACML, Drools, or -APEX implementation of that policy definition. *PolicyType* and -*PolicyTypeImpl* artifacts may be preloaded, may be loaded manually, or -may be created using the Lifecycle API. Alternatively, *PolicyType* -definitions may be loaded over the Lifecycle API for preloaded -*PolicyTypeImpl* artifacts. A TOSCA *PolicyType* artifact can be used by -clients (such as CLAMP or CLI tools) to create, parse, serialize, and/or -deserialize an actual Policy. - -The TOSCA *Policy* artifact is used internally by the Policy Framework, -or is input by CLAMP or other systems. This artifact specifies the -values of the properties for the policy and specifies the specific -entities the policy acts on. Policy Design uses the TOSCA *Policy* -artifact and the *PolicyTypeImpl* artifact to create an executable -*PolicyImpl* artifact. - -1 ONAP Policy Types +This document describes the design principles that should be used to write, deploy, and run policies of various types +using the Policy Framework. It explains the APIs that are available for Policy Framework users. It provides copious +examples to illustrate policy design and API usage. + +1 Introduction +============== + +The figure below shows the Artifacts (Blue) in the ONAP Policy Framework, the Activities (Yellow) that manipulate them, +and important components (Salmon) that interact with them. The Policy Framework is fully TOSCA compliant, and uses +TOSCA to model policies. Please see the :ref:`TOSCA Policy Primer <tosca-label>` page for an introduction to TOSCA +policy concepts. + +.. image:: images/APIsInPolicyFramework.svg + +TOSCA defines the concept of a *PolicyType*, the definition of a type of policy that can be applied to a service. It +also defines the concept of a *Policy*, an instance of a *PolicyType*. In the Policy Framework, we handle and manage +these TOSCA definitions and tie them to real implementations of policies that can run on PDPs. + +The diagram above outlines how this is achieved. Each TOSCA *PolicyType* must have a corresponding *PolicyTypeImpl* in +the Policy Framework. The TOSCA *PolicyType* definition can be used to create a TOSCA *Policy* definition, either +directly by the Policy Framework, by CLAMP, or by some other system. Once the *Policy* artifact exists, it can be used +together with the *PolicyTypeImpl* artifact to create a *PolicyImpl* artifact. A *PolicyImpl* artifact is an executable +policy implementation that can run on a PDP. + +The TOSCA *PolicyType* artifact defines the external characteristics of the policy; defining its properties, the types +of entities it acts on, and its triggers. A *PolicyTypeImpl* artifact is an XACML, Drools, or APEX implementation of +that policy definition. *PolicyType* and *PolicyTypeImpl* artifacts may be preloaded, may be loaded manually, or may be +created using the Lifecycle API. Alternatively, *PolicyType* definitions may be loaded over the Lifecycle API for +preloaded *PolicyTypeImpl* artifacts. A TOSCA *PolicyType* artifact can be used by clients (such as CLAMP or CLI tools) +to create, parse, serialize, and/or deserialize an actual Policy. + +The TOSCA *Policy* artifact is used internally by the Policy Framework, or is input by CLAMP or other systems. This +artifact specifies the values of the properties for the policy and specifies the specific entities the policy acts on. +Policy Design uses the TOSCA *Policy* artifact and the *PolicyTypeImpl* artifact to create an executable *PolicyImpl* +artifact. + +2 ONAP Policy Types =================== -Policy Type Design manages TOSCA *PolicyType* artifacts and their -*PolicyTypeImpl* implementations\ *.* +Policy Type Design manages TOSCA *PolicyType* artifacts and their *PolicyTypeImpl* implementations. -*TOSCA PolicyType* may ultimately be defined by the modeling team but -for now are defined by the Policy Framework project. Various editors and -GUIs are available for creating *PolicyTypeImpl* implementations. -However, systematic integration of *PolicyTypeImpl* implementation is -outside the scope of the ONAP Dublin release. +A TOSCA *PolicyType* may ultimately be defined by the modeling team but for now are defined by the Policy Framework +project. Various editors and GUIs are available for creating *PolicyTypeImpl* implementations. However, systematic +integration of *PolicyTypeImpl* implementation is outside the scope of the ONAP Dublin release. -The \ *PolicyType* definitions and implementations listed below are -preloaded and are always available for use in the Policy Framework. +The *PolicyType* definitions and implementations listed below are preloaded and are always available for use in the +Policy Framework. -====================================== ================================================================================================== +====================================== =============================================================================== **Policy Type** **Description** -====================================== ================================================================================================== -onap.policies.Monitoring Overarching model that supports Policy driven DCAE microservice components used in a Control Loops +====================================== =============================================================================== +onap.policies.Monitoring Overarching model that supports Policy driven DCAE microservice components used + in a Control Loops onap.policies.controlloop.Operational Used to support actor/action operational policies for control loops onap.policies.controlloop.Guard Control Loop guard policies for policing control loops -onap.policies.controlloop.Coordination Control Loop Coordination policies to assist in coordinating multiple control loops at runtime -====================================== ================================================================================================== - -1.1 onap.policies.Monitoring Policy Type ----------------------------------------- - -This is a base Policy Type that supports Policy driven DCAE microservice -components used in a Control Loops. The implementation of this Policy -Type is developed using the XACML PDP to support question/answer Policy -Decisions during runtime for the DCAE Policy Handler. - -**Base Policy Type definition for onap.policies.Monitoring**  - -.. codeblock:: yaml - - tosca_definitions_version: tosca_simple_yaml_1_0_0 - topology_template: - policy_types: - - onap.policies.Monitoring: - derived_from: tosca.policies.Root - version: 1.0.0 - description: a base policy type for all policies that govern monitoring provision - -The \ *PolicyTypeImpl* implementation of the *onap.policies.Montoring* -Policy Type is generic to support definition of TOSCA *PolicyType* -artifacts in the Policy Framework using the Policy Type Design API. -Therefore many TOSCA *PolicyType* artifacts will use the same -*PolicyTypeImpl* implementation with different property types and -towards different targets. This allows dynamically generated DCAE -microservice component Policy Types to be created at Design Time. - -DCAE microservice components can generate their own TOSCA \ *PolicyType* -using TOSCA-Lab Control Loop guard policies in SDC (Stretch Goal) or can -do so manually. See `How to generate artefacts for SDC catalog using -Tosca Lab -Tool <file://localhost/display/DW/How+to+generate+artefacts+for+SDC+catalog+using+Tosca+Lab+Tool>`__ -for details on TOSCA-LAB in SDC. For Dublin, the DCAE team is defining -the manual steps required to build policy models \ `Onboarding steps for -DCAE MS through SDC/Policy/CLAMP -(Dublin) <file://localhost/pages/viewpage.action%3fpageId=60883710>`__. - -NOTE: For Dublin, mS Policy Types will be pre-loaded into the SDC -platform and be available as a Normative. The policy framework will -pre-load support for those mS Monitoring policy types. +onap.policies.controlloop.Coordination Control Loop Coordination policies to assist in coordinating multiple control + loops at runtime +====================================== =============================================================================== + +2.1 Policy Type: onap.policies.Monitoring +----------------------------------------- + +This is a base Policy Type that supports Policy driven DCAE microservice components used in a Control Loops. The +implementation of this Policy Type is developed using the XACML PDP to support question/answer Policy Decisions during +runtime for the DCAE Policy Handler. + +.. code-block:: yaml + :caption: Base Policy Type definition for onap.policies.Monitoring + :linenos: + + tosca_definitions_version: tosca_simple_yaml_1_0_0 + topology_template: + policy_types: + - onap.policies.Monitoring: + derived_from: tosca.policies.Root + version: 1.0.0 + description: a base policy type for all policies that govern monitoring provision + +The *PolicyTypeImpl* implementation of the *onap.policies.Montoring* Policy Type is generic to support definition of +TOSCA *PolicyType* artifacts in the Policy Framework using the Policy Type Design API. Therefore many TOSCA *PolicyType* +artifacts will use the same *PolicyTypeImpl* implementation with different property types and towards different targets. +This allows dynamically generated DCAE microservice component Policy Types to be created at Design Time. + +DCAE microservice components can generate their own TOSCA *PolicyType* using TOSCA-Lab Control Loop guard policies in +SDC (Stretch Goal) or can do so manually. See `How to generate artefacts for SDC catalog using Tosca Lab Tool +<https://wiki.onap.org/display/DW/How+to+generate+artefacts+for+SDC+catalog+using+Tosca+Lab+Tool>`__ +for details on TOSCA-LAB in SDC. For Dublin, the DCAE team is defining the manual steps required to build policy models +`Onboarding steps for DCAE MS through SDC/Policy/CLAMP (Dublin) +<https://wiki.onap.org/pages/viewpage.action?pageId=60883710>`__. + +.. note:: + For Dublin, microservice Policy Types will be preloaded into the SDC platform and be available as a Normative. The + policy framework will preload support for those microservice Monitoring policy types. + +.. code-block:: yaml + :caption: Example PolicyType *onap.policies.monitoring.MyDCAEComponent* derived from *onap.policies.Monitoring* + :linenos: + + tosca_definitions_version: tosca_simple_yaml_1_0_0 + policy_types: + - onap.policies.Monitoring: + derived_from: tosca.policies.Root + version: 1.0.0 + description: a base policy type for all policies that govern monitoring provision + - onap.policies.monitoring.MyDCAEComponent: + derived_from: onap.policies.Monitoring + version: 1.0.0 + properties: + mydcaecomponent_policy: + type: map + description: The Policy Body I need + entry_schema: + type: onap.datatypes.monitoring.mydatatype + + data_types: + - onap.datatypes.monitoring.MyDataType: + derived_from: tosca.datatypes.Root + properties: + my_property_1: + type: string + description: A description of this property + constraints: + - valid_values: + - value example 1 + - value example 2 + +For more examples of monitoring policy type definitions, please refer to the examples in the `ONAP policy-models gerrit +repository <https://github.com/onap/policy-models/tree/master/models-examples/src/main/resources/policytypes>`__. + +2.2 Policy Type: onap.policies.controlloop.Operational +------------------------------------------------------ + +This policy type is used to support actor/action operational policies for control loops. There are two types of +implementations for this policy type + +1. Drools implementations that supports runtime Control Loop actions taken on components such as SO/APPC/VFC/SDNC/SDNR +2. Implementations using APEX to support Control Loops. + +.. note:: + For Dublin, this policy type will ONLY be used for the Policy Framework to distinguish the policy type as operational. + +.. code-block:: yaml + :caption: Base Policy Type definition for onap.policies.controlloop.Operational + :linenos: + + tosca_definitions_version: tosca_simple_yaml_1_0_0 + policy_types: + - onap.policies.controlloop.Operational: + derived_from: tosca.policies.Root + version: 1.0.0 + description: Operational Policy for Control Loops + +Applications should use the following Content-Type when creating onap.policies.controlloop.Operational policies: +.. code-block:: + + Content-Type: "application/yaml" + +2.2.1 Operational Policy Type Schema for Drools +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +For Dublin Drools will still support the Casablanca YAML definition of an Operational Policy for Control Loops. + +Please use the the `YAML Operational Policy format +<https://github.com/onap/policy-models/blob/master/models-interactions/model-yaml/README-v2.0.0.md>`__. + +2.2.2 Operational Policy Type Schema for APEX +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The operational Policy Type schema for APEX extends the base operational Policy Type schema. This Policy Type allows +parameters specific to the APEX PDP to be specified as a TOSCA policy. See `this sample APEX policy type definition +<https://github.com/onap/integration-csit/blob/master/tests/policy/apex-pdp/data/onap.policies.controlloop.operational.Apex.json>`__. + +2.3 Policy Type: onap.policies.controlloop.Guard +------------------------------------------------ + +This policy type is the the type definition for Control Loop guard policies for frequency limiting, blacklisting and +min/max guards to help protect runtime Control Loop Actions from doing harm to the network. This policy type is +developed using the XACML PDP to support question/answer Policy Decisions during runtime for the Drools and APEX +onap.controlloop.Operational policy type implementations. + +.. code-block:: yaml + :caption: Base Policy Type definition for onap.policies.controlloop.Guard + :linenos: + + tosca_definitions_version: tosca_simple_yaml_1_0_0 + policy_types: + - onap.policies.controlloop.Guard: + derived_from: tosca.policies.Root + version: 1.0.0 + description: Guard Policy for Control Loops Operational Policies + +As with the *onap.policies.Monitoring* policy type, the *PolicyTypeImpl* implementation of the +*onap.policies.controlloop.Guard* Policy Type is generic to support definition of TOSCA *PolicyType* artifacts in the +Policy Framework using the Policy Type Design API. + +.. note:: + For Dublin, only the following derived Policy Type definitions below are preloaded in the Policy Framework. However, + the creation of policies will still support the payload from Casablanca. + +Guard policy type definitions for *FrequencyLimiter*, *BlackList*, and *MinMax* are available in the `ONAP +policy-models gerrit repository +<https://github.com/onap/policy-models/tree/master/models-examples/src/main/resources/policytypes>`__. + +3 PDP Deployment and Registration with PAP +========================================== + +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 policy. 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 *PolicyImpl* they + have been predeployed 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 *PolicyImpl* 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 *PolicyImpl* they have *Policy* entities and + been predeployed 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. +========== =========================================== ============================== ================================== + +4. Policy Framework Public APIs +=============================== + +The Policy Framework provides the public APIs outline in the subsections below. For a full description of the APIs, see +their individual documentation linked in each subsection. + +4.1 Policy Type Design API for TOSCA Policy Types +------------------------------------------------- + +The full documentation for this API is available on the :ref:`Policy Life Cycle API <api-label>` page. + +The purpose of this API is to support CRUD of TOSCA *PolicyType* entities. This API is provided by the +*PolicyDevelopment* component of the Policy Framework, see the :ref:`The ONAP Policy Framework Architecture +<architecture-label>` page. + +The API allows applications to create, update, delete, and query *PolicyType* entities so that they become available for +use in ONAP by applications such as CLAMP. Some Policy Type entities are preloaded in the Policy Framework. The TOSCA +fields below are valid on API calls: + +============ ======= ======== ========== =============================================================================== +**Field** **GET** **POST** **DELETE** **Comment** +============ ======= ======== ========== =============================================================================== +(name) M M M The definition of the reference to the Policy Type, GET allows ranges to be + specified +version O M C GET allows ranges to be specified, must be specified if more than one version + of the Policy Type exists +description R O N/A Desciption of the Policy Type +derived_from R C N/A Must be specified when a Policy Type is derived from another Policy Type such + as in the case of derived Monitoring Policy Types +metadata R O N/A Metadata for the Policy Type +properties R M N/A This field holds the specification of the specific Policy Type in ONAP +targets R O N/A A list of node types and/or group types to which the Policy Type can be applied +triggers R O N/A Specification of policy triggers, not currently supported in ONAP +============ ======= ======== ========== =============================================================================== + +.. note:: + On this and subsequent tables, use the following legend: M-Mandatory, O-Optional, R-Read-only, C-Conditional. + Conditional means the field is mandatory when some other field is present. + +.. note:: + Preloaded policy types may only be queried over this API, modification or deletion of preloaded policy type + implementations is disabled. + +.. note:: + Policy types that are in use (referenced by defined Policies) may not be deleted. + +.. note:: + The group types of targets in TOSCA are groups of TOSCA nodes, not PDP groups; the *target* concept in TOSCA is + equivalent to the Policy Enforcement Point (PEP) concept + +4.2 Policy Design API +--------------------- + +The full documentation for this API is available on the :ref:`Policy Life Cycle API <api-label>` page. + +The purpose of this API is to support CRUD of TOSCA *Policy* entities from TOSCA compliant *PolicyType* definitions. +TOSCA *Policy* entities become the parameters for *PolicyTypeImpl* entities, producing *PolicyImpl* entities that can +run on PDPs. This API is provided by the *PolicyDevelopment* component of the Policy Framework, see the :ref:`The ONAP +Policy Framework Architecture <architecture-label>` page. + +This API allows applications (such as CLAMP and Integration) to create, update, delete, and query *Policy* entities. The +TOSCA fields below are valid on API calls: + +=========== ======= ======== ========== ================================================================================ +**Field** **GET** **POST** **DELETE** **Comment** +=========== ======= ======== ========== ================================================================================ +(name) M M M The definition of the reference to the Policy, GET allows ranges to be specified +type O M O The Policy Type of the policy, see section 3.1 +description R O O +metadata R O N/A +properties R M N/A This field holds the specification of the specific Policy in ONAP +targets R O N/A A list of nodes and/or groups to which the Policy can be applied +=========== ======= ======== ========== ================================================================================ + +.. note:: + Policies that are deployed (used on deployed *PolicyImpl* entities) may not be deleted + +.. note:: + This API is NOT used by DCAE for a decision on what policy the DCAE PolicyHandler should retrieve and enforce + +.. note:: + The groups of targets in TOSCA are groups of TOSCA nodes, not PDP groups; the *target* concept in TOSCA is equivalent + to the Policy Enforcement Point (PEP) concept + +4.3 Policy Administration API +----------------------------- + +The full documentation for this API is available on the :ref:`Policy Administration Point (PAP) <pap-label>` page. + +The purpose of this API is to support CRUD of PDP groups and subgroups and to support the deployment and life cycles of +*PolicyImpl* entities (TOSCA *Policy* and *PolicyTypeImpl* entities) on PDP sub groups and PDPs. This API is provided by +the *PolicyAdministration* component (PAP) of the Policy Framework, see the :ref:`The ONAP Policy Framework Architecture +<architecture-label>` page. + +PDP groups and subgroups may be prefedined in the system. Predefined groups and subgroups can be modified or deleted +over this API. The policies running on predefined groups or subgroups as well as the desired instance counts and +properties can also be modified. + +A PDP may be preconfigured with its PDP group, PDP subgroup, and policies. The PDP sends this information to the PAP +when it starts. If the PDP group, subgroup, or any policy is unknown to the PAP, the PAP locks the PDP in state PASSIVE. + +The state of PDP groups is managed by the API. PDP groups can be in states PASSIVE, TEST, SAFE, or ACTIVE. For a full +description of PDP group states, the :ref:`The ONAP Policy Framework Architecture <architecture-label>` page. + +The API supports retrieval of statistics for PDP groups, PDP subgroups, and individual PDPs. It also allows a PDP group +health check to be ordered on PDP groups and on individual PDPs. + +The fields below are valid on API calls: + +============================ ======= ======== ========== =============================================================== +**Field** **GET** **POST** **DELETE** **Comment** +============================ ======= ======== ========== =============================================================== +name M M M The name of the PDP group +version O M C The version of the PDP group +state R N/A N/A The administrative state of the PDP group: PASSIVE, SAFE, TEST, + or ACTIVE +description R O N/A The PDP group description +properties R O N/A Specific properties for a PDP group +pdp_subgroups R M N/A A list of PDP subgroups for a PDP group +->pdp_type R M N/A The PDP type of this PDP subgroup, currently xacml, drools, or + apex +->supported_policy_types R N/A N/A A list of the policy types supported by the PDPs in this PDP + subgroup +->policies R M N/A The list of policies running on the PDPs in this PDP subgroup +->->(name) R M N/A The name of a TOSCA policy running in this PDP subgroup +->->policy_type R N/A N/A The TOSCA policy type of the policy +->->policy_type_version R N/A N/A The version of the TOSCA policy type of the policy +->->policy_type_impl R C N/A The policy type implementation (XACML, Drools Rules, or APEX + Model) that implements the policy +->instance_count R N/A N/A The number of PDP instances running in a PDP subgroup +->min_instance_count O N/A N/A The minumum number of PDP instances to run in a PDP subgroup +->properties O N/A N/A Deployment configuration or other properties for the PDP + subgroup +->deployment_info R N/A N/A Information on the deployment for a PDP subgroup +->instances R N/A N/A A list of PDP instances running in a PDP subgroup +->->instance R N/A N/A The instance ID of a PDP running in a Kuberenetes Pod +->->state R N/A N/A The administrative state of the PDP: PASSIVE, SAFE, TEST, or + ACTIVE +->->healthy R N/A N/A The result of the latest health check on the PDP: + HEALTHY/NOT_HEALTHY/TEST_IN_PROGRESS +->->message O N/A N/A A status message for the PDP if any +->->deployment_instance_info R N/A N/A Information on the node running the PDP +============================ ======= ======== ========== =============================================================== + +Note: In the Dublin release, the *policy_type_impl* of all policy types in a PDP subgroup must be the same. + +4.4 Policy Decision API - Getting Policy Decisions +-------------------------------------------------- + +Policy decisions are required by ONAP components to support the policy-driven ONAP architecture. Policy Decisions are +implemented using the XACML PDP. The calling application must provide attributes in order for the XACML PDP to return a +correct decision. + +Decision API queries are implemented with a POST operation with a JSON body that specifies the filter for the policies +to be returned. + +*https:{url}:{port}/decision/v1/ POST* + +The table below describes the fields in the JSON payload for the decision API Call. + +============= ======= ======== ========================================================================== +**Field** **R/O** **Type** **Description** +============= ======= ======== ========================================================================== +ONAPName R String Name of the ONAP Project that is making the request. +ONAPComponent O String Name of the ONAP Project component that is making the request. +ONAPInstance O String Optional instance identification for that ONAP component. +action R String The action that the ONAP component is performing on a resource. + "configure" → DCAE uS onap.Monitoring policy Decisions to configure uS + "naming" + "placement" + "guard" +============= ======= ======== ========================================================================== + +These sub metadata structures are used to scope the resource the ONAP component is performing an action upon. At least +one must be specified in order for Policy to return a decision. Multiple structures may be utilized to help define a +precise scope for a decision. + +================= ======= ======== ================================================================== +**Field** **R/O** **Type** **Description** +================= ======= ======== ================================================================== +policy-type-name O String The policy type name. This may be a regular expression. +policy-id O String The policy id. This may be a regular expression or an exact value. +================= ======= ======== ================================================================== + +This example below shows the JSON body of a query with a single policy ID. + +.. code-block:: yaml + :caption: Decision API Call - Single Policy ID query + :linenos: + + { + "ONAPName": "DCAE", + "ONAPComponent": "PolicyHandler", + "ONAPInstance": "622431a4-9dea-4eae-b443-3b2164639c64", + "action": "configure", + "resource": { + "policy-id": "onap.scaleout.tca" + } + } + +.. code-block:: yaml + :caption: Decision Response - Single Policy ID query + :linenos: + + { + "policies": { + "onap.scaleout.tca": { + "type": "onap.policies.monitoring.cdap.tca.hi.lo.app", + "version": "1.0.0", + "metadata": { + "policy-id": "onap.scaleout.tca", + "policy-version": 1 + }, + "properties": { + "tca_policy": { + "domain": "measurementsForVfScaling", + "metricsPerEventName": [{ + "eventName": "vLoadBalancer", + "controlLoopSchemaType": "VNF", + "policyScope": "type=configuration", + "policyName": "onap.scaleout.tca", + "policyVersion": "v0.0.1", + "thresholds": [{ + "closedLoopControlName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3", + "closedLoopEventStatus": "ONSET", + "version": "1.0.2", + "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*] + .receivedBroadcastPacketsAccumulated", + "thresholdValue": 500, + "direction": "LESS_OR_EQUAL", + "severity": "MAJOR" + }, + { + "closedLoopControlName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3", + "closedLoopEventStatus": "ONSET", + "version": "1.0.2", + "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*] + .receivedBroadcastPacketsAccumulated", + "thresholdValue": 5000, + "direction": "GREATER_OR_EQUAL", + "severity": "CRITICAL" + }] + }] + } + } + } + } + } + +This example below shows the JSON body of a query with multiple policy IDs. + +.. code-block:: yaml + :caption: Decision API Call - Multiple Policy IDs query + :linenos: + + { + "ONAPName": "DCAE", + "ONAPComponent": "PolicyHandler", + "ONAPInstance": "622431a4-9dea-4eae-b443-3b2164639c64", + "action": "configure", + "resource": { + "policy-id": [ + "onap.scaleout.tca", + "onap.restart.tca" + ] + } + } + +.. code-block:: yaml + :caption: Decision Response - Multiple Policy IDs query + :linenos: + + { + "policies": { + "onap.scaleout.tca": { + "type": "onap.policies.monitoring.cdap.tca.hi.lo.app", + "version": "1.0.0", + "metadata": { + "policy-id": "onap.scaleout.tca" + }, + "properties": { + "tca_policy": { + "domain": "measurementsForVfScaling", + "metricsPerEventName": [ + { + "eventName": "vLoadBalancer", + "controlLoopSchemaType": "VNF", + "policyScope": "type=configuration", + "policyName": "onap.scaleout.tca", + "policyVersion": "v0.0.1", + "thresholds": [ + { + "closedLoopControlName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3", + "closedLoopEventStatus": "ONSET", + "version": "1.0.2", + "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*] + .receivedBroadcastPacketsAccumulated", + "thresholdValue": 500, + "direction": "LESS_OR_EQUAL", + "severity": "MAJOR" + }, + { + "closedLoopControlName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3", + "closedLoopEventStatus": "ONSET", + "version": "1.0.2", + "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*] + .receivedBroadcastPacketsAccumulated", + "thresholdValue": 5000, + "direction": "GREATER_OR_EQUAL", + "severity": "CRITICAL" + } + ] + } + ] + } + } + }, + "onap.restart.tca": { + "type": "onap.policies.monitoring.cdap.tca.hi.lo.app", + "version": "1.0.0", + "metadata": { + "policy-id": "onap.restart.tca", + "policy-version": 1 + }, + "properties": { + "tca_policy": { + "domain": "measurementsForVfScaling", + "metricsPerEventName": [ + { + "eventName": "Measurement_vGMUX", + "controlLoopSchemaType": "VNF", + "policyScope": "DCAE", + "policyName": "DCAE.Config_tca-hi-lo", + "policyVersion": "v0.0.1", + "thresholds": [ + { + "closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e", + "version": "1.0.2", + "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*] + .arrayOfFields[0].value", + "thresholdValue": 0, + "direction": "EQUAL", + "severity": "MAJOR", + "closedLoopEventStatus": "ABATED" + }, + { + "closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e", + "version": "1.0.2", + "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*] + .arrayOfFields[0].value", + "thresholdValue": 0, + "direction": "GREATER", + "severity": "CRITICAL", + "closedLoopEventStatus": "ONSET" + } + ] + } + ] + } + } + } + } + } + +This example below shows the JSON body of a query to return all the deployed policies for a specific policy type. + +.. code-block:: yaml + :caption: Decision API Call - Policies for Policy Type query + :linenos: + + { + "ONAPName": "DCAE", + "ONAPComponent": "PolicyHandler", + "ONAPInstance": "622431a4-9dea-4eae-b443-3b2164639c64", + "action": "configure", + "resource": { + "policy-type": "onap.policies.monitoring.cdap.tca.hi.lo.app" + } + } + +.. code-block:: yaml + :caption: Decision Response - Policies for Policy Type query + :linenos: + { + "policies": { + "onap.scaleout.tca": { + "type": "onap.policies.monitoring.cdap.tca.hi.lo.app", + "version": "1.0.0", + "metadata": { + "policy-id": "onap.scaleout.tca", + "policy-version": 1, + }, + "properties": { + "tca_policy": { + "domain": "measurementsForVfScaling", + "metricsPerEventName": [ + { + "eventName": "vLoadBalancer", + "controlLoopSchemaType": "VNF", + "policyScope": "type=configuration", + "policyName": "onap.scaleout.tca", + "policyVersion": "v0.0.1", + "thresholds": [ + { + "closedLoopControlName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3", + "closedLoopEventStatus": "ONSET", + "version": "1.0.2", + "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*] + .receivedBroadcastPacketsAccumulated", + "thresholdValue": 500, + "direction": "LESS_OR_EQUAL", + "severity": "MAJOR" + }, + { + "closedLoopControlName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3", + "closedLoopEventStatus": "ONSET", + "version": "1.0.2", + "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*] + .receivedBroadcastPacketsAccumulated", + "thresholdValue": 5000, + "direction": "GREATER_OR_EQUAL", + "severity": "CRITICAL" + } + ] + } + ] + } + } + }, + "onap.restart.tca": { + "type": "onap.policies.monitoring.cdap.tca.hi.lo.app", + "version": "1.0.0", + "metadata": { + "policy-id": "onap.restart.tca", + "policy-version": 1 + }, + "properties": { + "tca_policy": { + "domain": "measurementsForVfScaling", + "metricsPerEventName": [ + { + "eventName": "Measurement_vGMUX", + "controlLoopSchemaType": "VNF", + "policyScope": "DCAE", + "policyName": "DCAE.Config_tca-hi-lo", + "policyVersion": "v0.0.1", + "thresholds": [ + { + "closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e", + "version": "1.0.2", + "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0] + .value", + "thresholdValue": 0, + "direction": "EQUAL", + "severity": "MAJOR", + "closedLoopEventStatus": "ABATED" + }, + { + "closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e", + "version": "1.0.2", + "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0] + .value", + "thresholdValue": 0, + "direction": "GREATER", + "severity": "CRITICAL", + "closedLoopEventStatus": "ONSET" + } + ] + } + ] + } + } + }, + "onap.vfirewall.tca": { + "type": "onap.policy.monitoring.cdap.tca.hi.lo.app", + "version": "1.0.0", + "metadata": { + "policy-id": "onap.vfirewall.tca", + "policy-version": 1 + }, + "properties": { + "tca_policy": { + "domain": "measurementsForVfScaling", + "metricsPerEventName": [ + { + "eventName": "vLoadBalancer", + "controlLoopSchemaType": "VNF", + "policyScope": "resource=vLoadBalancer;type=configuration", + "policyName": "onap.vfirewall.tca", + "policyVersion": "v0.0.1", + "thresholds": [ + { + "closedLoopControlName": "ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a", + "closedLoopEventStatus": "ONSET", + "version": "1.0.2", + "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*] + .receivedBroadcastPacketsAccumulated", + "thresholdValue": 500, + "direction": "LESS_OR_EQUAL", + "severity": "MAJOR" + }, + { + "closedLoopControlName": "ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a", + "closedLoopEventStatus": "ONSET", + "version": "1.0.2", + "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*] + .receivedBroadcastPacketsAccumulated", + "thresholdValue": 5000, + "direction": "GREATER_OR_EQUAL", + "severity": "CRITICAL" + } + ] + } + ] + } + } + } + } + } End of Document diff --git a/docs/design/draw.io/APIsInPolicyFramework.xml b/docs/design/draw.io/APIsInPolicyFramework.xml new file mode 100644 index 00000000..d15c3946 --- /dev/null +++ b/docs/design/draw.io/APIsInPolicyFramework.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mxGraphModel dx="1795" dy="808" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="1169" pageHeight="827" background="#ffffff" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="2" value="Policy Type Design<br>(Policy Type Design API)<span style="background-color: rgb(51 , 255 , 51)"><br></span>" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="-500" y="130" width="160" height="50" as="geometry"/></mxCell><mxCell id="4" value="<b>PolicyType</b><br>TOSCA Artifact" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="-300" y="95" width="130" height="60" as="geometry"/></mxCell><mxCell id="6" value="" style="endArrow=classic;html=1;exitX=1;exitY=0.75;entryX=0;entryY=0.25;" parent="1" source="2" target="3" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="-170" y="340" as="sourcePoint"/><mxPoint x="-120" y="290" as="targetPoint"/></mxGeometry></mxCell><mxCell id="7" value="" style="endArrow=classic;html=1;exitX=1;exitY=0.25;entryX=0;entryY=0.5;" parent="1" source="2" target="4" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="60" y="130" as="sourcePoint"/><mxPoint x="-230" y="120" as="targetPoint"/></mxGeometry></mxCell><mxCell id="8" value="Policy Design<br>(Policy Design API)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="145" y="140" width="125" height="40" as="geometry"/></mxCell><mxCell id="9" value="Done Manually or over Lifecycle API" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;size=8;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="-510" y="260.5" width="120" height="50" as="geometry"/></mxCell><mxCell id="10" value="" style="endArrow=none;dashed=1;html=1;entryX=0.25;entryY=0;exitX=0.25;exitY=1;" parent="1" source="2" target="9" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="-90" y="470" as="sourcePoint"/><mxPoint x="-40" y="420" as="targetPoint"/></mxGeometry></mxCell><mxCell id="12" value="CLAMP" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="-130" y="52.5" width="70" height="30" as="geometry"/></mxCell><mxCell id="13" value="" style="endArrow=classic;html=1;exitX=1;exitY=0.25;entryX=0;entryY=0.75;" parent="1" source="3" target="8" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="60" y="130" as="sourcePoint"/><mxPoint x="40" y="350" as="targetPoint"/></mxGeometry></mxCell><mxCell id="14" value="" style="endArrow=classic;html=1;entryX=0;entryY=0.5;exitX=1;exitY=0.25;" parent="1" source="4" target="12" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="-170" y="92.5" as="sourcePoint"/><mxPoint x="85" y="177.5" as="targetPoint"/></mxGeometry></mxCell><mxCell id="15" value="" style="endArrow=classic;html=1;exitX=1;exitY=0.5;entryX=0;entryY=0.25;" parent="1" source="54" target="8" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="195" y="330" as="sourcePoint"/><mxPoint x="80" y="362" as="targetPoint"/></mxGeometry></mxCell><mxCell id="16" value="Other System" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="-130" y="97.5" width="70" height="35" as="geometry"/></mxCell><mxCell id="17" value="" style="endArrow=classic;html=1;entryX=0;entryY=0.5;exitX=1;exitY=0.5;" parent="1" source="4" target="16" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="140" y="202.5" as="sourcePoint"/><mxPoint x="240" y="282.5" as="targetPoint"/></mxGeometry></mxCell><mxCell id="20" value="Executable Policy<br>Preinstalled or created by CLAMP or another system over Policy Design API" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;size=8;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="370" y="24" width="150" height="78" as="geometry"/></mxCell><mxCell id="21" value="<b>PolicyImpl</b><br>Artifact" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="295" y="125" width="130" height="60" as="geometry"/></mxCell><mxCell id="3" value="<b>PolicyTypeImpl</b><br>Artifact" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="-299" y="185" width="129" height="60" as="geometry"/></mxCell><mxCell id="22" value="" style="endArrow=classic;html=1;exitX=1;exitY=0.25;entryX=0;entryY=0.25;" parent="1" source="8" target="21" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="-30" y="404.5" as="sourcePoint"/><mxPoint x="40" y="504.5" as="targetPoint"/></mxGeometry></mxCell><mxCell id="23" value="" style="endArrow=none;dashed=1;html=1;entryX=0;entryY=0.75;exitX=0.5;exitY=0;" parent="1" source="21" target="20" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="140" y="249.5" as="sourcePoint"/><mxPoint x="300" y="189.5" as="targetPoint"/></mxGeometry></mxCell><mxCell id="24" value="PAP" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="280" y="215" width="60" height="30" as="geometry"/></mxCell><mxCell id="25" value="PDPs" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="400" y="200" width="60" height="30" as="geometry"/></mxCell><mxCell id="27" value="PDPs" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="410" y="210" width="60" height="30" as="geometry"/></mxCell><mxCell id="28" value="PDPs" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="420" y="220" width="60" height="30" as="geometry"/></mxCell><mxCell id="29" value="PDPs" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="430" y="230" width="60" height="30" as="geometry"/></mxCell><mxCell id="30" value="PDPs" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="440" y="240" width="60" height="30" as="geometry"/></mxCell><mxCell id="31" value="PDPs" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="450" y="250" width="60" height="30" as="geometry"/></mxCell><mxCell id="32" value="" style="endArrow=classic;startArrow=classic;html=1;entryX=-0.1;entryY=-0.067;entryPerimeter=0;" parent="1" target="27" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="340" y="225" as="sourcePoint"/><mxPoint x="20" y="305" as="targetPoint"/></mxGeometry></mxCell><mxCell id="33" value="" style="endArrow=classic;startArrow=classic;html=1;entryX=0;entryY=0.25;" parent="1" target="27" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="340" y="225" as="sourcePoint"/><mxPoint x="410" y="233" as="targetPoint"/></mxGeometry></mxCell><mxCell id="34" value="" style="endArrow=classic;startArrow=classic;html=1;" parent="1" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="340" y="228" as="sourcePoint"/><mxPoint x="420" y="228" as="targetPoint"/></mxGeometry></mxCell><mxCell id="35" value="" style="endArrow=classic;startArrow=classic;html=1;entryX=0;entryY=0.25;" parent="1" target="30" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="340" y="228" as="sourcePoint"/><mxPoint x="420" y="295" as="targetPoint"/></mxGeometry></mxCell><mxCell id="36" value="" style="endArrow=classic;startArrow=classic;html=1;exitX=1;exitY=0.5;entryX=0;entryY=0.25;" parent="1" source="24" target="29" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="380" y="238" as="sourcePoint"/><mxPoint x="410" y="305" as="targetPoint"/></mxGeometry></mxCell><mxCell id="37" value="" style="endArrow=classic;startArrow=classic;html=1;exitX=1;exitY=0.5;entryX=0;entryY=0.25;" parent="1" source="24" target="31" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="390" y="248" as="sourcePoint"/><mxPoint x="400" y="305" as="targetPoint"/></mxGeometry></mxCell><mxCell id="38" value="" style="endArrow=classic;html=1;entryX=0.5;entryY=0;exitX=0.177;exitY=1.017;exitPerimeter=0;" parent="1" source="21" target="24" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="150" y="363" as="sourcePoint"/><mxPoint x="65" y="624.5" as="targetPoint"/></mxGeometry></mxCell><mxCell id="40" value="Runtime Administration<br>(Policy Admin API)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="230" y="282.5" width="140" height="45" as="geometry"/></mxCell><mxCell id="41" value="" style="endArrow=classic;startArrow=classic;html=1;exitX=0.5;exitY=0;" parent="1" source="40" target="24" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="350" y="235" as="sourcePoint"/><mxPoint x="420" y="228" as="targetPoint"/></mxGeometry></mxCell><mxCell id="44" value="Other System" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="340" y="357.5" width="70" height="35" as="geometry"/></mxCell><mxCell id="46" value="Policy<br>GUI" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="190" y="357.5" width="70" height="35" as="geometry"/></mxCell><mxCell id="50" value="" style="endArrow=classic;startArrow=classic;html=1;entryX=0.75;entryY=0;exitX=0.25;exitY=1;" parent="1" source="40" target="46" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="310" y="293" as="sourcePoint"/><mxPoint x="335" y="255" as="targetPoint"/></mxGeometry></mxCell><mxCell id="51" value="" style="endArrow=classic;startArrow=classic;html=1;entryX=0.5;entryY=0;exitX=0.8;exitY=0.989;exitPerimeter=0;" parent="1" source="40" target="44" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="380" y="326" as="sourcePoint"/><mxPoint x="435" y="346" as="targetPoint"/></mxGeometry></mxCell><mxCell id="52" value="<div>Policy Type Implementation matches ToscaPolicyType<br></div><div>An XACML,Drools, or<br></div>APEX implementation of a Policy Type" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;size=8;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="-360" y="280" width="180" height="90" as="geometry"/></mxCell><mxCell id="53" value="" style="endArrow=none;dashed=1;html=1;entryX=0.411;entryY=0.917;exitX=0.25;exitY=0;entryPerimeter=0;" parent="1" source="52" target="3" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="140" y="145" as="sourcePoint"/><mxPoint x="220" y="170" as="targetPoint"/></mxGeometry></mxCell><mxCell id="57" value="" style="endArrow=classic;html=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" parent="1" source="16" target="54" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="120" y="321.5" as="sourcePoint"/><mxPoint x="15" y="334.5" as="targetPoint"/></mxGeometry></mxCell><mxCell id="54" value="<div><b>Policy</b></div><div>TOSCA Artifact<b><br></b></div>" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="-20" y="115" width="126" height="58" as="geometry"/></mxCell><mxCell id="58" value="" style="endArrow=classic;html=1;exitX=1;exitY=0.5;entryX=0;entryY=0.25;" parent="1" source="12" target="54" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="120" y="321.5" as="sourcePoint"/><mxPoint x="15" y="334.5" as="targetPoint"/></mxGeometry></mxCell><mxCell id="59" value="SDC" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="-500" y="52.5" width="70" height="30" as="geometry"/></mxCell><mxCell id="60" value="" style="endArrow=classic;html=1;exitX=0.5;exitY=1;entryX=0.25;entryY=0;" parent="1" source="59" target="2" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="-330" y="153" as="sourcePoint"/><mxPoint x="-290" y="113" as="targetPoint"/></mxGeometry></mxCell><mxCell id="61" value="Other System" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="-425" y="52.5" width="70" height="30" as="geometry"/></mxCell><mxCell id="63" value="" style="endArrow=classic;html=1;exitX=0.5;exitY=1;entryX=0.75;entryY=0;" parent="1" source="61" target="2" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="-455" y="93" as="sourcePoint"/><mxPoint x="-427" y="140" as="targetPoint"/></mxGeometry></mxCell><mxCell id="64" value="" style="endArrow=classic;html=1;exitX=1;exitY=0.75;entryX=0;entryY=0.75;" parent="1" source="4" target="54" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="-160" y="135" as="sourcePoint"/><mxPoint x="-80" y="160" as="targetPoint"/></mxGeometry></mxCell></root></mxGraphModel>
\ No newline at end of file diff --git a/docs/design/draw.io/PolicyImplPDPSubGroup.xml b/docs/design/draw.io/PolicyImplPDPSubGroup.xml new file mode 100644 index 00000000..293f616e --- /dev/null +++ b/docs/design/draw.io/PolicyImplPDPSubGroup.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mxGraphModel dx="1395" dy="1208" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="850" pageHeight="1100" background="#ffffff" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="4" value="PDPGroup" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;strokeColor=#B8B8B8;" parent="1" vertex="1"><mxGeometry x="-140" y="-5" width="120" height="310" as="geometry"/></mxCell><mxCell id="5" value="PDPSubGroup" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;strokeColor=#B8B8B8;" parent="1" vertex="1"><mxGeometry x="-130" y="205" width="100" height="90" as="geometry"/></mxCell><mxCell id="6" value="PDPSubGroup" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;strokeColor=#B8B8B8;" parent="1" vertex="1"><mxGeometry x="-130" y="25" width="100" height="80" as="geometry"/></mxCell><mxCell id="7" value="" style="group" parent="1" vertex="1" connectable="0"><mxGeometry x="-120" y="55" width="70" height="40" as="geometry"/></mxCell><mxCell id="8" value="PDP-X" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="7" vertex="1"><mxGeometry x="10" y="10" width="60" height="30" as="geometry"/></mxCell><mxCell id="9" value="PDP-X" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="7" vertex="1"><mxGeometry width="60" height="30" as="geometry"/></mxCell><mxCell id="10" value="" style="group" parent="1" vertex="1" connectable="0"><mxGeometry x="-125" y="235" width="80" height="50" as="geometry"/></mxCell><mxCell id="11" value="PDP-A" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="10" vertex="1"><mxGeometry x="20" y="20" width="60" height="30" as="geometry"/></mxCell><mxCell id="12" value="PDP-A" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="10" vertex="1"><mxGeometry x="10" y="10" width="60" height="30" as="geometry"/></mxCell><mxCell id="13" value="PDP-A" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="10" vertex="1"><mxGeometry width="60" height="30" as="geometry"/></mxCell><mxCell id="14" value="PDPSubGroup" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;strokeColor=#B8B8B8;" parent="1" vertex="1"><mxGeometry x="-130" y="115" width="100" height="80" as="geometry"/></mxCell><mxCell id="15" value="" style="group" parent="1" vertex="1" connectable="0"><mxGeometry x="-120" y="140" width="80" height="50" as="geometry"/></mxCell><mxCell id="16" value="PDP-D" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="15" vertex="1"><mxGeometry x="20" y="20" width="60" height="30" as="geometry"/></mxCell><mxCell id="17" value="PDP-D" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="15" vertex="1"><mxGeometry x="10" y="10" width="60" height="30" as="geometry"/></mxCell><mxCell id="18" value="PDP-D" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="15" vertex="1"><mxGeometry width="60" height="30" as="geometry"/></mxCell><mxCell id="46" value="All PDPs in a <i>PDPSubGroup</i> run the same <i>PolicyImpl</i>" style="shape=note;whiteSpace=wrap;html=1;size=14;verticalAlign=top;align=left;spacingTop=-6;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="10" y="-5" width="130" height="50" as="geometry"/></mxCell><mxCell id="47" value="" style="endArrow=none;dashed=1;html=1;entryX=0;entryY=0.5;exitX=1;exitY=0.25;strokeColor=#97D077;" parent="1" source="6" target="46" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="-320" y="375" as="sourcePoint"/><mxPoint x="-270" y="325" as="targetPoint"/></mxGeometry></mxCell><mxCell id="48" value="" style="endArrow=none;dashed=1;html=1;exitX=1;exitY=0.5;strokeColor=#97D077;" parent="1" source="55" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="198" y="35" as="sourcePoint"/><mxPoint x="-120" y="155" as="targetPoint"/></mxGeometry></mxCell><mxCell id="49" value="The PDP running its<i> PolicyImpl</i> is the unit of scaling" style="shape=note;whiteSpace=wrap;html=1;size=14;verticalAlign=top;align=left;spacingTop=-6;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="20" y="95" width="120" height="50" as="geometry"/></mxCell><mxCell id="50" value="" style="endArrow=none;dashed=1;html=1;entryX=0;entryY=0.5;exitX=1;exitY=0.75;strokeColor=#97D077;" parent="1" source="18" target="49" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="-50" y="88" as="sourcePoint"/><mxPoint x="60" y="185" as="targetPoint"/></mxGeometry></mxCell><mxCell id="51" value="A <i>PDPSubGroup</i> is a Kubernetes <b><i>Deployment</i></b>" style="shape=note;whiteSpace=wrap;html=1;size=8;verticalAlign=top;align=left;spacingTop=-6;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="-300" y="-2.5" width="130" height="55" as="geometry"/></mxCell><mxCell id="54" value="" style="endArrow=none;dashed=1;html=1;entryX=1;entryY=0.5;exitX=0;exitY=0.25;strokeColor=#97D077;" parent="1" source="6" target="51" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="-20" y="55" as="sourcePoint"/><mxPoint x="60" y="10" as="targetPoint"/></mxGeometry></mxCell><mxCell id="55" value="PDPs run as Kubernets <b><i>Pods</i></b><i><br></i>" style="shape=note;whiteSpace=wrap;html=1;size=14;verticalAlign=top;align=left;spacingTop=-6;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="-300" y="120" width="120" height="45" as="geometry"/></mxCell><mxCell id="56" value="A <i>PDPGroup</i> groups <i>PDPSubGroup</i> entities together" style="shape=note;whiteSpace=wrap;html=1;size=4;verticalAlign=top;align=left;spacingTop=-6;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="-145" y="-100" width="130" height="50" as="geometry"/></mxCell><mxCell id="57" value="" style="endArrow=none;dashed=1;html=1;entryX=0.25;entryY=1;exitX=0.5;exitY=0;strokeColor=#97D077;" parent="1" source="4" target="56" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="-120" y="55" as="sourcePoint"/><mxPoint x="-160" y="35" as="targetPoint"/></mxGeometry></mxCell><mxCell id="58" value="ControlLoop<br>PDPGroup" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;strokeColor=#B8B8B8;" parent="1" vertex="1"><mxGeometry x="200" y="-50" width="120" height="340" as="geometry"/></mxCell><mxCell id="59" value="CL_Apex<br>PDPSubGroup" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;strokeColor=#B8B8B8;" parent="1" vertex="1"><mxGeometry x="210" y="186" width="100" height="98" as="geometry"/></mxCell><mxCell id="60" value="CL_Guard<br>PDPSubGroup" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;strokeColor=#B8B8B8;" parent="1" vertex="1"><mxGeometry x="210" y="-10.5" width="100" height="88" as="geometry"/></mxCell><mxCell id="61" value="" style="group" parent="1" vertex="1" connectable="0"><mxGeometry x="220" y="27" width="70" height="40" as="geometry"/></mxCell><mxCell id="62" value="PDP-X" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="61" vertex="1"><mxGeometry x="10" y="10" width="60" height="30" as="geometry"/></mxCell><mxCell id="63" value="PDP-X" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="61" vertex="1"><mxGeometry width="60" height="30" as="geometry"/></mxCell><mxCell id="64" value="" style="group" parent="1" vertex="1" connectable="0"><mxGeometry x="215" y="223.5" width="80" height="50" as="geometry"/></mxCell><mxCell id="65" value="PDP-A" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="64" vertex="1"><mxGeometry x="20" y="20" width="60" height="30" as="geometry"/></mxCell><mxCell id="66" value="PDP-A" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="64" vertex="1"><mxGeometry x="10" y="10" width="60" height="30" as="geometry"/></mxCell><mxCell id="67" value="PDP-A" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="64" vertex="1"><mxGeometry width="60" height="30" as="geometry"/></mxCell><mxCell id="68" value="CL_Drools<br>PDPSubGroup" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;strokeColor=#B8B8B8;" parent="1" vertex="1"><mxGeometry x="210" y="85" width="100" height="93" as="geometry"/></mxCell><mxCell id="69" value="" style="group" parent="1" vertex="1" connectable="0"><mxGeometry x="220" y="122.5" width="80" height="50" as="geometry"/></mxCell><mxCell id="70" value="PDP-D" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="69" vertex="1"><mxGeometry x="20" y="20" width="60" height="30" as="geometry"/></mxCell><mxCell id="71" value="PDP-D" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="69" vertex="1"><mxGeometry x="10" y="10" width="60" height="30" as="geometry"/></mxCell><mxCell id="72" value="PDP-D" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="69" vertex="1"><mxGeometry width="60" height="30" as="geometry"/></mxCell><mxCell id="73" value="Monitoring<br>PDPGroup" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;strokeColor=#B8B8B8;" parent="1" vertex="1"><mxGeometry x="340" y="-50" width="120" height="140" as="geometry"/></mxCell><mxCell id="75" value="Monitoring<br>PDPSubGroup" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;strokeColor=#B8B8B8;" parent="1" vertex="1"><mxGeometry x="350" y="-10.5" width="100" height="88" as="geometry"/></mxCell><mxCell id="76" value="" style="group" parent="1" vertex="1" connectable="0"><mxGeometry x="360" y="27" width="70" height="40" as="geometry"/></mxCell><mxCell id="77" value="PDP-X" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="76" vertex="1"><mxGeometry x="10" y="10" width="60" height="30" as="geometry"/></mxCell><mxCell id="78" value="PDP-X" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="76" vertex="1"><mxGeometry width="60" height="30" as="geometry"/></mxCell></root></mxGraphModel>
\ No newline at end of file diff --git a/docs/design/foo.rst b/docs/design/foo.rst deleted file mode 100644 index e0d461be..00000000 --- a/docs/design/foo.rst +++ /dev/null @@ -1,4898 +0,0 @@ -.. contents:: - :depth: 3 -.. - -Policy Design and API Flow for Model Driven Control Loop -======================================================== - -This page shows how the Policy Design and API Flow to/from the PAP and -PDPs works to support Model Driven Control Loops in Dublin. - -- `1 Policy Types <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `1.1 onap.policies.Monitoring Policy - Type <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `1.2 onap.policies.controlloop.Operational Policy - Type <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `1.2.1 Operational Policy Type Schema for - Drools <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `1.2.3 Operational Policy Type Schema for APEX (El Alto - proposal) <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `1.3 onap.policies.controlloop.Guard Policy - Type <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `1.3.1 onap.policies.controlloop.guard.FrequencyLimiter Policy - Type <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `1.3.2 onap.policies.controlloop.guard.Blacklist Policy - Type <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `1.3.3 onap.policies.controlloop.guard.MinMax Policy - Type <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `1.3.4 onap.policies.controlloop.Coordination Policy Type - (STRETCH) <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - -- `2 PDP Deployment and Registration with - PAP <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - -- `3. Public APIs <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `3.1 Policy Type Design API for TOSCA Policy - Types <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `3.1.1 Policy Type - query <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `3.1.2 Policy Type - Create/Update <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `3.1.3 Policy Type - Delete <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `3.2 Policy Design - API <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `3.2.1 Policy - query <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `3.2.2 Policy - Create/Update <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `3.2.2.1 Monitoring Policy - Create/Update <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `3.2.2.2.1 Drools Operational Policy - Create/Update <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `3.2.2.2.2 APEX Operational Policy - Create/Update <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `3.2.2.3 Guard Policy - Create/Update <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `3.2.2.4 Policy Lifecycle API - Creating Coordination - Policies <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `3.2.3 Policy - Delete <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `3.3 Policy Administration - API <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `3.3.1 PDP Group - Query <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `3.3.2 PDP Group - Deployment <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `Simple API for CLAMP to deploy one or more policy-id's with - optional - policy-version. <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `Simple API for CLAMP to undeploy a policy-id with optional - policy-version. <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `3.3.3 PDP Group - Delete <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `3.3.4 PDP Group State - Management <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `3.3.5 PDP Group - Statistics <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `3.3.6 PDP Group Health - Check <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `3.4 Policy Decision API - Getting Policy - Decisions <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `3.4.1 Decision API - Schema <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `3.4.2 Decision API - Queries <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - -- `4. Policy Framework Internal - APIs <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `4.1 PAP to PDP API <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `4.1.1 PAP API for - PDPs <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `4.1.2 PDP API for - PAPs <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `4.1.2.1 PDP - Update <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `4.1.2.2 PDP State - Change <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `4.1.2.3 PDP Health - Check <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `4.2 Policy Type Implementations (Native - Policies) <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `4.2.1 Policy Type Implementation - Query <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `4.2.2 Policy Type Implementation - Create/Update <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - - - `4.2.3 Policy Type Implementation - Delete <#PolicyDesignandAPIFlowforModelDrivenCon>`__ - -The figure below shows the Artifacts (Blue) in the ONAP Policy -Framework, the Activities (Yellow) that manipulate them, and important -components (Pink) that interact with them. - -Please see the :ref:`TOSCA Policy -Primer <tosca-policy>`__ page for an -introduction to TOSCA policy concepts. - -TOSCA defines a *PolicyType*, the definition of a type of policy that -can be applied to a service. It also defines a *Policy*, the definition -of an instance of a *PolicyType*. In the Policy Framework, we must -handle and manage these TOSCA definitions and tie them to real -implementations of policies that can run on PDPs. - -The diagram above outlines how this is achieved. Each TOSCA *PolicyType* -must have a corresponding *PolicyTypeImpl* in the Policy Framework. The -TOSCA \ *PolicyType* definition can be used to create a TOSCA *Policy* -definition, either directly by the Policy Framework, by CLAMP, or by -some other system. Once the \ *Policy* artifact exists, it can be used -together with the *PolicyTypeImpl* artifact to create a *PolicyImpl* -artifact. A *PolicyImpl* artifact is an executable policy implementation -that can run on a PDP. - -The TOSCA *PolicyType* artifact defines the external characteristics of -the policy; defining its properties, the types of entities it acts on, -and its triggers. A *PolicyTypeImpl* artifact is an XACML, Drools, or -APEX implementation of that policy definition. *PolicyType* and -*PolicyTypeImpl* artifacts may be preloaded, may be loaded manually, or -may be created using the Lifecycle API. Alternatively, *PolicyType* -definitions may be loaded over the Lifecycle API for preloaded -*PolicyTypeImpl* artifacts. A TOSCA *PolicyType* artifact can be used by -clients (such as CLAMP or CLI tools) to create, parse, serialize, and/or -deserialize an actual Policy. - -The TOSCA *Policy* artifact is used internally by the Policy Framework, -or is input by CLAMP or other systems. This artifact specifies the -values of the properties for the policy and specifies the specific -entities the policy acts on. Policy Design uses the TOSCA *Policy* -artifact and the *PolicyTypeImpl* artifact to create an executable -*PolicyImpl* artifact. - -1 Policy Types -============== - -Policy Type Design manages TOSCA *PolicyType* artifacts and their -*PolicyTypeImpl* implementations\ *.* - -*TOSCA PolicyType* may ultimately be defined by the modeling team but -for now are defined by the Policy Framework project. Various editors and -GUIs are available for creating *PolicyTypeImpl* implementations. -However, systematic integration of *PolicyTypeImpl* implementation is -outside the scope of the ONAP Dublin release. - -The \ *PolicyType* definitions and implementations listed below are -preloaded and are always available for use in the Policy Framework. - -====================================== ================================================================================================== -**Policy Type** **Description** -====================================== ================================================================================================== -onap.policies.Monitoring Overarching model that supports Policy driven DCAE microservice components used in a Control Loops -onap.policies.controlloop.Operational Used to support actor/action operational policies for control loops -onap.policies.controlloop.Guard Control Loop guard policies for policing control loops -onap.policies.controlloop.Coordination Control Loop Coordination policies to assist in coordinating multiple control loops at runtime -====================================== ================================================================================================== - -1.1 onap.policies.Monitoring Policy Type ----------------------------------------- - -This is a base Policy Type that supports Policy driven DCAE microservice -components used in a Control Loops. The implementation of this Policy -Type is developed using the XACML PDP to support question/answer Policy -Decisions during runtime for the DCAE Policy Handler. - -**Base Policy Type definition for onap.policies.Monitoring**  - -.. codeblock:: yaml - - tosca_definitions_version: tosca_simple_yaml_1_0_0 - topology_template: - policy_types: - - onap.policies.Monitoring: - derived_from: tosca.policies.Root - version: 1.0.0 - description: a base policy type for all policies that govern monitoring provision - -The \ *PolicyTypeImpl* implementation of the *onap.policies.Montoring* -Policy Type is generic to support definition of TOSCA *PolicyType* -artifacts in the Policy Framework using the Policy Type Design API. -Therefore many TOSCA *PolicyType* artifacts will use the same -*PolicyTypeImpl* implementation with different property types and -towards different targets. This allows dynamically generated DCAE -microservice component Policy Types to be created at Design Time. - -DCAE microservice components can generate their own TOSCA \ *PolicyType* -using TOSCA-Lab Control Loop guard policies in SDC (Stretch Goal) or can -do so manually. See `How to generate artefacts for SDC catalog using -Tosca Lab -Tool <file://localhost/display/DW/How+to+generate+artefacts+for+SDC+catalog+using+Tosca+Lab+Tool>`__ -for details on TOSCA-LAB in SDC. For Dublin, the DCAE team is defining -the manual steps required to build policy models \ `Onboarding steps for -DCAE MS through SDC/Policy/CLAMP -(Dublin) <file://localhost/pages/viewpage.action%3fpageId=60883710>`__. - -NOTE: For Dublin, mS Policy Types will be pre-loaded into the SDC -platform and be available as a Normative. The policy framework will -pre-load support for those mS Monitoring policy types. - -**PolicyType onap.policies.monitoring.MyDCAEComponent derived from -onap.policies.Monitoring**  Expand source - -tosca_definitions_version: tosca_simple_yaml_1_0_0 - -policy_types: - -- onap.policies.Monitoring: - -derived_from: tosca.policies.Root - -version: 1.0.0 - -description: a base policy type for all policies that govern monitoring -provision - -- onap.policies.monitoring.MyDCAEComponent: - -derived_from: onap.policies.Monitoring - -version: 1.0.0 - -properties: - -mydcaecomponent_policy: - -type: map - -description: The Policy Body I need - -entry_schema: - -type: onap.datatypes.monitoring.mydatatype - -data_types: - -- onap.datatypes.monitoring.MyDataType: - -derived_from: tosca.datatypes.Root - -properties: - -my_property_1: - -type: string - -description: A description of this property - -constraints: - -- valid_values: - -- value example 1 - -- value example 2 - -TCA Example - Please note that the official version of this will be -located in the SDC repository. - -**Example TCA DCAE microservice**  Expand source - -tosca_definitions_version: tosca_simple_yaml_1_0_0 - -policy_types: - -onap.policies.Monitoring: - -derived_from: tosca.policies.Root - -description: a base policy type for all policies that governs monitoring -provisioning - -onap.policy.monitoring.cdap.tca.hi.lo.app: - -derived_from: onap.policies.Monitoring - -version: 1.0.0 - -properties: - -tca_policy: - -type: map - -description: TCA Policy JSON - -entry_schema: - -type: onap.datatypes.monitoring.tca_policy - -data_types: - -onap.datatypes.monitoring.metricsPerEventName: - -derived_from: tosca.datatypes.Root - -properties: - -controlLoopSchemaType: - -type: string - -required: true - -description: Specifies Control Loop Schema Type for the event Name e.g. -VNF, VM - -constraints: - -- valid_values: - -- VM - -- VNF - -eventName: - -type: string - -required: true - -description: Event name to which thresholds need to be applied - -policyName: - -type: string - -required: true - -description: TCA Policy Scope Name - -policyScope: - -type: string - -required: true - -description: TCA Policy Scope - -policyVersion: - -type: string - -required: true - -description: TCA Policy Scope Version - -thresholds: - -type: list - -required: true - -description: Thresholds associated with eventName - -entry_schema: - -type: onap.datatypes.monitoring.thresholds - -onap.datatypes.monitoring.tca_policy: - -derived_from: tosca.datatypes.Root - -properties: - -domain: - -type: string - -required: true - -description: Domain name to which TCA needs to be applied - -default: measurementsForVfScaling - -constraints: - -- equal: measurementsForVfScaling - -metricsPerEventName: - -type: list - -required: true - -description: Contains eventName and threshold details that need to be -applied to given eventName - -entry_schema: - -type: onap.datatypes.monitoring.metricsPerEventName - -onap.datatypes.monitoring.thresholds: - -derived_from: tosca.datatypes.Root - -properties: - -closedLoopControlName: - -type: string - -required: true - -description: Closed Loop Control Name associated with the threshold - -closedLoopEventStatus: - -type: string - -required: true - -description: Closed Loop Event Status of the threshold - -constraints: - -- valid_values: - -- ONSET - -- ABATED - -direction: - -type: string - -required: true - -description: Direction of the threshold - -constraints: - -- valid_values: - -- LESS - -- LESS_OR_EQUAL - -- GREATER - -- GREATER_OR_EQUAL - -- EQUAL - -fieldPath: - -type: string - -required: true - -description: Json field Path as per CEF message which needs to be -analyzed for TCA - -constraints: - -- valid_values: - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated - -- -$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated - -- $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle - -- -$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt - -- $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice - -- -$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq - -- $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal - -- $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem - -- $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait - -- $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage - -- $.event.measurementsForVfScalingFields.meanRequestLatency - -- -$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered - -- -$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached - -- -$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured - -- $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree - -- $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed - -- -$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value - -severity: - -type: string - -required: true - -description: Threshold Event Severity - -constraints: - -- valid_values: - -- CRITICAL - -- MAJOR - -- MINOR - -- WARNING - -- NORMAL - -thresholdValue: - -type: integer - -required: true - -description: Threshold value for the field Path inside CEF message - -version: - -type: string - -required: true - -description: Version number associated with the threshold - -1.2 onap.policies.controlloop.Operational Policy Type ------------------------------------------------------ - -This policy type is used to support actor/action operational policies -for control loops. There are two types of implementations for this -policy type - -1. Existing Drools implementations that supports runtime Control Loop - actions taken on components such as SO/APPC/VFC/SDNC/SDNR - -2. New implementations using APEX to support Control Loops. - -For Dublin, this policy type will ONLY be used for the Policy Framework -to distinguish the policy type as operational. The contents are still -TBD for El Alto. - -**Base Policy type definition for -onap.policies.controlloop.Operational**  Expand source - -tosca_definitions_version: tosca_simple_yaml_1_0_0 - -policy_types: - -onap.policies.controlloop.Operational: - -derived_from: tosca.policies.Root - -version: 1.0.0 - -description: Operational Policy for Control Loops - -Applications should use the following Content-Type when creating -onap.policies.controlloop.Operational policies: - -Content-Type: "application/yaml; vnd.onap.operational" - -1.2.1 Operational Policy Type Schema for Drools -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -For Dublin Drools will still support the Casablanca YAML definition of -an Operational Policy for Control Loops. - -Please use the Casablanca version of the YAML Operational Policy format -defined \ https://git.onap.org/policy/drools-applications/tree/controlloop/common/policy-yaml/README-v2.0.0.md. - -1.2.3 Operational Policy Type Schema for APEX (El Alto proposal) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The operational Policy Type schema for for APEX will extend the base -operational Policy Type schema. This Policy Type allows parameters -specific to the APEX PDP to be specified as a TOSCA policy. - -**Operational Policy Model Parameter Schema for APEX**  Expand source - -tosca_definitions_version: tosca_simple_yaml_1_0_0 - -# Note: The full APEX PolicyType definition will be developed during the -Dublin - -# timeframe of the ONAP project - -policy_types: - -onap.policies.controlloop.Operational: - -derived_from: tosca.policies.Root - -version: 1.0.0 - -description: Operational Policy for Control Loops - - onap.policies.controloop.operational.Apex: - -derived_from: onap.policies.controlloop.Operational - -version: 1.0.0 - -description: Operational Policy for Control Loops using the APEX PDP - - properties: - -# Some of these properties may be redundant in a Kubernetes deployment - -engine_service: - -type: onap.datatypes.policies.controlloop.operational.apex.EngineService - -description: APEX Engine Service Parameters - -inputs: - -type: map - -description: Inputs for handling events coming into the APEX engine - -entry_schema: - -type: onap.datatypes.policies.controlloop.operational.apex.EventHandler - -outputs: - -type: map - -description: Outputs for handling events going out of the APEX engine - -entry_schema: - -type: onap.datatypes.policies.controlloop.operational.apex.EventHandler - -environment: - -type: list - -description: Envioronmental parameters for the APEX engine - -entry_schema: - -type: onap.datatypes.policies.controlloop.operational.apex.Environment - -data_types: - -onap.datatypes.policies.controlloop.operational.apex.EngineService: - -derived_from: tosca.datatypes.Root - -properties: - -name: - -type: string - -description: Specifies the engine name - -required: false - -default: "ApexEngineService" - -version: - -type: string - -description: Specifies the engine version in double dotted format - -required: false - -default: "1.0.0" - -id: - -type: int - -description: Specifies the engine id - -required: true - -instance_count: - -type: int - -description: Specifies the number of engine threads that should be run - -required: true - -deployment_port: - -type: int - -description: Specifies the port to connect to for engine administration - -required: false - -default: 1 - -policy_model_file_name: - -type: string - -description: The name of the file from which to read the APEX policy -model - -required: false - -default: "" - - policy_type_impl: - -type: string - -description: The policy type implementation from which to read the APEX -policy model - -required: false - -default: "" - -periodic_event_period: - -type: string - -description: The time interval in milliseconds for the periodic scanning - -event, 0 means "don't scan" - -required: false - -default: 0 - -engine: - -type: -onap.datatypes.policies.controlloop.operational.apex.engineservice.Engine - -description: The parameters for all engines in the APEX engine service - -required: true - -onap.datatypes.policies.controlloop.operational.apex.EventHandler: - -derived_from: tosca.datatypes.Root - -properties: - -name: - -type: string - -description: Specifies the event handler name, if not specified this is -set to - -the key name - - required: false - -carrier_technology: - -type: -onap.datatypes.policies.controlloop.operational.apex.CarrierTechnology - -description: Specifies the carrier technology of the event handler (such - -as REST/Web Socket/Kafka) - -required: true - -event_protocol: - -type: onap.datatypes.policies.controlloop.operational.apex.EventProtocol - -description: Specifies the event protocol of events for the event -handler - -(such as Yaml/JSON/XML/POJO) - -required: true - -event_name: - -type: string - -description: Specifies the event name for events on this event handler, -if - -not specified, the event name is read from or written to the event being - -received or sent - -required: false - -event_name_filter: - -type: string - -description: Specifies a filter as a regular expression, events that do - -not match the filter are dropped, the default is to let all events - -through - -required: false - -synchronous_mode: - -type: bool - -description: Specifies the event handler is syncronous (receive event -and - -send response) - -required: false - -default: false - -synchronous_peer: - -type: string - -description: The peer event handler (output for input or input for -output) - -of this event handler in synchronous mode, this parameter is mandatory -if - -the event handler is in synchronous mode - -required: false - -default: "" - -synchronous_timeout: - -type: int - -description: The timeout in milliseconds for responses to be issued by - -APEX torequests, this parameter is mandatory if the event handler is in - -synchronous mode - -required: false - -default: "" - -requestor_mode: - -type: bool - -description: Specifies the event handler is in requestor mode (send -event - -and wait for response mode) - -required: false - -default: false - -requestor_peer: - -type: string - -description: The peer event handler (output for input or input for -output) - -of this event handler in requestor mode, this parameter is mandatory if - -the event handler is in requestor mode - -required: false - -default: "" - -requestor_timeout: - -type: int - -description: The timeout in milliseconds for wait for responses to - -requests, this parameter is mandatory if the event handler is in - -requestor mode - -required: false - -default: "" - -onap.datatypes.policies.controlloop.operational.apex.CarrierTechnology: - -derived_from: tosca.datatypes.Root - -properties: - -label: - -type: string - -description: The label (name) of the carrier technology (such as REST, - -Kafka, WebSocket) - -required: true - -plugin_parameter_class_name: - -type: string - -description: The class name of the class that overrides default handling - -of event input or output for this carrier technology, defaults to the -supplied - -input or output class - -required: false - -onap.datatypes.policies.controlloop.operational.apex.EventProtocol: - -derived_from: tosca.datatypes.Root - -properties: - -label: - -type: string - -description: The label (name) of the event protocol (such as Yaml, - -JSON, XML, or POJO) - -required: true - -event_protocol_plugin_class: - -type: string - -description: The class name of the class that overrides default handling - -of the event protocol for this carrier technology, defaults to the - -supplied event protocol class - -required: false - -onap.datatypes.policies.controlloop.operational.apex.Environmental: - -derived_from: tosca.datatypes.Root - -properties: - -name: - -type: string - -description: The name of the environment variable - -required: true - -value: - -type: string - -description: The value of the environment variable - -required: true - -onap.datatypes.policies.controlloop.operational.apex.engineservice.Engine: - -derived_from: tosca.datatypes.Root - -properties: - -context: - -type: -onap.datatypes.policies.controlloop.operational.apex.engineservice.engine.Context - -description: The properties for handling context in APEX engines, - -defaults to using Java maps for context - -required: false - -executors: - -type: map - -description: The plugins for policy executors used in engines such as - -javascript, MVEL, Jython - -required: true - -entry_schema: - -description: The plugin class path for this policy executor - -type: string - -onap.datatypes.policies.controlloop.operational.apex.engineservice.engine.Context: - -derived_from: tosca.datatypes.Root - -properties: - -distributor: - -type: onap.datatypes.policies.controlloop.operational.apex.Plugin - -description: The plugin to be used for distributing context between - -APEX PDPs at runtime - -required: false - -schemas: - -type: map - -description: The plugins for context schemas available in APEX PDPs - -such as Java and Avro - -required: false - -entry_schema: - -type: onap.datatypes.policies.controlloop.operational.apex.Plugin - -locking: - -type: onap.datatypes.policies.controlloop.operational.apex.plugin - -description: The plugin to be used for locking context in and - -between APEX PDPs at runtime - -required: false - -persistence: - -type: onap.datatypes.policies.controlloop.operational.apex.Plugin - -description: The plugin to be used for persisting context for APEX PDPs - -at runtime - -required: false - -onap.datatypes.policies.controlloop.operational.apex.Plugin: - -derived_from: tosca.datatypes.Root - -properties: - -name: - -type: string - -description: The name of the executor such as Javascript, Jython or MVEL - -required: true - -plugin_class_name: - -type: string - -description: The class path of the plugin class for this executor - -1.3 onap.policies.controlloop.Guard Policy Type ------------------------------------------------ - -This policy type is the the type definition for Control Loop guard -policies for frequency limiting, blacklisting and min/max guards to help -protect runtime Control Loop Actions from doing harm to the network. -This policy type is developed using the XACML PDP to support -question/answer Policy Decisions during runtime for the Drools and APEX -onap.controlloop.Operational policy type implementations. - -The base schema is defined as below: - -**Base Policy type definition for onap.policies.controlloop.Guard** - Expand source - -tosca_definitions_version: tosca_simple_yaml_1_0_0 - -policy_types: - -- onap.policies.controlloop.Guard: - -derived_from: tosca.policies.Root - -version: 1.0.0 - -description: Guard Policies for Control Loop Operational Policies - -As with *onap.policies.Monitoring* policy type, the *PolicyTypeImpl* -implementation of the *onap.policies.controlloop.Guard* Policy Type is -generic to support definition of TOSCA *PolicyType* artifacts in the -Policy Framework using the Policy Type Design API. - -For Dublin, only the following derived Policy Type definitions below are -preloaded in the Policy Framework. However, the creation of policies -will still support the payload from Casablanca. - -**Casablanca Guard Payload**  Expand source - -ContentType: "application/json; vnd.onap.guard" - -Accepts: "application/json" - -# - -# Request BODY - -# - -{ - -"policy-id" : "guard.frequency.scaleout", - -"contents" : { - -"actor": "SO", - -"recipe": "scaleOut", - -"targets": ".*", - -"clname": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3", - -"limit": "1", - -"timeWindow": "10", - -"timeUnits": "minute", - -"guardActiveStart": "00:00:01-05:00", - -"guardActiveEnd": "23:59:59-05:00" - -} - -} - -# - -# Request RESPONSE - -# - -{ - -"guard.frequency.scaleout": { - -"type": "onap.policies.controlloop.guard.FrequencyLimiter", - -"version": "1.0.0", - -"metadata": { - -"policy-id": "guard.frequency.scaleout", - -"policy-version": 1 - -} - -} - -} - -1.3.1 onap.policies.controlloop.guard.FrequencyLimiter Policy Type -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -This is WIP for El Alto for the proposed policy type. - -**Policy Typefor Frequency Limiter Guard Policy**  Expand source - -tosca_definitions_version: tosca_simple_yaml_1_0_0 - -policy_types: - -- onap.policies.controlloop.Guard: - -derived_from: tosca.policies.Root - -version: 1.0.0 - -description: Guard Policies for Control Loop Operational Policies - -- onap.policies.controlloop.guard.FrequencyLimiter: - -derived_from: onap.policies.controlloop.Guard - -version: 1.0.0 - -description: Supports limiting the frequency of actions being taken by a -Actor. - -properties: - -frequency_policy: - -type: map - -description: - -entry_schema: - -type: onap.datatypes.guard.FrequencyLimiter - -data_types: - -- onap.datatypes.guard.FrequencyLimiter: - -derived_from: tosca.datatypes.Root - -properties: - -actor: - -type: string - -description: Specifies the Actor - -required: true - -recipe: - -type: string - -description: Specified the Recipe - -required: true - -time_window: - -type: scalar-unit.time - -description: The time window to count the actions against. - -required: true - -limit: - -type: integer - -description: The limit - -required: true - -constraints: - -- greater_than: 0 - -time_range: - -type: tosca.datatypes.TimeInterval - -description: An optional range of time during the day the frequency is -valid for. - -required: false - -controlLoopName: - -type: string - -description: An optional specific control loop to apply this guard to. - -required: false - -target: - -type: string - -description: An optional specific VNF to apply this guard to. - -required: false - -1.3.2 onap.policies.controlloop.guard.Blacklist Policy Type -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -**Policy Type for Blacklist Guard Policies**  Expand source - -tosca_definitions_version: tosca_simple_yaml_1_0_0 - -policy_types: - -- onap.policies.controlloop.Guard: - -derived_from: tosca.policies.Root - -version: 1.0.0 - -description: Guard Policies for Control Loop Operational Policies - -- onap.policies.controlloop.guard.Blacklist: - -derived_from: onap.policies.controlloop.Guard - -version: 1.0.0 - -description: Supports blacklist of VNF's from performing control loop -actions on. - -properties: - -blacklist_policy: - -type: map - -description: - -entry_schema: - -type: onap.datatypes.guard.Blacklist - -data_types: - -- onap.datatypes.guard.Blacklist: - -derived_from: tosca.datatypes.Root - -properties: - -actor: - -type: string - -description: Specifies the Actor - -required: true - -recipe: - -type: string - -description: Specified the Recipe - -required: true - -time_range: - -type: tosca.datatypes.TimeInterval - -description: An optional range of time during the day the blacklist is -valid for. - -required: false - -controlLoopName: - -type: string - -description: An optional specific control loop to apply this guard to. - -required: false - -blacklist: - -type: list - -description: List of VNF's - -required: true - -1.3.3 onap.policies.controlloop.guard.MinMax Policy Type -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -**Policy Type for Min/Max VF Module Policies**  Expand source - -policy_types: - -- onap.policies.controlloop.Guard: - -derived_from: tosca.policies.Root - -version: 1.0.0 - -description: Guard Policies for Control Loop Operational Policies - -- onap.policies.controlloop.guard.MinMax: - -derived_from: onap.policies.controlloop.Guard - -version: 1.0.0 - -description: Supports Min/Max number of VF Modules - -properties: - -minmax_policy: - -type: map - -description: - -entry_schema: - -type: onap.datatypes.guard.MinMax - -data_types: - -- onap.datatypes.guard.MinMax: - -derived_from: tosca.datatypes.Root - -properties: - -actor: - -type: string - -description: Specifies the Actor - -required: true - -recipe: - -type: string - -description: Specified the Recipe - -required: true - -time_range: - -type: tosca.datatypes.TimeInterval - -description: An optional range of time during the day the Min/Max limit -is valid for. - -required: false - -controlLoopName: - -type: string - -description: An optional specific control loop to apply this guard to. - -required: false - -min_vf_module_instances: - -type: integer - -required: true - -description: The minimum instances of this VF-Module - -max_vf_module_instances: - -type: integer - -required: false - -description: The maximum instances of this VF-Module - -1.3.4 onap.policies.controlloop.Coordination Policy Type (STRETCH) ------------------------------------------------------------------- - -This policy type defines Control Loop Coordination policies to assist in -coordinating multiple control loops during runtime. This policy type is -developed using XACML PDP to support question/answer policy decisions at -runtime for the onap.policies.controlloop.operational policy types. - -2 PDP Deployment and Registration with PAP -========================================== - -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*. - -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 policy. The PAP manages the life cycle of policies -running on PDPs. - -The table below shows the methods in which *PolicyImpl* entities can be -deployed to PDP Subgroups - -=============== ================================================================================================================================================================================================================================================================================== ================================================================================================================================================================================ ======================================================================================================================================================================================================================== -**Method** **Description** **Advantages** **Disadvantages** -=============== ================================================================================================================================================================================================================================================================================== ================================================================================================================================================================================ ======================================================================================================================================================================================================================== -Cold Deployment The *PolicyImpl (PolicyTypeImpl* and TOSCA *Policy)* are predeployed on the PDP. The PDP is fully configured and ready to execute when started. No run time configuration required and run time administration is simple. Very restrictive, no run time configuration of PDPs is possible. - - PDPs register with the PAP when they start, providing the *PolicyImpl* they have been predeployed with. -Warm Deployment The *PolicyTypeImpl* entity is predeployed on the PDP. A TOSCA *Policy* may be loaded at startup. The PDP may be configured or reconfigured with a new or updated TOSCA *Policy* at run time. The configuration, parameters, and PDP group of PDPs may be changed at run time by loading or updating a TOSCA *Policy* into the PDP. Administration and management is required. The configuration and life cycle of the TOSCA policies can change at run time and must be administered and managed. - - PDPs register with the PAP when they start, providing the *PolicyImpl* they have been predeployed with if any. The PAP may update the TOSCA *Policy* on a PDP at any time after registration. Lifecycle management of TOSCA *Policy* entities is supported, allowing features such as *PolicyImpl* Safe Mode and \ *Policy*\ Impl retirement. -Hot Deployment The *PolicyImpl (PolicyTypeImpl* and TOSCA *Policy)* are deployed at run time. The *PolicyImpl (PolicyTypeImpl* and TOSCA *Policy)* may be loaded at startup. The PDP may be configured or reconfigured with a new or updated *PolicyTypeImpl* and/or TOSCA *Policy* at run time. The policy logic, rules, configuration, parameters, and PDP group of PDPs may be changed at run time by loading or updating a TOSCA *Policy* and *PolicyTypeImpl* into the PDP. Administration and management is more complex. The *PolicyImpl* itself and its configuration and life cycle as well as the life cycle of the TOSCA policies can change at run time and must be administered and managed. - - PDPs register with the PAP when they start, providing the *PolicyImpl* they have been predeployed with if any. The PAP may update the TOSCA *Policy* and *PolicyTypeImpl* on a PDP at any time after registration. Lifecycle management of TOSCA *Policy* entities and *PolicyTypeImpl* entites is supported, allowing features such as *PolicyImpl* Safe Mode and \ *Policy*\ Impl retirement. -=============== ================================================================================================================================================================================================================================================================================== ================================================================================================================================================================================ ======================================================================================================================================================================================================================== - -3. Public APIs -============== - -The Policy Framework supports the APIs documented in the subsections -below. The APIs in this section are supported for use by external -components. - -3.1 Policy Type Design API for TOSCA Policy Types -------------------------------------------------- - -The purpose of this API is to support CRUD of TOSCA *PolicyType* -entities. This API is provided by the *PolicyDevelopment* component of -the Policy Framework, see `The ONAP Policy -Framework <file://localhost/display/DW/The+ONAP+Policy+Framework>`__ -architecture. - -The API allows applications to create, update, delete, and query -*PolicyType* entities so that they become available for use in ONAP by -applications such as CLAMP\ *.* Some Policy Type entities are preloaded -in the Policy Framework. The TOSCA fields below are valid on API calls: - -============ ======= ======== ========== =============================================================================================================================== -**Field** **GET** **POST** **DELETE** **Comment** -============ ======= ======== ========== =============================================================================================================================== -(name) M M M The definition of the reference to the Policy Type, GET allows ranges to be specified -version O M C GET allows ranges to be specified, must be specified if more than one version of the Policy Type exists -description R O N/A Desciption of the Policy Type -derived_from R C N/A Must be specified when a Policy Type is derived from another Policy Type such as in the case of derived Monitoring Policy Types -metadata R O N/A Metadata for the Policy Type -properties R M N/A This field holds the specification of the specific Policy Type in ONAP -targets R O N/A A list of node types and/or group types to which the Policy Type can be applied -triggers R O N/A Specification of policy triggers, not currently supported in ONAP -============ ======= ======== ========== =============================================================================================================================== - -| Note: On this and subsequent tables, use the following legend: - M-Mandatory, O-Optional, R-Read-only, C-Conditional. Conditional means - the field is mandatory when some other field is present. -| Note: Preloaded policy types may only be queried over this API, - modification or deletion of preloaded policy type implementations is - disabled. -| Note: Policy types that are in use (referenced by defined Policies) - may not be deleted -| Note: The group types of targets in TOSCA are groups of TOSCA nodes, - not PDP groups; the *target* concept in TOSCA is equivalent to the - Policy Enforcement Point (PEP) concept - -3.1.1 Policy Type query -~~~~~~~~~~~~~~~~~~~~~~~ - -The API allows applications (such as CLAMP and Integration) to query -the \ *PolicyType* entities that are available for \ *Policy* creation -using a GET operation. - -*https:{url}:{port}/policy/api/v1/policytypes GET* - -**Policy Type Query - When system comes up before any mS are onboarded** - Expand source - -policy_types: - -- onap.policies.Monitoring: - -version: 1.0.0 - -description: A base policy type for all policies that govern monitoring -provision - -derived_from: tosca.policies.Root - -properties: - -# Omitted for brevity, see Section 1 - - - onap.policies.controlloop.Operational: - -version: 1.0.0 - - description: Operational Policy for Control Loops - -derived_from: tosca.policies.Root - -properties: - -# Omitted for brevity, see Section 1 - -- onap.policies.controloop.operational.Drools: - -version: 1.0.0 - -description: Operational Policy for Control Loops using the Drools PDP - -derived_from: onap.policies.controlloop.Operational - -properties: - -# Omitted for brevity, see Section 1 - -- onap.policies.controloop.operational.Apex: - -version: 1.0.0 - -description: Operational Policy for Control Loops using the APEX PDP - -derived_from: onap.policies.controlloop.Operational - -properties: - -# Omitted for brevity, see Section 1 - - - onap.policies.controlloop.Guard: - -version: 1.0.0 - -description: Operational Policy for Control Loops - -derived_from: tosca.policies.Root - -properties: - -# Omitted for brevity, see Section 1 - -- onap.policies.controlloop.guard.FrequencyLimiter: - -version: 1.0.0 - - description: Supports limiting the frequency of actions being taken by -a Actor. - -derived_from: onap.policies.controlloop.Guard - -properties: - -# Omitted for brevity, see Section 1 - -- onap.policies.controlloop.guard.Blacklist: - -version: 1.0.0 - -description: Supports blacklist of VNF's from performing control loop -actions on. - -derived_from: onap.policies.controlloop.Guard - -properties: - -# Omitted for brevity, see Section 1 - -- onap.policies.controlloop.guard.MinMax: - -version: 1.0.0 - -description: Supports Min/Max number of VF Modules - -derived_from: onap.policies.controlloop.Guard - -properties: - -# Omitted for brevity, see Section 1 - -- onap.policies.controlloop.coordination.TBD: (STRETCH GOALS) - -version: 1.0.0 - -description: Control Loop Coordination policy types - -derived_from: onap.policies.controlloop.Coordination - -properties: - -# Omitted for brevity, see Section 1 - -data_types: - -# Any bespoke data types referenced by policy type definitions - -The table below shows some more examples of GET operations - -======================================================================================================== ================================================================ -**Example** **Description** -======================================================================================================== ================================================================ -*https:{url}:{port}/policy/api/v1/policytypes* Get all Policy Type entities in the system -*https:{url}:{port}/policy/api/v1/policytypes/{policy type id}* Get a specific policy type and all the available versions. - -*eg. -https:{url}:{port}/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app* -*https:{url}:{port}/policy/api/v1/policytypes/{policy type id}/versions/{version id}* Get the specific Policy Type with the specified name and version - -*eg. -https:{url}:{port}/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0* -======================================================================================================== ================================================================ - -3.1.2 Policy Type Create/Update -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The API allows applications and users (such as a DCAE microservice -component developer) to create or update a Policy Type using a POST -operation. This API allows new Policy Types to be created or existing -Policy Types to be modified. POST operations with a new Policy Type name -or a new version of an existing Policy Type name are used to create a -new Policy Type. POST operations with an existing Policy Type name and -version are used to update an existing Policy Type. Many Policy Types -can be created or updated in a single POST operation by specifying more -than one Policy Type on the TOSCA *policy_types* list. - -For example, the POST operation below with the TOSCA body below is used -to create a new Policy type for a DCAE microservice. - -*https:{url}:{port}/policy/api/v1/policytypes POST* - -**Create a new Policy Type for a DCAE microservice**  Expand source - -policy_types: - -- onap.policies.monitoring.cdap.tca.hi.lo.app: - -version: 1.0.0 - - derived_from: onap.policies.Monitoring - -description: A DCAE TCA high/low policy type - -properties: - -tca_policy: - -type: map - -description: TCA Policy JSON - -default:'{<JSON omitted for brevity>}' - -entry_schema: - -type: onap.datatypes.monitoring.tca_policy - -data_types: - -<omitted for brevity> - -Following creation of a DCAE TCA policy type operation, the GET call for -Monitoring policies will list the new policy type. - -*https:{url}:{port}/policy/api/v1/policytypes GET* - -**Policy Type Query after DCAE TCA mS Policy Type is created**  Expand -source - -policy_types: - -- onap.policies.Monitoring: - -version: 1.0.0 - -derived_from: tosca.policies.Root - -description: A base policy type for all policies that govern monitoring -provision - -- onap.policies.monitoring.cdap.tca.hi.lo.app: - -version: 1.0.0 - - derived_from: onap.policies.Monitoring - -description: A DCAE TCA high/low policy type - -- onap.policies.controlloop.Operational: - -version: 1.0.0 - -description: Operational Policy for Control Loops - -derived_from: tosca.policies.Root - -- onap.policies.controloop.operational.Drools: - -version: 1.0.0 - -description: Operational Policy for Control Loops using the Drools PDP - -derived_from: onap.policies.controlloop.Operational - -- onap.policies.controloop.operational.Apex: - -version: 1.0.0 - -description: Operational Policy for Control Loops using the APEX PDP - -derived_from: onap.policies.controlloop.Operational - -- onap.policies.controlloop.Guard: - -version: 1.0.0 - -description: Operational Policy for Control Loops - -derived_from: tosca.policies.Root - -- onap.policies.controlloop.guard.FrequencyLimiter: - -version: 1.0.0 - -description: Supports limiting the frequency of actions being taken by a -Actor. - -derived_from: onap.policies.controlloop.Guard - -- onap.policies.controlloop.guard.Blacklist: - -version: 1.0.0 - -description: Supports blacklist of VNF's from performing control loop -actions on. - -derived_from: onap.policies.controlloop.Guard - -- onap.policies.controlloop.guard.MinMax: - -version: 1.0.0 - -description: Supports Min/Max number of VF Modules - -derived_from: onap.policies.controlloop.Guard - -- onap.policies.controlloop.coordination.TBD: (STRETCH GOALS) - -version: 1.0.0 - -description: Control Loop Coordination policy types - -derived_from: onap.policies.controlloop.Coordination - -Now the \ *onap.policies.Monitoring.cdap.tca.hi.lo.app* Policy Type is -available to CLAMP for creating concrete policies. See the Yaml -contribution on the \ `Model driven Control Loop -Design <file://localhost/display/DW/Model+driven+Control+Loop+Design>`__ page -for a full listing of the DCAE TCA policy type used in the example -above. - -3.1.3 Policy Type Delete -~~~~~~~~~~~~~~~~~~~~~~~~ - -The API also allows Policy Types to be deleted with a DELETE operation. -The format of the delete operation is as below: - -*https:{url}:{port}/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0 -DELETE* - -| Note: Predefined policy types cannot be deleted -| Note: Policy types that are in use (Parameterized by a TOSCA Policy) - may not be deleted, the parameterizing TOSCA policies must be deleted - first -| Note: The *version* parameter may be omitted on the DELETE operation - if there is only one version of the policy type in the system - -3.2 Policy Design API ---------------------- - -The purpose of this API is to support CRUD of TOSCA *Policy* entities -from TOSCA compliant *PolicyType* definitions. TOSCA *Policy* entities -become the parameters for \ *PolicyTypeImpl* entities, producing -*PolicyImpl* entities that can run on PDPs. This API is provided by the -*PolicyDevelopment* component of the Policy Framework, see `The ONAP -Policy -Framework <file://localhost/display/DW/The+ONAP+Policy+Framework>`__ -architecture. - -This API allows applications (such as CLAMP and Integration) to create, -update, delete, and query *Policy* entities\ *.* The TOSCA fields below -are valid on API calls: - -=========== ======= ======== ========== ================================================================================ -**Field** **GET** **POST** **DELETE** **Comment** -=========== ======= ======== ========== ================================================================================ -(name) M M M The definition of the reference to the Policy, GET allows ranges to be specified -type O M O The Policy Type of the policy, see section 3.1 -description R O O -metadata R O N/A -properties R M N/A This field holds the specification of the specific Policy in ONAP -targets R O N/A A list of nodes and/or groups to which the Policy can be applied -=========== ======= ======== ========== ================================================================================ - -| Note: Policies that are deployed (used on deployed *PolicyImpl* - entities) may not be deleted -| Note: This API is NOT used by DCAE for a decision on what policy the - DCAE PolicyHandler should retrieve and enforce -| Note: The groups of targets in TOSCA are groups of TOSCA nodes, not - PDP groups; the *target* concept in TOSCA is equivalent to the Policy - Enforcement Point (PEP) concept - -YAML is used for illustrative purposes in the examples in this section. -JSON (application/json) will be used as the content type in the -implementation of this API. - -3.2.1 Policy query -~~~~~~~~~~~~~~~~~~ - -The API allows applications (such as CLAMP and Integration) to query -the \ *Policy* entities that are available for deployment using a GET -operation. - -Note: This operation simply returns TOSCA policies that are defined in -the Policy Framework, it does NOT make a decision. - -The table below shows some more examples of GET operations - -==================================================================================================================================================================================================== =================================================================================== -**Example** **Description** -==================================================================================================================================================================================================== =================================================================================== -*https:{url}:{port}/policy/api/v1/policytypes/{policy type id}/versions/{versions}/policies* Get all Policies for a specific Policy Type and version - -*eg. -https:{url}:{port}/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies* -*https://{url}:{port}/policy/api/v1/policytypes/{policy type id}/versions/{version}/policies/{policy name}/versions/{version}* Gets a specific Policy version - -*eg. -https:{url}:{port}/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.scaleout.tca/versions/1.0.0 GET* -*https:{url}:{port}/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.scaleout.tca/versions/latest GET* Returns the latest version of a Policy -*https:{url}:{port}/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.scaleout.tca/deployed GET* Returns the version of the Policy that has been deployed on one or more PDP groups. -*https://{url}:{port}/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.2.3/policies/CL-LBAL-LOW-TRAFFIC-SIG-FB480F95-A453-6F24-B767-FD703241AB1A/versions/1.0.2 GET* Returns a specific version of a monitoring policy -==================================================================================================================================================================================================== =================================================================================== - -3.2.2 Policy Create/Update -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The API allows applications and users (such as CLAMP and Integration) to -create or update a Policy using a POST operation. This API allows new -Policies to be created or existing Policies to be modified. POST -operations with a new Policy name are used to create a new Policy. POST -operations with an existing Policy name are used to update an existing -Policy. Many Policies can be created or updated in a single POST -operation by specifying more than one Policy on the TOSCA *policies* -list. - -3.2.2.1 Monitoring Policy Create/Update -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -While designing a control loop using CLAMP, a Control Loop Designer uses -the Policy Type for a specific DCAE mS component (See Section 3.1.1) to -create a specific Policy. CLAMP then uses this API operation to submit -the Policy to the Policy Framework. - -For example, the POST operation below with the TOSCA body below is used -to create a new scaleout Policy for -the \ *onap.policies.monitoring.cdap.tca.hi.lo.app* microservice. The -name of the policy "onap.scaleout.tca" is up to the user to determine -themselves. - -*https:{url}:{port}/policy/api/v1/policytypes/onap.policies.Monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies POST* - -**TOSCA Body of a new TCA High/Low Policy**  Expand source - -https:{url}:{port}/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies -POST - -Content-Type: application/yaml - -Accept: application/yaml - -#Request Body - -policies: - -- - -onap.scaleout.tca: - - type: onap.policies.monitoring.cdap.tca.hi.lo.app - -version: 1.0.0 - -metadata: - -policy-id: onap.scaleout.tca # SHOULD MATCH THE TOSCA policy-name field -above. DCAE needs this - convenience. - -description: The scaleout policy for vDNS # GOOD FOR CLAMP GUI - -properties: - -domain: measurementsForVfScaling - -metricsPerEventName: - -- - -eventName: vLoadBalancer - -controlLoopSchemaType: VNF - -policyScope: "type=configuration" - -policyName: "onap.scaleout.tca" - -policyVersion: "v0.0.1" - -thresholds: - -- closedLoopControlName: -"CL-LBAL-LOW-TRAFFIC-SIG-FB480F95-A453-6F24-B767-FD703241AB1A" - -closedLoopEventStatus: ONSET - -version: "1.0.2" - -fieldPath: -"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated" - -thresholdValue: 500 - -direction: LESS_OR_EQUAL - -severity: MAJOR - -- - -closedLoopControlName: -"CL-LBAL-LOW-TRAFFIC-SIG-0C5920A6-B564-8035-C878-0E814352BC2B" - -closedLoopEventStatus: ONSET - -version: "1.0.2" - -fieldPath: -"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated" - -thresholdValue: 5000 - -direction: GREATER_OR_EQUAL - -severity: CRITICAL - -#Response Body - -policies: - -- onap.scaleout.tca: - -type: onap.policies.monitoring.cdap.tca.hi.lo.app - -version: 1.0.0 - -metadata: - -# - -# version is managed by Policy Lifecycle and returned - -# back to the caller. - -# - -policy-version: 1 - -# - -# These were passed in, and should not be changed. Will - -# be passed back. - -# - -policy-id: onap.scaleout.tca - -properties: - -domain: measurementsForVfScaling - -metricsPerEventName: - -- - -eventName: vLoadBalancer - -controlLoopSchemaType: VNF - -policyScope: "type=configuration" - -<OMITTED FOR BREVITY> - -Given a return code of success and a "metadata" section that indicates -versioning information. The "metadata" section conforms exactly to how -SDC implements lifecycle management versioning for first class -normatives in the TOSCA Models. The policy platform will implement -lifecycle identically to SDC to ensure conformity for policy creation. -The new metadata fields return versioning details. - -The following new policy will be listed and will have a "metadata" -section as shown below: - -*https:{url}:{port}/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies -GET* - -**Policy with Metadata section for lifecycle management**  Expand source - -policies: - -- onap.scaleout.tca: - -type: onap.policies.monitoring.cdap.tca.hi.lo.app - -version: 1.0.0 - -metadata: - -policy-id: onap.scaleout.tca - -policy-version: 1 - -- my.other.policy: - -type: onap.policies.monitoring.cdap.tca.hi.lo.app - -version: 1.0.0 - -metadata: - -invariantUUID: 20ad46cc-6b16-4404-9895-93d2baaa8d25 - -UUID: 4f715117-08b9-4221-9d63-f3fa86919742 - -version: 5 - -name: my.other.policy - -scope: foo=bar;field2=value2 - -description: The policy for some other use case - -- yet.another.policy: - -type: onap.policies.monitoring.cdap.tca.hi.lo.app - -version: 1.0.0 - -metadata: - -invariantUUID: 20ad46cc-6b16-4404-9895-93d2baaa8d25 - -UUID: 4f715117-08b9-4221-9d63-f3fa86919742 - -version: 3 - -name: yet.another.policy - -scope: foo=bar; - -description: The policy for yet another use case - -The contents of the new policy can be retrieved using the ID: - -*https:{url}:{port}/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.scaleout.tca -GET* - -**Query on a new TCA High/Low Policy**  Expand source - -policies: - -- - -onap.scaleout.tca: - -type: onap.policies.monitoring.cdap.tca.hi.lo.app - -version: 1.0.0 - -metadata: - -invariantUUID: 20ad46cc-6b16-4404-9895-93d2baaa8d25 - -UUID: 4f715117-08b9-4221-9d63-f3fa86919742 - -version: 1 - -name: onap.scaleout.tca - -scope: foo=bar; - -description: The scaleout policy for vDNS - -properties: - -domain: measurementsForVfScaling - -<OMMITTED FOR BREVITY> - -**3.2.2.2 Operational Policy Create/Update** - -While designing an operational policy, the designer uses the Policy Type -for the operational policy (See Section 3.1.1) to create a specific -Policy and submits the Policy to the Policy Framework. - -This URL will be fixed for CLAMP in Dublin and the payload will match -updated version of Casablanca YAML that supports VFModules. - -*https:{url}:{port}/policy/api/v1/policytypes/onap.policies.controloop.operational/versions/1.0.0/policies POST* - -*Content-Type: application/yaml; legacy-version* - -FUTURE: Content-Type: application/yaml; tosca - -NOTE: The controlLoopName will be assumed to be the policy-id - -**Create an Operational Policy**  Expand source - -tosca_definitions_version: tosca_simple_yaml_1_0_0 - -topology_template: - -policies: - -- - -operational.scaleout: - -type: onap.policies.controlloop.Operational - -version: 1.0.0 - -metadata: - -policy-id: operational.scaleout - -properties: - -controlLoop: - -version: 2.0.0 - -controlLoopName: ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3 - -trigger_policy: unique-policy-id-1-scale-up - -timeout: 1200 - -abatement: false - -policies: - -- id: unique-policy-id-1-scale-up - -name: Create a new VF Module - -description: - -actor: SO - -recipe: VF Module Create - -target: - -type: VNF - -payload: - -requestParameters: '{"usePreload":true,"userParams":[]}' - -configurationParameters: -'[{"ip-addr":"$.vf-module-topology.vf-module-parameters.param[9]","oam-ip-addr":"$.vf-module-topology.vf-module-parameters.param[16]","enabled":"$.vf-module-topology.vf-module-parameters.param[23]"}]' - -retry: 0 - -timeout: 1200 - -success: final_success - -failure: final_failure - -failure_timeout: final_failure_timeout - -failure_retries: final_failure_retries - -failure_exception: final_failure_exception - -failure_guard: final_failure_guard - -**Response from creating Operational Policy**  Expand source - -tosca_definitions_version: tosca_simple_yaml_1_0_0 - -topology_template: - -policies: - -- - -operational.scaleout: - -type: onap.policies.controlloop.Operational - -version: 1.0.0 - -metadata: - -policy-id: operational.scaleout - -policy-version: 1 - -properties: - -controlLoop: - -version: 2.0.0 - -controlLoopName: ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3 - -trigger_policy: unique-policy-id-1-scale-up - -timeout: 1200 - -abatement: false - -policies: - -- id: unique-policy-id-1-scale-up - -name: Create a new VF Module - -description: - -actor: SO - -recipe: VF Module Create - -target: - -type: VNF - -payload: - -requestParameters: '{"usePreload":true,"userParams":[]}' - -configurationParameters: -'[{"ip-addr":"$.vf-module-topology.vf-module-parameters.param[9]","oam-ip-addr":"$.vf-module-topology.vf-module-parameters.param[16]","enabled":"$.vf-module-topology.vf-module-parameters.param[23]"}]' - -retry: 0 - -timeout: 1200 - -success: final_success - -failure: final_failure - -failure_timeout: final_failure_timeout - -failure_retries: final_failure_retries - -failure_exception: final_failure_exception - -failure_guard: final_failure_guard - -3.2.2.2.1 Drools Operational Policy Create/Update -''''''''''''''''''''''''''''''''''''''''''''''''' - -TBD `Jorge Hernandez <file://localhost/display/~jhh>`__ - -3.2.2.2.2 APEX Operational Policy Create/Update -''''''''''''''''''''''''''''''''''''''''''''''' - -The POST operation below with the TOSCA body below is used to create a -new Sample Domain test polict for the APEX Sample Domain operational -policy type. - -*https:{url}:{port}/policy/api/v1/policytypes/onap.policies.controloop.operational.apex/versions/1.0.0/policies POST* - -**Create an APEX Policy for a Sample Domain**  Expand source - -policies: - -- onap.policy.operational.apex.sampledomain.Test: - -type: onap.policies.controloop.operational.Apex - -properties: - -engine_service: - -name: "MyApexEngine" - -version: "0.0.1" - -id: 45 - -instance_count: 4 - -deployment_port: 12561 - -policy_type_impl: -"onap.policies.controlloop.operational.apex.sampledomain.Impl" - -engine: - -executors: - -JAVASCRIPT: -"org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters" - -inputs: - -first_consumer: - -carrier_technology: - -label: "RESTCLIENT", - -plugin_parameter_class_name: -"org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters", - -parameters: - -url: "https://localhost:32801/EventGenerator/GetEvents" - -event_protocol: - -label: "JSON" - -outputs: - -first_producer: - -carrier_technology: - -label: "RESTCLIENT", - -plugin_parameter_class_name: -"org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters", - -parameters: - -url: "https://localhost:32801/EventGenerator/PostEvent" - -event_protocol: - -label: "JSON" - -3.2.2.3 Guard Policy Create/Update -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -TBD `Pamela Dragosh <file://localhost/display/~pdragosh>`__ Similar to -Operational Policies - -3.2.2.4 Policy Lifecycle API - Creating Coordination Policies -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -TBD Similar to Operational Policies, stretch for Dublin - -3.2.3 Policy Delete -~~~~~~~~~~~~~~~~~~~ - -The API also allows Policies to be deleted with a DELETE operation. The -format of the delete operation is as below: - -=========================================================================================================================================== ========================================================================================================================================= -**Example** **Description** -=========================================================================================================================================== ========================================================================================================================================= -*https:{url}:{port}/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.scaleout.tca DELETE* Deletes a Policy - all versions will be deleted. - - NOTE: The API call will fail if the policy has been deployed in one or more PDP Group. They must be undeployed first from all PDP Groups. -=========================================================================================================================================== ========================================================================================================================================= - -3.3 Policy Administration API ------------------------------ - -The purpose of this API is to support CRUD of PDP groups and subgroups -and to support the deployment and life cycles of *PolicyImpl* entities -(TOSCA *Policy* and *PolicyTypeImpl* entities) on PDP sub groups and -PDPs. See Section 2 for details on policy deployment on PDP groups and -subgroups. This API is provided by the *PolicyAdministration* component -(PAP) of the Policy Framework, see `The ONAP Policy -Framework <file://localhost/display/DW/The+ONAP+Policy+Framework>`__ -architecture. - -PDP groups and subgroups may be prefedined in the system. Predefined -groups and subgroups may not be modified or deleted over this API. -However, the policies running on predefined groups or subgroups as well -as the instance counts and properties may be modified. - -A PDP may be preconfigured with its PDP group, PDP subgroup, and -policies. The PDP sends this information to the PAP when it starts. If -the PDP group, subgroup, or any policy is unknown to the PAP, the PAP -locks the PDP in state PASSIVE. - -The fields below are valid on API calls: - -============= ====================== ======================== ========== ========================================================================= ===================================================================== ============================================================================================== -**Field** **GET** **POST** **DELETE** **Comment** -============= ====================== ======================== ========== ========================================================================= ===================================================================== ============================================================================================== -name M M M The name of the PDP group -version O M C The version of the PDP group -state R N/A N/A The administrative state of the PDP group: PASSIVE, SAFE, TEST, or ACTIVE -description R O N/A The PDP group description -properties R O N/A Specific properties for a PDP group -pdp_subgroups R M N/A A list of PDP subgroups for a PDP group -\ pdp_type R M N/A The PDP type of this PDP subgroup, currently xacml, drools, or apex -\ supported_policy_types R N/A N/A A list of the policy types supported by the PDPs in this PDP subgroup -\ policies R M N/A The list of policies running on the PDPs in this PDP subgroup -\ (name) R M N/A The name of a TOSCA policy running in this PDP subgroup -\ policy_type R N/A N/A The TOSCA policy type of the policy -\ policy_type_version R N/A N/A The version of the TOSCA policy type of the policy -\ policy_type_impl R C N/A The policy type implementation (XACML, Drools Rules, or APEX Model) that implements the policy -\ instance_count R N/A N/A The number of PDP instances running in a PDP subgroup -\ min_instance_count O N/A N/A The minumum number of PDP instances to run in a PDP subgroup -\ properties O N/A N/A Deployment configuration or other properties for the PDP subgroup -\ deployment_info R N/A N/A Information on the deployment for a PDP subgroup -\ instances R N/A N/A A list of PDP instances running in a PDP subgroup -\ instance R N/A N/A The instance ID of a PDP running in a Kuberenetes Pod -\ state R N/A N/A The administrative state of the PDP: PASSIVE, SAFE, TEST, or ACTIVE -\ healthy R N/A N/A The result of the latest health check on the PDP: HEALTHY/NOT_HEALTHY/TEST_IN_PROGRESS -\ message O N/A N/A A status message for the PDP if any -\ deployment_instance_info R N/A N/A Information on the node running the PDP -============= ====================== ======================== ========== ========================================================================= ===================================================================== ============================================================================================== - -Note: In the Dublin release, the *policy_type_impl* of all policy types -in a PDP subgroup must be the same. - -YAML is used for illustrative purposes in the examples in this section. -JSON (application/json) will be used as the content type in the -implementation of this API. - -3.3.1 PDP Group Query -~~~~~~~~~~~~~~~~~~~~~ - -This operation allows the PDP groups and subgroups to be listed together -with the policies that are deployed on each PDP group and subgroup. - -*https:{url}:{port}/policy/pap/v1/pdps GET* - -**PDP Group query for all PDP groups and Subgroups**  Expand source - -pdp_groups: - -- name: onap.pdpgroup.controlloop.Operational - -version: 1.0.0 - -state: active - -description: ONAP Control Loop Operational and Guard policies - - properties: - -# PDP group level properties if any - -pdp_subgroups: - -pdp_type: 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 - -policy_type_impl: onap.controllloop.operational.drools.impl - -- onap.controllloop.operational.drools.vFW.eastRegion: - -policy_type: onap.controllloop.operational.drools.vFW - -policy_type_version: 1.0.0 - -policy_type_impl: onap.controllloop.operational.drools.impl - -min_instance_count: 3 - - instance_count: 3 - -properties: - -# The properties below are for illustration only - -instance_spawn_load_threshold: 70% - -instance_kill_load_threshold: 50% - -instance_geo_redundancy: true - -deployment_info: - -service_endpoint: https://<the drools service endpoint for this PDP -group> - -deployment: A deployment identifier - -# Other deployment info - -instances: - -- instance: drools_1 - -state: active - -healthy: yes - -deployment_instance_info: - -node_address: drools_1_pod - -# Other deployment instance info - -- instance: drools_2 - -state: active - -healthy: yes - - deployment_instance_info: - -node_address: drools_2_pod - -# Other deployment instance info - -- instance: drools_3 - -state: active - -healthy: yes - - deployment_instance_info: - -node_address: drools_3_pod - -# Other deployment instance info - -- pdp_type: apex - -supported_policy_types: - -- onap.controllloop.operational.apex.BBS - -- onap.controllloop.operational.apex.SampleDomain - -policies: - -- onap.controllloop.operational.apex.BBS.eastRegion: - -policy_type: onap.controllloop.operational.apex.BBS - -policy_type_version: 1.0.0 - -policy_type_impl: onap.controllloop.operational.apex.impl - -- onap.controllloop.operational.apex.sampledomain.eastRegion: - -policy_type: onap.controllloop.operational.apex.SampleDomain - -policy_type_version: 1.0.0 - -policy_type_impl: onap.controllloop.operational.apex.impl - -min_instance_count: 2 - - instance_count: 3 - -properties: - -# The properties below are for illustration only - -instance_spawn_load_threshold: 80% - -instance_kill_load_threshold: 60% - -instance_geo_redundancy: true - -deployment_info: - -service_endpoint: https://<the apex service endpoint for this PDP group> - -deployment: A deployment identifier - -# Other deployment info - -instances: - -- instance: apex_1 - -state: active - -healthy: yes - - deployment_instance_info: - -node_address: apex_1_podgroup - -# Other deployment instance info - -- instance: apex_2 - -deployment_instance_info: - -node_address: apex_2_pod - -# Other deployment instance infoCreation - -- instance: apex_3 - -state: active - -healthy: yes - - deployment_instance_info: - -node_address: apex_3_pod - -# Other deployment instance info - -- pdp_type: 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 - -policy_type_impl: onap.controllloop.guard.impl - -- onap.policies.controlloop.guard.blackList.EastRegion: - -policy_type: onap.policies.controlloop.guard.BlackList - -policy_type_version: 1.0.0 - -policy_type_impl: onap.controllloop.guard.impl - -- onap.policies.controlloop.Guard.MinMax.EastRegion: - -policy_type: onap.policies.controlloop.guard.MinMax - -policy_type_version: 1.0.0 - -policy_type_impl: onap.controllloop.guard.impl - -min_instance_count: 2 - - instance_count: 2 - -properties: - -# The properties below are for illustration only - -instance_geo_redundancy: true - -deployment_info: - -service_endpoint: https://<the XACML service endpoint for this PDP -group> - -deployment: A deployment identifier - -# Other deployment info - -instances: - -- instance: xacml_1 - -state: active - -healthy: yes - - deployment_instance_info: - -node_address: xacml_1_pod - -# Other deployment instance info - -- instance: xacml_2 - -state: active - -healthy: yes - - deployment_instance_info: - -node_address: xacml_2_pod - -# Other deployment instance info - -- name: onap.pdpgroup.monitoring - -version: 2.1.3 - -state: active - -description: DCAE mS Configuration Policies - -properties: - -# PDP group level properties if any - -pdp_subgroups: - -- pdp_type: xacml - -supported_policy_types: - -- onap.policies.monitoring.cdap.tca.hi.lo.app - -policies: - -- onap.scaleout.tca: - -policy_type: onap.policies.monitoring.cdap.tca.hi.lo.app - -policy_type_version: 1.0.0 - -policy_type_impl: onap.policies.monitoring.impl - -min_instance_count: 2 - - instance_count: 2 - -properties: - -# The properties below are for illustration only - -instance_geo_redundancy: true - -deployment_info: - -service_endpoint: https://<the XACML service endpoint for this PDP -group> - -deployment: A deployment identifier - -# Other deployment info - -instances: - -- instance: xacml_1 - -state: active - -healthy: yes - - deployment_instance_info: - -node_address: xacml_1_pod - -# Other deployment instance info - -- instance: xacml_2 - -state: active - -healthy: yes - - deployment_instance_info: - -node_address: xacml_2_pod - -# Other deployment instance info - -The table below shows some more examples of GET operations - -======================================================================================= ================================================================ -**Example** **Description** -======================================================================================= ================================================================ -*https:{url}:{port}/policy/pap/v1/pdps* Get all PDP Groups and subgroups in the system -*https:{url}:{port}/policy/pap/v1/pdps/groups/onap.pdpgroup.controlloop* Get PDP Groups and subgroups that match the supplied name filter -*https:{url}:{port}/policy/pap/v1/pdps/groups/onap.pdpgroup.monitoring/subgroups/xacml* Get the PDP subgroup informtation for the specified subgroup -\ -======================================================================================= ================================================================ - -3.3.2 PDP Group Deployment -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -This operation allows the PDP groups and subgroups to be created. A POST -operation is used to create a new PDP group name. A POST operation is -also used to update an existing PDP group. Many PDP groups can be -created or updated in a single POST operation by specifying more than -one PDP group in the POST operation body. - -*https:{url}:{port}/policy/pap/v1/pdps POST* - -**POST body to deploy or update PDP groups**  Expand source - -pdp_groups: - -- name: onap.pdpgroup.controlloop.operational - -description: ONAP Control Loop Operational and Guard policies - -pdp_subgroups: - -- pdp_type: drools - -supportedPolicyTypes: - -- onap.controllloop.operational.drools.vcpe.EastRegion - -version: 1.2.3 - -- onap.controllloop.operational.drools.vfw.EastRegion - -version: 1.2.3 - -min_instance_count: 3group - -properties: - -# The properties below are for illustration only - -instance_spawn_load_threshold: 70% - -instance_kill_load_threshold: 50% - -instance_geo_redundancy: true - -- pdp_type: apex - -policies: - -- onap.controllloop.operational.apex.bbs.EastRegion - -version: 1.2.3 - -- onap.controllloop.operational.apex.sampledomain.EastRegion - -version: 1.2.3 - -min_instance_count: 2 - -properties: - -# The properties below are for illustration only - -instance_spawn_load_threshold: 80% - -instance_kill_load_threshold: 60% - -instance_geo_redundancy: true - -- pdp_type: xacml - -policies: - -- onap.policies.controlloop.guard.frequencylimiter.EastRegion - -version: 1.2.3 - -- onap.policies.controlloop.guard.blacklist.EastRegion - -version: 1.2.3 - -- onap.policies.controlloop.guard.minmax.EastRegion - -version: 1.2.3 - -min_instance_count: 2 - -properties: - -# The properties below are for illustration only - -instance_geo_redundancy: true - -- name: onap.pdpgroup.monitoring - -description: DCAE mS Configuration Policies - -properties: - -# PDP group level properties if any - -pdp_subgroups: - -- pdp_type: xacml - -policies: - -- onap.scaleout.tca - -version: 1.2.3 - -min_instance_count: 2 - -properties: - -# The properties below are for illustration only - -instance_geo_redundancy: true - -Other systems such as CLAMP can use this API to deploy policies using a -POST operation with the body below where only mandatory fields are -specified. - -*https:{url}:{port}/policy/pap/v1/pdps POST* - -**POST body to deploy or update PDP groups**  Expand source - -pdp_groups: - -- name: onap.pdpgroup.Monitoring - -description: DCAE mS Configuration Policies - -pdp_subgroups: - -- pdp_type: xacml - -policies: - -- onap.scaleout.tca - -Simple API for CLAMP to deploy one or more policy-id's with optional policy-version. -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -*https:{url}:{port}/policy/pap/v1/pdps/policies POST* - -Content-Type: application/json - -{ - -"policies" : [ - -{ - -"policy-id": "onap.scaleout.tca", - -"policy-version": 1 - -}, - -{ - -"policy-id": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3" - -}, - -{ - -"policy-id": -"guard.frequency.ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3" - -}, - -{ - -"policy-id": -"guard.minmax.ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3" - -} - -] - -} - -HTTP status code indicates success or failure.{ - -"errorDetails": "some error message" - -} - -Simple API for CLAMP to undeploy a policy-id with optional policy-version. -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -*https:{url}:{port}/policy/pap/v1/pdps/policies{policy-id} DELETE* - -*https:{url}:{port}/policy/pap/v1/pdps/policies{policy-id}/versions/{policy-version} -DELETE* - -HTTP status code indicates success or failure. - -{ - -"errorDetails": "some error message" - -} - -3.3.3 PDP Group Delete -~~~~~~~~~~~~~~~~~~~~~~ - -The API also allows PDP groups to be deleted with a DELETE operation. -DELETE operations are only permitted on PDP groups in PASSIVE state. The -format of the delete operation is as below: - -*https:{url}:{port}/policy/pap/v1/pdps/groups/onap.pdpgroup.monitoring -DELETE* - -3.3.4 PDP Group State Management -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The state of PDP groups is managed by the API. PDP groups can be in -states PASSIVE, TEST, SAFE, or ACTIVE. For a full description of PDP -group states, see `The ONAP Policy -Framework <file://localhost/display/DW/The+ONAP+Policy+Framework>`__ -architecture page. The state of a PDP group is changed with a PUT -operation. - -The following PUT operation changes a PDP group to ACTIVE: - -*https:{url}:{port}/policy/pap/v1/pdps/groups/onap.pdpgroup.monitoring/state=active* - -There are a number of rules for 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 - -5. <Rules on SAFE/TEST> ? `Pamela - Dragosh <file://localhost/display/~pdragosh>`__ - -3.3.5 PDP Group Statistics -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -This operation allows statistics for PDP groups, PDP subgroups, and -individual PDPs to be retrieved. - -*https:{url}:{port}/policy/pap/v1/pdps/statistics GET* - -**Draft Example statistics returned for a PDP Group**  Expand source - -report_timestamp: 2019-02-11T15:23:50+00:00 - -pdp_group_count: 2 - -pdp_groups: - -- name: onap.pdpgroup.controlloop.Operational - -state: active - -create_timestamp: 2019-02-11T15:23:50+00:00 - -update_timestamp: 2019-02-12T15:23:50+00:00 - -state_change_timestamp: 2019-02-13T15:23:50+00:00 - -pdp_subgroups: - -- pdp_type: drools - -instance_count: 3 - -deployed_policy_count: 2 - -policy_execution_count: 123 - -policy_execution_ok_count: 121 - -policy_execution_fail_count: 2 - -instances: - -- instance: drools_1 - -start_timestamp: 2019-02-13T15:23:50+00:00 - -policy_execution_count: 50 - -policy_execution_ok_count: 49 - -policy_execution_fail_count: 1 - -- instance: drools_2 - -start_timestamp: 2019-02-13T15:30:50+00:00 - -policy_execution_count: 50 - -policy_execution_ok_count: 49 - -policy_execution_fail_count: 1 - -- instance: drools_3 - -start_timestamp: 2019-02-13T15:33:50+00:00 - -policy_execution_count: 23 - -policy_execution_ok_count: 23 - -policy_execution_fail_count: 0 - -The table below shows some more examples of GET operations for -statistics - -================================================================================================== =================================================================================== -**Example** **Description** -================================================================================================== =================================================================================== -*https:{url}:{port}/policy/pap/v1/pdps/statistics* Get statistics for all PDP Groups and subgroups in the system -*https:{url}:{port}/policy/pap/v1/pdps/groups/onap.pdpgroup.controlloop/statistics* Get statistics for all PDP Groups and subgroups that match the supplied name filter -*https:{url}:{port}/policy/pap/v1/pdps/groups/onap.pdpgroup.monitoring/subgroups/xacml/statistics* Get statistics for the specified subgroup -\ -================================================================================================== =================================================================================== - -3.3.6 PDP Group Health Check -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -A PDP group health check allows ordering of health checks on PDP groups -and on individual PDPs. As health checks may be long lived operations, -Health checks are scheduled for execution by this operation. Users check -the result of a health check test by issuing a PDP Group Query operation -(see Section 3.3.1) and checking the *healthy* field of PDPs. - -*https:{url}:{port}/policy/pap/v1/pdps/healthcheck PUT* - -The operation returns a HTTP status code of 202: Accepted if the health -check request has been accepted by the PAP. The PAP then orders -execution of the health check on the PDPs. The health check result is -retrieved with a subsequent GET operation. - -The table below shows some more examples of PUT operations for ordering -health checks - -======================================================================================================= ======================================================================================== -**Example** **Description** -======================================================================================================= ======================================================================================== -*https:{url}:{port}/policy/pap/v1/pdps/healthcheck PUT* Order a health check on all PDP Groups and subgroups in the system -*https:{url}:{port}/policy/pap/v1/pdps/groups/onap.pdpgroup.controlloop/healthcheck PUT* Order a health check on all PDP Groups and subgroups that match the supplied name filter -*https:{url}:{port}/policy/pap/v1/pdps/groups/onap.pdpgroup.monitoring/subgroups/xacml/healthcheck PUT* Order a health check on the specified subgroup -\ -======================================================================================================= ======================================================================================== - -3.4 Policy Decision API - Getting Policy Decisions --------------------------------------------------- - -Policy decisions are required by ONAP components to support the -policy-driven ONAP architecture. Policy Decisions are implemented using -the XACML PDP. The calling application must provide attributes in order -for the XACML PDP to return a correct decision. - -3.4.1 Decision API Schema -~~~~~~~~~~~~~~~~~~~~~~~~~ - -The schema for the decision API is defined below. - -3.4.2 Decision API Queries -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Decision API queries are implemented with a POST operation with a JSON -body that specifies the filter for the policies to be returned. The JSON -body must comply with the schema sepcified in Section 3.4.1. - -*https:{url}:{port}/decision/v1/ POST* - -* -*\ Description of the JSON Payload for the decision API Call - -================================================================================================================ ======= ======== ========================================================================== -**Field** **R/O** **Type** **Description** -================================================================================================================ ======= ======== ========================================================================== -ONAPName R String Name of the ONAP Project that is making the request. -ONAPComponent O String Name of the ONAP Project component that is making the request. -ONAPInstance O String Optional instance identification for that ONAP component. -action R String The action that the ONAP component is performing on a resource. - - eg. "configure" → DCAE uS onap.Monitoring policy Decisions to configure uS - - "naming" - - "placement" - - "guard" -These sub metadata structures are used to refine which resource the ONAP component is performing an action upon. - -At least one is required in order for Policy to return a Decision. - -Multiple structures may be utilized to help refine a Decision. -policy-type-name String The policy type name. This may be a regular expression. -policy-id String The policy id. This may be a regular expression or an exact value. -\ -\ -\ -================================================================================================================ ======= ======== ========================================================================== - -This example below shows the JSON body of a query for a specify -policy-id - -**Decision API Call - Policy ID** - -{ - -"ONAPName": "DCAE", - -"ONAPComponent": "PolicyHandler", - -"ONAPInstance": "622431a4-9dea-4eae-b443-3b2164639c64", - -"action": "configure", - -"resource": { - -"policy-id": "onap.scaleout.tca" - -} - -} - -**Decision Response - Single Policy ID query** - -{ - -"policies": { - -"onap.scaleout.tca": { - -"type": "onap.policies.monitoring.cdap.tca.hi.lo.app", - -"version": "1.0.0", - -"metadata": { - -"policy-id": "onap.scaleout.tca", - -"policy-version": 1 - -}, - -"properties": { - -"tca_policy": { - -"domain": "measurementsForVfScaling", - -"metricsPerEventName": [ - -{ - -"eventName": "vLoadBalancer", - -"controlLoopSchemaType": "VNF", - -"policyScope": "type=configuration", - -"policyName": "onap.scaleout.tca", - -"policyVersion": "v0.0.1", - -"thresholds": [ - -{ - -"closedLoopControlName": -"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3", - -"closedLoopEventStatus": "ONSET", - -"version": "1.0.2", - -"fieldPath": -"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated", - -"thresholdValue": 500, - -"direction": "LESS_OR_EQUAL", - -"severity": "MAJOR" - -}, - -{ - -"closedLoopControlName": -"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3", - -"closedLoopEventStatus": "ONSET", - -"version": "1.0.2", - -"fieldPath": -"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated", - -"thresholdValue": 5000, - -"direction": "GREATER_OR_EQUAL", - -"severity": "CRITICAL" - -} - -] - -} - -] - -} - -} - -} - -} - -} - -* -* - -This example below shows the JSON body of a query for a multiple -policy-id's - -**Decision API Call - Policy ID** - -{ - -"ONAPName": "DCAE", - -"ONAPComponent": "PolicyHandler", - -"ONAPInstance": "622431a4-9dea-4eae-b443-3b2164639c64", - -"action": "configure", - -"resource": { - -"policy-id": [ - -"onap.scaleout.tca", - -"onap.restart.tca" - -] - -} - -} - -The following is the response object: - -**Decision Response - Single Policy ID query** - -{ - -"policies": { - -"onap.scaleout.tca": { - -"type": "onap.policies.monitoring.cdap.tca.hi.lo.app", - -"version": "1.0.0", - -"metadata": { - -"policy-id": "onap.scaleout.tca" - -}, - -"properties": { - -"tca_policy": { - -"domain": "measurementsForVfScaling", - -"metricsPerEventName": [ - -{ - -"eventName": "vLoadBalancer", - -"controlLoopSchemaType": "VNF", - -"policyScope": "type=configuration", - -"policyName": "onap.scaleout.tca", - -"policyVersion": "v0.0.1", - -"thresholds": [ - -{ - -"closedLoopControlName": -"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3", - -"closedLoopEventStatus": "ONSET", - -"version": "1.0.2", - -"fieldPath": -"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated", - -"thresholdValue": 500, - -"direction": "LESS_OR_EQUAL", - -"severity": "MAJOR" - -}, - -{ - -"closedLoopControlName": -"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3", - -"closedLoopEventStatus": "ONSET", - -"version": "1.0.2", - -"fieldPath": -"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated", - -"thresholdValue": 5000, - -"direction": "GREATER_OR_EQUAL", - -"severity": "CRITICAL" - -} - -] - -} - -] - -} - -} - -}, - -"onap.restart.tca": { - -"type": "onap.policies.monitoring.cdap.tca.hi.lo.app", - -"version": "1.0.0", - -"metadata": { - -"policy-id": "onap.restart.tca", - -"policy-version": 1 - -}, - -"properties": { - -"tca_policy": { - -"domain": "measurementsForVfScaling", - -"metricsPerEventName": [ - -{ - -"eventName": "Measurement_vGMUX", - -"controlLoopSchemaType": "VNF", - -"policyScope": "DCAE", - -"policyName": "DCAE.Config_tca-hi-lo", - -"policyVersion": "v0.0.1", - -"thresholds": [ - -{ - -"closedLoopControlName": -"ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e", - -"version": "1.0.2", - -"fieldPath": -"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value", - -"thresholdValue": 0, - -"direction": "EQUAL", - -"severity": "MAJOR", - -"closedLoopEventStatus": "ABATED" - -}, - -{ - -"closedLoopControlName": -"ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e", - -"version": "1.0.2", - -"fieldPath": -"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value", - -"thresholdValue": 0, - -"direction": "GREATER", - -"severity": "CRITICAL", - -"closedLoopEventStatus": "ONSET" - -} - -] - -} - -] - -} - -} - -} - -} - -} - -* -* - -The simple draft example below shows the JSON body of a query in which -all the deployed policies for a specific policy type are returned. - -{ - -"ONAPName": "DCAE", - -"ONAPComponent": "PolicyHandler", - -"ONAPInstance": "622431a4-9dea-4eae-b443-3b2164639c64", - -"action": "configure", - -"resource": { - -"policy-type": "onap.policies.monitoring.cdap.tca.hi.lo.app" - -} - -} - -The query above gives a response similar to the example shown below. - -{ - -"policies": { - -"onap.scaleout.tca": { - -"type": "onap.policies.monitoring.cdap.tca.hi.lo.app", - -"version": "1.0.0", - -"metadata": { - -"policy-id": "onap.scaleout.tca", - -"policy-version": 1, - -}, - -"properties": { - -"tca_policy": { - -"domain": "measurementsForVfScaling", - -"metricsPerEventName": [ - -{ - -"eventName": "vLoadBalancer", - -"controlLoopSchemaType": "VNF", - -"policyScope": "type=configuration", - -"policyName": "onap.scaleout.tca", - -"policyVersion": "v0.0.1", - -"thresholds": [ - -{ - -"closedLoopControlName": -"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3", - -"closedLoopEventStatus": "ONSET", - -"version": "1.0.2", - -"fieldPath": -"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated", - -"thresholdValue": 500, - -"direction": "LESS_OR_EQUAL", - -"severity": "MAJOR" - -}, - -{ - -"closedLoopControlName": -"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3", - -"closedLoopEventStatus": "ONSET", - -"version": "1.0.2", - -"fieldPath": -"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated", - -"thresholdValue": 5000, - -"direction": "GREATER_OR_EQUAL", - -"severity": "CRITICAL" - -} - -] - -} - -] - -} - -} - -}, - -"onap.restart.tca": { - -"type": "onap.policies.monitoring.cdap.tca.hi.lo.app", - -"version": "1.0.0", - -"metadata": { - -"policy-id": "onap.restart.tca", - -"policy-version": 1 - -}, - -"properties": { - -"tca_policy": { - -"domain": "measurementsForVfScaling", - -"metricsPerEventName": [ - -{ - -"eventName": "Measurement_vGMUX", - -"controlLoopSchemaType": "VNF", - -"policyScope": "DCAE", - -"policyName": "DCAE.Config_tca-hi-lo", - -"policyVersion": "v0.0.1", - -"thresholds": [ - -{ - -"closedLoopControlName": -"ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e", - -"version": "1.0.2", - -"fieldPath": -"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value", - -"thresholdValue": 0, - -"direction": "EQUAL", - -"severity": "MAJOR", - -"closedLoopEventStatus": "ABATED" - -}, - -{ - -"closedLoopControlName": -"ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e", - -"version": "1.0.2", - -"fieldPath": -"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value", - -"thresholdValue": 0, - -"direction": "GREATER", - -"severity": "CRITICAL", - -"closedLoopEventStatus": "ONSET" - -} - -] - -} - -] - -} - -} - -}, - -"onap.vfirewall.tca": { - -"type": "onap.policy.monitoring.cdap.tca.hi.lo.app", - -"version": "1.0.0", - -"metadata": { - -"policy-id": "onap.vfirewall.tca", - -"policy-version": 1 - -}, - -"properties": { - -"tca_policy": { - -"domain": "measurementsForVfScaling", - -"metricsPerEventName": [ - -{ - -"eventName": "vLoadBalancer", - -"controlLoopSchemaType": "VNF", - -"policyScope": "resource=vLoadBalancer;type=configuration", - -"policyName": "onap.vfirewall.tca", - -"policyVersion": "v0.0.1", - -"thresholds": [ - -{ - -"closedLoopControlName": -"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a", - -"closedLoopEventStatus": "ONSET", - -"version": "1.0.2", - -"fieldPath": -"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated", - -"thresholdValue": 500, - -"direction": "LESS_OR_EQUAL", - -"severity": "MAJOR" - -}, - -{ - -"closedLoopControlName": -"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a", - -"closedLoopEventStatus": "ONSET", - -"version": "1.0.2", - -"fieldPath": -"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated", - -"thresholdValue": 5000, - -"direction": "GREATER_OR_EQUAL", - -"severity": "CRITICAL" - -} - -] - -} - -] - -} - -} - -} - -} - -} - -4. Policy Framework Internal APIs -================================= - -The Policy Framework uses the internal APIs documented in the -subsections below. 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. - -4.1 PAP to PDP API ------------------- - -This section describes the API between the PAP and PDPs. The APIs in -this section are implemented using `DMaaP -API <file://localhost/display/DW/DMaaP+API>`__ messaging. 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 heakth check on - PDPs, triggers a PDP_STATUS message with the result of the - PDP_HEALTH_CHECK operation - -The fields 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, see section 3.2 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. - -| Note: The PAP checks that the set of policy types supported in all - PDPs in a PDP subgroup are identical and will not add a PDP to a PDP - subgroup that has a different set of supported policy types -| Note: The PA checks that the set of policy loaded on all PDPs in a PDP - subgroup are are identical and will not add a PDP to a PDP subgroup - that has a different set of loaded policies - -4.1.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 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. - -**PDP_STATUS message from an XACML PDP running control loop policies** - Expand source - -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, see Section 3.2 - - - onap.policies.controlloop.guard.blacklist.eastRegion: - -policy_type: onap.policies.controlloop.guard.BlackList - -policy_type_version: 1.0.0 - -properties: - -# Omitted for brevity, see Section 3.2 - -- onap.policies.controlloop.guard.minmax.eastRegion: - -policy_type: onap.policies.controlloop.guard.MinMax - -policy_type_version: 1.0.0 - -properties: - -# Omitted for brevity, see Section 3.2 - -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 - -**PDP_STATUS message from a Drools PDP running control loop policies** - Expand source - -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, see Section 3.2 - -- onap.controllloop.operational.drools.vfw.EastRegion: - -policy_type: onap.controllloop.operational.drools.vFW - -policy_type_version: 1.0.0 - -properties: - -# Omitted for brevity, see Section 3.2 - -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 - -**PDP_STATUS message from an APEX PDP running control loop policies** - Expand source - -pdp_status: - -name: apex_3 - -version: 2.2.1 - -pdp_type: apex - -state: test - -healthy: true - - description: APEX PDP running control loop policies - -pdp_group: onap.pdpgroup.controlloop.operational - -pdp_subgroup: apex - -supported_policy_types: - -- onap.controllloop.operational.apex.BBS - -- onap.controllloop.operational.apex.SampleDomain - -policies: - -- onap.controllloop.operational.apex.bbs.EastRegion: - -policy_type: onap.controllloop.operational.apex.BBS - -policy_type_version: 1.0.0 - -properties: - -# Omitted for brevity, see Section 3.2 - -- onap.controllloop.operational.apex.sampledomain.EastRegion: - -policy_type: onap.controllloop.operational.apex.SampleDomain - -policy_type_version: 1.0.0 - -properties: - -# Omitted for brevity, see Section 3.2 - -instance: apex_3 - -deployment_instance_info:node_address - -node_address: apex_3_pod - -# Other deployment instance info - -statistics: - -policy_download_count: 2 - -policy_download_success_count: 2 - -policy_download_fail_count: 0 - -policy_executed_count: 123 - -policy_executed_success_count: 122 - -policy_executed_fail_count: 1 - -response: - -response_to: PDP_UPDATE - -response_status: FAIL - -response_message: policies specified in update message incompatible with -running policy state - -**PDP_STATUS message from an XACML PDP running monitoring policies** - Expand source - -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, see Section 3.2 - -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 - -4.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 listens on this topic for messages. - -The PAP can set the scope of 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. - -4.1.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. Only PDPs in state -PASSIVE accept this operation. The PAP must change the state of PDPs in -state ACTIVE, TEST, or SAFE to state PASSIVE before issuing a -*PDP_UPDATE* operation on a PDP. - -The following examples illustrate how the operation is used. - -**PDP_UPDATE message to upgrade XACML PDP control loop policies to -versino 1.0.1**  Expand source - -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, see Section 3.2 - -- onap.policies.controlloop.guard.blackList.EastRegion: - -policy_type: onap.policies.controlloop.guard.BlackList - -policy_type_version: 1.0.1 - -properties: - -# Omitted for brevity, see Section 3.2 - -- onap.policies.controlloop.guard.minmax.EastRegion: - -policy_type: onap.policies.controlloop.guard.MinMax - -policy_type_version: 1.0.1 - -properties: - -# Omitted for brevity, see Section 3.2 - -**PDP_UPDATE message to a Drools PDP to add an extra control loop -policy**  Expand source - -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, see Section 3.2 - -- onap.controllloop.operational.drools.vfw.EastRegion: - -policy_type: onap.controllloop.operational.drools.vFW - -policy_type_version: 1.0.0 - -properties: - -# Omitted for brevity, see Section 3.2 - -- onap.controllloop.operational.drools.vfw.WestRegion: - -policy_type: onap.controllloop.operational.drools.vFW - -policy_type_version: 1.0.0 - -properties: - -# Omitted for brevity, see Section 3.2 - -**PDP_UPDATE message to an APEX PDP to remove a control loop policy** - Expand source - -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, see Section 3.2 - -4.1.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. - -**Change the state of all control loop Drools PDPs to ACTIVE**  Expand -source - -pdp_state_change: - -state: active - -pdp_group: onap.pdpgroup.controlloop.Operational - -pdp_subgroup: drools - -**Change the state of all monitoring PDPs to SAFE**  Expand source - -pdp_state_change: - -state: safe - -pdp_group: onap.pdpgroup.Monitoring - -**Change the state of a single APEX PDP to TEST**  Expand source - -pdp_state_change: - -state: test - -name: apex_3 - -4.1.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. - -**Perform a health check on all control loop Drools PDPs**  Expand -source - -pdp_health_check: - -pdp_group: onap.pdpgroup.controlloop.Operational - -pdp_subgroup: drools - -**perform a health check on all monitoring PDPs**  Expand source - -pdp_health_check: - -pdp_group: onap.pdpgroup.Monitoring - -**Perform a health check on a single APEX PDP**  Expand source - -pdp_health_check: - -name: apex_3 - -4.2 Policy Type Implementations (Native Policies) -------------------------------------------------- - -The policy Framework must have implementations for all Policy Type -entities that may be specified in TOSCA. Policy type implementations are -native policies for the various PDPs supported in the Policy Framework. -They may be predefined and preloaded into the Policy Framework. In -addition, they may also be added, modified, queried, or deleted using -this API during runtime. - -The API supports CRUD of *PolicyTypeImpl* policy type implementations, -where the XACML, Drools, and APEX policy type implementations are -supplied as strings. This API is provided by the *PolicyDevelopment* -component of the Policy Framework, see `The ONAP Policy -Framework <file://localhost/display/DW/The+ONAP+Policy+Framework>`__ -architecture. - -| Note that client-side editing support for TOSCA *PolicyType* - definitions or for *PolicyTypeImpl* implementations in XACML, Drools, - or APEX is outside the current scope of the API. -| Note: Preloaded policy type implementations may only be queried over - this API, modification or deletion of preloaded policy type - implementations is disabled. -| Note: Policy type implementations that are in use (referenced by - defined Policies) may not be deleted. - -The fields below are valid on API calls: - -=========== ======= ======== ========== ========================================================================================================================== -**Field** **GET** **POST** **DELETE** **Comment** -=========== ======= ======== ========== ========================================================================================================================== -name M M M The name of the Policy Type implementation -version O M C The version of the Policy Type implementation -policy_type R M N/A The TOSCA policy type that this policy type implementation implements -pdp_type R M N/A The PDP type of this policy type implementation, currently xacml, drools, or apex -description R O N/A The description of the policy type implementation -writable R N/A N/A Writable flag, false for predefined policy type implementations, true for policy type implementations defined over the API -policy_body R M N/A The body (source) of the policy type implementation -properties R O N/A Specific properties for the policy type implementation -=========== ======= ======== ========== ========================================================================================================================== - -4.2.1 Policy Type Implementation Query -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -This operation allows the PDP groups and subgroups to be listed together -with the policies that are deployed on each PDP group and subgroup. - -*https:{url}:{port}/policy/api/v1/native/onap.policies.controlloop.operational/impls -GET* - -**Policy Type Implementation Query Result**  Expand source - -policy_type_impls: - -- name: onap.policies.controlloop.operational.drools.Impl - -version: 1.0.0 - -policy_type: onap.policies.controlloop.Operational - -pdp_type: drools - -description: Implementation of the drools control loop policies - -writable: false - -- name: onap.policies.controlloop.operational.apex.bbs.Impl - -version: 1.0.0 - -policy_type: onap.policies.controlloop.operational.Apex - -pdp_type: apex - -description: Implementation of the APEX BBS control loop policy - -writable: true - -policy_body: "<policy body>" - -- name: onap.policies.controlloop.operational.apex.sampledomain.Impl - -version: 1.0.0 - -policy_type: onap.policies.controlloop.operational.Apex - -pdp_type: apex - -description: Implementation of the SampleDomain test APEX policy - -writable: true - -policy_body: "<policy body>" - -The table below shows some more examples of GET operations - -========================================================================================================================================================================= ========================================================================================================================================================== -**Example** **Description** -========================================================================================================================================================================= ========================================================================================================================================================== -*https:{url}:{port}/policy/api/v1/native/{policy type id}/impls* Get all Policy Type implementations for the given policy type - -| *eg.* -| *https:{url}:{port}/policy/api/v1/native/onap.policies.monitoring/impls* -| *https:{url}:{port}/policy/api/v1/native/onap.policies.controlloop.operational.apex/impls* -*https:{url}:{port}/policy/api/v1/native/{policy type id}/impls/{policy type impl id}* Get all Policy Type implementation versions that match the policy type and policy type implementation IDs specified - -| *eg.* -| *https:{url}:{port}/policy/api/v1/native/onap.policies.controlloop.operational/impls/onap.policies.controlloop.operational.drools.impl* -| *https:{url}:{port}/policy/api/v1/native/onap.policies.controlloop.operational.apex/impls/onap.policies.controlloop.operational.apex.sampledomain.impl* -*https:{url}:{port}/policy/api/v1/native/{policy type id}/impls/{policy type impl id}/versions/{version id}* Get the specific Policy Type implementation with the specified name and version, if the version ID is specified a *latest*, the latest version is returned - -| *eg.* -| *https:{url}:{port}/policy/api/v1/native/onap.policies.controlloop.operational/impls/onap.policies.controlloop.operational.drools.impl/versions/1.2.3* -| *https:{url}:{port}/policy/api/v1/native/onap.policies.controlloop.operational.apex/impls/onap.policies.controlloop.operational.apex.sampledomain.impl/versions/latest* -========================================================================================================================================================================= ========================================================================================================================================================== - -4.2.2 Policy Type Implementation Create/Update -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The API allows users (such as a policy editor or DevOps system) to -create or update a Policy Type implementation using a POST operation. -This API allows new Policy Type implementations to be created or -existing Policy Type implementations to be modified. POST operations -with a new name or a new version of an existing name are used to create -a new Policy Type implementation. POST operations with an existing name -and version are used to update an existing Policy Type implementations. -Many implementations can be created or updated in a single POST -operation by specifying more than one Policy Type implementation on the -*policy_type_impls* list. - -For example, the POST operation below with the YAML body below is used -to create a new APEX Policy type implementation. - -*https:{url}:{port}/policy/api/v1/native/onap.policies.controlloop.operational.apex/impls -POST* - -**Create a new Policy Type Implementation**  Expand source - -policy_type_impls: - -- onap.policies.controlloop.operational.apex.bbs.Impl: - -version: 1.0.0 - -policy_type: onap.policies.controlloop.operational.Apex - -pdp_type: apex - -description: Implementation of the APEX BBS control loop policy - -policy_body: "<policy body>" - -- onap.policies.controlloop.operational.apex.sampledomain.Impl: - -version: 1.0.0 - -policy_type: onap.policies.controlloop.operational.Apex - -pdp_type: apex - -description: Implementation of the APEX SampleDomain control loop policy - -policy_body: "<policy body> - -Once this call is made, the Policy Type query in Section 3.1.2.1 returns -a result with the new Policy Type implementation defined. - -4.2.3 Policy Type Implementation Delete -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The API also allows Policy Type implementations to be deleted with a -DELETE operation. The format of the delete operation is as below: - -*https:{url}:{port}/api/v1/native/onap.policies.controlloop.operational.apex/impls/onap.policies.apex.bbs.impl/versions/1.0.0 -DELETE* - -| Note: Predefined policy type implementations cannot be deleted -| Note: Policy type implementations that are in use (Parameterized by a - TOSCA Policy) may not be deleted, the parameterizing TOSCA policies - must be deleted first -| Note: The *version* parameter may be omitted on the DELETE operation - if there is only one version of the policy type implementation in the - system diff --git a/docs/design/images/APIsInPolicyFramework.svg b/docs/design/images/APIsInPolicyFramework.svg new file mode 100644 index 00000000..9c19d751 --- /dev/null +++ b/docs/design/images/APIsInPolicyFramework.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="1031px" height="370px" viewBox="-0.5 -0.5 1031 370" content="<mxfile modified="2019-05-29T12:52:02.521Z" host="wiki.onap.org" agent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:67.0) Gecko/20100101 Firefox/67.0" etag="Ox-TNRhRsWdwMfNkGRbr" version="10.6.3" type="atlas"><mxAtlasLibraries/><diagram id="cc72324c-ab27-b8f9-92d1-8f56239d8250" name="Page-1">7Vxbk5s2FP41nkkfnEES4vLoeLdpZnYnnm463TxiLNtMsHEB76W/vsJIGI5kG7Pg4E3zkAWBJXG+c9eRBmS8evkce5vlfTRj4QAbs5cBuRlgjGyX8j9Zy2ve4hhO3rCIg5l4ad/wEPzLRKMhWrfBjCWVF9MoCtNgU230o/Wa+WmlzYvj6Ln62jwKq6NuvIUY0dg3PPheyJTX/g5m6VK0IsvdP/iDBYulGNrBdv5g6vk/FnG0XYvxBpjMd//yxytP9iXGTZbeLHouNZHbARnHUZTmV6uXMQsz2kqy5b/7/cDTYt4xW6d1foDzHzx54VZ8+iQKA/+Vt3173TD+54YlwWI9wFbIO/w0jfnVIrv6cOhFYzT58pt8P9l4WVOSvgrSWv9so11HBaGGfhRG8YCM+HvxYvqB8o/gkx7z/zGlxTVFv+1/LSehTku28E/Ox5bNuDINvBuaZVQw+OPnZZCyh43nZ0+fOU/ztmW6Cvkd4pfzIAzH+SxvckSx72dfl8bRD1Z6MrOmFrWK8co4CGieWJyyl1KTwOUzi1YsjTN6iqdDaggmEUKEiLh/LrGkJdqWJW6kos0TUrAo+t5zAr8QzKBnDFNhjILWkqY5A+ToF0SfHobm29eHcQbyKE6DucelFmLChWGTXc4if7vaEe4UMNMcxbvpAaRmHnPmWqQs32HTeUtIEYCUVH9loIgGKKsFoCwNUICubD0bZUqR3/mhlySBX6UiewnSx9L190wqPto0u13z6TwKKdnd5A8xPUa6JNrGPqtomNSLF0y8RfImNluwo+QtkY8eYfOYhV4aPFVVt46kYoRJFPD57tFDdhU9YgJY8s8RPysrU6UnXO0Ju6CnnApKTzuMiw+vBbvdFez4GOxvQd3sFerWAd16NuaYgJ5wZ5g7h431aSsNzPPVmUNk0iqdTY01xFRlGCjNTZSsq1D+JlpnTs+9t956YZjNk380/49/EP9zF8yZ/+qHLKf3QUu3jlJWw8oVvtLXbRoGaybak9xvdjR2jzJnZuogcfCUWK15KAjoOytTESoqHfkocvSaSnCdQUY+zbxkueN0BNRhofNKOvC71IFCV8pnQl2iN+hDt1f6cOhWoTTtpgrRBB11pw+RGr2M70b3kyPaDZ2v3Ryf6bXb1KEmNVoSJQTMCMUaSbI1+EPD1UiQyE/xJuza7gRRxcfplfi05U4A4SFQTbYoPLoI71zMj7iJR/ihFuSmCrmU955grgQObiGz58LuAN/GtmFPLQJPuxL2dgJGqkG+X8KO3CpcpKm0O0DaLdwZ6Gqa4Gu63PmqD69JylbvwWa6dl2bSQ9DXttmthGBn60/36Q+rX5JEbB12GisPqHZxI7SVXuihNWo4/aF+dvUm+7iPRlxw1B8ErNgnaQ8WuRSJcJFP2ZeurudZoQX3mv+zOPBYS6hiZBQGV1qY3qF+d5HjEmAjZWMXY4vdUxqO28X8WK2J5PgX1absF4S/N0lvzEwhkUO5hLJb13ccnCV4hcGaYhdt4qSo8vTuN2gJC3jhcPL+i6noxpL+VpPjOUQuDqmYTY1lsBWUrWnFm3leYmF2hk6TR5hn6ErJ+iOupqVBJ0sMyjzgNErHlAcJtNtygNwwRI5SlctMoGaaZiMrjFJB+O1IpQu4a9bj28jRYfVqH1yM0mukIqmAf1+dSGnMyqqQdu1UhEuvaALUlGzEHmlVIQL9viCVFQXFa+VisA5wZpCpa6oKPt4B1RUzPsFqahGutdKRQqoSC9IxaZxTsKdrbRepnBofCzuv+f3hmXLlgmLAz5tFp9yfSturjCKPXFzCZQD3DQrCLLrRmceLmm6fnoG8GcFt78CvIoHJFHoAN+ma6Wn8T0IYW/hchrCpbhaTmdwNV3hvIQ4SkPz7vF1u1O3TWuea+Db4cK2bk2uZ1VgBGY4SFNuQJczvk0XYvvHDaRnut+FEUlTbjAuxw1qbqIeN+grQY8UgiLbLrEF+mggeV/bCz+ZgO5XzTwCsRWxgMdVlx+s6pKhhTtcgpD2rcQQf27XKQeIN45mq2Ad8ICUkyU6Wj6/e3NwtdXzcJdCqUKivAJoapjHbKFYxtStpLeroxuu+8gv7rHYEZjSgOVLPXTBTTViuvp6M+gqE3rJejNTdXoPVRp9/kutBuo/eZH7M8lLVTPRmobauxN26xtLdPrL7FehH4GJGreh20BI1W/YbQ/vRn/RDg1WLe/SqYQcruO+xbfUMknPjByshZYbm882coBJiAk6apFJsIZJcmU8C56qBWiD4pyErAyNZcVjwufMDoXwlyzJ3ogS31O31WtPNyiNoBl0lHX8OBrf3w3w+CaOojDJj1HISkvr9Tqa3D5mHwunG80zYg5KZaj5XIF0vI/y0yGxoOOsrichRyMXcOt3I6PUUfnURxNVFpG4gimCV40xKnIcjZSPlJL+ngAAC6sQDHlqrzgBBxvBTZQt6p7ODgBoZf+/3GtQBp32y+LAwxoIRk3L6RAwOaTDfAZVIyuN/j9QBn2s/PmkTVHPbwFjHLUsJ8c7YD+ur9Qa6ABNkSCSzk2FrVvYsUDbyH52mPSWOzj/VwutqwW1muzhZqyA3/80gHLs1UV3wltN0wAnM5Inj5ioJUAS5kq6slfyMyTwQBzaMNwfYheq0s4qPCw13r/6fOXQxFUFdFlJavFMiaOSpObUakmSRLzHkmTSKn5N82acEeyqIMEzkVoUpDaOlTj/PLr6R4lolt175oEMkXKaSEMHZAiSagju5muMO7/dH1Kav74/CZbc/gc=</diagram></mxfile>"><defs/><g><rect x="10" y="106" width="160" height="50" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(22.5,117.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="134" 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: 135px; 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;">Policy Type Design<br />(Policy Type Design API)<span style="background-color: rgb(51 , 255 , 51)"><br /></span></div></div></foreignObject><text x="67" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 210 71 L 340 71 L 340 122 Q 307.5 105.8 275 122 Q 242.5 138.2 210 122 L 210 80 Z" fill="#dae8fc" stroke="#6c8ebf" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(234.5,78.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;"><b>PolicyType</b><br />TOSCA Artifact</div></div></foreignObject><text x="41" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 170 144 L 205.98 172.08" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 210.12 175.31 L 202.45 173.76 L 205.98 172.08 L 206.75 168.25 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 170 119 L 204.19 103.61" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 208.98 101.46 L 204.03 107.52 L 204.19 103.61 L 201.16 101.14 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="655" y="116" width="125" height="40" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(664.5,122.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="105" 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: 106px; 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;">Policy Design<br />(Policy Design API)</div></div></foreignObject><text x="53" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Policy Design<br>(Policy Design API)</text></switch></g><path d="M 0 236.5 L 112 236.5 L 120 244.5 L 120 286.5 L 0 286.5 L 0 236.5 Z" fill="#d5e8d4" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><path d="M 112 236.5 L 112 244.5 L 120 244.5" fill="none" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(1.5,247.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; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Done Manually or over Lifecycle API</div></div></foreignObject><text x="58" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Done Manually or over Lifecycle API</text></switch></g><path d="M 50 156 L 30 237" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><rect x="380" y="28.5" width="70" height="30" rx="4.5" ry="4.5" fill="#f8cecc" stroke="#b85450" pointer-events="none"/><g transform="translate(393.5,37.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="42" 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: 43px; 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;">CLAMP</div></div></foreignObject><text x="21" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">CLAMP</text></switch></g><path d="M 340 176 L 648.66 146.6" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 653.89 146.11 L 647.25 150.25 L 648.66 146.6 L 646.59 143.29 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 340 86 L 375.61 48.61" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 379.23 44.81 L 376.94 52.29 L 375.61 48.61 L 371.87 47.46 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 616 120 L 648.71 125.03" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 653.9 125.83 L 646.44 128.22 L 648.71 125.03 L 647.51 121.31 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="380" y="73.5" width="70" height="35" rx="5.25" ry="5.25" fill="#f8cecc" stroke="#b85450" pointer-events="none"/><g transform="translate(381.5,77.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="66" 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: 66px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Other System</div></div></foreignObject><text x="33" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Other System</text></switch></g><path d="M 340 101 L 373.82 92.54" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 378.92 91.27 L 372.97 96.36 L 373.82 92.54 L 371.28 89.57 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 880 0 L 1022 0 L 1030 8 L 1030 78 L 880 78 L 880 0 Z" fill="#d5e8d4" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><path d="M 1022 0 L 1022 8 L 1030 8" fill="none" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(881.5,10.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="146" height="56" 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: 146px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Executable Policy<br />Preinstalled or created by CLAMP or another system over Policy Design API</div></div></foreignObject><text x="73" y="34" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 805 101 L 935 101 L 935 152 Q 902.5 135.8 870 152 Q 837.5 168.2 805 152 L 805 110 Z" fill="#dae8fc" stroke="#6c8ebf" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(840.5,108.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;"><b>PolicyImpl</b><br />Artifact</div></div></foreignObject><text x="30" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 211 161 L 340 161 L 340 212 Q 307.75 195.8 275.5 212 Q 243.25 228.2 211 212 L 211 170 Z" fill="#dae8fc" stroke="#6c8ebf" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(232.5,168.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="86" 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: 87px; 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;"><b>PolicyTypeImpl</b><br />Artifact</div></div></foreignObject><text x="43" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica"><b>PolicyTypeImpl</b><br>Artifact</text></switch></g><path d="M 780 126 L 799.09 118.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 803.96 116.42 L 798.76 122.26 L 799.09 118.37 L 796.16 115.77 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 870 101 L 880 59" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><rect x="790" y="191" width="60" height="30" rx="4.5" ry="4.5" fill="#f8cecc" stroke="#b85450" pointer-events="none"/><g transform="translate(808.5,199.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="23" 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: 24px; 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;">PAP</div></div></foreignObject><text x="12" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PAP</text></switch></g><rect x="910" y="176" width="60" height="30" rx="4.5" ry="4.5" fill="#f8cecc" stroke="#b85450" pointer-events="none"/><g transform="translate(924.5,184.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="31" 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: 32px; 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;">PDPs</div></div></foreignObject><text x="16" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDPs</text></switch></g><rect x="920" y="186" width="60" height="30" rx="4.5" ry="4.5" fill="#f8cecc" stroke="#b85450" pointer-events="none"/><g transform="translate(934.5,194.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="31" 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: 32px; 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;">PDPs</div></div></foreignObject><text x="16" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDPs</text></switch></g><rect x="930" y="196" width="60" height="30" rx="4.5" ry="4.5" fill="#f8cecc" stroke="#b85450" pointer-events="none"/><g transform="translate(944.5,204.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="31" 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: 32px; 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;">PDPs</div></div></foreignObject><text x="16" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDPs</text></switch></g><rect x="940" y="206" width="60" height="30" rx="4.5" ry="4.5" fill="#f8cecc" stroke="#b85450" pointer-events="none"/><g transform="translate(954.5,214.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="31" 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: 32px; 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;">PDPs</div></div></foreignObject><text x="16" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDPs</text></switch></g><rect x="950" y="216" width="60" height="30" rx="4.5" ry="4.5" fill="#f8cecc" stroke="#b85450" pointer-events="none"/><g transform="translate(964.5,224.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="31" 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: 32px; 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;">PDPs</div></div></foreignObject><text x="16" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDPs</text></switch></g><rect x="960" y="226" width="60" height="30" rx="4.5" ry="4.5" fill="#f8cecc" stroke="#b85450" pointer-events="none"/><g transform="translate(974.5,234.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="31" 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: 32px; 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;">PDPs</div></div></foreignObject><text x="16" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PDPs</text></switch></g><path d="M 856.15 199.37 L 907.85 185.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 851.08 200.71 L 856.95 195.53 L 856.15 199.37 L 858.74 202.3 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 912.92 184.29 L 907.05 189.47 L 907.85 185.63 L 905.26 182.7 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 856.34 200.37 L 913.66 194.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 851.11 200.89 L 857.73 196.71 L 856.34 200.37 L 858.43 203.67 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 918.89 194.11 L 912.27 198.29 L 913.66 194.63 L 911.57 191.33 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 856.37 204 L 923.63 204" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 851.12 204 L 858.12 200.5 L 856.37 204 L 858.12 207.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 928.88 204 L 921.88 207.5 L 923.63 204 L 921.88 200.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 856.24 205.25 L 943.76 222.75" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 851.1 204.22 L 858.65 202.16 L 856.24 205.25 L 857.27 209.02 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 948.9 223.78 L 941.35 225.84 L 943.76 222.75 L 942.73 218.98 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 856.34 206.56 L 933.66 213.44" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 851.11 206.1 L 858.4 203.23 L 856.34 206.56 L 857.78 210.21 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 938.89 213.9 L 931.6 216.77 L 933.66 213.44 L 932.22 209.79 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 856.17 207.57 L 953.83 232.43" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 851.08 206.28 L 858.73 204.61 L 856.17 207.57 L 857 211.39 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 958.92 233.72 L 951.27 235.39 L 953.83 232.43 L 953 228.61 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 828 162 L 821.69 184.86" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 820.3 189.92 L 818.78 182.24 L 821.69 184.86 L 825.53 184.11 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="740" y="258.5" width="140" height="45" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(746.5,267.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="127" 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: 128px; 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;">Runtime Administration<br />(Policy Admin API)</div></div></foreignObject><text x="64" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Runtime Administration<br>(Policy Admin API)</text></switch></g><path d="M 811.18 252.74 L 815.99 227.26" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 810.21 257.9 L 808.07 250.37 L 811.18 252.74 L 814.94 251.67 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 816.96 222.1 L 819.1 229.63 L 815.99 227.26 L 812.23 228.33 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="850" y="333.5" width="70" height="35" rx="5.25" ry="5.25" fill="#f8cecc" stroke="#b85450" pointer-events="none"/><g transform="translate(851.5,337.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="66" 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: 66px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Other System</div></div></foreignObject><text x="33" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Other System</text></switch></g><rect x="700" y="333.5" width="70" height="35" rx="5.25" ry="5.25" fill="#f8cecc" stroke="#b85450" pointer-events="none"/><g transform="translate(718.5,337.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="33" 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: 34px; 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;">Policy<br />GUI</div></div></foreignObject><text x="17" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Policy<br>GUI</text></switch></g><path d="M 771.23 309.14 L 756.77 328.86" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 774.34 304.9 L 773.02 312.62 L 771.23 309.14 L 767.38 308.48 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 753.66 333.1 L 754.98 325.38 L 756.77 328.86 L 760.62 329.52 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 856.64 307.36 L 880.36 329.64" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 852.81 303.77 L 860.31 306.01 L 856.64 307.36 L 855.52 311.11 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 884.19 333.23 L 876.69 330.99 L 880.36 329.64 L 881.48 325.89 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 150 256 L 322 256 L 330 264 L 330 346 L 150 346 L 150 256 Z" fill="#d5e8d4" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><path d="M 322 256 L 322 264 L 330 264" fill="none" stroke="#82b366" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(151.5,265.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="176" height="70" 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: 176px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><div>Policy Type Implementation matches ToscaPolicyType<br /></div><div>An XACML,Drools, or<br /></div>APEX implementation of a Policy Type</div></div></foreignObject><text x="88" y="41" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 195 256 L 264 216" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 450 91 L 484.84 116.26" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 489.09 119.34 L 481.37 118.07 L 484.84 116.26 L 485.48 112.4 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 490 91 L 616 91 L 616 140.3 Q 584.5 124.64 553 140.3 Q 521.5 155.96 490 140.3 L 490 99.7 Z" fill="#dae8fc" stroke="#6c8ebf" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(512.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;"><div><b>Policy</b></div><div>TOSCA Artifact<b><br /></b></div></div></div></foreignObject><text x="41" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 450 44 L 486.55 100.65" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 489.39 105.06 L 482.66 101.08 L 486.55 100.65 L 488.54 97.28 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="10" y="28.5" width="70" height="30" rx="4.5" ry="4.5" fill="#f8cecc" stroke="#b85450" pointer-events="none"/><g transform="translate(31.5,37.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="26" 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: 27px; 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;">SDC</div></div></foreignObject><text x="13" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">SDC</text></switch></g><path d="M 45 59 L 49.33 99.67" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 49.88 104.89 L 45.66 98.3 L 49.33 99.67 L 52.62 97.56 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="85" y="28.5" width="70" height="30" rx="4.5" ry="4.5" fill="#f8cecc" stroke="#b85450" pointer-events="none"/><g transform="translate(86.5,29.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="66" 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: 66px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Other System</div></div></foreignObject><text x="33" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Other System</text></switch></g><path d="M 120 59 L 128.67 99.77" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 129.77 104.91 L 124.89 98.79 L 128.67 99.77 L 131.73 97.33 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 340 116 L 483.68 134.2" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 488.89 134.86 L 481.51 137.45 L 483.68 134.2 L 482.39 130.51 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/></g></svg>
\ No newline at end of file diff --git a/docs/design/images/PolicyImplPDPSubGroup.svg b/docs/design/images/PolicyImplPDPSubGroup.svg new file mode 100644 index 00000000..8987ed22 --- /dev/null +++ b/docs/design/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 a76ab807..b420279c 100644 --- a/docs/pap/pap.rst +++ b/docs/pap/pap.rst @@ -4,29 +4,53 @@ .. _pap-label: Policy Administration Point (PAP) Architecture -============================================== -.. toctree:: +############################################## -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. +.. contents:: + :depth: 3 -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 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. -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. +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. +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. -REST API --------- +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 + + +1 APIs +====== +The APIs in the subchapters below are supported by the PAP. + +1.1 REST API +------------ + +The purpose of this API is to support CRUD of PDP groups and subgroups and to support the deployment and life cycles of +policies on PDP sub groups and PDPs. This API is provided by the *PolicyAdministration* component (PAP) of the Policy +Framework, see the :ref:`ONAP Policy Framework Architecture <architecture-label>` page. + +PDP groups and subgroups may be prefedined in the system. Predefined groups and subgroups may be modified or deleted +over this API. The policies running on predefined groups or subgroups as well as the instance counts and properties may +also be modified. + +A PDP may be preconfigured with its PDP group, PDP subgroup, and policies. The PDP sends this information to the PAP +when it starts. If the PDP group, subgroup, or any policy is unknown to the PAP, the PAP locks the PDP in state PASSIVE. PAP supports the operations listed in the following table, via its REST API: @@ -43,9 +67,8 @@ PAP supports the operations listed in the following table, via its REST API: "Deploy policy", "Deploys one or more policies to the PDPs" "Undeploy policy", "Undeploys a policy from the PDPs" - -DMaaP API ---------- +1.2 DMaaP API +------------- PAP interacts with the PDPs via the DMaaP Message Router. The messages listed in the following table are transmitted via DMaaP: @@ -59,20 +82,20 @@ in the following table are transmitted via DMaaP: "PDP state change", "Outgoing", "Changes the state of a PDP or all PDPs within a PDP Group or Subgroup" -PAP REST API Swagger --------------------- +2 PAP REST API Swagger +====================== -It is worth noting that we use basic authorization for access with user name -and password set to *healthcheck* and *zb!XztG34*, respectively. +It is worth noting that we use basic authorization for access with user name and password set to *healthcheck* and +*zb!XztG34*, respectively. -For every call, the client is encouraged to insert a uuid-type *requestID* as -parameter. It is helpful for tracking each http transaction and facilitates -debugging. More importantly, it complies with Logging requirements v1.2. If -the client does not provide the requestID in a call, one will be randomly -generated and attached to the response header, *x-onap-requestid*. +For every call, the client is encouraged to insert a uuid-type *requestID* as parameter. It is helpful for tracking each +http transaction and facilitates debugging. More importantly, it complies with Logging requirements v1.2. If the client +does not provide the requestID in a call, one will be randomly generated and attached to the response header, +*x-onap-requestid*. -In accordance with `ONAP API Common Versioning Strategy Guidelines <https://wiki.onap.org/display/DW/ONAP+API+Common+Versioning+Strategy+%28CVS%29+Guidelines>`_, -several custom headers are added in the response to each call: +In accordance with `ONAP API Common Versioning Strategy Guidelines +<https://wiki.onap.org/display/DW/ONAP+API+Common+Versioning+Strategy+%28CVS%29+Guidelines>`_, several custom headers +are added in the response to each call: .. csv-table:: :header: "Header", "Example value", "Description" @@ -86,37 +109,71 @@ several custom headers are added in the response to each call: .. swaggerv2doc:: swagger/health-check-pap.json +This operation performs a health check on the PAP. + .. swaggerv2doc:: swagger/statistics-pap.json -Note: while this API is supported, most of the statistics -are not currently updated; that work has been deferred to a later release. +This operation allows statistics for PDP groups, PDP subgroups, and individual PDPs to be retrieved. + +.. note:: + While this API is supported, most of the statistics are not currently updated; that work has been deferred to a later + release. .. swaggerv2doc:: swagger/state-change-pap.json +The state of PDP groups is managed by this operation. PDP groups can be in states PASSIVE, TEST, SAFE, or ACTIVE. For a full +description of PDP group states, see the :ref:`ONAP Policy Framework Architecture <architecture-label>` page. + .. swaggerv2doc:: swagger/group-pap.json -Note: due to current limitations, if a subgroup is to be deleted from a PDP -Group, then the policies must be removed from the subgroup in one request, -and then the subgroup deleted in a subsequent request. +This operation allows the PDP groups and subgroups to be created and updated. Many PDP groups can be created or updated +in a single POST operation by specifying more than one PDP group in the POST operation body. + +.. note:: + Due to current limitations, if a subgroup is to be deleted from a PDP Group, then the policies must be removed from + the subgroup in one request, and then the subgroup deleted in a subsequent request. .. swaggerv2doc:: swagger/group-delete-pap.json +The API also allows PDP groups to be deleted. DELETE operations are only permitted on PDP groups in PASSIVE state. + .. swaggerv2doc:: swagger/group-query-pap.json +This operation allows the PDP groups and subgroups to be listed as well as the policies that are deployed on each PDP +group and subgroup. + .. swaggerv2doc:: swagger/policy-deploy-pap.json -Note: the policy version is optional. If left unspecified, then the latest -version of the policy is deployed. On the other hand, if it is specified, it -may be an integer, or it may be a fully qualified version (e.g., "3.0.2"). +This operation allows policies to be deployed on PDP groups. + +.. note:: + The policy version is optional. If left unspecified, then the latest version of the policy is deployed. On the other + hand, if it is specified, it may be an integer, or it may be a fully qualified version (e.g., "3.0.2"). .. swaggerv2doc:: swagger/policy-undeploy-pap.json -Note: 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"). -On the other hand, if left unspecified, then the latest deployed version -will be undeployed. +This operation allows policies to be undeployed from PDP groups. + +.. note:: + 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"). + On the other hand, if left unspecified, then the latest deployed version will be undeployed. + +.. note:: + Due to current limitations, a fully qualified policy version must always be specified. + +3 Future Features +================= + +3.1 Order Health Check on PDPs +============================== + +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. + +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. -Note: due to current limitations, a fully qualified policy version must -always be specified. End of Document |