TO BE DELETED - refer to Dublin Documentation

TO BE DELETED - refer to Dublin Documentation

Official Documentation for Dublin

https://docs.onap.org/en/dublin/submodules/policy/parent.git/docs/design/design.html

 

 

 

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.

 

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 TOSCA Policy Primer 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

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
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

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 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).

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
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
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
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
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
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
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
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
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
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

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.

PDPs register with the PAP when they start, providing the PolicyImpl they have been predeployed with.

No run time configuration required and run time administration is simple.

Very restrictive, no run time configuration of PDPs is possible.

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.

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.

The configuration, parameters, and PDP group of PDPs may be changed at run time by loading or updating a TOSCA Policy into the PDP.

Lifecycle management of TOSCA Policy entities is supported, allowing features such as PolicyImpl Safe Mode and PolicyImpl retirement.

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.

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.

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.

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.

Lifecycle management of TOSCA Policy entities and PolicyTypeImpl entites is supported, allowing features such as PolicyImpl Safe Mode and PolicyImpl retirement.

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.

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 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

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
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

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}

eg.
https:{url}:{port}/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app

Get a specific policy type and all the available versions.

 

https:{url}:{port}/policy/api/v1/policytypes/{policy type id}/versions/{version id}

eg.
https:{url}:{port}/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0

Get the specific Policy Type with the specified name and version

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
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
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 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 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

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

Example

Description

https:{url}:{port}/policy/api/v1/policytypes/{policy type id}/versions/{versions}/policies

eg.
https:{url}:{port}/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies

Get all Policies for a specific Policy Type and version

https://{url}:{port}/policy/api/v1/policytypes/{policy type id}/versions/{version}/policies/{policy name}/versions/{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

Gets a specific Policy version

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
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
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
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