Move policy definition data under instance properties

Introduction

Currently policy-participant dons not support more than one instance of the same composition definition due the policy type and policy saved into the composition definition. For same reason there are specific implementations that involves ACM-runtime and intermediary to support policy-participant:

  • At deployment action ACM-Runtime fetches policy type and policy from service template and add them into the deploy message
  • Intermediary saves in memory policy type and policy from deploy message to be available in any in subsequent instance actions

Backward compatibility

policy-participant is not into the EIC deployment, so does not be necessarily backward compatibility. What have to be :

  • The deploy message from ACM-r to participants has to be as before: the toscaServiceTemplateFragment field could contain an empty ToscaServiceTemplate object;
  • The InstanceElementDto record has to be as before: toscaServiceTemplateFragment field will be not used, but the old constructor contains this filed, so that constructor cannot be deleted;

Service template and instance

The new service template below will be used for the Demo

Service Template
# ============LICENSE_START=======================================================
# Copyright (C) 2023-2024 Nordix Foundation.
# ================================================================================
# 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=========================================================
tosca_definitions_version: tosca_simple_yaml_1_3
name: ACM_Oslo
version: 1.0.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.acm.httpAutomationCompositionElement.RestRequest:
    version: 1.0.0
    derived_from: tosca.datatypes.Root
    properties:
      restRequestId:
        type: onap.datatypes.ToscaConceptIdentifier
        required: true
        description: The name and version of a REST request to be sent to a REST endpoint
      httpMethod:
        type: string
        required: true
        constraints:
          - valid_values:
              - POST
              - PUT
              - GET
              - DELETE
        description: The REST method to use
      path:
        type: string
        required: true
        description: The path of the REST request relative to the base URL
      body:
        type: string
        required: false
        description: The body of the REST request for PUT and POST requests
      expectedResponse:
        type: integer
        required: true
        constraints: []
        description: THe expected HTTP status code for the REST request
  org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.ConfigurationEntity:
    version: 1.0.0
    derived_from: tosca.datatypes.Root
    properties:
      configurationEntityId:
        type: onap.datatypes.ToscaConceptIdentifier
        required: true
        description: The name and version of a Configuration Entity to be handled
          by the HTTP Automation Composition Element
      restSequence:
        type: list
        entry_schema:
          type: org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.RestRequest
          type_version: 1.0.0
        description: A sequence of REST commands to send to the REST endpoint

node_types:
  org.onap.policy.clamp.acm.Participant:
    version: 1.0.1
    derived_from: tosca.nodetypes.Root
    properties:
      provider:
        type: string
        required: false
  org.onap.policy.clamp.acm.AutomationCompositionElement:
    version: 1.0.1
    derived_from: tosca.nodetypes.Root
    properties:
      provider:
        type: string
        required: false
        metadata:
          common: true
        description: Specifies the organization that provides the automation composition element
      startPhase:
        type: integer
        required: false
        constraints:
          - greater_or_equal: 0
        metadata:
          common: true
        description: A value indicating the start phase in which this automation composition element will be started, the
          first start phase is zero. Automation Composition Elements are started in their start_phase order and stopped
          in reverse start phase order. Automation Composition Elements with the same start phase are started and
          stopped simultaneously
      uninitializedToPassiveTimeout:
        type: integer
        required: false
        constraints:
          - greater_or_equal: 0
        default: 60
        metadata:
          common: true
        description: The maximum time in seconds to wait for a state chage from uninitialized to passive
      passiveToRunningTimeout:
        type: integer
        required: false
        constraints:
          - greater_or_equal: 0
        default: 60
        metadata:
          common: true
        description: The maximum time in seconds to wait for a state chage from passive to running
      runningToPassiveTimeout:
        type: integer
        required: false
        constraints:
          - greater_or_equal: 0
        default: 60
        metadata:
          common: true
        description: The maximum time in seconds to wait for a state chage from running to passive
      passiveToUninitializedTimeout:
        type: integer
        required: false
        constraints:
          - greater_or_equal: 0
        default: 60
        metadata:
          common: true
        description: The maximum time in seconds to wait for a state chage from passive to uninitialized
  org.onap.policy.clamp.acm.AutomationComposition:
    version: 1.0.1
    derived_from: tosca.nodetypes.Root
    properties:
      provider:
        type: string
        required: false
        metadata:
          common: true
        description: Specifies the organization that provides the automation composition element
      elements:
        type: list
        required: true
        metadata:
          common: true
        entry_schema:
          type: onap.datatypes.ToscaConceptIdentifier
        description: Specifies a list of automation composition element definitions that make up this automation composition definition
  org.onap.policy.clamp.acm.PolicyAutomationCompositionElement:
    version: 1.0.0
    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
    properties:
      policy_type_id:
        type: onap.datatypes.ToscaConceptIdentifier
        required: true
      policy_id:
        type: onap.datatypes.ToscaConceptIdentifier
        required: false
  org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement:
    version: 1.0.0
    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
    properties:
      chart:
        type: string
        required: true
      configs:
        type: list
        required: false
      requirements:
        type: string
        required: false
      templates:
        type: list
        required: false
        entry_schema:
      values:
        type: string
        required: true
  org.onap.policy.clamp.acm.HttpAutomationCompositionElement:
    version: 1.0.0
    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
    properties:
      baseUrl:
        type: string
        required: true
        description: The base URL to be prepended to each path, identifies the host for the REST endpoints.
      httpHeaders:
        type: map
        required: false
        entry_schema:
          type: string
        description: HTTP headers to send on REST requests
      configurationEntities:
        type: map
        required: true
        entry_schema:
          type: org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.ConfigurationEntity
          type_version: 1.0.0
        description: The connfiguration entities the Automation Composition Element is managing and their associated REST requests


