blob: 190758ce34d0d81ea7d1b6adeb754dccd224f94c [file] [log] [blame]
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -04001.. This work is licensed under a
2.. Creative Commons Attribution 4.0 International License.
3.. http://creativecommons.org/licenses/by/4.0
4
5.. _design-label:
6
7Policy Design and Development
liamfallon4d1d9832019-05-30 20:53:05 +00008#############################
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -04009
10.. contents::
11 :depth: 3
12
liamfallon4d1d9832019-05-30 20:53:05 +000013This document describes the design principles that should be used to write, deploy, and run policies of various types
14using the Policy Framework. It explains the APIs that are available for Policy Framework users. It provides copious
15examples to illustrate policy design and API usage.
liamfallonc9e27902019-05-28 13:27:04 +000016
liamfallon4d1d9832019-05-30 20:53:05 +0000171 Introduction
18==============
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -040019
liamfallon4d1d9832019-05-30 20:53:05 +000020The figure below shows the Artifacts (Blue) in the ONAP Policy Framework, the Activities (Yellow) that manipulate them,
21and important components (Salmon) that interact with them. The Policy Framework is fully TOSCA compliant, and uses
22TOSCA to model policies. Please see the :ref:`TOSCA Policy Primer <tosca-label>` page for an introduction to TOSCA
23policy concepts.
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -040024
liamfallon4d1d9832019-05-30 20:53:05 +000025.. image:: images/APIsInPolicyFramework.svg
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -040026
liamfallon4d1d9832019-05-30 20:53:05 +000027TOSCA defines the concept of a *PolicyType*, the definition of a type of policy that can be applied to a service. It
28also defines the concept of a *Policy*, an instance of a *PolicyType*. In the Policy Framework, we handle and manage
29these TOSCA definitions and tie them to real implementations of policies that can run on PDPs.
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -040030
liamfallon4d1d9832019-05-30 20:53:05 +000031The diagram above outlines how this is achieved. Each TOSCA *PolicyType* must have a corresponding *PolicyTypeImpl* in
32the Policy Framework. The TOSCA *PolicyType* definition can be used to create a TOSCA *Policy* definition, either
33directly by the Policy Framework, by CLAMP, or by some other system. Once the *Policy* artifact exists, it can be used
34together with the *PolicyTypeImpl* artifact to create a *PolicyImpl* artifact. A *PolicyImpl* artifact is an executable
35policy implementation that can run on a PDP.
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -040036
liamfallon4d1d9832019-05-30 20:53:05 +000037The TOSCA *PolicyType* artifact defines the external characteristics of the policy; defining its properties, the types
38of entities it acts on, and its triggers.  A *PolicyTypeImpl* artifact is an XACML, Drools, or APEX implementation of
39that policy definition. *PolicyType* and *PolicyTypeImpl* artifacts may be preloaded, may be loaded manually, or may be
40created using the Lifecycle API. Alternatively, *PolicyType* definitions may be loaded over the Lifecycle API for
41preloaded *PolicyTypeImpl* artifacts. A TOSCA *PolicyType* artifact can be used by clients (such as CLAMP or CLI tools)
42to create, parse, serialize, and/or deserialize an actual Policy.
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -040043
liamfallon4d1d9832019-05-30 20:53:05 +000044The TOSCA *Policy* artifact is used internally by the Policy Framework, or is input by CLAMP or other systems. This
45artifact specifies the values of the properties for the policy and specifies the specific entities the policy acts on.
46Policy Design uses the TOSCA *Policy* artifact and the *PolicyTypeImpl* artifact to create an executable *PolicyImpl*
47artifact. 
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -040048
liamfallon4d1d9832019-05-30 20:53:05 +0000492 ONAP Policy Types
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -040050===================
51
liamfallon4d1d9832019-05-30 20:53:05 +000052Policy Type Design manages TOSCA *PolicyType* artifacts and their *PolicyTypeImpl* implementations.
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -040053
liamfallon4d1d9832019-05-30 20:53:05 +000054A TOSCA *PolicyType* may ultimately be defined by the modeling team but for now are defined by the Policy Framework
55project. Various editors and GUIs are available for creating *PolicyTypeImpl* implementations. However, systematic
56integration of *PolicyTypeImpl* implementation is outside the scope of the ONAP Dublin release.
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -040057
liamfallon4d1d9832019-05-30 20:53:05 +000058The *PolicyType* definitions and implementations listed below are preloaded and are always available for use in the
59Policy Framework.
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -040060
jhh89ba0972020-04-13 12:51:32 -050061======================================= ===============================================================================
62**Policy Type** **Description**
63======================================= ===============================================================================
64onap.policies.Monitoring Overarching model that supports Policy driven DCAE microservice components used
65 in Control Loops
66onap.policies.controlloop.Operational Used to support legacy actor/action operational policies for control loops
67onap.policies.controlloop.Guard Control Loop guard policies for policing control loops
68onap.policies.controlloop.Coordination Control Loop Coordination policies to assist in coordinating multiple control
69 loops at runtime
70onap.policies.controlloop.common.Drools Used to support tosca compliant actor/action operational policies for control
71 loops
72onap.policies.native.drools.Controller Used to support the definition of PDP-D controllers
73onap.policies.native.drools.Artifact Used to associate application's software with a PDP-D controller
74======================================= ===============================================================================
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -040075
liamfallon4d1d9832019-05-30 20:53:05 +0000762.1 Policy Type: onap.policies.Monitoring
77-----------------------------------------
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -040078
liamfallon4d1d9832019-05-30 20:53:05 +000079This is a base Policy Type that supports Policy driven DCAE microservice components used in a Control Loops. The
80implementation of this Policy Type is developed using the XACML PDP to support question/answer Policy Decisions during
81runtime for the DCAE Policy Handler.
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -040082
liamfallon4d1d9832019-05-30 20:53:05 +000083.. code-block:: yaml
84 :caption: Base Policy Type definition for onap.policies.Monitoring
85 :linenos:
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -040086
liamfallon4d1d9832019-05-30 20:53:05 +000087 tosca_definitions_version: tosca_simple_yaml_1_0_0
88 topology_template:
89 policy_types:
90 - onap.policies.Monitoring:
91 derived_from: tosca.policies.Root
92 version: 1.0.0
93 description: a base policy type for all policies that govern monitoring provision
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -040094
liamfallon4d1d9832019-05-30 20:53:05 +000095The *PolicyTypeImpl* implementation of the *onap.policies.Montoring* Policy Type is generic to support definition of
96TOSCA *PolicyType* artifacts in the Policy Framework using the Policy Type Design API. Therefore many TOSCA *PolicyType*
97artifacts will use the same *PolicyTypeImpl* implementation with different property types and towards different targets.
98This allows dynamically generated DCAE microservice component Policy Types to be created at Design Time.
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -040099
liamfallon4d1d9832019-05-30 20:53:05 +0000100DCAE microservice components can generate their own TOSCA *PolicyType* using TOSCA-Lab Control Loop guard policies in
101SDC (Stretch Goal) or can do so manually. See `How to generate artefacts for SDC catalog using Tosca Lab Tool
102<https://wiki.onap.org/display/DW/How+to+generate+artefacts+for+SDC+catalog+using+Tosca+Lab+Tool>`__
103for details on TOSCA-LAB in SDC. For Dublin, the DCAE team is defining the manual steps required to build policy models
104`Onboarding steps for DCAE MS through SDC/Policy/CLAMP (Dublin)
105<https://wiki.onap.org/pages/viewpage.action?pageId=60883710>`__.
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -0400106
liamfallon4d1d9832019-05-30 20:53:05 +0000107.. note::
108 For Dublin, microservice Policy Types will be preloaded into the SDC platform and be available as a Normative. The
109 policy framework will preload support for those microservice Monitoring policy types.
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -0400110
liamfallon4d1d9832019-05-30 20:53:05 +0000111.. code-block:: yaml
112 :caption: Example PolicyType *onap.policies.monitoring.MyDCAEComponent* derived from *onap.policies.Monitoring*
113 :linenos:
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -0400114
liamfallon4d1d9832019-05-30 20:53:05 +0000115 tosca_definitions_version: tosca_simple_yaml_1_0_0
116 policy_types:
117 - onap.policies.Monitoring:
118 derived_from: tosca.policies.Root
119 version: 1.0.0
120 description: a base policy type for all policies that govern monitoring provision
121 - onap.policies.monitoring.MyDCAEComponent:
122 derived_from: onap.policies.Monitoring
123 version: 1.0.0
124 properties:
125 mydcaecomponent_policy:
126 type: map
127 description: The Policy Body I need
128 entry_schema:
129 type: onap.datatypes.monitoring.mydatatype
130
131 data_types:
132 - onap.datatypes.monitoring.MyDataType:
133 derived_from: tosca.datatypes.Root
134 properties:
135 my_property_1:
136 type: string
137 description: A description of this property
138 constraints:
139 - valid_values:
140 - value example 1
141 - value example 2
142
143For more examples of monitoring policy type definitions, please refer to the examples in the `ONAP policy-models gerrit
144repository <https://github.com/onap/policy-models/tree/master/models-examples/src/main/resources/policytypes>`__.
145
1462.2 Policy Type: onap.policies.controlloop.Operational
147------------------------------------------------------
148
149This policy type is used to support actor/action operational policies for control loops. There are two types of
150implementations for this policy type
151
1521. Drools implementations that supports runtime Control Loop actions taken on components such as SO/APPC/VFC/SDNC/SDNR
1532. Implementations using APEX to support Control Loops.
154
155.. note::
156 For Dublin, this policy type will ONLY be used for the Policy Framework to distinguish the policy type as operational.
157
158.. code-block:: yaml
159 :caption: Base Policy Type definition for onap.policies.controlloop.Operational
160 :linenos:
161
162 tosca_definitions_version: tosca_simple_yaml_1_0_0
163 policy_types:
164 - onap.policies.controlloop.Operational:
165 derived_from: tosca.policies.Root
166 version: 1.0.0
167 description: Operational Policy for Control Loops
168
169Applications should use the following Content-Type when creating onap.policies.controlloop.Operational policies:
170.. code-block::
171
172 Content-Type: "application/yaml"
173
1742.2.1 Operational Policy Type Schema for Drools
175~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
176
177For Dublin Drools will still support the Casablanca YAML definition of an Operational Policy for Control Loops.
178
179Please use the the `YAML Operational Policy format
180<https://github.com/onap/policy-models/blob/master/models-interactions/model-yaml/README-v2.0.0.md>`__.
181
1822.2.2 Operational Policy Type Schema for APEX
183~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
184
185The operational Policy Type schema for APEX extends the base operational Policy Type schema. This Policy Type allows
186parameters specific to the APEX PDP to be specified as a TOSCA policy. See `this sample APEX policy type definition
187<https://github.com/onap/integration-csit/blob/master/tests/policy/apex-pdp/data/onap.policies.controlloop.operational.Apex.json>`__.
188
1892.3 Policy Type: onap.policies.controlloop.Guard
190------------------------------------------------
191
192This policy type is the the type definition for Control Loop guard policies for frequency limiting, blacklisting and
193min/max guards to help protect runtime Control Loop Actions from doing harm to the network. This policy type is
194developed using the XACML PDP to support question/answer Policy Decisions during runtime for the Drools and APEX
195onap.controlloop.Operational policy type implementations.
196
197.. code-block:: yaml
198 :caption: Base Policy Type definition for onap.policies.controlloop.Guard
199 :linenos:
200
201 tosca_definitions_version: tosca_simple_yaml_1_0_0
202 policy_types:
203 - onap.policies.controlloop.Guard:
204 derived_from: tosca.policies.Root
205 version: 1.0.0
206 description: Guard Policy for Control Loops Operational Policies
207
208As with the *onap.policies.Monitoring* policy type, the *PolicyTypeImpl* implementation of the
209*onap.policies.controlloop.Guard* Policy Type is generic to support definition of TOSCA *PolicyType* artifacts in the
210Policy Framework using the Policy Type Design API.
211
212.. note::
213 For Dublin, only the following derived Policy Type definitions below are preloaded in the Policy Framework. However,
214 the creation of policies will still support the payload from Casablanca.
215
216Guard policy type definitions for *FrequencyLimiter*, *BlackList*, and *MinMax* are available in the `ONAP
217policy-models gerrit repository
218<https://github.com/onap/policy-models/tree/master/models-examples/src/main/resources/policytypes>`__.
219
jhh89ba0972020-04-13 12:51:32 -05002202.4 Policy Type: onap.policies.controlloop.common.Drools
221--------------------------------------------------------
222
223This policy type supports composition of Tosca-compliant Operational Policies for the PDP-D. The
224`onap.policies.controlloop.common.Drools policy type specification
225<https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.controlloop.operational.common.Drools.yaml>`__ is preferred for composition of operational
226policies over its `onap.policies.controlloop.Operational policy type specification
227<https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.controlloop.Operational.yaml>`__ precursor, which eventually will be deprecated.
228Both policy types are functionally equivalent.
229
2302.5 Policy Type: onap.policies.native.drools.Controller
231-------------------------------------------------------
232
233This policy type supports creation of native PDP-D controllers via policy. A controller is an abstraction on
234the PDP-D that groups communication channels, message mapping rules, and
235any other arbitrary configuration data to realize an application.
236
237Policies of this type are composed against the
238`onap.policies.native.drools.Controller policy type specification
239<https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.native.Drools.yaml>`__ specification.
240
2412.6 Policy Type: onap.policies.native.drools.Artifact
242-------------------------------------------------------
243
244This policy type supports the dynamic association of a native PDP-D controller with rules and dependent
245java libraries. This policy type is used in conjuction with the onap.policies.native.drools.Controller
246type to create or upgrade a drools application on a live PDP-D.
247
248Policies of this type are composed against the
249`onap.policies.native.drools.Controller policy type specification
250<https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.native.Drools.yaml>`__ specification.
251
liamfallon4d1d9832019-05-30 20:53:05 +00002523 PDP Deployment and Registration with PAP
253==========================================
254
255The unit of execution and scaling in the Policy Framework is a *PolicyImpl* entity. A *PolicyImpl* entity runs on a PDP.
256As is explained above, a *PolicyImpl* entity is a *PolicyTypeImpl* implementation parameterized with a TOSCA *Policy*.
257
258.. image:: images/PolicyImplPDPSubGroup.svg
259
260In order to achieve horizontal scalability, we group the PDPs running instances of a given *PolicyImpl* entity logically
261together into a *PDPSubGroup*. The number of PDPs in a *PDPSubGroup* can then be scaled up and down using Kubernetes. In
262other words, all PDPs in a subgroup run the same *PolicyImpl*, that is the same policy template implementation (in
263XACML, Drools, or APEX) with the same parameters.
264
265The figure above shows the layout of *PDPGroup* and *PDPSubGroup* entities. The figure shows examples of PDP groups for
266Control Loop and Monitoring policies on the right.
267
268The health of PDPs is monitored by the PAP in order to alert operations teams managing policy. The PAP manages the life
269cycle of policies running on PDPs.
270
271The table below shows the deployment methods in which *PolicyImpl* entities can be deployed to PDP Subgroups.
272
273========== =========================================== ============================== ==================================
274**Method** **Description** **Advantages** **Disadvantages**
275========== =========================================== ============================== ==================================
276Cold The *PolicyImpl* (*PolicyTypeImpl* and No run time configuration Very restrictive, no run time
277 TOSCA *Policy*) are predeployed on the PDP. required and run time configuration of PDPs is possible.
278 PDP is fully configured and ready to administration is simple.
279 execute when started.
280
281 PDPs register with the PAP when they
282 start, providing the *PolicyImpl* they
283 have been predeployed with.
284
285Warm The *PolicyTypeImpl* entity is predeployed The configuration, parameters, Administration and management is
286 on the PDP. A TOSCA *Policy* may be loaded and PDP group of PDPs may be required. The configuration and
287 at startup. The PDP may be configured or changed at run time by loading life cycle of the TOSCA policies
288 reconfigured with a new or updated TOSCA or updating a TOSCA *Policy* can change at run time and must be
289 *Policy* at run time. into the PDP. administered and managed.
290
291 PDPs register with the PAP when they start, Support TOSCA *Policy* entity
292 providing the *PolicyImpl* they have been life cycle managgement is
293 predeployed with if any. The PAP may update supported, allowing features
294 the TOSCA *Policy* on a PDP at any time such as *PolicyImpl* Safe Mode
295 after registration. and *PolicyImpl* retirement.
296
297Hot The *PolicyImpl* (*PolicyTypeImpl* and The policy logic, rules, Administration and management is
298 TOSCA *Policy*) are deployed at run time. configuration, parameters, and more complex. The *PolicyImpl*
299 The *PolicyImpl* (*PolicyTypeImpl* and PDP group of PDPs may be itself and its configuration and
300 TOSCA *Policy*) may be loaded at startup. changed at run time by loading life cycle as well as the life
301 The PDP may be configured or reconfigured or updating a TOSCA *Policy* cycle of the TOSCA policies can
302 with a new or updated *PolicyTypeImpl* and *PolicyTypeImpl* into the change at run time and must be
303 and/or TOSCA *Policy* at run time. PDP. administered and managed.
304
305 PDPs register with the PAP when they Lifecycle management of TOSCA
306 start, providing the *PolicyImpl* they have *Policy* entities and
307 been predeployed with if any. The PAP may *PolicyTypeImpl* entites is
308 update the TOSCA *Policy* and supported, allowing features
309 *PolicyTypeImpl* on a PDP at any time after such as *PolicyImpl* Safe Mode
310 registration and *PolicyImpl* retirement.
311========== =========================================== ============================== ==================================
312
3134. Policy Framework Public APIs
314===============================
315
316The Policy Framework provides the public APIs outline in the subsections below. For a full description of the APIs, see
317their individual documentation linked in each subsection.
318
3194.1 Policy Type Design API for TOSCA Policy Types
320-------------------------------------------------
321
322The full documentation for this API is available on the :ref:`Policy Life Cycle API <api-label>` page.
323
324The purpose of this API is to support CRUD of TOSCA *PolicyType* entities. This API is provided by the
325*PolicyDevelopment* component of the Policy Framework, see the :ref:`The ONAP Policy Framework Architecture
326<architecture-label>` page.
327
328The API allows applications to create, update, delete, and query *PolicyType* entities so that they become available for
329use in ONAP by applications such as CLAMP. Some Policy Type entities are preloaded in the Policy Framework. The TOSCA
330fields below are valid on API calls:
331
332============ ======= ======== ========== ===============================================================================
333**Field** **GET** **POST** **DELETE** **Comment**
334============ ======= ======== ========== ===============================================================================
335(name) M M M The definition of the reference to the Policy Type, GET allows ranges to be
336 specified
337version O M C GET allows ranges to be specified, must be specified if more than one version
338 of the Policy Type exists
339description R O N/A Desciption of the Policy Type
340derived_from R C N/A Must be specified when a Policy Type is derived from another Policy Type such
341 as in the case of derived Monitoring Policy Types
342metadata R O N/A Metadata for the Policy Type
343properties R M N/A This field holds the specification of the specific Policy Type in ONAP
344targets R O N/A A list of node types and/or group types to which the Policy Type can be applied
345triggers R O N/A Specification of policy triggers, not currently supported in ONAP
346============ ======= ======== ========== ===============================================================================
347
348.. note::
349 On this and subsequent tables, use the following legend: M-Mandatory, O-Optional, R-Read-only, C-Conditional.
350 Conditional means the field is mandatory when some other field is present.
351
352.. note::
353 Preloaded policy types may only be queried over this API, modification or deletion of preloaded policy type
354 implementations is disabled.
355
356.. note::
357 Policy types that are in use (referenced by defined Policies) may not be deleted.
358
359.. note::
360 The group types of targets in TOSCA are groups of TOSCA nodes, not PDP groups; the *target* concept in TOSCA is
361 equivalent to the Policy Enforcement Point (PEP) concept
362
3634.2 Policy Design API
364---------------------
365
366The full documentation for this API is available on the :ref:`Policy Life Cycle API <api-label>` page.
367
368The purpose of this API is to support CRUD of TOSCA *Policy* entities from TOSCA compliant *PolicyType* definitions.
369TOSCA *Policy* entities become the parameters for *PolicyTypeImpl* entities, producing *PolicyImpl* entities that can
370run on PDPs. This API is provided by the *PolicyDevelopment* component of the Policy Framework, see the :ref:`The ONAP
371Policy Framework Architecture <architecture-label>` page.
372
373This API allows applications (such as CLAMP and Integration) to create, update, delete, and query *Policy* entities. The
374TOSCA fields below are valid on API calls:
375
376=========== ======= ======== ========== ================================================================================
377**Field** **GET** **POST** **DELETE** **Comment**
378=========== ======= ======== ========== ================================================================================
379(name) M M M The definition of the reference to the Policy, GET allows ranges to be specified
380type O M O The Policy Type of the policy, see section 3.1
381description R O O
382metadata R O N/A
383properties R M N/A This field holds the specification of the specific Policy in ONAP
384targets R O N/A A list of nodes and/or groups to which the Policy can be applied
385=========== ======= ======== ========== ================================================================================
386
387.. note::
388 Policies that are deployed (used on deployed *PolicyImpl* entities) may not be deleted
389
390.. note::
391 This API is NOT used by DCAE for a decision on what policy the DCAE PolicyHandler should retrieve and enforce
392
393.. note::
394 The groups of targets in TOSCA are groups of TOSCA nodes, not PDP groups; the *target* concept in TOSCA is equivalent
395 to the Policy Enforcement Point (PEP) concept
396
3974.3 Policy Administration API
398-----------------------------
399
400The full documentation for this API is available on the :ref:`Policy Administration Point (PAP) <pap-label>` page.
401
402The purpose of this API is to support CRUD of PDP groups and subgroups and to support the deployment and life cycles of
403*PolicyImpl* entities (TOSCA *Policy* and *PolicyTypeImpl* entities) on PDP sub groups and PDPs. This API is provided by
404the *PolicyAdministration* component (PAP) of the Policy Framework, see the :ref:`The ONAP Policy Framework Architecture
405<architecture-label>` page.
406
407PDP groups and subgroups may be prefedined in the system. Predefined groups and subgroups can be modified or deleted
408over this API. The policies running on predefined groups or subgroups as well as the desired instance counts and
409properties can also be modified.
410
411A PDP may be preconfigured with its PDP group, PDP subgroup, and policies. The PDP sends this information to the PAP
412when it starts. If the PDP group, subgroup, or any policy is unknown to the PAP, the PAP locks the PDP in state PASSIVE.
413
414The state of PDP groups is managed by the API. PDP groups can be in states PASSIVE, TEST, SAFE, or ACTIVE. For a full
415description of PDP group states, the :ref:`The ONAP Policy Framework Architecture <architecture-label>` page.
416
417The API supports retrieval of statistics for PDP groups, PDP subgroups, and individual PDPs. It also allows a PDP group
418health check to be ordered on PDP groups and on individual PDPs.
419
420The fields below are valid on API calls:
421
422============================ ======= ======== ========== ===============================================================
423**Field** **GET** **POST** **DELETE** **Comment**
424============================ ======= ======== ========== ===============================================================
425name M M M The name of the PDP group
426version O M C The version of the PDP group
427state R N/A N/A The administrative state of the PDP group: PASSIVE, SAFE, TEST,
428 or ACTIVE
429description R O N/A The PDP group description
430properties R O N/A Specific properties for a PDP group
431pdp_subgroups R M N/A A list of PDP subgroups for a PDP group
432->pdp_type R M N/A The PDP type of this PDP subgroup, currently xacml, drools, or
433 apex
434->supported_policy_types R N/A N/A A list of the policy types supported by the PDPs in this PDP
Saryu Shah3c711d12019-12-04 23:17:41 +0000435 subgroup. A trailing “.*” can be used to specify multiple
436 policy types; for example, “onap.policies.monitoring.*”
437 would match any policy type beginning with
Saryu Shah1c3ea0b2019-11-25 18:08:00 +0000438 “onap.policies.monitoring.”
liamfallon4d1d9832019-05-30 20:53:05 +0000439->policies R M N/A The list of policies running on the PDPs in this PDP subgroup
440->->(name) R M N/A The name of a TOSCA policy running in this PDP subgroup
441->->policy_type R N/A N/A The TOSCA policy type of the policy
442->->policy_type_version R N/A N/A The version of the TOSCA policy type of the policy
443->->policy_type_impl R C N/A The policy type implementation (XACML, Drools Rules, or APEX
444 Model) that implements the policy
445->instance_count R N/A N/A The number of PDP instances running in a PDP subgroup
446->min_instance_count O N/A N/A The minumum number of PDP instances to run in a PDP subgroup
447->properties O N/A N/A Deployment configuration or other properties for the PDP
448 subgroup
449->deployment_info R N/A N/A Information on the deployment for a PDP subgroup
450->instances R N/A N/A A list of PDP instances running in a PDP subgroup
451->->instance R N/A N/A The instance ID of a PDP running in a Kuberenetes Pod
452->->state R N/A N/A The administrative state of the PDP: PASSIVE, SAFE, TEST, or
453 ACTIVE
454->->healthy R N/A N/A The result of the latest health check on the PDP:
455 HEALTHY/NOT_HEALTHY/TEST_IN_PROGRESS
456->->message O N/A N/A A status message for the PDP if any
457->->deployment_instance_info R N/A N/A Information on the node running the PDP
458============================ ======= ======== ========== ===============================================================
459
460Note: In the Dublin release, the *policy_type_impl* of all policy types in a PDP subgroup must be the same.
461
4624.4 Policy Decision API - Getting Policy Decisions
463--------------------------------------------------
464
465Policy decisions are required by ONAP components to support the policy-driven ONAP architecture. Policy Decisions are
466implemented using the XACML PDP. The calling application must provide attributes in order for the XACML PDP to return a
467correct decision.
468
469Decision API queries are implemented with a POST operation with a JSON body that specifies the filter for the policies
470to be returned.
471
472*https:{url}:{port}/decision/v1/ POST*
473
474The table below describes the fields in the JSON payload for the decision API Call.
475
476============= ======= ======== ==========================================================================
477**Field** **R/O** **Type** **Description**
478============= ======= ======== ==========================================================================
479ONAPName R String Name of the ONAP Project that is making the request.
480ONAPComponent O String Name of the ONAP Project component that is making the request.
481ONAPInstance O String Optional instance identification for that ONAP component.
482action R String The action that the ONAP component is performing on a resource.
483 "configure" → DCAE uS onap.Monitoring policy Decisions to configure uS
484 "naming"
485 "placement"
486 "guard"
487============= ======= ======== ==========================================================================
488
489These sub metadata structures are used to scope the resource the ONAP component is performing an action upon. At least
490one must be specified in order for Policy to return a decision. Multiple structures may be utilized to help define a
Pamela Dragosh20cf0272019-09-10 12:25:24 -0400491precise scope for a decision.
492
4934.4.1 Policy Decision API - DCAE configuration examples
494-------------------------------------------------------
495
496These resource fields are examples on how DCAE implements its "configure" application to make Decision API calls.
liamfallon4d1d9832019-05-30 20:53:05 +0000497
498================= ======= ======== ==================================================================
499**Field** **R/O** **Type** **Description**
500================= ======= ======== ==================================================================
501policy-type-name O String The policy type name. This may be a regular expression.
502policy-id O String The policy id. This may be a regular expression or an exact value.
503================= ======= ======== ==================================================================
504
505This example below shows the JSON body of a query with a single policy ID.
506
507.. code-block:: yaml
508 :caption: Decision API Call - Single Policy ID query
509 :linenos:
510
511 {
512 "ONAPName": "DCAE",
513 "ONAPComponent": "PolicyHandler",
514 "ONAPInstance": "622431a4-9dea-4eae-b443-3b2164639c64",
515 "action": "configure",
516 "resource": {
517 "policy-id": "onap.scaleout.tca"
518 }
519 }
520
521.. code-block:: yaml
522 :caption: Decision Response - Single Policy ID query
523 :linenos:
524
525 {
526 "policies": {
527 "onap.scaleout.tca": {
528 "type": "onap.policies.monitoring.cdap.tca.hi.lo.app",
529 "version": "1.0.0",
530 "metadata": {
531 "policy-id": "onap.scaleout.tca",
532 "policy-version": 1
533 },
534 "properties": {
535 "tca_policy": {
536 "domain": "measurementsForVfScaling",
537 "metricsPerEventName": [{
538 "eventName": "vLoadBalancer",
539 "controlLoopSchemaType": "VNF",
540 "policyScope": "type=configuration",
541 "policyName": "onap.scaleout.tca",
542 "policyVersion": "v0.0.1",
543 "thresholds": [{
544 "closedLoopControlName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3",
545 "closedLoopEventStatus": "ONSET",
546 "version": "1.0.2",
547 "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*]
548 .receivedBroadcastPacketsAccumulated",
549 "thresholdValue": 500,
550 "direction": "LESS_OR_EQUAL",
551 "severity": "MAJOR"
552 },
553 {
554 "closedLoopControlName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3",
555 "closedLoopEventStatus": "ONSET",
556 "version": "1.0.2",
557 "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*]
558 .receivedBroadcastPacketsAccumulated",
559 "thresholdValue": 5000,
560 "direction": "GREATER_OR_EQUAL",
561 "severity": "CRITICAL"
562 }]
563 }]
564 }
565 }
566 }
567 }
568 }
569
570This example below shows the JSON body of a query with multiple policy IDs.
571
572.. code-block:: yaml
573 :caption: Decision API Call - Multiple Policy IDs query
574 :linenos:
575
576 {
577 "ONAPName": "DCAE",
578 "ONAPComponent": "PolicyHandler",
579 "ONAPInstance": "622431a4-9dea-4eae-b443-3b2164639c64",
580 "action": "configure",
581 "resource": {
582 "policy-id": [
583 "onap.scaleout.tca",
584 "onap.restart.tca"
585 ]
586 }
587 }
588
589.. code-block:: yaml
590 :caption: Decision Response - Multiple Policy IDs query
591 :linenos:
592
593 {
594 "policies": {
595 "onap.scaleout.tca": {
596 "type": "onap.policies.monitoring.cdap.tca.hi.lo.app",
597 "version": "1.0.0",
598 "metadata": {
599 "policy-id": "onap.scaleout.tca"
600 },
601 "properties": {
602 "tca_policy": {
603 "domain": "measurementsForVfScaling",
604 "metricsPerEventName": [
605 {
606 "eventName": "vLoadBalancer",
607 "controlLoopSchemaType": "VNF",
608 "policyScope": "type=configuration",
609 "policyName": "onap.scaleout.tca",
610 "policyVersion": "v0.0.1",
611 "thresholds": [
612 {
613 "closedLoopControlName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3",
614 "closedLoopEventStatus": "ONSET",
615 "version": "1.0.2",
616 "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*]
617 .receivedBroadcastPacketsAccumulated",
618 "thresholdValue": 500,
619 "direction": "LESS_OR_EQUAL",
620 "severity": "MAJOR"
621 },
622 {
623 "closedLoopControlName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3",
624 "closedLoopEventStatus": "ONSET",
625 "version": "1.0.2",
626 "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*]
627 .receivedBroadcastPacketsAccumulated",
628 "thresholdValue": 5000,
629 "direction": "GREATER_OR_EQUAL",
630 "severity": "CRITICAL"
631 }
632 ]
633 }
634 ]
635 }
636 }
637 },
638 "onap.restart.tca": {
639 "type": "onap.policies.monitoring.cdap.tca.hi.lo.app",
640 "version": "1.0.0",
641 "metadata": {
642 "policy-id": "onap.restart.tca",
643 "policy-version": 1
644 },
645 "properties": {
646 "tca_policy": {
647 "domain": "measurementsForVfScaling",
648 "metricsPerEventName": [
649 {
650 "eventName": "Measurement_vGMUX",
651 "controlLoopSchemaType": "VNF",
652 "policyScope": "DCAE",
653 "policyName": "DCAE.Config_tca-hi-lo",
654 "policyVersion": "v0.0.1",
655 "thresholds": [
656 {
657 "closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e",
658 "version": "1.0.2",
659 "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*]
660 .arrayOfFields[0].value",
661 "thresholdValue": 0,
662 "direction": "EQUAL",
663 "severity": "MAJOR",
664 "closedLoopEventStatus": "ABATED"
665 },
666 {
667 "closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e",
668 "version": "1.0.2",
669 "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*]
670 .arrayOfFields[0].value",
671 "thresholdValue": 0,
672 "direction": "GREATER",
673 "severity": "CRITICAL",
674 "closedLoopEventStatus": "ONSET"
675 }
676 ]
677 }
678 ]
679 }
680 }
681 }
682 }
683 }
684
685This example below shows the JSON body of a query to return all the deployed policies for a specific policy type.
686
687.. code-block:: yaml
688 :caption: Decision API Call - Policies for Policy Type query
689 :linenos:
690
691 {
692 "ONAPName": "DCAE",
693 "ONAPComponent": "PolicyHandler",
694 "ONAPInstance": "622431a4-9dea-4eae-b443-3b2164639c64",
695 "action": "configure",
696 "resource": {
697 "policy-type": "onap.policies.monitoring.cdap.tca.hi.lo.app"
698 }
699 }
700
701.. code-block:: yaml
702 :caption: Decision Response - Policies for Policy Type query
703 :linenos:
704
705 {
706 "policies": {
707 "onap.scaleout.tca": {
708 "type": "onap.policies.monitoring.cdap.tca.hi.lo.app",
709 "version": "1.0.0",
710 "metadata": {
711 "policy-id": "onap.scaleout.tca",
712 "policy-version": 1,
713 },
714 "properties": {
715 "tca_policy": {
716 "domain": "measurementsForVfScaling",
717 "metricsPerEventName": [
718 {
719 "eventName": "vLoadBalancer",
720 "controlLoopSchemaType": "VNF",
721 "policyScope": "type=configuration",
722 "policyName": "onap.scaleout.tca",
723 "policyVersion": "v0.0.1",
724 "thresholds": [
725 {
726 "closedLoopControlName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3",
727 "closedLoopEventStatus": "ONSET",
728 "version": "1.0.2",
729 "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*]
730 .receivedBroadcastPacketsAccumulated",
731 "thresholdValue": 500,
732 "direction": "LESS_OR_EQUAL",
733 "severity": "MAJOR"
734 },
735 {
736 "closedLoopControlName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3",
737 "closedLoopEventStatus": "ONSET",
738 "version": "1.0.2",
739 "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*]
740 .receivedBroadcastPacketsAccumulated",
741 "thresholdValue": 5000,
742 "direction": "GREATER_OR_EQUAL",
743 "severity": "CRITICAL"
744 }
745 ]
746 }
747 ]
748 }
749 }
750 },
751 "onap.restart.tca": {
752 "type": "onap.policies.monitoring.cdap.tca.hi.lo.app",
753 "version": "1.0.0",
754 "metadata": {
755 "policy-id": "onap.restart.tca",
756 "policy-version": 1
757 },
758 "properties": {
759 "tca_policy": {
760 "domain": "measurementsForVfScaling",
761 "metricsPerEventName": [
762 {
763 "eventName": "Measurement_vGMUX",
764 "controlLoopSchemaType": "VNF",
765 "policyScope": "DCAE",
766 "policyName": "DCAE.Config_tca-hi-lo",
767 "policyVersion": "v0.0.1",
768 "thresholds": [
769 {
770 "closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e",
771 "version": "1.0.2",
772 "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0]
773 .value",
774 "thresholdValue": 0,
775 "direction": "EQUAL",
776 "severity": "MAJOR",
777 "closedLoopEventStatus": "ABATED"
778 },
779 {
780 "closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e",
781 "version": "1.0.2",
782 "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0]
783 .value",
784 "thresholdValue": 0,
785 "direction": "GREATER",
786 "severity": "CRITICAL",
787 "closedLoopEventStatus": "ONSET"
788 }
789 ]
790 }
791 ]
792 }
793 }
794 },
795 "onap.vfirewall.tca": {
796 "type": "onap.policy.monitoring.cdap.tca.hi.lo.app",
797 "version": "1.0.0",
798 "metadata": {
799 "policy-id": "onap.vfirewall.tca",
800 "policy-version": 1
801 },
802 "properties": {
803 "tca_policy": {
804 "domain": "measurementsForVfScaling",
805 "metricsPerEventName": [
806 {
807 "eventName": "vLoadBalancer",
808 "controlLoopSchemaType": "VNF",
809 "policyScope": "resource=vLoadBalancer;type=configuration",
810 "policyName": "onap.vfirewall.tca",
811 "policyVersion": "v0.0.1",
812 "thresholds": [
813 {
814 "closedLoopControlName": "ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a",
815 "closedLoopEventStatus": "ONSET",
816 "version": "1.0.2",
817 "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*]
818 .receivedBroadcastPacketsAccumulated",
819 "thresholdValue": 500,
820 "direction": "LESS_OR_EQUAL",
821 "severity": "MAJOR"
822 },
823 {
824 "closedLoopControlName": "ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a",
825 "closedLoopEventStatus": "ONSET",
826 "version": "1.0.2",
827 "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*]
828 .receivedBroadcastPacketsAccumulated",
829 "thresholdValue": 5000,
830 "direction": "GREATER_OR_EQUAL",
831 "severity": "CRITICAL"
832 }
833 ]
834 }
835 ]
836 }
837 }
838 }
839 }
840 }
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -0400841
Pamela Dragosh20cf0272019-09-10 12:25:24 -04008424.4.2 Policy Decision API - Guard Decision API examples
843-------------------------------------------------------
Pamela Dragosh5fc2fdb2019-05-17 09:42:27 -0400844
Pamela Dragosh20cf0272019-09-10 12:25:24 -0400845These resource fields are examples on how Drools-PDP implements its "guard" application to make Decision API calls. This
846structure is a transition from the legacy guard API calls. So each of these resources are contained under a "guard" object
847in the "resource" object of the JSON structure.
848
849================= ======= ======== ==================================================================
850**Field** **R/O** **Type** **Description**
851================= ======= ======== ==================================================================
852actor O String The actor (eg APPC, SO) that is performing a recipe
853recipe O String The recipe (eg Restart, Reboot) that the actor going to execute
854clname O String The unique ID for the Control Loop
855target O String The target VNF the actor is executing the recipe on
856vfCount O String Specific to SO "VF Module Create" - the current count of VNFs
857
858================= ======= ======== ==================================================================
859
860This example below shows the JSON body of a guard Decision API call.
861
862.. code-block:: json
863 :caption: Decision API Call - Guard
864 :linenos:
865
866 {
867 "ONAPName": "Policy",
868 "ONAPComponent": "drools-pdp",
869 "ONAPInstance": "usecase-template",
870 "requestId": "unique-request-id-1",
871 "action": "guard",
872 "resource": {
873 "guard": {
874 "actor": "SO",
875 "recipe": "VF Module Create",
876 "clname": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3",
877 "target": "vLoadBalancer-00",
878 "vfCount": "1"
879 }
880 }
881 }
882
883.. code-block:: json
884 :caption: Decision Response - Guard
885 :linenos:
886
887 {"status":"Permit"}
888
8894.4.3 Policy Decision API - Optimize Decision API examples
890----------------------------------------------------------
891
892These resource fields are examples on how OOF project will make Decision API calls. NOTE: The OOF project
893has not yet upgraded to the API. This work is scheduled for Frankfurt.
894
895================= ======= ============== ==================================================================
896**Field** **R/O** **Type** **Description**
897================= ======= ============== ==================================================================
898scope O List of String Optional scope for the policy.
899services O List of String One or more services the policy applies to.
900resources O List of String The unique ID for the Control Loop
901geography O List of String The target VNF the actor is executing the recipe on
902
Saryu Shah1c3ea0b2019-11-25 18:08:00 +0000903================= ======= ============== ==================================================================
Pamela Dragosh20cf0272019-09-10 12:25:24 -0400904
905This example below shows the JSON body of an Optimize Decision API call.
906
907.. code-block:: json
908 :caption: Decision API Call - Optimize vCPE service in US
909 :linenos:
910
911 {
912 "ONAPName": "OOF",
913 "ONAPComponent": "OOF-component",
914 "ONAPInstance": "OOF-component-instance",
915 "action": "optimize",
916 "resource": {
917 "scope": [],
918 "services": ["vCPE"],
919 "resources": [],
920 "geography": ["US"]
921 }
922 }
923
924.. code-block:: json
925 :caption: Decision Response -
926 :linenos:
927
928 {
929 "policies:" {
930 ### Omitted for brevity
931 }
932 }
933
934End of Document