Page for general findings around the investigation of the optimal path for CLAMP and Tosca Control Loop Integration.
CLAMP Code Walkthrough videos can be found here
Tosca handling in CLAMP vs Tosca Control Loop - Findings
CLAMP
CSAR from SDC Flow
- CSAR contains the DCAE blueprint to be used to deploy to DCAE but also contains a reference to a microservice policy type. CLAMP, on startup, pulls all the policy types and pulls them periodically after that (+pulls the PDP group/subgroup accepted deployment per model). Clamp creates LOOP TEMPLATES from in its database from the blueprints. CLAMP uses the reference from the CSAR to associate the relevant microservice policy type with a loop template. Thus, CLAMP knows which monitoring policy type to use for creation of a Loop instance.
- When deploying the SDC notif + CSAR, clamp gets does a query to dcae to get the blueprint ID in the inventory. If it fails CLAMP rollbacks the transactions and abort the SDC notification installation.
- During the installation, CLAMP also installs in its DB service information, like UUID VNF associated ... this is used later by the UI to help the user to easily configure the different policies. It supports multiple blueprints per VNF (defined in SDC). The VNFs are retrieved by CLAMP from the SDC notification.
- Although there is a comment in "src/main/java/org/onap/policy/clamp/loop/deploy/DcaeDeployParameters.java" saying multiple microservices are not currently possible, +-90% (
) of clamp code "should" support the multi-mircoservices per blueprint. Code was initially written by Nokia to extract multiple microservices from the blueprint BUT Dcae did not and still does not support that. Normally the multi-microservices "should" be come from the new DCAE architecture. (edited - hope that's ok)
- The Blueprint Artifact in the CSAR is used to populate the "loop_template" db. These "loop_templates" are used to create instances. All interaction with the database is done using the SpringBoot "@Repository" pattern. Standard boilerplate db interaction is done in most cases with "JpaRepository" (find, save etc).
- CLAMP also gets the policy type (based on the policy type id in the Blueprint) from the database. The types are then added to the "loop_element_models" table. The relationship between "loop_element_models" and "policy_models" is recorded in the "loopelementmodels_to_policymodels" table.
- The relationship between the loop element models and the loop templates is also recorded in the "looptemplates_to_loopelementmodels" table. In this way, the blueprint templates is associated with a microservice policy.
Loop Creation Flow
When a loop is created in UI or directly in backend:
- The loop is saved in the "loops" table.
- The microservice policy is created (with a generated name) in the "micro_service_policies" table along with the policy type associated with it and the json representation of the policy type.
- The relationship between the microservice policies and the loops is recorded in the "loops_to_microservicepolicies" table. This contains the loop names and the microservice policy names.
Update Loop Flow
It is possible to update a loop that has been created. This allows configuration of the policies attached to the microservice.
- Updating a microservice policy or an operational policy can be done in the the UI or by accessing the CLAMP backend directly.
- For the microservice policy, you can:
- Click on the SVG and a convenience JSON editor will popup and allow properties to be added and removed from the JSON policy configuration template.
- Send the JSON configuration of the policy directly to the CLAMP backend endpoint at "/updateMicroservicePolicy".
- In both cases, this populates the "configurations_json" field for the microservice in the "micro_service_policies" table.
- Serialization and Deserialization of the JSON going into the database is handled by MicroServicePolicies.java, which extends Policy.java.
Policy Deployment Flow
Deployment of the policy from the loop can be triggered by:
- Using the SUBMIT option in the frontend.
- Using the backend submit endpoint.
No body has to be provided to the endpoint. The payload for the policy endpoint is generated internally in CLAMP from data already present in the database. Among other things, a call to the CAMEL submit endpoint retrieves the relevant microservice policies from the "micro_service_policies" table in the database. This is passed to another flow responsible for creating the policy in the policy engine. The policy payload is generated with all of the relevant tosca parameters in "src/main/java/org/onap/policy/clamp/policy/PolicyPayload.java". Another flow calls the endpoint on the policy engine and sends the payload in the correct format.
Tosca Control Loop
Firstly, Tosca Control Loop (TCL) is a different idiom. To deploy policies and services, we commission and instantiate control loops in TCL. The state of these control loops is managed by the runtime, which distributes messages to the participants. The participants are then responsible for actually carrying out the actions on the relevant components - based on the instructions received from the runtime.
Commissioning Tosca Handling
- In the Runtime, once the commissioning API receives a new Tosca template at the "/commission" endpoint, a call is made to the DatabasePolicyModelsProviderImpl in the "models" repo to deserialize the TOSCA and save it to the "controlloop" database.
- The database credentials and persistence units specified in the runtime configuration file are used for DB access.
- The TOSCA is written to the relevant table "ToscaServiceTemplate" and also to related tables. -Note that this table (along with many others) is created in the DB at startup as specified in the persistence.xml.
- In addition to being able to add a new service template via the "/commission" endpoint, it is also possible to add a "fragment" of a template to an existing one through the same endpoint. An example of a tosca file to be sent to commissioning is below.
Code Block | ||||
---|---|---|---|---|
| ||||
tosca_definitions_version: tosca_simple_yaml_1_1_0
data_types:
onap.datatypes.ToscaConceptIdentifier:
derived_from: tosca.datatypes.Root
properties:
name:
type: string
required: true
version:
type: string
required: true
org.onap.datatypes.policy.clamp.controlloop.DCAEMicroserviceControlLoopElementConsulInfo:
name: org.onap.datatypes.policy.clamp.controlloop.DCAEMicroserviceControlLoopElementConsulInfo
version: 0.0.0
derived_from: tosca.datatypes.Root
properties:
consulUrl:
name: consulUrl
type: string
typeVersion: 0.0.0
description: Consul url for this entry
required: true
consul_body:
name: consulBody
type: string
typeVersion: 0.0.0
description: Body of Consul entry
required: true
onap.datatype.controlloop.Target:
derived_from: tosca.datatypes.Root
description: Definition for a entity in A&AI to perform a control loop operation on
properties:
targetType:
type: string
description: Category for the target type
required: true
constraints:
- valid_values:
- VNF
- VM
- VFMODULE
- PNF
entityIds:
type: map
description: |
Map of values that identify the resource. If none are provided, it is assumed that the
entity that generated the ONSET event will be the target.
required: false
metadata:
clamp_possible_values: ClampExecution:CSAR_RESOURCES
entry_schema:
type: string
onap.datatype.controlloop.Actor:
derived_from: tosca.datatypes.Root
description: An actor/operation/target definition
properties:
actor:
type: string
description: The actor performing the operation.
required: true
metadata:
clamp_possible_values: Dictionary:DefaultActors,ClampExecution:CDS/actor
operation:
type: string
description: The operation the actor is performing.
metadata:
clamp_possible_values: Dictionary:DefaultOperations,ClampExecution:CDS/operation
required: true
target:
type: onap.datatype.controlloop.Target
description: The resource the operation should be performed on.
required: true
payload:
type: map
description: Name/value pairs of payload information passed by Policy to the actor
required: false
metadata:
clamp_possible_values: ClampExecution:CDS/payload
entry_schema:
type: string
onap.datatype.controlloop.Operation:
derived_from: tosca.datatypes.Root
description: An operation supported by an actor
properties:
id:
type: string
description: Unique identifier for the operation
required: true
description:
type: string
description: A user-friendly description of the intent for the operation
required: false
operation:
type: onap.datatype.controlloop.Actor
description: The definition of the operation to be performed.
required: true
timeout:
type: integer
description: The amount of time for the actor to perform the operation.
required: true
retries:
type: integer
description: The number of retries the actor should attempt to perform the operation.
required: true
default: 0
success:
type: string
description: Points to the operation to invoke on success. A value of "final_success" indicates and end to the operation.
required: false
default: final_success
failure:
type: string
description: Points to the operation to invoke on Actor operation failure.
required: false
default: final_failure
failure_timeout:
type: string
description: Points to the operation to invoke when the time out for the operation occurs.
required: false
default: final_failure_timeout
failure_retries:
type: string
description: Points to the operation to invoke when the current operation has exceeded its max retries.
required: false
default: final_failure_retries
failure_exception:
type: string
description: Points to the operation to invoke when the current operation causes an exception.
required: false
default: final_failure_exception
failure_guard:
type: string
description: Points to the operation to invoke when the current operation is blocked due to guard policy enforcement.
required: false
default: final_failure_guard
onap.datatypes.monitoring.managedObjectDNsBasic:
constraints: []
properties:
DN:
name: DN
type: string
typeVersion: 0.0.0
description: Managed object distinguished name
required: true
constraints: []
metadata: {}
name: onap.datatypes.monitoring.managedObjectDNsBasic
version: 0.0.0
derived_from: tosca.datatypes.Root
metadata: {}
onap.datatypes.monitoring.managedObjectDNsBasics:
constraints: []
properties:
managedObjectDNsBasic:
name: managedObjectDNsBasic
type: map
typeVersion: 0.0.0
description: Managed object distinguished name object
required: true
constraints: []
entry_schema:
type: onap.datatypes.monitoring.managedObjectDNsBasic
typeVersion: 0.0.0
constraints: []
metadata: {}
name: onap.datatypes.monitoring.managedObjectDNsBasics
version: 0.0.0
derived_from: tosca.datatypes.Root
metadata: {}
onap.datatypes.monitoring.measurementGroup:
constraints: []
properties:
measurementTypes:
name: measurementTypes
type: list
typeVersion: 0.0.0
description: List of measurement types
required: true
constraints: []
entry_schema:
type: onap.datatypes.monitoring.measurementTypes
typeVersion: 0.0.0
constraints: []
metadata: {}
managedObjectDNsBasic:
name: managedObjectDNsBasic
type: list
typeVersion: 0.0.0
description: List of managed object distinguished names
required: true
constraints: []
entry_schema:
type: onap.datatypes.monitoring.managedObjectDNsBasics
typeVersion: 0.0.0
constraints: []
metadata: {}
name: onap.datatypes.monitoring.measurementGroup
version: 0.0.0
derived_from: tosca.datatypes.Root
metadata: {}
onap.datatypes.monitoring.measurementGroups:
constraints: []
properties:
measurementGroup:
name: measurementGroup
type: map
typeVersion: 0.0.0
description: Measurement Group
required: true
constraints: []
entry_schema:
type: onap.datatypes.monitoring.measurementGroup
typeVersion: 0.0.0
constraints: []
metadata: {}
name: onap.datatypes.monitoring.measurementGroups
version: 0.0.0
derived_from: tosca.datatypes.Root
metadata: {}
onap.datatypes.monitoring.measurementType:
constraints: []
properties:
measurementType:
name: measurementType
type: string
typeVersion: 0.0.0
description: Measurement type
required: true
constraints: []
metadata: {}
name: onap.datatypes.monitoring.measurementType
version: 0.0.0
derived_from: tosca.datatypes.Root
metadata: {}
onap.datatypes.monitoring.measurementTypes:
constraints: []
properties:
measurementType:
name: measurementType
type: map
typeVersion: 0.0.0
description: Measurement type object
required: true
constraints: []
entry_schema:
type: onap.datatypes.monitoring.measurementType
typeVersion: 0.0.0
constraints: []
metadata: {}
name: onap.datatypes.monitoring.measurementTypes
version: 0.0.0
derived_from: tosca.datatypes.Root
metadata: {}
onap.datatypes.monitoring.nfFilter:
constraints: []
properties:
modelNames:
name: modelNames
type: list
typeVersion: 0.0.0
description: List of model names
required: true
constraints: []
entry_schema:
type: string
typeVersion: 0.0.0
constraints: []
metadata: {}
modelInvariantIDs:
name: modelInvariantIDs
type: list
typeVersion: 0.0.0
description: List of model invariant IDs
required: true
constraints: []
entry_schema:
type: string
typeVersion: 0.0.0
constraints: []
metadata: {}
modelVersionIDs:
name: modelVersionIDs
type: list
typeVersion: 0.0.0
description: List of model version IDs
required: true
constraints: []
entry_schema:
type: string
typeVersion: 0.0.0
constraints: []
metadata: {}
nfNames:
name: nfNames
type: list
typeVersion: 0.0.0
description: List of network functions
required: true
constraints: []
entry_schema:
type: string
typeVersion: 0.0.0
constraints: []
metadata: {}
name: onap.datatypes.monitoring.nfFilter
version: 0.0.0
derived_from: tosca.datatypes.Root
metadata: {}
onap.datatypes.monitoring.subscription:
constraints: []
properties:
measurementGroups:
name: measurementGroups
type: list
typeVersion: 0.0.0
description: Measurement Groups
required: true
constraints: []
entry_schema:
type: onap.datatypes.monitoring.measurementGroups
typeVersion: 0.0.0
constraints: []
metadata: {}
fileBasedGP:
name: fileBasedGP
type: integer
typeVersion: 0.0.0
description: File based granularity period
required: true
constraints: []
metadata: {}
fileLocation:
name: fileLocation
type: string
typeVersion: 0.0.0
description: ROP file location
required: true
constraints: []
metadata: {}
subscriptionName:
name: subscriptionName
type: string
typeVersion: 0.0.0
description: Name of the subscription
required: true
constraints: []
metadata: {}
administrativeState:
name: administrativeState
type: string
typeVersion: 0.0.0
description: State of the subscription
required: true
constraints:
- valid_values:
- LOCKED
- UNLOCKED
metadata: {}
nfFilter:
name: nfFilter
type: map
typeVersion: 0.0.0
description: Network function filter
required: true
constraints: []
entry_schema:
type: onap.datatypes.monitoring.nfFilter
typeVersion: 0.0.0
constraints: []
metadata: {}
name: onap.datatypes.monitoring.subscription
version: 0.0.0
derived_from: tosca.datatypes.Root
metadata: {}
policy_types:
onap.policies.Monitoring:
derived_from: tosca.policies.Root
description: a base policy type for all policies that govern monitoring provisioning
version: 1.0.0
name: onap.policies.Monitoring
onap.policies.Sirisha:
derived_from: tosca.policies.Root
description: a base policy type for all policies that govern monitoring provisioning
version: 1.0.0
name: onap.policies.Sirisha
onap.policies.monitoring.dcae-pm-subscription-handler:
properties:
pmsh_policy:
name: pmsh_policy
type: onap.datatypes.monitoring.subscription
typeVersion: 0.0.0
description: PMSH Policy JSON
required: false
constraints: []
metadata: {}
name: onap.policies.monitoring.dcae-pm-subscription-handler
version: 1.0.0
derived_from: onap.policies.Monitoring
metadata: {}
onap.policies.controlloop.operational.Common:
derived_from: tosca.policies.Root
version: 1.0.0
name: onap.policies.controlloop.operational.Common
description: |
Operational Policy for Control Loop execution. Originated in Frankfurt to support TOSCA Compliant
Policy Types. This does NOT support the legacy Policy YAML policy type.
properties:
id:
type: string
description: The unique control loop id.
required: true
timeout:
type: integer
description: |
Overall timeout for executing all the operations. This timeout should equal or exceed the total
timeout for each operation listed.
required: true
abatement:
type: boolean
description: Whether an abatement event message will be expected for the control loop from DCAE.
required: true
default: false
trigger:
type: string
description: Initial operation to execute upon receiving an Onset event message for the Control Loop.
required: true
operations:
type: list
description: List of operations to be performed when Control Loop is triggered.
required: true
entry_schema:
type: onap.datatype.controlloop.Operation
onap.policies.controlloop.operational.common.Apex:
derived_from: onap.policies.controlloop.operational.Common
type_version: 1.0.0
version: 1.0.0
name: onap.policies.controlloop.operational.common.Apex
description: Operational policies for Apex PDP
properties:
engineServiceParameters:
type: string
description: The engine parameters like name, instanceCount, policy implementation, parameters etc.
required: true
eventInputParameters:
type: string
description: The event input parameters.
required: true
eventOutputParameters:
type: string
description: The event output parameters.
required: true
javaProperties:
type: string
description: Name/value pairs of properties to be set for APEX if needed.
required: false
node_types:
org.onap.policy.clamp.controlloop.Participant:
version: 1.0.1
derived_from: tosca.nodetypes.Root
properties:
provider:
type: string
requred: false
org.onap.policy.clamp.controlloop.ControlLoopElement:
version: 1.0.1
derived_from: tosca.nodetypes.Root
properties:
provider:
type: string
requred: false
participant_id:
type: onap.datatypes.ToscaConceptIdentifier
requred: true
org.onap.policy.clamp.controlloop.ControlLoop:
version: 1.0.1
derived_from: tosca.nodetypes.Root
properties:
provider:
type: string
requred: false
elements:
type: list
required: true
entry_schema:
type: onap.datatypes.ToscaConceptIdentifier
org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement:
version: 1.0.1
derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
properties:
dcae_blueprint_id:
type: onap.datatypes.ToscaConceptIdentifier
requred: false
dcae_blueprint:
type: onap.dcae.cloudify_blueprint
requred: false
consul_info:
type: list
required: false
entry_schema:
type: org.onap.datatypes.policy.clamp.controlloop.DCAEMicroserviceControlLoopElementConsulInfo
org.onap.policy.clamp.controlloop.PolicyControlLoopElement:
version: 1.0.1
derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
properties:
policy_type_id:
type: onap.datatypes.ToscaConceptIdentifier
requred: true
policy_id:
type: onap.datatypes.ToscaConceptIdentifier
requred: false
org.onap.policy.clamp.controlloop.CDSControlLoopElement:
version: 1.0.1
derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
properties:
cds_blueprint_id:
type: onap.datatypes.ToscaConceptIdentifier
requred: true
topology_template:
inputs:
pmsh_monitoring_policy:
type: onap.datatypes.ToscaConceptIdentifier
description: The ID of the PMSH monitoring policy to use
default:
name: MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test
version: 1.0.0
pmsh_operational_policy:
type: onap.datatypes.ToscaConceptIdentifier
description: The ID of the PMSH operational policy to use
default:
name: operational.apex.pmcontrol
version: 1.0.0
node_templates:
org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant:
version: 2.3.4
type: org.onap.policy.clamp.controlloop.Participant
type_version: 1.0.1
description: Participant for DCAE microservices
properties:
provider: ONAP
org.onap.policy.controlloop.PolicyControlLoopParticipant:
version: 2.3.1
type: org.onap.policy.clamp.controlloop.Participant
type_version: 1.0.1
description: Participant for DCAE microservices
properties:
provider: ONAP
org.onap.domain.pmsh.PMSH_DCAEMicroservice:
version: 1.2.3
type: org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement
type_version: 1.0.0
description: Control loop element for the DCAE microservice for Performance Management Subscription Handling
properties:
provider: Ericsson
participant_id:
name: org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant
version: 2.3.4
dcae_blueprint:
tosca_definitions_version: cloudify_dsl_1_3
imports:
- https://www.getcloudify.org/spec/cloudify/4.5.5/types.yaml
- plugin:k8splugin?version=3.7.0
- plugin:pgaas?version=1.3.0
- plugin:clamppolicyplugin?version=1.1.0
inputs:
tag_version:
type: string
description: Docker image to be used
default: nexus3.onap.org:10001/onap/org.onap.dcaegen2.services.pmsh:1.1.2
replicas:
type: integer
description: Number of instances
default: 1
operational_policy_name:
type: string
default: operational.apex.pmcontrol
control_loop_name:
type: string
default: pmsh-control-loop
pmsh_publish_topic_name:
type: string
default: unauthenticated.DCAE_CL_OUTPUT
policy_feedback_topic_name:
type: string
default: unauthenticated.PMSH_CL_INPUT
aai_notification_topic_name:
type: string
default: AAI-EVENT
publisher_client_role:
type: string
description: Client role to request secure access to topic
default: org.onap.dcae.pmPublisher
subscriber_client_role:
type: string
description: Client role to request secure access to topic
default: org.onap.dcae.pmSubscriber
dcae_location:
type: string
description: DCAE location for the subscriber, used to set up routing
default: san-francisco
cpu_limit:
type: string
default: 1000m
cpu_request:
type: string
default: 1000m
memory_limit:
type: string
default: 1024Mi
memory_request:
type: string
default: 1024Mi
pgaas_cluster_name:
type: string
default: dcae-pg-primary.onap
enable_tls:
type: boolean
default: true
protocol:
type: string
description: PMSH protocol. If enable_tls is false, set to http
default: https
policy_model_id:
type: string
default: onap.policies.monitoring.dcae-pm-subscription-handler
policy_id:
type: string
default: MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test
node_templates:
pgaasvm:
type: dcae.nodes.pgaas.database
properties:
writerfqdn:
get_input: pgaas_cluster_name
name: pmsh
pmsh:
type: dcae.nodes.ContainerizedServiceComponentUsingDmaap
interfaces:
cloudify.interfaces.lifecycle:
create:
inputs:
ports:
- '8443:0'
envs:
PMSH_PG_URL:
get_attribute:
- pgaasvm
- admin
- host
PMSH_PG_PASSWORD:
get_attribute:
- pgaasvm
- admin
- password
PMSH_PG_USERNAME:
get_attribute:
- pgaasvm
- admin
- user
PMSH_DB_NAME:
get_attribute:
- pgaasvm
- admin
- database
relationships:
- target: pmsh-policy
type: cloudify.relationships.depends_on
properties:
service_component_type: dcae-pmsh
service_component_name_override: dcae-pmsh
application_config:
enable_tls:
get_input: enable_tls
aaf_identity: dcae@dcae.onap.org
aaf_password: demo123456!
operational_policy_name:
get_input: operational_policy_name
control_loop_name:
get_input: control_loop_name
cert_path: /opt/app/pmsh/etc/certs/cert.pem
key_path: /opt/app/pmsh/etc/certs/key.pem
ca_cert_path: /opt/app/pmsh/etc/certs/cacert.pem
streams_publishes:
policy_pm_publisher:
type: message_router
dmaap_info:
topic_url:
concat:
- http://message-router:3904/events/
- get_input: pmsh_publish_topic_name
streams_subscribes:
policy_pm_subscriber:
type: message_router
dmaap_info:
topic_url:
concat:
- http://message-router:3904/events/
- get_input: policy_feedback_topic_name
aai_subscriber:
type: message_router
dmaap_info:
topic_url:
concat:
- http://message-router:3904/events/
- get_input: aai_notification_topic_name
resource_config:
limits:
cpu:
get_input: cpu_limit
memory:
get_input: memory_limit
requests:
cpu:
get_input: cpu_request
memory:
get_input: memory_request
docker_config:
healthcheck:
endpoint: /healthcheck
interval: 15s
timeout: 1s
type:
get_input: protocol
image:
get_input: tag_version
replicas:
get_input: replicas
log_info:
log_directory: /var/log/ONAP/dcaegen2/services/pmsh
tls_info:
cert_directory: /opt/app/pmsh/etc/certs
use_tls:
get_input: enable_tls
pmsh-policy:
type: clamp.nodes.policy
properties:
policy_model_id:
get_input: policy_model_id
policy_id:
get_input: policy_id
consul_info:
- consulUrl: http://consul:31321/v1/kv/dcae-pmsh:policy
consulBody:
subscription:
subscriptionName: subscriptiona
administrativeState: UNLOCKED
fileBasedGP: 15
fileLocation: /pm/pm.xml
nfFilter:
nfNames:
- ^pnf1.*
modelInvariantIDs:
- 5845y423-g654-6fju-po78-8n53154532k6
- 7129e420-d396-4efb-af02-6b83499b12f8
modelVersionIDs:
- e80a6ae3-cafd-4d24-850d-e14c084a5ca9
measurementGroups:
- measurementGroup:
measurementTypes:
- measurementType: countera
- measurementType: counterb
managedObjectDNsBasic:
- DN: dna
- DN: dnb
- measurementGroup:
measurementTypes:
- measurementType: counterc
- measurementType: counterd
managedObjectDNsBasic:
- DN: dnc
- DN: dnd
org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement:
version: 1.2.3
type: org.onap.policy.clamp.controlloop.PolicyControlLoopElement
type_version: 1.0.0
description: Control loop element for the monitoring policy for Performance Management Subscription Handling
properties:
provider: Ericsson
participant_id:
name: org.onap.policy.controlloop.PolicyControlLoopParticipant
version: 2.3.1
policy_type_id:
name: onap.policies.monitoring.pm-subscription-handler
version: 1.0.0
policy_id:
get_input: pmsh_monitoring_policy
org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement:
version: 1.2.3
type: org.onap.policy.clamp.controlloop.PolicyControlLoopElement
type_version: 1.0.0
description: Control loop element for the operational policy for Performance Management Subscription Handling
properties:
provider: Ericsson
participant_id:
name: org.onap.policy.controlloop.PolicyControlLoopParticipant
version: 2.3.1
policy_type_id:
name: onap.policies.operational.pm-subscription-handler
version: 1.0.0
policy_id:
get_input: pmsh_operational_policy
org.onap.domain.pmsh.PMSHControlLoopDefinition:
version: 1.2.3
type: org.onap.policy.clamp.controlloop.ControlLoop
type_version: 1.0.0
description: Control loop for Performance Management Subscription Handling
properties:
provider: Ericsson
elements:
- name: org.onap.domain.pmsh.PMSH_DCAEMicroservice
version: 1.2.3
- name: org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement
version: 1.2.3
- name: org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement
version: 1.2.3
policies:
- MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test:
type: onap.policies.monitoring.dcae-pm-subscription-handler
type_version: 1.0.0
name: MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test
version: 1.0.0
metadata:
policy-id: MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test
policy-version: 1.0.0
properties:
pmsh_policy:
fileBasedGP: 15
fileLocation: /pm/pm.xml
subscriptionName: subscriptiona
administrativeState: UNLOCKED
nfFilter:
onap.datatypes.monitoring.nfFilter:
modelVersionIDs:
- e80a6ae3-cafd-4d24-850d-e14c084a5ca9
modelInvariantIDs:
- 5845y423-g654-6fju-po78-8n53154532k6
- 7129e420-d396-4efb-af02-6b83499b12f8
modelNames: []
nfNames:
- '"^pnf1.*"'
measurementGroups:
- measurementGroup:
onap.datatypes.monitoring.measurementGroup:
measurementTypes:
- measurementType:
onap.datatypes.monitoring.measurementType:
measurementType: countera
- measurementType:
onap.datatypes.monitoring.measurementType:
measurementType: counterb
managedObjectDNsBasic:
- managedObjectDNsBasic:
onap.datatypes.monitoring.managedObjectDNsBasic:
DN: dna
- managedObjectDNsBasic:
onap.datatypes.monitoring.managedObjectDNsBasic:
DN: dnb
- measurementGroup:
onap.datatypes.monitoring.measurementGroup:
measurementTypes:
- measurementType:
onap.datatypes.monitoring.measurementType:
measurementType: counterc
- measurementType:
onap.datatypes.monitoring.measurementType:
measurementType: counterd
managedObjectDNsBasic:
- managedObjectDNsBasic:
onap.datatypes.monitoring.managedObjectDNsBasic:
DN: dnc
- managedObjectDNsBasic:
onap.datatypes.monitoring.managedObjectDNsBasic:
DN: dnd
- operational.apex.pmcontrol:
type: onap.policies.controlloop.operational.common.Apex
type_version: 1.0.0
version: 1.0.0
metadata:
policy-id: operational.apex.pmcontrol
policy-version: 1
properties:
engineServiceParameters:
name: MyApexEngine
version: 0.0.1
id: 45
instanceCount: 2
deploymentPort: 12561
policy_type_impl:
apexPolicyModel:
key:
name: PMControlPolicy
version: 0.0.1
keyInformation:
key:
name: PMControlPolicy_KeyInfo
version: 0.0.1
keyInfoMap:
entry:
- key:
name: CDSActionIdentifiersType
version: 0.0.1
value:
key:
name: CDSActionIdentifiersType
version: 0.0.1
UUID: 6e5fa19b-14df-37e3-a4ae-8c537e861a82
description: Generated description for concept referred to by key "CDSActionIdentifiersType:0.0.1"
- key:
name: CDSCreateResponseEvent
version: 0.0.1
value:
key:
name: CDSCreateResponseEvent
version: 0.0.1
UUID: 14b29e38-ac75-3273-aa4e-8583c0aa7dad
description: Generated description for concept referred to by key "CDSCreateResponseEvent:0.0.1"
- key:
name: CDSCreateResponsePayloadType
version: 0.0.1
value:
key:
name: CDSCreateResponsePayloadType
version: 0.0.1
UUID: 04573f8f-e772-30a5-b1d9-d7318d4a1e13
description: Generated description for concept referred to by key "CDSCreateResponsePayloadType:0.0.1"
- key:
name: CDSCreateResponsePolicy
version: 0.0.1
value:
key:
name: CDSCreateResponsePolicy
version: 0.0.1
UUID: e126c965-fc09-3bfe-8f55-70f380a4a49c
description: Generated description for concept referred to by key "CDSCreateResponsePolicy:0.0.1"
- key:
name: CDSCreateResponseTask
version: 0.0.1
value:
key:
name: CDSCreateResponseTask
version: 0.0.1
UUID: 6165ee82-afd2-3aab-a517-f00b3f2461d2
description: Generated description for concept referred to by key "CDSCreateResponseTask:0.0.1"
- key:
name: CDSCreateSubscriptionPayloadType
version: 0.0.1
value:
key:
name: CDSCreateSubscriptionPayloadType
version: 0.0.1
UUID: 8350ac5e-c157-38b9-9614-a0f93a830e60
description: Generated description for concept referred to by key "CDSCreateSubscriptionPayloadType:0.0.1"
- key:
name: CDSCreateSubscriptionRequestEvent
version: 0.0.1
value:
key:
name: CDSCreateSubscriptionRequestEvent
version: 0.0.1
UUID: cfa325ba-226b-3a31-9183-ec43e2b6e9a2
description: Generated description for concept referred to by key "CDSCreateSubscriptionRequestEvent:0.0.1"
- key:
name: CDSDeleteResponseEvent
version: 0.0.1
value:
key:
name: CDSDeleteResponseEvent
version: 0.0.1
UUID: 8be9c0fa-7437-3841-aff2-b3cec6ae3bd8
description: Generated description for concept referred to by key "CDSDeleteResponseEvent:0.0.1"
- key:
name: CDSDeleteResponsePayloadType
version: 0.0.1
value:
key:
name: CDSDeleteResponsePayloadType
version: 0.0.1
UUID: 3fbfe0c9-152e-34d3-a504-09cd13c058d0
description: Generated description for concept referred to by key "CDSDeleteResponsePayloadType:0.0.1"
- key:
name: CDSDeleteResponsePolicy
version: 0.0.1
value:
key:
name: CDSDeleteResponsePolicy
version: 0.0.1
UUID: a780251c-edd5-3132-b865-04313246b43c
description: Generated description for concept referred to by key "CDSDeleteResponsePolicy:0.0.1"
- key:
name: CDSDeleteResponseTask
version: 0.0.1
value:
key:
name: CDSDeleteResponseTask
version: 0.0.1
UUID: afce4555-3aa3-3521-a7d8-ee8cdf0d3efc
description: Generated description for concept referred to by key "CDSDeleteResponseTask:0.0.1"
- key:
name: CDSDeleteSubscriptionPayloadType
version: 0.0.1
value:
key:
name: CDSDeleteSubscriptionPayloadType
version: 0.0.1
UUID: 12658406-9147-3c9d-a38c-5ad5e30b092b
description: Generated description for concept referred to by key "CDSDeleteSubscriptionPayloadType:0.0.1"
- key:
name: CDSDeleteSubscriptionRequestEvent
version: 0.0.1
value:
key:
name: CDSDeleteSubscriptionRequestEvent
version: 0.0.1
UUID: 24380c95-9289-36e6-8cbf-0edefa15ccd9
description: Generated description for concept referred to by key "CDSDeleteSubscriptionRequestEvent:0.0.1"
- key:
name: CDSRequestCommonHeaderType
version: 0.0.1
value:
key:
name: CDSRequestCommonHeaderType
version: 0.0.1
UUID: 35590ac0-062c-39f1-8786-b4ff716e30b1
description: Generated description for concept referred to by key "CDSRequestCommonHeaderType:0.0.1"
- key:
name: CDSResponseCommonHeaderType
version: 0.0.1
value:
key:
name: CDSResponseCommonHeaderType
version: 0.0.1
UUID: dd7e1805-885a-350b-aaf9-ed541321ae3c
description: Generated description for concept referred to by key "CDSResponseCommonHeaderType:0.0.1"
- key:
name: CDSResponseStatusEvent
version: 0.0.1
value:
key:
name: CDSResponseStatusEvent
version: 0.0.1
UUID: 7986e21b-32f7-302e-9554-31f21b673493
description: Generated description for concept referred to by key "CDSResponseStatusEvent:0.0.1"
- key:
name: CDSResponseStatusType
version: 0.0.1
value:
key:
name: CDSResponseStatusType
version: 0.0.1
UUID: 92b8a2cf-344e-3ce1-8cc0-2b7d3cb695fa
description: Generated description for concept referred to by key "CDSResponseStatusType:0.0.1"
- key:
name: CreateSubscriptionPayloadEvent
version: 0.0.1
value:
key:
name: CreateSubscriptionPayloadEvent
version: 0.0.1
UUID: 92162397-1a8e-3a3f-a469-d2af7700af4a
description: Generated description for concept referred to by key "CreateSubscriptionPayloadEvent:0.0.1"
- key:
name: CreateSubscriptionPayloadTask
version: 0.0.1
value:
key:
name: CreateSubscriptionPayloadTask
version: 0.0.1
UUID: bc0c69f0-52ed-38ea-b468-ae4a6fd1730d
description: Generated description for concept referred to by key "CreateSubscriptionPayloadTask:0.0.1"
- key:
name: CreateSubscriptionRequestTask
version: 0.0.1
value:
key:
name: CreateSubscriptionRequestTask
version: 0.0.1
UUID: 89cb75e9-f06c-30d3-b4ff-698d45f63869
description: Generated description for concept referred to by key "CreateSubscriptionRequestTask:0.0.1"
- key:
name: DeleteSubscriptionPayloadEvent
version: 0.0.1
value:
key:
name: DeleteSubscriptionPayloadEvent
version: 0.0.1
UUID: 994fa441-04ab-33bb-832d-1cd12ab5d074
description: Generated description for concept referred to by key "DeleteSubscriptionPayloadEvent:0.0.1"
- key:
name: DeleteSubscriptionPayloadTask
version: 0.0.1
value:
key:
name: DeleteSubscriptionPayloadTask
version: 0.0.1
UUID: 0f519117-5fea-3e4b-941f-8f778100465f
description: Generated description for concept referred to by key "DeleteSubscriptionPayloadTask:0.0.1"
- key:
name: DeleteSubscriptionRequestTask
version: 0.0.1
value:
key:
name: DeleteSubscriptionRequestTask
version: 0.0.1
UUID: acb772fe-d442-39e3-98f9-b1080caf4150
description: Generated description for concept referred to by key "DeleteSubscriptionRequestTask:0.0.1"
- key:
name: MRResponseEvent
version: 0.0.1
value:
key:
name: MRResponseEvent
version: 0.0.1
UUID: 13c747a3-6bae-3bcf-9c80-b152e01dc194
description: Generated description for concept referred to by key "MRResponseEvent:0.0.1"
- key:
name: PMControlPolicy
version: 0.0.1
value:
key:
name: PMControlPolicy
version: 0.0.1
UUID: acf1e55c-7bc5-3bd5-975a-0ca54afcd8a4
description: Generated description for concept referred to by key "PMControlPolicy:0.0.1"
- key:
name: PMControlPolicy_Albums
version: 0.0.1
value:
key:
name: PMControlPolicy_Albums
version: 0.0.1
UUID: b38ad204-c2c8-32f4-9b5a-dda0aeb0145b
description: Generated description for concept referred to by key "PMControlPolicy_Albums:0.0.1"
- key:
name: PMControlPolicy_Events
version: 0.0.1
value:
key:
name: PMControlPolicy_Events
version: 0.0.1
UUID: be3871a0-c42a-3113-a066-82d192840eca
description: Generated description for concept referred to by key "PMControlPolicy_Events:0.0.1"
- key:
name: PMControlPolicy_KeyInfo
version: 0.0.1
value:
key:
name: PMControlPolicy_KeyInfo
version: 0.0.1
UUID: ced37634-28a4-3178-b7f6-2980794927b0
description: Generated description for concept referred to by key "PMControlPolicy_KeyInfo:0.0.1"
- key:
name: PMControlPolicy_Policies
version: 0.0.1
value:
key:
name: PMControlPolicy_Policies
version: 0.0.1
UUID: be3d180d-ef9c-3a75-8e9c-84271a038bed
description: Generated description for concept referred to by key "PMControlPolicy_Policies:0.0.1"
- key:
name: PMControlPolicy_Schemas
version: 0.0.1
value:
key:
name: PMControlPolicy_Schemas
version: 0.0.1
UUID: e61973f1-189c-39e5-82f6-0d3afe298a20
description: Generated description for concept referred to by key "PMControlPolicy_Schemas:0.0.1"
- key:
name: PMControlPolicy_Tasks
version: 0.0.1
value:
key:
name: PMControlPolicy_Tasks
version: 0.0.1
UUID: 5658adb3-2962-30a3-a241-fae75bb8eb4a
description: Generated description for concept referred to by key "PMControlPolicy_Tasks:0.0.1"
- key:
name: PMSubscriptionAlbum
version: 0.0.1
value:
key:
name: PMSubscriptionAlbum
version: 0.0.1
UUID: c2bd6f0d-6854-317a-9be2-97c08338428c
description: Generated description for concept referred to by key "PMSubscriptionAlbum:0.0.1"
- key:
name: PMSubscriptionOutputEvent
version: 0.0.1
value:
key:
name: PMSubscriptionOutputEvent
version: 0.0.1
UUID: 992b7819-9f69-3aa0-bb0f-6e45ea15ce05
description: Generated description for concept referred to by key "PMSubscriptionOutputEvent:0.0.1"
- key:
name: PMSubscriptionType
version: 0.0.1
value:
key:
name: PMSubscriptionType
version: 0.0.1
UUID: 73c1c397-4fc3-357f-93b6-a8ad707fbaae
description: Generated description for concept referred to by key "PMSubscriptionType:0.0.1"
- key:
name: ReceiveEventPolicy
version: 0.0.1
value:
key:
name: ReceiveEventPolicy
version: 0.0.1
UUID: 568b7345-9de1-36d3-b6a3-9b857e6809a1
description: Generated description for concept referred to by key "ReceiveEventPolicy:0.0.1"
- key:
name: ReceiveSubscriptionTask
version: 0.0.1
value:
key:
name: ReceiveSubscriptionTask
version: 0.0.1
UUID: f596afc8-100c-35eb-92c8-352355ea457d
description: Generated description for concept referred to by key "ReceiveSubscriptionTask:0.0.1"
- key:
name: SimpleIntType
version: 0.0.1
value:
key:
name: SimpleIntType
version: 0.0.1
UUID: 153791fd-ae0a-36a7-88a5-309a7936415d
description: Generated description for concept referred to by key "SimpleIntType:0.0.1"
- key:
name: SimpleStringType
version: 0.0.1
value:
key:
name: SimpleStringType
version: 0.0.1
UUID: 8a4957cf-9493-3a76-8c22-a208e23259af
description: Generated description for concept referred to by key "SimpleStringType:0.0.1"
- key:
name: SubscriptionStatusType
version: 0.0.1
value:
key:
name: SubscriptionStatusType
version: 0.0.1
UUID: 597643b1-9db1-31ce-85d0-e1c63c43b30b
description: Generated description for concept referred to by key "SubscriptionStatusType:0.0.1"
- key:
name: SubscriptionType
version: 0.0.1
value:
key:
name: SubscriptionType
version: 0.0.1
UUID: 184547bb-7d64-3cb2-a273-d7185102c5ce
description: Generated description for concept referred to by key "SubscriptionType:0.0.1"
- key:
name: UUIDType
version: 0.0.1
value:
key:
name: UUIDType
version: 0.0.1
UUID: 6a8cc68e-dfc8-3403-9c6d-071c886b319c
description: Generated description for concept referred to by key "UUIDType:0.0.1"
- key:
name: pmsh-operational-policy
version: 0.0.1
value:
key:
name: pmsh-operational-policy
version: 0.0.1
UUID: fdf2c9ff-6422-3ea6-b6b6-49b12116265d
description: Generated description for concept referred to by key "pmsh-operational-policy:0.0.1"
policies:
key:
name: PMControlPolicy_Policies
version: 0.0.1
policyMap:
entry:
- key:
name: CDSCreateResponsePolicy
version: 0.0.1
value:
policyKey:
name: CDSCreateResponsePolicy
version: 0.0.1
template: Freestyle
state:
entry:
- key: CDSCreateResponseState
value:
stateKey:
parentKeyName: CDSCreateResponsePolicy
parentKeyVersion: 0.0.1
parentLocalName: 'NULL'
localName: CDSCreateResponseState
trigger:
name: CDSCreateResponseEvent
version: 0.0.1
stateOutputs:
entry:
- key: ResponseOutput
value:
key:
parentKeyName: CDSCreateResponsePolicy
parentKeyVersion: 0.0.1
parentLocalName: CDSCreateResponseState
localName: ResponseOutput
outgoingEvent:
name: CDSResponseStatusEvent
version: 0.0.1
nextState:
parentKeyName: 'NULL'
parentKeyVersion: 0.0.0
parentLocalName: 'NULL'
localName: 'NULL'
contextAlbumReference: []
taskSelectionLogic:
key: 'NULL'
logicFlavour: UNDEFINED
logic: ''
stateFinalizerLogicMap:
entry: []
defaultTask:
name: CDSCreateResponseTask
version: 0.0.1
taskReferences:
entry:
- key:
name: CDSCreateResponseTask
version: 0.0.1
value:
key:
parentKeyName: CDSCreateResponsePolicy
parentKeyVersion: 0.0.1
parentLocalName: CDSCreateResponseState
localName: CDSCreateResponsePolicy
outputType: DIRECT
output:
parentKeyName: CDSCreateResponsePolicy
parentKeyVersion: 0.0.1
parentLocalName: CDSCreateResponseState
localName: ResponseOutput
firstState: CDSCreateResponseState
- key:
name: CDSDeleteResponsePolicy
version: 0.0.1
value:
policyKey:
name: CDSDeleteResponsePolicy
version: 0.0.1
template: Freestyle
state:
entry:
- key: CDSDeleteResponseState
value:
stateKey:
parentKeyName: CDSDeleteResponsePolicy
parentKeyVersion: 0.0.1
parentLocalName: 'NULL'
localName: CDSDeleteResponseState
trigger:
name: CDSDeleteResponseEvent
version: 0.0.1
stateOutputs:
entry:
- key: ResponseOutput
value:
key:
parentKeyName: CDSDeleteResponsePolicy
parentKeyVersion: 0.0.1
parentLocalName: CDSDeleteResponseState
localName: ResponseOutput
outgoingEvent:
name: CDSResponseStatusEvent
version: 0.0.1
nextState:
parentKeyName: 'NULL'
parentKeyVersion: 0.0.0
parentLocalName: 'NULL'
localName: 'NULL'
contextAlbumReference: []
taskSelectionLogic:
key: 'NULL'
logicFlavour: UNDEFINED
logic: ''
stateFinalizerLogicMap:
entry: []
defaultTask:
name: CDSDeleteResponseTask
version: 0.0.1
taskReferences:
entry:
- key:
name: CDSDeleteResponseTask
version: 0.0.1
value:
key:
parentKeyName: CDSDeleteResponsePolicy
parentKeyVersion: 0.0.1
parentLocalName: CDSDeleteResponseState
localName: CDSDeleteResponsePolicy
outputType: DIRECT
output:
parentKeyName: CDSDeleteResponsePolicy
parentKeyVersion: 0.0.1
parentLocalName: CDSDeleteResponseState
localName: ResponseOutput
firstState: CDSDeleteResponseState
- key:
name: ReceiveEventPolicy
version: 0.0.1
value:
policyKey:
name: ReceiveEventPolicy
version: 0.0.1
template: Freestyle
state:
entry:
- key: CreateOrDeleteState
value:
stateKey:
parentKeyName: ReceiveEventPolicy
parentKeyVersion: 0.0.1
parentLocalName: 'NULL'
localName: CreateOrDeleteState
trigger:
name: PMSubscriptionOutputEvent
version: 0.0.1
stateOutputs:
entry:
- key: CreateSubscriptionPayload
value:
key:
parentKeyName: ReceiveEventPolicy
parentKeyVersion: 0.0.1
parentLocalName: CreateOrDeleteState
localName: CreateSubscriptionPayload
outgoingEvent:
name: CreateSubscriptionPayloadEvent
version: 0.0.1
nextState:
parentKeyName: ReceiveEventPolicy
parentKeyVersion: 0.0.1
parentLocalName: 'NULL'
localName: CreateSubscription
- key: DeleteSubscriptionPayload
value:
key:
parentKeyName: ReceiveEventPolicy
parentKeyVersion: 0.0.1
parentLocalName: CreateOrDeleteState
localName: DeleteSubscriptionPayload
outgoingEvent:
name: DeleteSubscriptionPayloadEvent
version: 0.0.1
nextState:
parentKeyName: ReceiveEventPolicy
parentKeyVersion: 0.0.1
parentLocalName: 'NULL'
localName: DeleteSubscription
contextAlbumReference:
- name: PMSubscriptionAlbum
version: 0.0.1
taskSelectionLogic:
key: TaskSelectionLogic
logicFlavour: JAVASCRIPT
logic: |-
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2020 Nordix. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
executor.logger.info(executor.subject.id);
var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").get(executor.inFields.get("albumID").toString())
var changeType = pmSubscriptionInfo.get("changeType").toString()
executor.logger.info("Change Type is " + changeType)
if ("CREATE".equals(changeType)) {
executor.logger.info("Choosing to create a subscription")
executor.subject.getTaskKey("CreateSubscriptionPayloadTask").copyTo(executor.selectedTask);
}
else if ("DELETE".equals(changeType)) {
executor.logger.info("Choosing to delete a subscription")
executor.subject.getTaskKey("DeleteSubscriptionPayloadTask").copyTo(executor.selectedTask);
}
//var returnValue = executor.isTrue;
true;
stateFinalizerLogicMap:
entry: []
defaultTask:
name: CreateSubscriptionPayloadTask
version: 0.0.1
taskReferences:
entry:
- key:
name: CreateSubscriptionPayloadTask
version: 0.0.1
value:
key:
parentKeyName: ReceiveEventPolicy
parentKeyVersion: 0.0.1
parentLocalName: CreateOrDeleteState
localName: ReceiveEventPolicy
outputType: DIRECT
output:
parentKeyName: ReceiveEventPolicy
parentKeyVersion: 0.0.1
parentLocalName: CreateOrDeleteState
localName: CreateSubscriptionPayload
- key:
name: DeleteSubscriptionPayloadTask
version: 0.0.1
value:
key:
parentKeyName: ReceiveEventPolicy
parentKeyVersion: 0.0.1
parentLocalName: CreateOrDeleteState
localName: ReceiveEventPolicy
outputType: DIRECT
output:
parentKeyName: ReceiveEventPolicy
parentKeyVersion: 0.0.1
parentLocalName: CreateOrDeleteState
localName: DeleteSubscriptionPayload
- key: CreateSubscription
value:
stateKey:
parentKeyName: ReceiveEventPolicy
parentKeyVersion: 0.0.1
parentLocalName: 'NULL'
localName: CreateSubscription
trigger:
name: CreateSubscriptionPayloadEvent
version: 0.0.1
stateOutputs:
entry:
- key: IssueCreateSubscriptionRequestOutput
value:
key:
parentKeyName: ReceiveEventPolicy
parentKeyVersion: 0.0.1
parentLocalName: CreateSubscription
localName: IssueCreateSubscriptionRequestOutput
outgoingEvent:
name: CDSCreateSubscriptionRequestEvent
version: 0.0.1
nextState:
parentKeyName: 'NULL'
parentKeyVersion: 0.0.0
parentLocalName: 'NULL'
localName: 'NULL'
contextAlbumReference:
- name: PMSubscriptionAlbum
version: 0.0.1
taskSelectionLogic:
key: 'NULL'
logicFlavour: UNDEFINED
logic: ''
stateFinalizerLogicMap:
entry: []
defaultTask:
name: CreateSubscriptionRequestTask
version: 0.0.1
taskReferences:
entry:
- key:
name: CreateSubscriptionRequestTask
version: 0.0.1
value:
key:
parentKeyName: ReceiveEventPolicy
parentKeyVersion: 0.0.1
parentLocalName: CreateSubscription
localName: ReceiveEventPolicy
outputType: DIRECT
output:
parentKeyName: ReceiveEventPolicy
parentKeyVersion: 0.0.1
parentLocalName: CreateSubscription
localName: IssueCreateSubscriptionRequestOutput
- key: DeleteSubscription
value:
stateKey:
parentKeyName: ReceiveEventPolicy
parentKeyVersion: 0.0.1
parentLocalName: 'NULL'
localName: DeleteSubscription
trigger:
name: DeleteSubscriptionPayloadEvent
version: 0.0.1
stateOutputs:
entry:
- key: IssueDeleteSubscriptionRequestOutput
value:
key:
parentKeyName: ReceiveEventPolicy
parentKeyVersion: 0.0.1
parentLocalName: DeleteSubscription
localName: IssueDeleteSubscriptionRequestOutput
outgoingEvent:
name: CDSDeleteSubscriptionRequestEvent
version: 0.0.1
nextState:
parentKeyName: 'NULL'
parentKeyVersion: 0.0.0
parentLocalName: 'NULL'
localName: 'NULL'
contextAlbumReference:
- name: PMSubscriptionAlbum
version: 0.0.1
taskSelectionLogic:
key: 'NULL'
logicFlavour: UNDEFINED
logic: ''
stateFinalizerLogicMap:
entry: []
defaultTask:
name: DeleteSubscriptionRequestTask
version: 0.0.1
taskReferences:
entry:
- key:
name: DeleteSubscriptionRequestTask
version: 0.0.1
value:
key:
parentKeyName: ReceiveEventPolicy
parentKeyVersion: 0.0.1
parentLocalName: DeleteSubscription
localName: ReceiveEventPolicy
outputType: DIRECT
output:
parentKeyName: ReceiveEventPolicy
parentKeyVersion: 0.0.1
parentLocalName: DeleteSubscription
localName: IssueDeleteSubscriptionRequestOutput
- key: ReceiveSubscriptionState
value:
stateKey:
parentKeyName: ReceiveEventPolicy
parentKeyVersion: 0.0.1
parentLocalName: 'NULL'
localName: ReceiveSubscriptionState
trigger:
name: pmsh-operational-policy
version: 0.0.1
stateOutputs:
entry:
- key: ReceivePMSubscriptionOutput
value:
key:
parentKeyName: ReceiveEventPolicy
parentKeyVersion: 0.0.1
parentLocalName: ReceiveSubscriptionState
localName: ReceivePMSubscriptionOutput
outgoingEvent:
name: PMSubscriptionOutputEvent
version: 0.0.1
nextState:
parentKeyName: ReceiveEventPolicy
parentKeyVersion: 0.0.1
parentLocalName: 'NULL'
localName: CreateOrDeleteState
contextAlbumReference:
- name: PMSubscriptionAlbum
version: 0.0.1
taskSelectionLogic:
key: 'NULL'
logicFlavour: UNDEFINED
logic: ''
stateFinalizerLogicMap:
entry: []
defaultTask:
name: ReceiveSubscriptionTask
version: 0.0.1
taskReferences:
entry:
- key:
name: ReceiveSubscriptionTask
version: 0.0.1
value:
key:
parentKeyName: ReceiveEventPolicy
parentKeyVersion: 0.0.1
parentLocalName: ReceiveSubscriptionState
localName: ReceiveEventPolicy
outputType: DIRECT
output:
parentKeyName: ReceiveEventPolicy
parentKeyVersion: 0.0.1
parentLocalName: ReceiveSubscriptionState
localName: ReceivePMSubscriptionOutput
firstState: ReceiveSubscriptionState
tasks:
key:
name: PMControlPolicy_Tasks
version: 0.0.1
taskMap:
entry:
- key:
name: CDSCreateResponseTask
version: 0.0.1
value:
key:
name: CDSCreateResponseTask
version: 0.0.1
inputFields:
entry:
- key: actionIdentifiers
value:
key: actionIdentifiers
fieldSchemaKey:
name: CDSActionIdentifiersType
version: 0.0.1
optional: false
- key: commonHeader
value:
key: commonHeader
fieldSchemaKey:
name: CDSResponseCommonHeaderType
version: 0.0.1
optional: false
- key: payload
value:
key: payload
fieldSchemaKey:
name: CDSCreateResponsePayloadType
version: 0.0.1
optional: false
- key: status
value:
key: status
fieldSchemaKey:
name: CDSResponseStatusType
version: 0.0.1
optional: false
outputFields:
entry:
- key: status
value:
key: status
fieldSchemaKey:
name: SubscriptionStatusType
version: 0.0.1
optional: false
taskParameters:
entry: []
contextAlbumReference:
- name: PMSubscriptionAlbum
version: 0.0.1
taskLogic:
key: TaskLogic
logicFlavour: JAVASCRIPT
logic: |-
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2020 Nordix. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
executor.logger.info(executor.subject.id);
var commonHeader = executor.inFields.get("commonHeader")
var response = executor.inFields.get("payload")
var albumID = commonHeader.get("requestId")
var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").get(albumID.toString());
var responseStatus = executor.subject.getOutFieldSchemaHelper("status").createNewInstance();
responseStatus.put("subscriptionName", pmSubscriptionInfo.get("subscription").get("subscriptionName"))
responseStatus.put("nfName", pmSubscriptionInfo.get("nfName"))
responseStatus.put("changeType", pmSubscriptionInfo.get("changeType"))
var status = response.get(pmSubscriptionInfo.get("changeType").toLowerCase() + "_DasH_subscription_DasH_response").get("odl_DasH_response").get("status")
executor.logger.info("RESPONSE STATUS = " + status)
if(status == "success") {
responseStatus.put("message", "success")
} else {
responseStatus.put("message", "failed")
}
executor.outFields.put("status", responseStatus)
//var returnValue = executor.isTrue;
true;
- key:
name: CDSDeleteResponseTask
version: 0.0.1
value:
key:
name: CDSDeleteResponseTask
version: 0.0.1
inputFields:
entry:
- key: actionIdentifiers
value:
key: actionIdentifiers
fieldSchemaKey:
name: CDSActionIdentifiersType
version: 0.0.1
optional: false
- key: commonHeader
value:
key: commonHeader
fieldSchemaKey:
name: CDSResponseCommonHeaderType
version: 0.0.1
optional: false
- key: payload
value:
key: payload
fieldSchemaKey:
name: CDSDeleteResponsePayloadType
version: 0.0.1
optional: false
- key: status
value:
key: status
fieldSchemaKey:
name: CDSResponseStatusType
version: 0.0.1
optional: false
outputFields:
entry:
- key: status
value:
key: status
fieldSchemaKey:
name: SubscriptionStatusType
version: 0.0.1
optional: false
taskParameters:
entry: []
contextAlbumReference:
- name: PMSubscriptionAlbum
version: 0.0.1
taskLogic:
key: TaskLogic
logicFlavour: JAVASCRIPT
logic: |-
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2020 Nordix. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
executor.logger.info(executor.subject.id);
var commonHeader = executor.inFields.get("commonHeader")
var response = executor.inFields.get("payload")
var albumID = commonHeader.get("requestId")
var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").get(albumID.toString());
var responseStatus = executor.subject.getOutFieldSchemaHelper("status").createNewInstance();
responseStatus.put("subscriptionName", pmSubscriptionInfo.get("subscription").get("subscriptionName"))
responseStatus.put("nfName", pmSubscriptionInfo.get("nfName"))
responseStatus.put("changeType", pmSubscriptionInfo.get("changeType"))
var status = response.get(pmSubscriptionInfo.get("changeType").toLowerCase() + "_DasH_subscription_DasH_response").get("odl_DasH_response").get("status")
executor.logger.info("RESPONSE STATUS = " + status)
if(status == "success") {
responseStatus.put("message", "success")
} else {
responseStatus.put("message", "failed")
}
executor.outFields.put("status", responseStatus)
//var returnValue = executor.isTrue;
true;
- key:
name: CreateSubscriptionPayloadTask
version: 0.0.1
value:
key:
name: CreateSubscriptionPayloadTask
version: 0.0.1
inputFields:
entry:
- key: albumID
value:
key: albumID
fieldSchemaKey:
name: UUIDType
version: 0.0.1
optional: false
outputFields:
entry:
- key: albumID
value:
key: albumID
fieldSchemaKey:
name: UUIDType
version: 0.0.1
optional: false
- key: payload
value:
key: payload
fieldSchemaKey:
name: CDSCreateSubscriptionPayloadType
version: 0.0.1
optional: false
taskParameters:
entry: []
contextAlbumReference:
- name: PMSubscriptionAlbum
version: 0.0.1
taskLogic:
key: TaskLogic
logicFlavour: JAVASCRIPT
logic: |-
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2020 Nordix. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
executor.logger.info(executor.subject.id);
var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").get(executor.inFields.get("albumID").toString())
var changeType = pmSubscriptionInfo.get("changeType").toLowerCase()
var payloadProperties = executor.subject.getOutFieldSchemaHelper("payload").createNewSubInstance(changeType + "_DasH_subscription_DasH_properties_record");
payloadProperties.put("nfName", pmSubscriptionInfo.get("nfName"))
payloadProperties.put("subscriptionName", pmSubscriptionInfo.get("subscription").get("subscriptionName"))
payloadProperties.put("administrativeState", pmSubscriptionInfo.get("subscription").get("administrativeState"))
payloadProperties.put("fileBasedGP", pmSubscriptionInfo.get("subscription").get("fileBasedGP").toString())
payloadProperties.put("fileLocation", pmSubscriptionInfo.get("subscription").get("fileLocation"))
payloadProperties.put("measurementGroups", pmSubscriptionInfo.get("subscription").get("measurementGroups"))
var payloadEntry = executor.subject.getOutFieldSchemaHelper("payload").createNewSubInstance("CDSRequestPayloadEntry");
payloadEntry.put(changeType + "_DasH_subscription_DasH_properties", payloadProperties)
var payload = executor.subject.getOutFieldSchemaHelper("payload").createNewInstance();
payload.put(changeType + "_DasH_subscription_DasH_request", payloadEntry);
executor.outFields.put("albumID", executor.inFields.get("albumID"))
executor.outFields.put("payload", payload);
//var returnValue = executor.isTrue;
true;
- key:
name: CreateSubscriptionRequestTask
version: 0.0.1
value:
key:
name: CreateSubscriptionRequestTask
version: 0.0.1
inputFields:
entry:
- key: albumID
value:
key: albumID
fieldSchemaKey:
name: UUIDType
version: 0.0.1
optional: false
- key: payload
value:
key: payload
fieldSchemaKey:
name: CDSCreateSubscriptionPayloadType
version: 0.0.1
optional: false
outputFields:
entry:
- key: actionIdentifiers
value:
key: actionIdentifiers
fieldSchemaKey:
name: CDSActionIdentifiersType
version: 0.0.1
optional: false
- key: commonHeader
value:
key: commonHeader
fieldSchemaKey:
name: CDSRequestCommonHeaderType
version: 0.0.1
optional: false
- key: payload
value:
key: payload
fieldSchemaKey:
name: CDSCreateSubscriptionPayloadType
version: 0.0.1
optional: false
taskParameters:
entry: []
contextAlbumReference:
- name: PMSubscriptionAlbum
version: 0.0.1
taskLogic:
key: TaskLogic
logicFlavour: JAVASCRIPT
logic: |-
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2020 Nordix. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
executor.logger.info(executor.subject.id);
var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").get(executor.inFields.get("albumID").toString())
var changeType = pmSubscriptionInfo.get("changeType").toLowerCase()
var blueprintName = pmSubscriptionInfo.get("blueprintName").toLowerCase()
var blueprintVersion = pmSubscriptionInfo.get("blueprintVersion").toLowerCase()
var payload = executor.inFields.get("payload")
var actionName = changeType + "-subscription"
var commonHeader = executor.subject.getOutFieldSchemaHelper("commonHeader").createNewInstance();
commonHeader.put("originatorId", "sdnc");
commonHeader.put("requestId", executor.inFields.get("albumID").toString());
commonHeader.put("subRequestId", "sub-123456-1000");
var actionIdentifiers = executor.subject.getOutFieldSchemaHelper("actionIdentifiers").createNewInstance();
actionIdentifiers.put("actionName", actionName);
actionIdentifiers.put("blueprintName", blueprintName);
actionIdentifiers.put("blueprintVersion", blueprintVersion);
actionIdentifiers.put("mode", "sync");
executor.outFields.put("commonHeader", commonHeader);
executor.outFields.put("actionIdentifiers", actionIdentifiers);
executor.outFields.put("payload", payload);
//var returnValue = executor.isTrue;
true;
- key:
name: DeleteSubscriptionPayloadTask
version: 0.0.1
value:
key:
name: DeleteSubscriptionPayloadTask
version: 0.0.1
inputFields:
entry:
- key: albumID
value:
key: albumID
fieldSchemaKey:
name: UUIDType
version: 0.0.1
optional: false
outputFields:
entry:
- key: albumID
value:
key: albumID
fieldSchemaKey:
name: UUIDType
version: 0.0.1
optional: false
- key: payload
value:
key: payload
fieldSchemaKey:
name: CDSDeleteSubscriptionPayloadType
version: 0.0.1
optional: false
taskParameters:
entry: []
contextAlbumReference:
- name: PMSubscriptionAlbum
version: 0.0.1
taskLogic:
key: TaskLogic
logicFlavour: JAVASCRIPT
logic: |-
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2020 Nordix. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
executor.logger.info(executor.subject.id);
var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").get(executor.inFields.get("albumID").toString())
var changeType = pmSubscriptionInfo.get("changeType").toLowerCase()
var payloadProperties = executor.subject.getOutFieldSchemaHelper("payload").createNewSubInstance(changeType + "_DasH_subscription_DasH_properties_record");
payloadProperties.put("nfName", pmSubscriptionInfo.get("nfName"))
payloadProperties.put("subscriptionName", pmSubscriptionInfo.get("subscription").get("subscriptionName"))
payloadProperties.put("administrativeState", pmSubscriptionInfo.get("subscription").get("administrativeState"))
payloadProperties.put("fileBasedGP", pmSubscriptionInfo.get("subscription").get("fileBasedGP").toString())
payloadProperties.put("fileLocation", pmSubscriptionInfo.get("subscription").get("fileLocation"))
payloadProperties.put("measurementGroups", pmSubscriptionInfo.get("subscription").get("measurementGroups"))
var payloadEntry = executor.subject.getOutFieldSchemaHelper("payload").createNewSubInstance("CDSRequestPayloadEntry");
payloadEntry.put(changeType + "_DasH_subscription_DasH_properties", payloadProperties)
var payload = executor.subject.getOutFieldSchemaHelper("payload").createNewInstance();
payload.put(changeType + "_DasH_subscription_DasH_request", payloadEntry);
executor.outFields.put("albumID", executor.inFields.get("albumID"))
executor.outFields.put("payload", payload);
//var returnValue = executor.isTrue;
true;
- key:
name: DeleteSubscriptionRequestTask
version: 0.0.1
value:
key:
name: DeleteSubscriptionRequestTask
version: 0.0.1
inputFields:
entry:
- key: albumID
value:
key: albumID
fieldSchemaKey:
name: UUIDType
version: 0.0.1
optional: false
- key: payload
value:
key: payload
fieldSchemaKey:
name: CDSDeleteSubscriptionPayloadType
version: 0.0.1
optional: false
outputFields:
entry:
- key: actionIdentifiers
value:
key: actionIdentifiers
fieldSchemaKey:
name: CDSActionIdentifiersType
version: 0.0.1
optional: false
- key: commonHeader
value:
key: commonHeader
fieldSchemaKey:
name: CDSRequestCommonHeaderType
version: 0.0.1
optional: false
- key: payload
value:
key: payload
fieldSchemaKey:
name: CDSDeleteSubscriptionPayloadType
version: 0.0.1
optional: false
taskParameters:
entry: []
contextAlbumReference:
- name: PMSubscriptionAlbum
version: 0.0.1
taskLogic:
key: TaskLogic
logicFlavour: JAVASCRIPT
logic: |-
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2020 Nordix. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
executor.logger.info(executor.subject.id);
var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").get(executor.inFields.get("albumID").toString())
var changeType = pmSubscriptionInfo.get("changeType").toLowerCase()
var blueprintName = pmSubscriptionInfo.get("blueprintName").toLowerCase()
var blueprintVersion = pmSubscriptionInfo.get("blueprintVersion").toLowerCase()
var payload = executor.inFields.get("payload")
var actionName = changeType + "-subscription"
var commonHeader = executor.subject.getOutFieldSchemaHelper("commonHeader").createNewInstance();
commonHeader.put("originatorId", "sdnc");
commonHeader.put("requestId", executor.inFields.get("albumID").toString());
commonHeader.put("subRequestId", "sub-123456-1000");
var actionIdentifiers = executor.subject.getOutFieldSchemaHelper("actionIdentifiers").createNewInstance();
actionIdentifiers.put("actionName", actionName);
actionIdentifiers.put("blueprintName", blueprintName);
actionIdentifiers.put("blueprintVersion", blueprintVersion);
actionIdentifiers.put("mode", "sync");
executor.outFields.put("commonHeader", commonHeader);
executor.outFields.put("actionIdentifiers", actionIdentifiers);
executor.outFields.put("payload", payload);
//var returnValue = executor.isTrue;
true;
- key:
name: ReceiveSubscriptionTask
version: 0.0.1
value:
key:
name: ReceiveSubscriptionTask
version: 0.0.1
inputFields:
entry:
- key: blueprintName
value:
key: blueprintName
fieldSchemaKey:
name: SimpleStringType
version: 0.0.1
optional: false
- key: blueprintVersion
value:
key: blueprintVersion
fieldSchemaKey:
name: SimpleStringType
version: 0.0.1
optional: false
- key: changeType
value:
key: changeType
fieldSchemaKey:
name: SimpleStringType
version: 0.0.1
optional: false
- key: closedLoopControlName
value:
key: closedLoopControlName
fieldSchemaKey:
name: SimpleStringType
version: 0.0.1
optional: false
- key: nfName
value:
key: nfName
fieldSchemaKey:
name: SimpleStringType
version: 0.0.1
optional: false
- key: policyName
value:
key: policyName
fieldSchemaKey:
name: SimpleStringType
version: 0.0.1
optional: false
- key: subscription
value:
key: subscription
fieldSchemaKey:
name: SubscriptionType
version: 0.0.1
optional: false
outputFields:
entry:
- key: albumID
value:
key: albumID
fieldSchemaKey:
name: UUIDType
version: 0.0.1
optional: false
taskParameters:
entry: []
contextAlbumReference:
- name: PMSubscriptionAlbum
version: 0.0.1
taskLogic:
key: TaskLogic
logicFlavour: JAVASCRIPT
logic: |-
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2020 Nordix. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
var uuidType = java.util.UUID;
executor.logger.info(executor.subject.id);
//albumID will be used to fetch info from our album later
var albumID = uuidType.randomUUID();
var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").getSchemaHelper().createNewInstance();
var returnValue = true;
if(executor.inFields.get("policyName") != null) {
executor.logger.info("nfName in receive sub event " + executor.inFields.get("nfName"));
var changeType = executor.inFields.get("changeType")
var nfName = executor.inFields.get("nfName")
var policyName = executor.inFields.get("policyName")
var closedLoopControlName = executor.inFields.get("closedLoopControlName")
var subscription = executor.inFields.get("subscription")
var blueprintName = executor.inFields.get("blueprintName")
var blueprintVersion = executor.inFields.get("blueprintVersion")
pmSubscriptionInfo.put("nfName", executor.inFields.get("nfName"));
pmSubscriptionInfo.put("changeType", executor.inFields.get("changeType"))
pmSubscriptionInfo.put("policyName", executor.inFields.get("policyName"))
pmSubscriptionInfo.put("closedLoopControlName", executor.inFields.get("closedLoopControlName"))
pmSubscriptionInfo.put("subscription", subscription)
pmSubscriptionInfo.put("blueprintName", blueprintName)
pmSubscriptionInfo.put("blueprintVersion", blueprintVersion)
executor.getContextAlbum("PMSubscriptionAlbum").put(albumID.toString(), pmSubscriptionInfo);
executor.outFields.put("albumID", albumID)
} else {
executor.message = "Received invalid event"
returnValue = false;
}
returnValue;
events:
key:
name: PMControlPolicy_Events
version: 0.0.1
eventMap:
entry:
- key:
name: CDSCreateResponseEvent
version: 0.0.1
value:
key:
name: CDSCreateResponseEvent
version: 0.0.1
nameSpace: org.onap.policy.apex.onap.pmcontrol
source: CDS
target: APEX
parameter:
entry:
- key: actionIdentifiers
value:
key: actionIdentifiers
fieldSchemaKey:
name: CDSActionIdentifiersType
version: 0.0.1
optional: false
- key: commonHeader
value:
key: commonHeader
fieldSchemaKey:
name: CDSResponseCommonHeaderType
version: 0.0.1
optional: false
- key: payload
value:
key: payload
fieldSchemaKey:
name: CDSCreateResponsePayloadType
version: 0.0.1
optional: false
- key: status
value:
key: status
fieldSchemaKey:
name: CDSResponseStatusType
version: 0.0.1
optional: false
- key:
name: CDSCreateSubscriptionRequestEvent
version: 0.0.1
value:
key:
name: CDSCreateSubscriptionRequestEvent
version: 0.0.1
nameSpace: org.onap.policy.apex.onap.pmcontrol
source: APEX
target: APEX
parameter:
entry:
- key: actionIdentifiers
value:
key: actionIdentifiers
fieldSchemaKey:
name: CDSActionIdentifiersType
version: 0.0.1
optional: false
- key: commonHeader
value:
key: commonHeader
fieldSchemaKey:
name: CDSRequestCommonHeaderType
version: 0.0.1
optional: false
- key: payload
value:
key: payload
fieldSchemaKey:
name: CDSCreateSubscriptionPayloadType
version: 0.0.1
optional: false
- key:
name: CDSDeleteResponseEvent
version: 0.0.1
value:
key:
name: CDSDeleteResponseEvent
version: 0.0.1
nameSpace: org.onap.policy.apex.onap.pmcontrol
source: CDS
target: APEX
parameter:
entry:
- key: actionIdentifiers
value:
key: actionIdentifiers
fieldSchemaKey:
name: CDSActionIdentifiersType
version: 0.0.1
optional: false
- key: commonHeader
value:
key: commonHeader
fieldSchemaKey:
name: CDSResponseCommonHeaderType
version: 0.0.1
optional: false
- key: payload
value:
key: payload
fieldSchemaKey:
name: CDSDeleteResponsePayloadType
version: 0.0.1
optional: false
- key: status
value:
key: status
fieldSchemaKey:
name: CDSResponseStatusType
version: 0.0.1
optional: false
- key:
name: CDSDeleteSubscriptionRequestEvent
version: 0.0.1
value:
key:
name: CDSDeleteSubscriptionRequestEvent
version: 0.0.1
nameSpace: org.onap.policy.apex.onap.pmcontrol
source: APEX
target: APEX
parameter:
entry:
- key: actionIdentifiers
value:
key: actionIdentifiers
fieldSchemaKey:
name: CDSActionIdentifiersType
version: 0.0.1
optional: false
- key: commonHeader
value:
key: commonHeader
fieldSchemaKey:
name: CDSRequestCommonHeaderType
version: 0.0.1
optional: false
- key: payload
value:
key: payload
fieldSchemaKey:
name: CDSDeleteSubscriptionPayloadType
version: 0.0.1
optional: false
- key:
name: CDSResponseStatusEvent
version: 0.0.1
value:
key:
name: CDSResponseStatusEvent
version: 0.0.1
nameSpace: org.onap.policy.apex.onap.pmcontrol
source: APEX
target: DCAE
parameter:
entry:
- key: status
value:
key: status
fieldSchemaKey:
name: SubscriptionStatusType
version: 0.0.1
optional: false
- key:
name: CreateSubscriptionPayloadEvent
version: 0.0.1
value:
key:
name: CreateSubscriptionPayloadEvent
version: 0.0.1
nameSpace: org.onap.policy.apex.onap.pmcontrol
source: APEX
target: APEX
parameter:
entry:
- key: albumID
value:
key: albumID
fieldSchemaKey:
name: UUIDType
version: 0.0.1
optional: false
- key: payload
value:
key: payload
fieldSchemaKey:
name: CDSCreateSubscriptionPayloadType
version: 0.0.1
optional: false
- key:
name: DeleteSubscriptionPayloadEvent
version: 0.0.1
value:
key:
name: DeleteSubscriptionPayloadEvent
version: 0.0.1
nameSpace: org.onap.policy.apex.onap.pmcontrol
source: APEX
target: APEX
parameter:
entry:
- key: albumID
value:
key: albumID
fieldSchemaKey:
name: UUIDType
version: 0.0.1
optional: false
- key: payload
value:
key: payload
fieldSchemaKey:
name: CDSDeleteSubscriptionPayloadType
version: 0.0.1
optional: false
- key:
name: MRResponseEvent
version: 0.0.1
value:
key:
name: MRResponseEvent
version: 0.0.1
nameSpace: org.onap.policy.apex.onap.pmcontrol
source: DCAE
target: APEX
parameter:
entry:
- key: count
value:
key: count
fieldSchemaKey:
name: SimpleIntType
version: 0.0.1
optional: false
- key: serverTimeMs
value:
key: serverTimeMs
fieldSchemaKey:
name: SimpleIntType
version: 0.0.1
optional: false
- key:
name: PMSubscriptionOutputEvent
version: 0.0.1
value:
key:
name: PMSubscriptionOutputEvent
version: 0.0.1
nameSpace: org.onap.policy.apex.onap.pmcontrol
source: APEX
target: APEX
parameter:
entry:
- key: albumID
value:
key: albumID
fieldSchemaKey:
name: UUIDType
version: 0.0.1
optional: false
- key:
name: pmsh-operational-policy
version: 0.0.1
value:
key:
name: pmsh-operational-policy
version: 0.0.1
nameSpace: org.onap.policy.apex.onap.pmcontrol
source: DCAE
target: APEX
parameter:
entry:
- key: blueprintName
value:
key: blueprintName
fieldSchemaKey:
name: SimpleStringType
version: 0.0.1
optional: false
- key: blueprintVersion
value:
key: blueprintVersion
fieldSchemaKey:
name: SimpleStringType
version: 0.0.1
optional: false
- key: changeType
value:
key: changeType
fieldSchemaKey:
name: SimpleStringType
version: 0.0.1
optional: false
- key: closedLoopControlName
value:
key: closedLoopControlName
fieldSchemaKey:
name: SimpleStringType
version: 0.0.1
optional: false
- key: nfName
value:
key: nfName
fieldSchemaKey:
name: SimpleStringType
version: 0.0.1
optional: false
- key: policyName
value:
key: policyName
fieldSchemaKey:
name: SimpleStringType
version: 0.0.1
optional: false
- key: subscription
value:
key: subscription
fieldSchemaKey:
name: SubscriptionType
version: 0.0.1
optional: false
albums:
key:
name: PMControlPolicy_Albums
version: 0.0.1
albums:
entry:
- key:
name: PMSubscriptionAlbum
version: 0.0.1
value:
key:
name: PMSubscriptionAlbum
version: 0.0.1
scope: policy
isWritable: true
itemSchema:
name: PMSubscriptionType
version: 0.0.1
schemas:
key:
name: PMControlPolicy_Schemas
version: 0.0.1
schemas:
entry:
- key:
name: CDSActionIdentifiersType
version: 0.0.1
value:
key:
name: CDSActionIdentifiersType
version: 0.0.1
schemaFlavour: Avro
schemaDefinition: |-
{
"type": "record",
"name": "ActionIdentifiers_Type",
"namespace": "org.onap.policy.apex.onap.helloworld",
"fields": [
{
"name": "actionName",
"type": "string"
},
{
"name": "blueprintName",
"type": "string"
},
{
"name": "blueprintVersion",
"type": "string"
},
{
"name": "mode",
"type": "string"
}
]
}
- key:
name: CDSCreateResponsePayloadType
version: 0.0.1
value:
key:
name: CDSCreateResponsePayloadType
version: 0.0.1
schemaFlavour: Avro
schemaDefinition: |-
{
"name": "CreateResponsePayloadEntry",
"type": "record",
"namespace": "org.onap.policy.apex.onap.helloworld",
"fields": [
{
"name": "create_DasH_subscription_DasH_response",
"type": {
"name": "create_DasH_subscription_DasH_response",
"type": "record",
"fields": [
{
"name": "odl_DasH_response",
"type": {
"name": "odl_DasH_response",
"type": "record",
"fields": [
{
"name": "status",
"type": "string"
}
]
}
}
]
}
}
]
}
- key:
name: CDSCreateSubscriptionPayloadType
version: 0.0.1
value:
key:
name: CDSCreateSubscriptionPayloadType
version: 0.0.1
schemaFlavour: Avro
schemaDefinition: |-
{
"type": "map",
"values": {
"type": "record",
"name": "CDSRequestPayloadEntry",
"fields": [
{
"name": "create_DasH_subscription_DasH_properties",
"type": {
"name": "create_DasH_subscription_DasH_properties_record",
"type": "record",
"fields": [
{
"name": "nfName",
"type": "string"
},
{
"name": "subscriptionName",
"type": "string"
},
{
"name": "administrativeState",
"type": "string"
},
{
"name": "fileBasedGP",
"type": "string"
},
{
"name": "fileLocation",
"type": "string"
},
{
"name": "measurementGroups",
"type": {
"type": "array",
"items": {
"name": "measurementGroups_record",
"type": "record",
"fields": [
{
"name": "measurementGroup",
"type": {
"name": "measurementGroup",
"type": "record",
"fields": [
{
"name": "measurementTypes",
"type": {
"type": "array",
"items": {
"name": "measurementTypes_record",
"type": "record",
"fields": [
{
"name": "measurementType",
"type": "string"
}
]
}
}
},
{
"name": "managedObjectDNsBasic",
"type": {
"type": "array",
"items": {
"name": "managedObjectDNsBasic_record",
"type": "record",
"fields": [
{
"name": "DN",
"type": "string"
}
]
}
}
}
]
}
}
]
}
}
}
]
}
}
]
}
}
- key:
name: CDSDeleteResponsePayloadType
version: 0.0.1
value:
key:
name: CDSDeleteResponsePayloadType
version: 0.0.1
schemaFlavour: Avro
schemaDefinition: |-
{
"name": "DeleteResponsePayloadEntry",
"type": "record",
"namespace": "com.acme.avro",
"fields": [
{
"name": "delete_DasH_subscription_DasH_response",
"type": {
"name": "delete_DasH_subscription_DasH_response",
"type": "record",
"fields": [
{
"name": "odl_DasH_response",
"type": {
"name": "odl_DasH_response",
"type": "record",
"fields": [
{
"name": "status",
"type": "string"
}
]
}
}
]
}
}
]
}
- key:
name: CDSDeleteSubscriptionPayloadType
version: 0.0.1
value:
key:
name: CDSDeleteSubscriptionPayloadType
version: 0.0.1
schemaFlavour: Avro
schemaDefinition: |-
{
"type": "map",
"values": {
"type": "record",
"name": "CDSRequestPayloadEntry",
"fields": [
{
"name": "delete_DasH_subscription_DasH_properties",
"type": {
"name": "delete_DasH_subscription_DasH_properties_record",
"type": "record",
"fields": [
{
"name": "nfName",
"type": "string"
},
{
"name": "subscriptionName",
"type": "string"
},
{
"name": "administrativeState",
"type": "string"
},
{
"name": "fileBasedGP",
"type": "string"
},
{
"name": "fileLocation",
"type": "string"
},
{
"name": "measurementGroups",
"type": {
"type": "array",
"items": {
"name": "measurementGroups_record",
"type": "record",
"fields": [
{
"name": "measurementGroup",
"type": {
"name": "measurementGroup",
"type": "record",
"fields": [
{
"name": "measurementTypes",
"type": {
"type": "array",
"items": {
"name": "measurementTypes_record",
"type": "record",
"fields": [
{
"name": "measurementType",
"type": "string"
}
]
}
}
},
{
"name": "managedObjectDNsBasic",
"type": {
"type": "array",
"items": {
"name": "managedObjectDNsBasic_record",
"type": "record",
"fields": [
{
"name": "DN",
"type": "string"
}
]
}
}
}
]
}
}
]
}
}
}
]
}
}
]
}
}
- key:
name: CDSRequestCommonHeaderType
version: 0.0.1
value:
key:
name: CDSRequestCommonHeaderType
version: 0.0.1
schemaFlavour: Avro
schemaDefinition: |-
{
"type": "record",
"name": "RequestCommonHeader_Type",
"namespace": "org.onap.policy.apex.onap.helloworld",
"fields": [
{
"name": "originatorId",
"type": "string"
},
{
"name": "requestId",
"type": "string"
},
{
"name": "subRequestId",
"type": "string"
}
]
}
- key:
name: CDSResponseCommonHeaderType
version: 0.0.1
value:
key:
name: CDSResponseCommonHeaderType
version: 0.0.1
schemaFlavour: Avro
schemaDefinition: |-
{
"type": "record",
"name": "ResponseCommonHeader_Type",
"namespace": "org.onap.policy.apex.onap.helloworld",
"fields": [
{
"name": "originatorId",
"type": "string"
},
{
"name": "requestId",
"type": "string"
},
{
"name": "subRequestId",
"type": "string"
},
{
"name": "timestamp",
"type": "string"
},
{
"name": "flags",
"type": ["null", "string"]
}
]
}
- key:
name: CDSResponseStatusType
version: 0.0.1
value:
key:
name: CDSResponseStatusType
version: 0.0.1
schemaFlavour: Avro
schemaDefinition: |-
{
"type": "record",
"name": "ResponseStatus_Type",
"namespace": "org.onap.policy.apex.onap.helloworld",
"fields": [
{
"name": "code",
"type": "int"
},
{
"name": "eventType",
"type": "string"
},
{
"name": "timestamp",
"type": "string"
},
{
"name": "message",
"type": "string"
}
]
}
- key:
name: PMSubscriptionType
version: 0.0.1
value:
key:
name: PMSubscriptionType
version: 0.0.1
schemaFlavour: Avro
schemaDefinition: "{\n\t\"name\": \"PMSubscription\",\n\t\"type\": \"record\",\n\t\"namespace\": \"\
org.onap.policy.apex.onap.pmcontrol\",\n\t\"fields\": [\n {\n \"name\": \"nfName\"\
,\n \"type\": \"string\"\n },\n\t {\n\t\t\t\"name\": \"changeType\",\n\t\t\t\"\
type\": \"string\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"closedLoopControlName\",\n\t\t\t\"type\": \"\
string\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"policyName\",\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t\
{\n\t\t \"name\": \"blueprintName\",\n\t\t \"type\": \"string\"\n\t\t},\n\t\t{\n\t\t \"name\"\
: \"blueprintVersion\",\n\t\t \"type\": \"string\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"subscription\"\
,\n\t\t\t\"type\": {\n\t\t\t\t\"name\": \"subscription\",\n\t\t\t\t\"type\": \"record\",\n\t\t\t\t\
\"fields\": [{\n\t\t\t\t\t\t\"name\": \"subscriptionName\",\n\t\t\t\t\t\t\"type\": \"string\"\n\t\t\
\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"name\": \"administrativeState\",\n\t\t\t\t\t\t\"type\": \"string\"\
\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"name\": \"fileBasedGP\",\n\t\t\t\t\t\t\"type\": \"int\"\
\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"name\": \"fileLocation\",\n\t\t\t\t\t\t\"type\": \"string\"\
\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"name\": \"measurementGroups\",\n\t\t\t\t\t\t\"type\": {\n\
\t\t\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\t\t\"name\": \"Measurement_Groups_Type\"\
,\n\t\t\t\t\t\t\t\t\"type\": \"record\",\n\t\t\t\t\t\t\t\t\"fields\": [{\n\t\t\t\t\t\t\t\t\t\"name\"\
: \"measurementGroup\",\n\t\t\t\t\t\t\t\t\t\"type\": {\n\t\t\t\t\t\t\t\t\t\t\"name\": \"Measurement_Group_Type\"\
,\n\t\t\t\t\t\t\t\t\t\t\"type\": \"record\",\n\t\t\t\t\t\t\t\t\t\t\"fields\": [{\n\t\t\t\t\t\t\t\t\
\t\t\t\t\"name\": \"measurementTypes\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": {\n\t\t\t\t\t\t\t\t\t\t\
\t\t\t\"type\": \"array\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\
name\": \"Measurement_Types_Type\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"record\",\n\t\t\t\t\t\
\t\t\t\t\t\t\t\t\t\"fields\": [{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"measurementType\",\n\t\
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\t\t\
\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\
\t\t\t\t\t\t\t\t\"name\": \"managedObjectDNsBasic\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": {\n\t\t\t\t\
\t\t\t\t\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\t\t\t\
\t\t\t\t\t\"name\": \"Managed_Object_Dns_Basic_Type\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"record\"\
,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"fields\": [{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"DN\",\n\t\
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\t\t\
\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\
\t\t\t\t}\n\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\
\t}\n\t]\n}"
- key:
name: SimpleIntType
version: 0.0.1
value:
key:
name: SimpleIntType
version: 0.0.1
schemaFlavour: Java
schemaDefinition: java.lang.Integer
- key:
name: SimpleStringType
version: 0.0.1
value:
key:
name: SimpleStringType
version: 0.0.1
schemaFlavour: Java
schemaDefinition: java.lang.String
- key:
name: SubscriptionStatusType
version: 0.0.1
value:
key:
name: SubscriptionStatusType
version: 0.0.1
schemaFlavour: Avro
schemaDefinition: |-
{
"type": "record",
"name": "ActivateSubscriptionStatus_Type",
"namespace": "org.onap.policy.apex.onap.helloworld",
"fields": [
{
"name": "subscriptionName",
"type": "string"
},
{
"name": "nfName",
"type": "string"
},
{
"name": "changeType",
"type": "string"
},
{
"name": "message",
"type": "string"
}
]
}
- key:
name: SubscriptionType
version: 0.0.1
value:
key:
name: SubscriptionType
version: 0.0.1
schemaFlavour: Avro
schemaDefinition: "{\n\t\"name\": \"subscription\",\n\t\"type\": \"record\",\n\t\"fields\": [{\n\t\t\
\t\"name\": \"subscriptionName\",\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"administrativeState\"\
,\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"fileBasedGP\",\n\t\t\t\"type\": \"\
int\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"fileLocation\",\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t\
{\n\t\t\t\"name\": \"measurementGroups\",\n\t\t\t\"type\": {\n\t\t\t\t\"type\": \"array\",\n\t\t\t\
\t\"items\": {\n\t\t\t\t\t\"name\": \"Measurement_Groups_Type\",\n\t\t\t\t\t\"type\": \"record\",\n\
\t\t\t\t\t\"fields\": [{\n\t\t\t\t\t\t\"name\": \"measurementGroup\",\n\t\t\t\t\t\t\"type\": {\n\t\
\t\t\t\t\t\t\"name\": \"Measurement_Group_Type\",\n\t\t\t\t\t\t\t\"type\": \"record\",\n\t\t\t\t\t\
\t\t\"fields\": [{\n\t\t\t\t\t\t\t\t\t\"name\": \"measurementTypes\",\n\t\t\t\t\t\t\t\t\t\"type\"\
: {\n\t\t\t\t\t\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\t\t\t\
\t\t\"name\": \"Measurement_Types_Type\",\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"record\",\n\t\t\t\t\t\
\t\t\t\t\t\t\"fields\": [{\n\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"measurementType\",\n\t\t\t\t\t\t\t\
\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\
}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"managedObjectDNsBasic\",\n\
\t\t\t\t\t\t\t\t\t\"type\": {\n\t\t\t\t\t\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\t\t\t\t\t\"items\"\
: {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"Managed_Object_Dns_Basic_Type\",\n\t\t\t\t\t\t\t\t\t\t\t\"\
type\": \"record\",\n\t\t\t\t\t\t\t\t\t\t\t\"fields\": [{\n\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"DN\"\
,\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\t\t\t\t}\n\
\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}]\n\t\t\t\t}\n\t\
\t\t}\n\t\t}\n\t]\n}"
- key:
name: UUIDType
version: 0.0.1
value:
key:
name: UUIDType
version: 0.0.1
schemaFlavour: Java
schemaDefinition: java.util.UUID
engineParameters:
executorParameters:
JAVASCRIPT:
parameterClassName: org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters
contextParameters:
parameterClassName: org.onap.policy.apex.context.parameters.ContextParameters
schemaParameters:
Avro:
parameterClassName: org.onap.policy.apex.plugins.context.schema.avro.AvroSchemaHelperParameters
Java:
parameterClassName: org.onap.policy.apex.context.impl.schema.java.JavaSchemaHelperParameters
jsonAdapters:
Instant:
adaptedClass: java.time.Instant
adaptorClass: org.onap.policy.controlloop.util.Serialization$GsonInstantAdapter
eventInputParameters:
DCAEConsumer:
carrierTechnologyParameters:
carrierTechnology: RESTCLIENT
parameterClassName: org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters
parameters:
consumerPollTime: '50'
url: https://message-router:3905/events/unauthenticated.DCAE_CL_OUTPUT/cg1/sg1
eventProtocolParameters:
eventProtocol: JSON
parameters:
nameAlias: policyName
eventName: pmsh-operational-policy
eventNameFilter: pmsh-operational-policy
CDSRequestConsumer:
carrierTechnologyParameters:
carrierTechnology: RESTREQUESTOR
parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters
parameters:
url: http://10.10.10.184:30254/api/v1/execution-service/process
httpMethod: POST
restRequestTimeout: 2000
httpHeaders:
- - Authorization
- Basic Y2NzZGthcHBzOmNjc2RrYXBwcw==
eventProtocolParameters:
eventProtocol: JSON
eventName: CDSCreateResponseEvent
eventNameFilter: CDSCreateResponseEvent
requestorMode: true
requestorPeer: CDSRequestProducer
requestorTimeout: 500
CDSDeleteRequestConsumer:
carrierTechnologyParameters:
carrierTechnology: RESTREQUESTOR
parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters
parameters:
url: http://10.10.10.184:30254/api/v1/execution-service/process
httpMethod: POST
restRequestTimeout: 2000
httpHeaders:
- - Authorization
- Basic Y2NzZGthcHBzOmNjc2RrYXBwcw==
eventProtocolParameters:
eventProtocol: JSON
eventName: CDSDeleteResponseEvent
eventNameFilter: CDSDeleteResponseEvent
requestorMode: true
requestorPeer: CDSDeleteRequestProducer
requestorTimeout: 500
CDSReplyConsumer:
carrierTechnologyParameters:
carrierTechnology: RESTREQUESTOR
parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters
parameters:
url: https://message-router:3905/events/unauthenticated.PMSH_CL_INPUT
httpMethod: POST
restRequestTimeout: 2000
eventProtocolParameters:
eventProtocol: JSON
eventName: MRResponseEvent
eventNameFilter: MRResponseEvent
requestorMode: true
requestorPeer: CDSReplyProducer
requestorTimeout: 500
eventOutputParameters:
logOutputter:
carrierTechnologyParameters:
carrierTechnology: FILE
parameters:
fileName: /tmp/outputevents.log
eventProtocolParameters:
eventProtocol: JSON
StdOutOutputter:
carrierTechnologyParameters:
carrierTechnology: FILE
parameters:
standardIo: true
eventProtocolParameters:
eventProtocol: JSON
CDSRequestProducer:
carrierTechnologyParameters:
carrierTechnology: RESTREQUESTOR
parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters
eventProtocolParameters:
eventProtocol: JSON
eventNameFilter: CDSCreateSubscriptionRequestEvent
requestorMode: true
requestorPeer: CDSRequestConsumer
requestorTimeout: 500
CDSDeleteRequestProducer:
carrierTechnologyParameters:
carrierTechnology: RESTREQUESTOR
parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters
eventProtocolParameters:
eventProtocol: JSON
eventNameFilter: CDSDeleteSubscriptionRequestEvent
requestorMode: true
requestorPeer: CDSDeleteRequestConsumer
requestorTimeout: 500
CDSReplyProducer:
carrierTechnologyParameters:
carrierTechnology: RESTREQUESTOR
parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters
eventProtocolParameters:
eventProtocol: JSON
eventNameFilter: CDSResponseStatusEvent
requestorMode: true
requestorPeer: CDSReplyConsumer
requestorTimeout: 500 |
Control Loop Instantiation
- The "/instantiation" endpoint is responsible for creating the control loops. It doesn't start the loops but does create them.
REST in CLAMP vs REST in Control Loop PoC - Findings
- LoopService and MicroservicePolicyService classes resemble our PoC Provider classes, such as Commissioning and Instantiation Provider where java code in regards to CRUD resides
Examples:
Code Block language java title LoopService.getLoop() public Loop getLoop(String loopName) { return loopsRepository.findById(loopName).orElse(null); }
Code Block language java title ControlLoopInstantiationProvider.GetControlLoops() public ControlLoops getControlLoops(String name, String version) throws PfModelException { ControlLoops controlLoops = new ControlLoops(); controlLoops.setControlLoopList(controlLoopProvider.getControlLoops(name, version)); return controlLoops; }
- The differences start here, as CLAMP uses the Spring Framework Repository Interfaces to handle database calls, where as PoC is using the code defined in policy-models in regards to Tosca and our own models and JPA classes for ControlLoop related objects.
i.e LoopsRepository extends JpaRepository (Spring Framework). Our providers are either created by us or use policy ones i.e. PolicyModelsProvider. - There seems to be a lot of specific methods for updating the loop templates, such as updateDcaeDeploymentFields() and addOperationalPolicy(). In our case that is handled within the TOSCA service template itself, by mending the template where these objects can be added as nodeTemplates(ControlLoopElements), without having to be specific to a DCAE control loop. Further info in TOSCA handling.
- Actual REST code is handled rather differently. In CLAMP LoopController class serves as a class to introduce Springboot Framework with the "@Controller" annotation, and methods defined in this class are just calling the LoopService Methods. This is to allow these methods to be more easily called by the CAMEL flows using :
e.g. "<to uri="bean:org.onap.policy.clamp.loop.LoopController?method=getLoop(${header.loopName})"/". In CAMEL the response, logging and error handling occurs, with the code just throwing the exception.
In our case, our REST code along with annotations, definitions and responses is in our Controllers, which call the provider methods to do the actual interaction. e.g. CommissioningController, which defines the path along with other java.wx.rs inputs.Examples:
Code Block language java title LoopController.getLoop() public Loop getLoop(String loopName) { return loopService.getLoop(loopName); }
Code Block language xml title CAMEL for getLoop collapse true <get uri="/v2/loop/{loopName}" outType="org.onap.policy.clamp.loop.Loop" produces="application/json"> <route> <removeHeaders pattern="*" excludePattern="loopName"/> <doTry> <to uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'GET Loop')"/> <to uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')"/> <to uri="bean:org.onap.policy.clamp.loop.LoopController?method=getLoop(${header.loopName})"/> <to uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/> <doCatch> <exception>java.lang.Exception</exception> <handled> <constant>true</constant> </handled> <to uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/> <log loggingLevel="ERROR" message="GET Loop request failed for loop: ${header.loopName}, ${exception.stacktrace}"/> <setHeader name="CamelHttpResponseCode"> <constant>500</constant> </setHeader> <setBody> <simple>GET Loop FAILED</simple> </setBody> </doCatch> </doTry> </route> </get>
Code Block language java title Java Code for PoC way of handling REST collapse true @GET @Path("/instantiation") @ApiOperation(value = "Query details of the requested control loops", notes = "Queries details of the requested control loops, returning all control loop details", response = ControlLoops.class, tags = { "Clamp control loop Instantiation API" }, authorizations = @Authorization(value = AUTHORIZATION_TYPE), responseHeaders = { @ResponseHeader( name = VERSION_MINOR_NAME, description = VERSION_MINOR_DESCRIPTION, response = String.class), @ResponseHeader(name = VERSION_PATCH_NAME, description = VERSION_PATCH_DESCRIPTION, response = String.class), @ResponseHeader(name = VERSION_LATEST_NAME, description = VERSION_LATEST_DESCRIPTION, response = String.class), @ResponseHeader(name = REQUEST_ID_NAME, description = REQUEST_ID_HDR_DESCRIPTION, response = UUID.class)}, extensions = { @Extension( name = EXTENSION_NAME, properties = { @ExtensionProperty(name = API_VERSION_NAME, value = API_VERSION), @ExtensionProperty(name = LAST_MOD_NAME, value = LAST_MOD_RELEASE) } ) } ) @ApiResponses( value = { @ApiResponse(code = AUTHENTICATION_ERROR_CODE, message = AUTHENTICATION_ERROR_MESSAGE), @ApiResponse(code = AUTHORIZATION_ERROR_CODE, message = AUTHORIZATION_ERROR_MESSAGE), @ApiResponse(code = SERVER_ERROR_CODE, message = SERVER_ERROR_MESSAGE) } ) // @formatter:on public Response query( @HeaderParam(REQUEST_ID_NAME) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId, @ApiParam(value = "Control Loop definition name", required = true) @QueryParam("name") String name, @ApiParam(value = "Control Loop definition version", required = true) @QueryParam("version") String version) { try { ControlLoops response = provider.getControlLoops(name, version); return addLoggingHeaders(addVersionControlHeaders(Response.status(Status.OK)), requestId).entity(response) .build(); } catch (PfModelRuntimeException | PfModelException e) { LOGGER.warn("commisssioning of control loop failed", e); return createInstantiationErrorResponse(e, requestId); } }
- My knowledge on Spring is limited. Overall it seems more of a preference. Switching PoC way to handle REST to Spring/CAMEL as is in CLAMP should not be a massive hurdle, unless if Spring can only handle database queries which are defined by Spring Interfaces, and we cannot create "@Controller" for our provider(Service) code which uses our own JPA code for interacting with the DB
- I also want to mention that Spring/Camel is handling the DB transactions for US. Each time an endpoint is hit, the transaction is automatically opened, you can therefore (with specific annotations) abort, open new transac within the first one, control the transac if needed ....etc ... When no exception is raised the commit is done when the call ends. I see SpringBoot as an enterprise java Container that comes with JPA/JTA/Beans/Rest +..... functionalities out of the box (like JBOSS).