topology_template:
  inputs:
    acm_element_policy:
      type: onap.datatypes.ToscaConceptIdentifier
      description: The ID of the operational policy to use
      default:
        name: onap.policies.native.apex.ac.element
        version: 1.0.0
  node_templates:
    org.onap.policy.clamp.acm.PolicyParticipant:
      version: 2.3.1
      type: org.onap.policy.clamp.acm.Participant
      type_version: 1.0.1
      description: Participant for Policy microservices
      properties:
        provider: ONAP
    onap.policy.clamp.ac.element.Policy_AutomationCompositionElement:
      version: 1.2.3
      type: org.onap.policy.clamp.acm.PolicyAutomationCompositionElement
      type_version: 1.0.0
      description: Automation composition element for the operational policy for Performance Management Subscription Handling
      properties:
        provider: Ericsson
        startPhase: 0

    org.onap.k8s.acm.K8SAutomationCompositionParticipant:
      version: 2.3.4
      type: org.onap.policy.clamp.acm.Participant
      type_version: 1.0.1
      description: Participant for K8S
      properties:
        provider: ONAP
    onap.policy.clamp.ac.element.K8S_StarterAutomationCompositionElement:
      # Chart from any chart repository configured on helm client.
      version: 1.2.3
      type: org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement
      type_version: 1.0.0
      description: Automation composition element for the K8S microservice for AC Element Starter
      properties:
        provider: ONAP
        startPhase: 0
        uninitializedToPassiveTimeout: 180
        podStatusCheckInterval: 30
    onap.policy.clamp.ac.element.K8S_BridgeAutomationCompositionElement:
      # Chart from any chart repository configured on helm client.
      version: 1.2.3
      type: org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement
      type_version: 1.0.0
      description: Automation composition element for the K8S microservice for AC Element Bridge
      properties:
        provider: ONAP
        startPhase: 0
        uninitializedToPassiveTimeout: 180
        podStatusCheckInterval: 30
    onap.policy.clamp.ac.element.K8S_SinkAutomationCompositionElement:
      # Chart from any chart repository configured on helm client.
      version: 1.2.3
      type: org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement
      type_version: 1.0.0
      description: Automation composition element for the K8S microservice for AC Element Sink
      properties:
        provider: ONAP
        startPhase: 0
        uninitializedToPassiveTimeout: 180
        podStatusCheckInterval: 30

    org.onap.policy.clamp.acm.HttpParticipant:
      version: 2.3.4
      type: org.onap.policy.clamp.acm.Participant
      type_version: 1.0.1
      description: Participant for Http requests
      properties:
        provider: ONAP
    onap.policy.clamp.ac.element.Http_StarterAutomationCompositionElement:
      # Http config for AC Element Starter.
      version: 1.2.3
      type: org.onap.policy.clamp.acm.HttpAutomationCompositionElement
      type_version: 1.0.0
      description: Automation composition element for the http requests of AC Element Starter microservice
      properties:
        provider: ONAP
        uninitializedToPassiveTimeout: 180
        startPhase: 1
    onap.policy.clamp.ac.element.Http_BridgeAutomationCompositionElement:
      # Http config for AC Element Bridge.
      version: 1.2.3
      type: org.onap.policy.clamp.acm.HttpAutomationCompositionElement
      type_version: 1.0.0
      description: Automation composition element for the http requests of AC Element Bridge microservice
      properties:
        provider: ONAP
        uninitializedToPassiveTimeout: 180
        startPhase: 1
    onap.policy.clamp.ac.element.Http_SinkAutomationCompositionElement:
      # Http config for AC Element Sink.
      version: 1.2.3
      type: org.onap.policy.clamp.acm.HttpAutomationCompositionElement
      type_version: 1.0.0
      description: Automation composition element for the http requests of AC Element Sink microservice
      properties:
        provider: ONAP
        uninitializedToPassiveTimeout: 180
        startPhase: 1

    onap.policy.clamp.ac.element.AutomationCompositionDefinition:
      version: 1.2.3
      type: org.onap.policy.clamp.acm.AutomationComposition
      type_version: 1.0.1
      description: Automation composition for Demp
      properties:
        provider: ONAP
        elements:
          - name: onap.policy.clamp.ac.element.Policy_AutomationCompositionElement
            version: 1.2.3
          - name: onap.policy.clamp.ac.element.K8S_StarterAutomationCompositionElement
            version: 1.2.3
          - name: onap.policy.clamp.ac.element.K8S_BridgeAutomationCompositionElement
            version: 1.2.3
          - name: onap.policy.clamp.ac.element.K8S_SinkAutomationCompositionElement
            version: 1.2.3
          - name: onap.policy.clamp.ac.element.Http_StarterAutomationCompositionElement
            version: 1.2.3
          - name: onap.policy.clamp.ac.element.Http_BridgeAutomationCompositionElement
            version: 1.2.3
          - name: onap.policy.clamp.ac.element.Http_SinkAutomationCompositionElement
            version: 1.2.3

The new instance below will be used for Demo:

