You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 26 Next »

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

  1. 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.
  2. When deploying the SDC notif + CSAR, clamp does a get query to dcae to get the blueprint ID in the inventory. If it fails CLAMP rollbacks the transactions and aborts the SDC notification installation.
  3. 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.
  4. 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% ((smile)) 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" come from the new DCAE architecture. (edited - hope that's ok)
  5. 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).
  6. However, it should be noted that, databases and tables are not automatically created by Spring. SQL scripts are used in CLAMP to do this. A script "start-db.sh" runs the mariadb docker container. Part of the functionality of the MariaDB image from DockerHub is that any scripts with extensions:  .sh, .sql, .sql.gz, and .sql.xz that are found in /docker-entrypoint-initdb.d are executed on startup... So, CLAMP has several scripts for creation of databases, users, tables and test data.
  7. 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.
  8. 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:

  1. The loop is saved in the "loops" table.
  2. 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.
  3. 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.

  1. Updating a microservice policy or an operational policy can be done in the the UI or by accessing the CLAMP backend directly.
  2. For the microservice policy, you can:
    1. 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.
    2. Send the JSON configuration of the policy directly to the CLAMP backend endpoint at "/updateMicroservicePolicy".
  3. In both cases, this populates the "configurations_json" field for the microservice in the "micro_service_policies" table.
  4. 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:

  1. Using the SUBMIT option in the frontend.
  2. 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

  1. 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.
  2. The database credentials and persistence units specified in the runtime configuration file are used for DB access.
  3. 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.
  4. 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.
  5. The Tosca defines types that will be used during the instantiation of the control loops.
Example Tosca Service Template
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

  1. The "/instantiation" endpoint is responsible for creating the control loops. It doesn't start the loops but does create them, based on the types that are defined in the Tosca Service Template.
  2. Once the control loops from the control loop list are validated, they are written to the "ControlLoop" table in the "controlloop" database. The control loop elements are also written to the "controlloopelement" table.
  3. Control Loops can be made "PASSIVE" (or ordered to move to some other state) by making a PUT call to the "instantiation/command" endpoint.
  4. Supervision sends the command to DMAAP, for the participants to consume.
  5. The participants send a message back through DMAAP with their IDs and other details. Supervision listens for these messages and registers the participants in the database.
  6. Regular status messages are sent by the participants to tell the runtime report the state of the policy or microservice. These statuses are updated in the control loop database.

REST in CLAMP vs REST in Control Loop PoC - Findings

  1. LoopService and MicroservicePolicyService classes resemble our PoC Provider classes, such as Commissioning and Instantiation Provider where java code in regards to CRUD resides
    1.  Examples:

      LoopService.getLoop()
      public Loop getLoop(String loopName) {
              return loopsRepository.findById(loopName).orElse(null);
      }
      ControlLoopInstantiationProvider.GetControlLoops()
      public ControlLoops getControlLoops(String name, String version) throws PfModelException {
          ControlLoops controlLoops = new ControlLoops();
          controlLoops.setControlLoopList(controlLoopProvider.getControlLoops(name, version));
      
          return controlLoops;
      }
    2.  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.
    3.  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.

  2.  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.
    1. Examples:

      LoopController.getLoop()
      public Loop getLoop(String loopName) {
          return loopService.getLoop(loopName);
      }
      CAMEL for getLoop
      <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>
      Java Code for PoC way of handling REST
      @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);
          }
      
      }
    2. 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
    3. 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).
  • No labels