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