Instance
# ============LICENSE_START=======================================================
# Copyright (C) 2023-2024 Nordix Foundation.
# ================================================================================
# 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=========================================================
name: DemoInstance0
version: 1.0.1
compositionId: {{composition1Id}}
description: Demo automation composition instance 0
elements:

    709c62b3-8918-41b9-a747-d21eb79c6c20:
        id: 709c62b3-8918-41b9-a747-d21eb79c6c20
        definition:
            name: onap.policy.clamp.ac.element.Policy_AutomationCompositionElement
            version: 1.2.3
        description: Starter Automation Composition Element for the Demo
        properties:
            tosca_definitions_version: tosca_simple_yaml_1_3
            name: "NULL"
            version: 0.0.0
            data_types:
              onap.datatypes.native.apex.EngineService:
                derived_from: tosca.datatypes.Root
                properties:
                  name:
                    type: string
                    description: Specifies the engine name
                    required: false
                    default: "ApexEngineService"
                  version:
                    type: string
                    description: Specifies the engine version in double dotted format
                    required: false
                    default: "1.0.0"
                  id:
                    type: integer
                    description: Specifies the engine id
                    required: true
                  instance_count:
                    type: integer
                    description: Specifies the number of engine threads that should be run
                    required: true
                  deployment_port:
                    type: integer
                    description: Specifies the port to connect to for engine administration
                    required: false
                    default: 1
                  policy_model_file_name:
                    type: string
                    description: The name of the file from which to read the APEX policy model
                    required: false
                  policy_type_impl:
                    type: string
                    description: The policy type implementation from which to read the APEX policy model
                    required: false
                  periodic_event_period:
                    type: string
                    description: The time interval in milliseconds for the periodic scanning event, 0 means don't scan
                    required: false
                  engine:
                    type: onap.datatypes.native.apex.engineservice.Engine
                    description: The parameters for all engines in the APEX engine service
                    required: true
              onap.datatypes.native.apex.EventHandler:
                derived_from: tosca.datatypes.Root
                properties:
                  name:
                    type: string
                    description: Specifies the event handler name, if not specified this is set to the key name
                    required: false
                  carrier_technology:
                    type: onap.datatypes.native.apex.CarrierTechnology
                    description: Specifies the carrier technology of the event handler (such as REST/Web Socket/Kafka)
                    required: true
                  event_protocol:
                    type: onap.datatypes.native.apex.EventProtocol
                    description: Specifies the event protocol of events for the event handler (such as Yaml/JSON/XML/POJO)
                    required: true
                  event_name:
                    type: string
                    description: Specifies the event name for events on this event handler, if not specified, the event name is read from or written to the event being received or sent
                    required: false
                  event_name_filter:
                    type: string
                    description: Specifies a filter as a regular expression, events that do not match the filter are dropped, the default is to let all events through
                    required: false
                  synchronous_mode:
                    type: boolean
                    description: Specifies the event handler is syncronous (receive event and send response)
                    required: false
                    default: false
                  synchronous_peer:
                    type: string
                    description: The peer event handler (output for input or input for output) of this event handler in synchronous mode, this parameter is mandatory if the event handler is in synchronous mode
                    required: false
                  synchronous_timeout:
                    type: integer
                    description: The timeout in milliseconds for responses to be issued by APEX torequests, this parameter is mandatory if the event handler is in synchronous mode
                    required: false
                  requestor_mode:
                    type: boolean
                    description: Specifies the event handler is in requestor mode (send event and wait for response mode)
                    required: false
                    default: false
                  requestor_peer:
                    type: string
                    description: The peer event handler (output for input or input for output) of this event handler in requestor mode, this parameter is mandatory if the event handler is in requestor mode
                    required: false
                  requestor_timeout:
                    type: integer
                    description: The timeout in milliseconds for wait for responses to requests, this parameter is mandatory if the event handler is in requestor mode
                    required: false
              onap.datatypes.native.apex.CarrierTechnology:
                derived_from: tosca.datatypes.Root
                properties:
                  label:
                    type: string
                    description: The label (name) of the carrier technology (such as REST, Kafka, WebSocket)
                    required: true
                  plugin_parameter_class_name:
                    type: string
                    description: The class name of the class that overrides default handling of event input or output for this carrier technology, defaults to the supplied input or output class
                    required: false
              onap.datatypes.native.apex.EventProtocol:
                derived_from: tosca.datatypes.Root
                properties:
                  label:
                    type: string
                    description: The label (name) of the event protocol (such as Yaml, JSON, XML, or POJO)
                    required: true
                  event_protocol_plugin_class:
                    type: string
                    description: The class name of the class that overrides default handling of the event protocol for this carrier technology, defaults to the supplied event protocol class
                    required: false
              onap.datatypes.native.apex.Environment:
                derived_from: tosca.datatypes.Root
                properties:
                  name:
                    type: string
                    description: The name of the environment variable
                    required: true
                  value:
                    type: string
                    description: The value of the environment variable
                    required: true
              onap.datatypes.native.apex.engineservice.Engine:
                derived_from: tosca.datatypes.Root
                properties:
                  context:
                    type: onap.datatypes.native.apex.engineservice.engine.Context
                    description: The properties for handling context in APEX engines, defaults to using Java maps for context
                    required: false
                  executors:
                    type: map
                    description: The plugins for policy executors used in engines such as javascript, MVEL, Jython
                    required: true
                    entry_schema:
                      description: The plugin class path for this policy executor
                      type: string
              onap.datatypes.native.apex.engineservice.engine.Context:
                derived_from: tosca.datatypes.Root
                properties:
                  distributor:
                    type: onap.datatypes.native.apex.Plugin
                    description: The plugin to be used for distributing context between APEX PDPs at runtime
                    required: false
                  schemas:
                    type: map
                    description: The plugins for context schemas available in APEX PDPs such as Java and Avro
                    required: false
                    entry_schema:
                      type: onap.datatypes.native.apex.Plugin
                  locking:
                    type: onap.datatypes.native.apex.Plugin
                    description: The plugin to be used for locking context in and between APEX PDPs at runtime
                    required: false
                  persistence:
                    type: onap.datatypes.native.apex.Plugin
                    description: The plugin to be used for persisting context for APEX PDPs at runtime
                    required: false
              onap.datatypes.native.apex.Plugin:
                derived_from: tosca.datatypes.Root
                properties:
                  name:
                    type: string
                    description: The name of the executor such as Javascript, Jython or MVEL
                    required: true
                  plugin_class_name:
                    type: string
                    description: The class path of the plugin class for this executor

            policy_types:
              onap.policies.Native:
                derived_from: tosca.policies.Root
                description: a base policy type for all native PDP policies
                version: 1.0.0
                name: onap.policies.Native
              onap.policies.native.Apex:
                derived_from: onap.policies.Native
                description: a policy type for native apex policies
                version: 1.0.0
                name: onap.policies.native.Apex
                properties:
                  engine_service:
                    type: onap.datatypes.native.apex.EngineService
                    description: APEX Engine Service Parameters
                  inputs:
                    type: map
                    description: Inputs for handling events coming into the APEX engine
                    entry_schema:
                      type: onap.datatypes.native.apex.EventHandler
                  outputs:
                    type: map
                    description: Outputs for handling events going out of the APEX engine
                    entry_schema:
                      type: onap.datatypes.native.apex.EventHandler
                  environment:
                    type: list
                    description: Envioronmental parameters for the APEX engine
                    entry_schema:
                      type: onap.datatypes.native.apex.Environment

            topology_template:
              policies:
              - onap.policies.native.apex.ac.element:
                  type: onap.policies.native.Apex
                  type_version: 1.0.0
                  properties:
                    engineServiceParameters:
                      name: MyApexEngine
                      version: 0.0.1
                      id: 45
                      instanceCount: 2
                      deploymentPort: 12561
                      engineParameters:
                        executorParameters:
                          JAVASCRIPT:
                            parameterClassName: org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters
                        contextParameters:
                          parameterClassName: org.onap.policy.apex.context.parameters.ContextParameters
                          schemaParameters:
                            Json:
                              parameterClassName: org.onap.policy.apex.plugins.context.schema.json.JsonSchemaHelperParameters
                      policy_type_impl:
                        policies:
                          key:
                            name: APEXacElementPolicy_Policies
                            version: 0.0.1
                          policyMap:
                            entry:
                            - key:
                                name: ReceiveEventPolicy
                                version: 0.0.1
                              value:
                                policyKey:
                                  name: ReceiveEventPolicy
                                  version: 0.0.1
                                template: Freestyle
                                state:
                                  entry:
                                  - key: DecideForwardingState
                                    value:
                                      stateKey:
                                        parentKeyName: ReceiveEventPolicy
                                        parentKeyVersion: 0.0.1
                                        parentLocalName: 'NULL'
                                        localName: DecideForwardingState
                                      trigger:
                                        name: AcElementEvent
                                        version: 0.0.1
                                      stateOutputs:
                                        entry:
                                        - key: CreateForwardPayload
                                          value:
                                            key:
                                              parentKeyName: ReceiveEventPolicy
                                              parentKeyVersion: 0.0.1
                                              parentLocalName: DecideForwardingState
                                              localName: CreateForwardPayload
                                            outgoingEvent:
                                              name: KafkaResponseStatusEvent
                                              version: 0.0.1
                                            outgoingEventReference:
                                            - name: KafkaResponseStatusEvent
                                              version: 0.0.1
                                            nextState:
                                              parentKeyName: 'NULL'
                                              parentKeyVersion: 0.0.0
                                              parentLocalName: 'NULL'
                                              localName: 'NULL'
                                      contextAlbumReference: []
                                      taskSelectionLogic:
                                        key:
                                          parentKeyName: 'NULL'
                                          parentKeyVersion: 0.0.0
                                          parentLocalName: 'NULL'
                                          localName: 'NULL'
                                        logicFlavour: UNDEFINED
                                        logic: ''
                                      stateFinalizerLogicMap:
                                        entry: []
                                      defaultTask:
                                        name: ForwardPayloadTask
                                        version: 0.0.1
                                      taskReferences:
                                        entry:
                                        - key:
                                            name: ForwardPayloadTask
                                            version: 0.0.1
                                          value:
                                            key:
                                              parentKeyName: ReceiveEventPolicy
                                              parentKeyVersion: 0.0.1
                                              parentLocalName: DecideForwardingState
                                              localName: ReceiveEventPolicy
                                            outputType: DIRECT
                                            output:
                                              parentKeyName: ReceiveEventPolicy
                                              parentKeyVersion: 0.0.1
                                              parentLocalName: DecideForwardingState
                                              localName: CreateForwardPayload
                                firstState: DecideForwardingState
                        tasks:
                          key:
                            name: APEXacElementPolicy_Tasks
                            version: 0.0.1
                          taskMap:
                            entry:
                            - key:
                                name: ForwardPayloadTask
                                version: 0.0.1
                              value:
                                key:
                                  name: ForwardPayloadTask
                                  version: 0.0.1
                                inputEvent:
                                  key:
                                    name: AcElementEvent
                                    version: 0.0.1
                                  nameSpace: org.onap.policy.apex.ac.element
                                  source: Kafka
                                  target: APEX
                                  parameter:
                                    entry:
                                    - key: KafkaResponseEvent
                                      value:
                                        key:
                                          parentKeyName: AcElementEvent
                                          parentKeyVersion: 0.0.1
                                          parentLocalName: 'NULL'
                                          localName: KafkaResponseEvent
                                        fieldSchemaKey:
                                          name: ACEventType
                                          version: 0.0.1
                                        optional: false
                                  toscaPolicyState: ENTRY
                                outputEvents:
                                  entry:
                                  - key: KafkaResponseStatusEvent
                                    value:
                                      key:
                                        name: KafkaResponseStatusEvent
                                        version: 0.0.1
                                      nameSpace: org.onap.policy.apex.ac.element
                                      source: APEX
                                      target: Kafka
                                      parameter:
                                        entry:
                                        - key: KafkaResponseStatusEvent
                                          value:
                                            key:
                                              parentKeyName: KafkaResponseStatusEvent
                                              parentKeyVersion: 0.0.1
                                              parentLocalName: 'NULL'
                                              localName: KafkaResponseStatusEvent
                                            fieldSchemaKey:
                                              name: ACEventType
                                              version: 0.0.1
                                            optional: false
                                      toscaPolicyState: ''
                                taskParameters:
                                  entry: []
                                contextAlbumReference:
                                - name: ACElementAlbum
                                  version: 0.0.1
                                taskLogic:
                                  key:
                                    parentKeyName: ForwardPayloadTask
                                    parentKeyVersion: 0.0.1
                                    parentLocalName: 'NULL'
                                    localName: TaskLogic
                                  logicFlavour: JAVASCRIPT
                                  logic: "/*\n * ============LICENSE_START=======================================================\n\
                                    \ *  Copyright (C) 2022 Nordix. All rights reserved.\n * ================================================================================\n\
                                    \ * Licensed under the Apache License, Version 2.0 (the 'License');\n\
                                    \ * you may not use this file except in compliance with the\
                                    \ License.\n * You may obtain a copy of the License at\n *\n\
                                    \ *      http://www.apache.org/licenses/LICENSE-2.0\n *\n\
                                    \ * Unless required by applicable law or agreed to in writing,\
                                    \ software\n * distributed under the License is distributed\
                                    \ on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS\
                                    \ OF ANY KIND, either express or implied.\n * See the License\
                                    \ for the specific language governing permissions and\n *\
                                    \ limitations under the License.\n *\n * SPDX-License-Identifier:\
                                    \ Apache-2.0\n * ============LICENSE_END=========================================================\n\
                                    \ */\n\nexecutor.logger.info(executor.subject.id);\nexecutor.logger.info(executor.inFields);\n\
                                    \nvar msgResponse = executor.inFields.get('KafkaResponseEvent');\n\
                                    executor.logger.info('Task in progress with mesages: ' + msgResponse);\n\
                                    \nvar elementId = msgResponse.get('elementId').get('name');\n\
                                    \nif (msgResponse.get('messageType') == 'STATUS' &&\n    (elementId\
                                    \ == 'onap.policy.clamp.ac.startertobridge'\n    || elementId\
                                    \ == 'onap.policy.clamp.ac.bridgetosink')) {\n\n    var receiverId\
                                    \ = '';\n    if (elementId == 'onap.policy.clamp.ac.startertobridge')\
                                    \ {\n        receiverId = 'onap.policy.clamp.ac.bridge';\n\
                                    \    } else {\n        receiverId = 'onap.policy.clamp.ac.sink';\n\
                                    \    }\n\n    var elementIdResponse = new java.util.HashMap();\n\
                                    \    elementIdResponse.put('name', receiverId);\n    elementIdResponse.put('version',\
                                    \ msgResponse.get('elementId').get('version'));\n\n    var\
                                    \ kafkaResponse = new java.util.HashMap();\n    kafkaResponse.put('elementId',\
                                    \ elementIdResponse);\n\n    var message = msgResponse.get('message')\
                                    \ + ' trace added from policy';\n    kafkaResponse.put('message',\
                                    \ message);\n    kafkaResponse.put('messageType', 'STATUS');\n\
                                    \    kafkaResponse.put('messageId', msgResponse.get('messageId'));\n\
                                    \    kafkaResponse.put('timestamp', msgResponse.get('timestamp'));\n\
                                    \n    executor.logger.info('Sending forwarding Event to Ac\
                                    \ element: ' + kafkaResponse);\n\n    executor.outFields.put('KafkaResponseStatusEvent',\
                                    \ kafkaResponse);\n}\n\ntrue;"
                        events:
                          key:
                            name: APEXacElementPolicy_Events
                            version: 0.0.1
                          eventMap:
                            entry:
                            - key:
                                name: AcElementEvent
                                version: 0.0.1
                              value:
                                key:
                                  name: AcElementEvent
                                  version: 0.0.1
                                nameSpace: org.onap.policy.apex.ac.element
                                source: Kafka
                                target: APEX
                                parameter:
                                  entry:
                                  - key: KafkaResponseEvent
                                    value:
                                      key:
                                        parentKeyName: AcElementEvent
                                        parentKeyVersion: 0.0.1
                                        parentLocalName: 'NULL'
                                        localName: KafkaResponseEvent
                                      fieldSchemaKey:
                                        name: ACEventType
                                        version: 0.0.1
                                      optional: false
                                toscaPolicyState: ENTRY
                            - key:
                                name: KafkaResponseStatusEvent
                                version: 0.0.1
                              value:
                                key:
                                  name: KafkaResponseStatusEvent
                                  version: 0.0.1
                                nameSpace: org.onap.policy.apex.ac.element
                                source: APEX
                                target: Kafka
                                parameter:
                                  entry:
                                  - key: KafkaResponseStatusEvent
                                    value:
                                      key:
                                        parentKeyName: KafkaResponseStatusEvent
                                        parentKeyVersion: 0.0.1
                                        parentLocalName: 'NULL'
                                        localName: KafkaResponseStatusEvent
                                      fieldSchemaKey:
                                        name: ACEventType
                                        version: 0.0.1
                                      optional: false
                                toscaPolicyState: ''
                            - key:
                                name: LogEvent
                                version: 0.0.1
                              value:
                                key:
                                  name: LogEvent
                                  version: 0.0.1
                                nameSpace: org.onap.policy.apex.ac.element
                                source: APEX
                                target: file
                                parameter:
                                  entry:
                                  - key: final_status
                                    value:
                                      key:
                                        parentKeyName: LogEvent
                                        parentKeyVersion: 0.0.1
                                        parentLocalName: 'NULL'
                                        localName: final_status
                                      fieldSchemaKey:
                                        name: SimpleStringType
                                        version: 0.0.1
                                      optional: false
                                  - key: message
                                    value:
                                      key:
                                        parentKeyName: LogEvent
                                        parentKeyVersion: 0.0.1
                                        parentLocalName: 'NULL'
                                        localName: message
                                      fieldSchemaKey:
                                        name: SimpleStringType
                                        version: 0.0.1
                                      optional: false
                                toscaPolicyState: ''
                        albums:
                          key:
                            name: APEXacElementPolicy_Albums
                            version: 0.0.1
                          albums:
                            entry:
                            - key:
                                name: ACElementAlbum
                                version: 0.0.1
                              value:
                                key:
                                  name: ACElementAlbum
                                  version: 0.0.1
                                scope: policy
                                isWritable: true
                                itemSchema:
                                  name: ACEventType
                                  version: 0.0.1
                        schemas:
                          key:
                            name: APEXacElementPolicy_Schemas
                            version: 0.0.1
                          schemas:
                            entry:
                            - key:
                                name: ACEventType
                                version: 0.0.1
                              value:
                                key:
                                  name: ACEventType
                                  version: 0.0.1
                                schemaFlavour: Json
                                schemaDefinition: "{\n    \"$schema\": \"http://json-schema.org/draft-04/schema#\"\
                                  ,\n    \"type\": \"object\",\n    \"properties\": {\n      \
                                  \  \"elementId\": {\n            \"type\": \"object\",\n   \
                                  \         \"properties\": {\n                \"name\": {\n \
                                  \                   \"type\": \"string\"\n                },\n\
                                  \                \"version\": {\n                    \"type\"\
                                  : \"string\"\n                }\n            },\n          \
                                  \  \"required\": [\n                \"name\",\n            \
                                  \    \"version\"\n            ]\n        },\n        \"message\"\
                                  : {\n            \"type\": \"string\"\n        },\n        \"\
                                  messageType\": {\n            \"type\": \"string\"\n       \
                                  \ }\n    },\n    \"required\": [\n        \"elementId\",\n \
                                  \       \"message\",\n        \"messageType\"\n    ]\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: UUIDType
                                version: 0.0.1
                              value:
                                key:
                                  name: UUIDType
                                  version: 0.0.1
                                schemaFlavour: Java
                                schemaDefinition: java.util.UUID
                        key:
                          name: APEXacElementPolicy
                          version: 0.0.1
                        keyInformation:
                          key:
                            name: APEXacElementPolicy_KeyInfo
                            version: 0.0.1
                          keyInfoMap:
                            entry:
                            - key:
                                name: ACElementAlbum
                                version: 0.0.1
                              value:
                                key:
                                  name: ACElementAlbum
                                  version: 0.0.1
                                UUID: 7cddfab8-6d3f-3f7f-8ac3-e2eb5979c900
                                description: Generated description for concept referred to by
                                  key "ACElementAlbum:0.0.1"
                            - key:
                                name: ACEventType
                                version: 0.0.1
                              value:
                                key:
                                  name: ACEventType
                                  version: 0.0.1
                                UUID: dab78794-b666-3929-a75b-70d634b04fe5
                                description: Generated description for concept referred to by
                                  key "ACEventType:0.0.1"
                            - key:
                                name: APEXacElementPolicy
                                version: 0.0.1
                              value:
                                key:
                                  name: APEXacElementPolicy
                                  version: 0.0.1
                                UUID: da478611-7d77-3c46-b4be-be968769ba4e
                                description: Generated description for concept referred to by
                                  key "APEXacElementPolicy:0.0.1"
                            - key:
                                name: APEXacElementPolicy_Albums
                                version: 0.0.1
                              value:
                                key:
                                  name: APEXacElementPolicy_Albums
                                  version: 0.0.1
                                UUID: fa8dc15e-8c8d-3de3-a0f8-585b76511175
                                description: Generated description for concept referred to by
                                  key "APEXacElementPolicy_Albums:0.0.1"
                            - key:
                                name: APEXacElementPolicy_Events
                                version: 0.0.1
                              value:
                                key:
                                  name: APEXacElementPolicy_Events
                                  version: 0.0.1
                                UUID: 8508cd65-8dd2-342d-a5c6-1570810dbe2b
                                description: Generated description for concept referred to by
                                  key "APEXacElementPolicy_Events:0.0.1"
                            - key:
                                name: APEXacElementPolicy_KeyInfo
                                version: 0.0.1
                              value:
                                key:
                                  name: APEXacElementPolicy_KeyInfo
                                  version: 0.0.1
                                UUID: 09e6927d-c5ac-3779-919f-9333994eed22
                                description: Generated description for concept referred to by
                                  key "APEXacElementPolicy_KeyInfo:0.0.1"
                            - key:
                                name: APEXacElementPolicy_Policies
                                version: 0.0.1
                              value:
                                key:
                                  name: APEXacElementPolicy_Policies
                                  version: 0.0.1
                                UUID: cade3c9a-1600-3642-a6f4-315612187f46
                                description: Generated description for concept referred to by
                                  key "APEXacElementPolicy_Policies:0.0.1"
                            - key:
                                name: APEXacElementPolicy_Schemas
                                version: 0.0.1
                              value:
                                key:
                                  name: APEXacElementPolicy_Schemas
                                  version: 0.0.1
                                UUID: 5bb4a8e9-35fa-37db-9a49-48ef036a7ba9
                                description: Generated description for concept referred to by
                                  key "APEXacElementPolicy_Schemas:0.0.1"
                            - key:
                                name: APEXacElementPolicy_Tasks
                                version: 0.0.1
                              value:
                                key:
                                  name: APEXacElementPolicy_Tasks
                                  version: 0.0.1
                                UUID: 2527eeec-0d1f-3094-ad3f-212622b12836
                                description: Generated description for concept referred to by
                                  key "APEXacElementPolicy_Tasks:0.0.1"
                            - key:
                                name: AcElementEvent
                                version: 0.0.1
                              value:
                                key:
                                  name: AcElementEvent
                                  version: 0.0.1
                                UUID: 32c013e2-2740-3986-a626-cbdf665b63e9
                                description: Generated description for concept referred to by
                                  key "AcElementEvent:0.0.1"
                            - key:
                                name: KafkaResponseStatusEvent
                                version: 0.0.1
                              value:
                                key:
                                  name: KafkaResponseStatusEvent
                                  version: 0.0.1
                                UUID: 2715cb6c-2778-3461-8b69-871e79f95935
                                description: Generated description for concept referred to by
                                  key "KafkaResponseStatusEvent:0.0.1"
                            - key:
                                name: ForwardPayloadTask
                                version: 0.0.1
                              value:
                                key:
                                  name: ForwardPayloadTask
                                  version: 0.0.1
                                UUID: 51defa03-1ecf-3314-bf34-2a652bce57fa
                                description: Generated description for concept referred to by
                                  key "ForwardPayloadTask:0.0.1"
                            - key:
                                name: LogEvent
                                version: 0.0.1
                              value:
                                key:
                                  name: LogEvent
                                  version: 0.0.1
                                UUID: c540f048-96af-35e3-a36e-e9c29377cba7
                                description: Generated description for concept referred to by
                                  key "LogEvent: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: 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: 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"
                    eventInputParameters:
                      KafkaConsumer:
                        carrierTechnologyParameters:
                          carrierTechnology: KAFKA
                          parameterClassName: org.onap.policy.apex.plugins.event.carrier.kafka.KafkaCarrierTechnologyParameters
                          parameters:
                            bootstrapServers: kafka:9092
                            groupId: apex-group-id
                            enableAutoCommit: true
                            autoCommitTime: 1000
                            sessionTimeout: 30000
                            consumerPollTime: 100
                            consumerTopicList:
                              - ac_element_msg
                            keyDeserializer: org.apache.kafka.common.serialization.StringDeserializer
                            valueDeserializer: org.apache.kafka.common.serialization.StringDeserializer
                        eventProtocolParameters:
                          eventProtocol: JSON
                          parameters:
                            pojoField: KafkaResponseEvent
                        eventName: AcElementEvent
                        eventNameFilter: AcElementEvent
                    eventOutputParameters:
                      logOutputter:
                        carrierTechnologyParameters:
                          carrierTechnology: FILE
                          parameters:
                            fileName: outputevents.log
                        eventProtocolParameters:
                          eventProtocol: JSON
                      KafkaReplyProducer:
                        carrierTechnologyParameters:
                          carrierTechnology: KAFKA
                          parameterClassName: org.onap.policy.apex.plugins.event.carrier.kafka.KafkaCarrierTechnologyParameters
                          parameters:
                            bootstrapServers: kafka:9092
                            acks: all
                            retries: 0
                            batchSize: 16384
                            lingerTime: 1
                            bufferMemory: 33554432
                            producerTopic: policy_update_msg
                            keySerializer: org.apache.kafka.common.serialization.StringSerializer
                            valueSerializer: org.apache.kafka.common.serialization.StringSerializer
                        eventProtocolParameters:
                          eventProtocol: JSON
                          parameters:
                            pojoField: KafkaResponseStatusEvent
                        eventNameFilter: (LogEvent|KafkaResponseStatusEvent)
                  name: onap.policies.native.apex.ac.element
                  version: 1.0.0


    709c62b3-8918-41b9-a747-d21eb79c6c21:
        id: 709c62b3-8918-41b9-a747-d21eb79c6c21
        definition:
            name: onap.policy.clamp.ac.element.K8S_StarterAutomationCompositionElement
            version: 1.2.3
        description: Starter Automation Composition Element for the Demo
        properties:
            chart:
                chartId:
                    name: acelement
                    version: 0.1.0
                namespace: default
                releaseName: acm-starter
                podName: acm-starter
                repository:
                    repoName: policy-chartmuseum
                    address: 'http://policy-chartmuseum:8080'
                overrideParams:
                    acelement.elementId.name: onap.policy.clamp.ac.starter
                    service.nodeport: 30800
        
    709c62b3-8918-41b9-a747-d21eb79c6c22:
        id: 709c62b3-8918-41b9-a747-d21eb79c6c22
        definition:
            name: onap.policy.clamp.ac.element.K8S_BridgeAutomationCompositionElement
            version: 1.2.3
        description: Bridge Automation Composition Element for the Demo
        properties:
            chart:
                chartId:
                    name: acelement
                    version: 0.1.0
                namespace: default
                releaseName: acm-bridge
                podName: acm-bridge
                repository:
                    repoName: policy-chartmuseum
                    address: 'http://policy-chartmuseum:8080'
                overrideParams:
                    acelement.elementId.name: onap.policy.clamp.ac.bridge
                    service.nodeport: 30801

    709c62b3-8918-41b9-a747-d21eb79c6c23:
        id: 709c62b3-8918-41b9-a747-d21eb79c6c23
        definition:
            name: onap.policy.clamp.ac.element.K8S_SinkAutomationCompositionElement
            version: 1.2.3
        description: Sink Automation Composition Element for the Demo
        properties:
            chart:
                chartId:
                    name: acelement
                    version: 0.1.0
                namespace: default
                releaseName: acm-sink
                podName: acm-sink
                repository:
                    repoName: policy-chartmuseum
                    address: 'http://policy-chartmuseum:8080'
                overrideParams:
                    acelement.elementId.name: onap.policy.clamp.ac.sink
                    service.nodeport: 30802

    709c62b3-8918-41b9-a747-d21eb79c6c24:
        id: 709c62b3-8918-41b9-a747-d21eb79c6c24
        definition:
            name: onap.policy.clamp.ac.element.Http_StarterAutomationCompositionElement
            version: 1.2.3
        description: Starter Automation Composition Element for the Demo
        properties:
            baseUrl: http://{{address}}:30800
            httpHeaders:
                Content-Type: application/json
                Authorization: Basic YWNtVXNlcjp6YiFYenRHMzQ=
            configurationEntities:
                - configurationEntityId:
                      name: onap.policy.clamp.ac.starter
                      version: 1.0.0
                  restSequence:
                      - restRequestId:
                            name: request1
                            version: 1.0.1
                        httpMethod: POST
                        path: /onap/policy/clamp/acelement/v2/activate
                        body: '{ "receiverId": { "name": "onap.policy.clamp.ac.startertobridge", "version": "1.0.0" }, "timerMs": 20000, "elementType": "STARTER", "topicParameterGroup": { "server": "kafka:9092", "listenerTopic": "policy_update_msg", "publisherTopic": "ac_element_msg", "fetchTimeout": 15000, "topicCommInfrastructure": "kafka" } }'
                        expectedResponse: 201

    709c62b3-8918-41b9-a747-d21eb79c6c25:
        id: 709c62b3-8918-41b9-a747-d21eb79c6c25
        definition:
            name: onap.policy.clamp.ac.element.Http_BridgeAutomationCompositionElement
            version: 1.2.3
        description: Bridge Automation Composition Element for the Demo
        properties:
            baseUrl: http://{{address}}:30801
            httpHeaders:
                Content-Type: application/json
                Authorization: Basic YWNtVXNlcjp6YiFYenRHMzQ=
            configurationEntities:
                - configurationEntityId:
                      name: onap.policy.clamp.ac.bridge
                      version: 1.0.0
                  restSequence:
                      - restRequestId:
                            name: request2
                            version: 1.0.1
                        httpMethod: POST
                        path: /onap/policy/clamp/acelement/v2/activate
                        body: '{ "receiverId": { "name": "onap.policy.clamp.ac.bridgetosink", "version": "1.0.0" }, "timerMs": 20000, "elementType": "BRIDGE", "topicParameterGroup": { "server": "kafka:9092", "listenerTopic": "policy_update_msg", "publisherTopic": "ac_element_msg", "fetchTimeout": 15000, "topicCommInfrastructure": "kafka" } }'
                        expectedResponse: 201

    709c62b3-8918-41b9-a747-d21eb79c6c26:
        id: 709c62b3-8918-41b9-a747-d21eb79c6c26
        definition:
            name: onap.policy.clamp.ac.element.Http_SinkAutomationCompositionElement
            version: 1.2.3
        description: Sink Automation Composition Element for the Demo
        properties:
            baseUrl: http://{{address}}:30802
            httpHeaders:
                Content-Type: application/json
                Authorization: Basic YWNtVXNlcjp6YiFYenRHMzQ=
            configurationEntities:
                - configurationEntityId:
                      name: onap.policy.clamp.ac.sink
                      version: 1.0.0
                  restSequence:
                      - restRequestId:
                            name: request3
                            version: 1.0.1
                        httpMethod: POST
                        path: /onap/policy/clamp/acelement/v2/activate
                        body: '{ "receiverId": { "name": "onap.policy.clamp.ac.sink", "version": "1.0.0" }, "timerMs": 20000, "elementType": "SINK", "topicParameterGroup": { "server": "kafka:9092", "listenerTopic": "policy_update_msg", "publisherTopic": "ac_element_msg", "fetchTimeout": 15000, "topicCommInfrastructure": "kafka" } }'
                        expectedResponse: 201


Integration test

In integration test there is the old service template and instance for policy-participant. So the changes will be fail in review. The solution is shown in the flow below:

  • In "policy/docker" insert the policy type and policy into the instance. That submit will be backward compatible
  • Make the policy-participant changes in ACM. That submit will work due the changes done before
  • In "policy/docker" remove the policy type and policy from the service template. That submit will be OK due the policy-participant updated

Regression test

It needs some changes in regression tests:

  • Use http-participant and sim-participant
  • Update service template and instance accordingly with the point before

Stability test

It needs to update the service template and instance in stability test.