...
Instantiate the control loop
Create Instance dialog
Instantiation properties saved successfully
...
Control loop changed to PASSIVE state
In a similar way, change the control loop state to RUNNING.
Control loop changed to RUNNING state
Once the control loop gets into the RUNNING PASSIVE state, the corresponding version of the usecase should be up and running.
...
NOTE: There is a limitation in the istanbul Jakarta version of policy/clamp that only one tosca template can be commissioned at a time. So, always delete the currently commissioned template before trying a new one.
In order to delete the control loop instance, it should be first changed back to PASSIVE state and then to UNINITIALISED state. Once the instance shows PASSIVE UNINITIALISED under Instantiation Current State, press the Delete button under Delete Instantiation.
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
tosca_definitions_version: tosca_simple_yaml_1_1_03 data_types: onap.datatypes.ToscaConceptIdentifier: derived_from: tosca.datatypes.Root properties: name: type: string required: true version: type: string 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 policy_types: 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.controlloopacm.Participant: version: 1.0.1 derived_from: tosca.nodetypes.Root properties: provider: type: string requred: false org.onap.policy.clamp.controlloopacm.ControlLoopElementAutomationCompositionElement: version: 1.0.1 derived_from: tosca.nodetypes.Root properties: provider: type: string required: false metadata: common: true description: Specifies the organization that provides the controlautomation loopcomposition element participant_id: type: onap.datatypes.ToscaConceptIdentifier requred: true metadata: common: true participantType: type: onap.datatypes.ToscaConceptIdentifier required: true metadata: common: true description: The identity of the participant type that hosts this type of ControlAutomation LoopComposition Element startPhase: type: integer required: false constraints: - greater_or_equal: 0 metadata: common: true description: A value indicating the start phase in which this controlautomation loopcomposition element will be started, the first start phase is zero. ControlAutomation LoopComposition Elements are started in their start_phase order and stopped in reverse start phase order. ControlAutomation LoopComposition Elements with the same start phase are started and stopped simultaneously uninitializedToPassiveTimeout: type: integer required: false constraints: - greater_or_equal: 0 default: 60 metadata: common: true description: The maximum time in seconds to wait for a state chage from uninitialized to passive passiveToRunningTimeout: type: integer required: false constraints: - greater_or_equal: 0 default: 60 metadata: common: true description: The maximum time in seconds to wait for a state chage from passive to running runningToPassiveTimeout: type: integer required: false constraints: - greater_or_equal: 0 default: 60 metadata: common: true description: The maximum time in seconds to wait for a state chage from running to passive passiveToUninitializedTimeout: type: integer required: false constraints: - greater_or_equal: 0 default: 60 metadata: common: true description: The maximum time in seconds to wait for a state chage from passive to uninitialized org.onap.policy.clamp.controlloopacm.ControlLoopAutomationComposition: version: 1.0.1 derived_from: tosca.nodetypes.Root properties: provider: type: string required: false metadata: common: true description: Specifies the organization that provides the controlautomation loopcomposition element elements: type: list required: true metadata: common: true entry_schema: type: onap.datatypes.ToscaConceptIdentifier description: Specifies a list of controlautomation loopcomposition element definitions that make up this controlautomation loopcomposition definition org.onap.policy.clamp.controlloopacm.PolicyControlLoopElementPolicyAutomationCompositionElement: version: 1.0.1 derived_from: org.onap.policy.clamp.controlloopacm.ControlLoopElementAutomationCompositionElement properties: policy_type_id: type: onap.datatypes.ToscaConceptIdentifier requred: true policy_id: type: onap.datatypes.ToscaConceptIdentifier requred: false topology_template: node_templatesinputs: org.onap.domain.linkmonitor.LinkMonitorPolicyControlLoopElementpmsh_operational_policy: versiontype: 1onap.2datatypes.3ToscaConceptIdentifier typedescription: org.onap.policy.clamp.controlloop.PolicyControlLoopElement type_version: 1.0.1 The ID of the PMSH operational policy to use descriptiondefault: Control loop element for the Link Monitor properties: provider: Ericsson participant_id: name: orgoperational.onapapex.PM_Policylinkmonitor version: 1.0.0 participantType: node_templates: name: org.onap.policy.clamp.controlloopacm.PolicyControlLoopParticipant PolicyParticipant: version: 2.3.1 policy_type_id: name: onap.policies.controlloop.operational.common.Apex org.onap.policy.clamp.acm.Participant type_version: 1.0.01 policy_iddescription: Participant for name: operational.apex.linkmonitorDCAE microservices version: 1.0.0properties: pdpGroupprovider: defaultGroupONAP org.onap.domain.linkmonitorpmsh.LinkMonitorControlLoopDefinition0PMSH_OperationalPolicyAutomationCompositionElement: version: 1.2.3 type: org.onap.policy.clamp.controlloopacm.ControlLoopPolicyAutomationCompositionElement type_version: 1.0.01 description: Control loop for Link Monitor Automation composition element for the operational policy for Performance Management Subscription Handling properties: provider: Ericsson elementsparticipant_id: - name: org.onap.domain.linkmonitor.LinkMonitorPolicyControlLoopElementPM_Policy version: 1.20.30 org.onap.policy.controlloop.PolicyControlLoopParticipant: participantType: version: 2.3.1 typename: org.onap.policy.clamp.controlloopacm.ParticipantPolicyParticipant type_version: 1.0 version: 2.3.1 descriptionpolicy_type_id: Participant for policy framework properties: name: onap.policies.operational.pm-subscription-handler providerversion: ONAP policies: - operational.apex.linkmonitor1.0.0 policy_id: get_input: pmsh_operational_policy org.onap.domain.sample.GenericK8s_AutomationCompositionDefinition: typeversion: onap1.policies.controlloop.operational.common.Apex2.3 type_version: 1.0.0org.onap.policy.clamp.acm.AutomationComposition type_version: 1.0.01 metadata: description: Automation composition for Hello World policy-id: operational.apex.linkmonitorproperties: policy-versionprovider: 1.0.0Ericsson properties: elements: engineServiceParameters: - name: LinkMonitorApexEngine org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement version: 01.0.1 2.3 policies: - operational.apex.linkmonitor: idtype: 101onap.policies.controlloop.operational.common.Apex instanceCounttype_version: 1.0.0 deploymentPortversion: 123451.0.0 engineParametersproperties: executorParametersengineServiceParameters: name: JAVASCRIPT:LinkMonitorApexEngine parameterClassName: version: 0.0.1 id: 101 instanceCount: 1 deploymentPort: 12345 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 taskParameters: - key: ORU-ODU-Map value: |- { "ERICSSON-O-RU-11220": "O-DU-1122", "ERICSSON-O-RU-11221": "O-DU-1122", "ERICSSON-O-RU-11222": "O-DU-1122", "ERICSSON-O-RU-11223": "O-DU-1122", "ERICSSON-O-RU-11224": "O-DU-1123", "ERICSSON-O-RU-11225": "O-DU-1123", "ERICSSON-O-RU-11226": "O-DU-1123", "ERICSSON-O-RU-11227": "O-DU-1124", "ERICSSON-O-RU-11228": "O-DU-1125", "ERICSSON-O-RU-11229": "O-DU-1125" } policy_type_impl: apexPolicyModel: key: name: LinkMonitorModel version: 0.0.1 keyInformation: key: name: LinkMonitorModel_KeyInfo version: 0.0.1 keyInfoMap: entry: - key: name: ApexMessageOutputEvent version: 0.0.1 value: key: name: ApexMessageOutputEvent version: 0.0.1 UUID: cca47d74-7754-4a61-b163-ca31f66b157b description: Generated description for concept referred to by key "ApexMessageOutputEvent:0.0.1" - key: name: CreateLinkClearedOutfieldsEvent version: 0.0.1 value: key: name: CreateLinkClearedOutfieldsEvent version: 0.0.1 UUID: a295d6a3-1b73-387e-abba-b41e9b608802 description: Generated description for concept referred to by key "CreateLinkClearedOutfieldsEvent:0.0.1" - key: name: CreateLinkClearedOutfieldsTask version: 0.0.1 value: key: name: CreateLinkClearedOutfieldsTask version: 0.0.1 UUID: fd594e88-411d-4a94-b2be-697b3a0d7adf description: This task creates the output fields when link failure is cleared. - key: name: CreateLinkFailureOutfieldsEvent version: 0.0.1 value: key: name: CreateLinkFailureOutfieldsEvent version: 0.0.1 UUID: 02be2b5d-45b7-3c54-ae54-97f2b5c30125 description: Generated description for concept referred to by key "CreateLinkFailureOutfieldsEvent:0.0.1" - key: name: CreateLinkFailureOutfieldsTask version: 0.0.1 value: key: name: CreateLinkFailureOutfieldsTask version: 0.0.1 UUID: ac3d9842-80af-4a98-951c-bd79a431c613 description: This task the output fields when link failure is detected. - key: name: LinkClearedTask version: 0.0.1 value: key: name: LinkClearedTask version: 0.0.1 UUID: eecfde90-896c-4343-8f9c-2603ced94e2d description: This task sends a message to the output when link failure is cleared. - key: name: LinkFailureInputEvent version: 0.0.1 value: key: name: LinkFailureInputEvent version: 0.0.1 UUID: c4500941-3f98-4080-a9cc-5b9753ed050b description: Generated description for concept referred to by key "LinkFailureInputEvent:0.0.1" - key: name: LinkFailureInputSchema version: 0.0.1 value: key: name: LinkFailureInputSchema version: 0.0.1 UUID: 3b3974fc-3012-3b02-9f33-c9d8eefe4dc1 description: Generated description for concept referred to by key "LinkFailureInputSchema:0.0.1" - key: name: LinkFailureOutputEvent version: 0.0.1 value: key: name: LinkFailureOutputEvent version: 0.0.1 UUID: 4f04aa98-e917-4f4a-882a-c75ba5a99374 description: Generated description for concept referred to by key "LinkFailureOutputEvent:0.0.1" - key: name: LinkFailureOutputSchema version: 0.0.1 value: key: name: LinkFailureOutputSchema version: 0.0.1 UUID: 2d1a7f6e-eb9a-3984-be1f-283d98111b84 description: Generated description for concept referred to by key "LinkFailureOutputSchema:0.0.1" - key: name: LinkFailureTask version: 0.0.1 value: key: name: LinkFailureTask version: 0.0.1 UUID: 3351b0f4-cf06-4fa2-8823-edf67bd30223 description: This task updates the config for O-RU when link failure is detected. - key: name: LinkMonitorModel version: 0.0.1 value: key: name: LinkMonitorModel version: 0.0.1 UUID: 540226fb-55ee-4f0e-a444-983a0494818e description: This is the Apex Policy Model for link monitoring. - key: name: LinkMonitorModel_Events version: 0.0.1 value: key: name: LinkMonitorModel_Events version: 0.0.1 UUID: 27ad3e7e-fe3b-3bd6-9081-718705c2bcea description: Generated description for concept referred to by key "LinkMonitorModel_Events:0.0.1" - key: name: LinkMonitorModel_KeyInfo version: 0.0.1 value: key: name: LinkMonitorModel_KeyInfo version: 0.0.1 UUID: ea0b5f58-eefd-358a-9660-840c640bf981 description: Generated description for concept referred to by key "LinkMonitorModel_KeyInfo:0.0.1" - key: name: LinkMonitorModel_Policies version: 0.0.1 value: key: name: LinkMonitorModel_Policies version: 0.0.1 UUID: ee9e0b0f-2b7d-3ab7-9a98-c5ec05ed823d description: Generated description for concept referred to by key "LinkMonitorModel_Policies:0.0.1" - key: name: LinkMonitorModel_Schemas version: 0.0.1 value: key: name: LinkMonitorModel_Schemas version: 0.0.1 UUID: fa5f9b8f-796c-3c70-84e9-5140c958c4bb description: Generated description for concept referred to by key "LinkMonitorModel_Schemas:0.0.1" - key: name: LinkMonitorModel_Tasks version: 0.0.1 value: key: name: LinkMonitorModel_Tasks version: 0.0.1 UUID: eec592f7-69d5-39a9-981a-e552f787ed01 description: Generated description for concept referred to by key "LinkMonitorModel_Tasks:0.0.1" - key: name: LinkMonitorPolicy version: 0.0.1 value: key: name: LinkMonitorPolicy version: 0.0.1 UUID: 6c5e410f-489a-46ff-964e-982ce6e8b6d0 description: Generated description for concept referred to by key "LinkMonitorPolicy:0.0.1" - key: name: MessageSchema version: 0.0.1 value: key: name: MessageSchema version: 0.0.1 UUID: ac4b34ac-39d6-3393-a267-8d5b84854018 description: A schema for messages from apex - key: name: NoPolicyDefinedTask version: 0.0.1 value: key: name: NoPolicyDefinedTask version: 0.0.1 UUID: d48b619e-d00d-4008-b884-02d76ea4350b description: This task sends a message to the output when an event is received for which no policy has been defined. - key: name: OduIdSchema version: 0.0.1 value: key: name: OduIdSchema version: 0.0.1 UUID: 50662174-a88b-3cbd-91bd-8e91b40b2660 description: A schema for O-DU-ID - key: name: OruIdSchema version: 0.0.1 value: key: name: OruIdSchema version: 0.0.1 UUID: 54daf32b-015f-39cd-8530-a1175c5553e9 description: A schema for O-RU-ID policies: key: name: LinkMonitorModel_Policies version: 0.0.1 policyMap: entry: - key: name: LinkMonitorPolicy version: 0.0.1 value: policyKey: name: LinkMonitorPolicy version: 0.0.1 template: Freestyle state: entry: - key: LinkClearedState value: stateKey: parentKeyName: LinkMonitorPolicy parentKeyVersion: 0.0.1 parentLocalName: 'NULL' localName: LinkClearedState trigger: name: CreateLinkClearedOutfieldsEvent version: 0.0.1 stateOutputs: entry: - key: LinkClearedLogic_Output_Direct value: key: parentKeyName: LinkMonitorPolicy parentKeyVersion: 0.0.1 parentLocalName: LinkClearedState localName: LinkClearedLogic_Output_Direct outgoingEvent: name: ApexMessageOutputEvent version: 0.0.1 nextState: parentKeyName: parentKeyName: 'NULL' parentKeyVersion: 0.0.0 parentLocalName: 'NULL' localName: 'NULL' contextAlbumReference: [] taskSelectionLogic: key: 'NULL' logicFlavour: UNDEFINED logic: '' stateFinalizerLogicMap: entry: [] defaultTask: name: LinkClearedTask version: 0.0.1 taskReferences: entry: - key: name: LinkClearedTask version: 0.0.1 value: key: parentKeyName: LinkMonitorPolicy parentKeyVersion: 0.0.1 parentLocalName: LinkClearedState localName: LinkClearedTask outputType: DIRECT output: parentKeyName: LinkMonitorPolicy parentKeyVersion: 0.0.1 parentLocalName: LinkClearedState localName: LinkClearedLogic_Output_Direct - key: LinkFailureOrClearedState value: stateKey: parentKeyName: LinkMonitorPolicy parentKeyVersion: 0.0.1 parentLocalName: 'NULL' localName: LinkFailureOrClearedState trigger: name: LinkFailureInputEvent version: 0.0.1 stateOutputs: entry: - key: CreateLinkClearedOutfieldsLogic_Output_Direct value: key: parentKeyName: LinkMonitorPolicy parentKeyVersion: 0.0.1 parentLocalName: LinkFailureOrClearedState localName: CreateLinkClearedOutfieldsLogic_Output_Direct outgoingEvent: name: CreateLinkClearedOutfieldsEvent version: 0.0.1 nextState: parentKeyName: LinkMonitorPolicy parentKeyVersion: 0.0.1 parentLocalName: 'NULL' localName: LinkClearedState - key: CreateLinkFailureOutfieldsLogic_Output_Direct value: key: parentKeyName: LinkMonitorPolicy parentKeyVersion: 0.0.1 parentLocalName: parentLocalName: LinkFailureOrClearedState localName: CreateLinkFailureOutfieldsLogic_Output_Direct outgoingEvent: name: CreateLinkFailureOutfieldsEvent version: 0.0.1 nextState: parentKeyName: LinkMonitorPolicy parentKeyVersion: 0.0.1 parentLocalName: 'NULL' localName: LinkFailureState - key: NoPolicyDefinedLogic_Output_Direct value: key: parentKeyName: LinkMonitorPolicy parentKeyVersion: 0.0.1 parentLocalName: LinkFailureOrClearedState localName: NoPolicyDefinedLogic_Output_Direct outgoingEvent: name: ApexMessageOutputEvent version: 0.0.1 nextState: parentKeyName: 'NULL' parentKeyVersion: 0.0.0 parentLocalName: 'NULL' localName: 'NULL' contextAlbumReference: [] taskSelectionLogic: key: TaskSelectionLogic logicFlavour: JAVASCRIPT logic: |- /* * ============LICENSE_START======================================================= * Copyright (C) 2021 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ executor.logger.info("Task Selection Execution: '"+executor.subject.id+ "'. InputFields: '"+executor.inFields+"'"); var linkFailureInput = executor.inFields.get("LinkFailureInput"); var commonEventHeader = linkFailureInput.get("event").get("commonEventHeader"); var domain = commonEventHeader.get("domain"); taskFailure = executor.subject.getTaskKey("CreateLinkFailureOutfieldsTask"); taskCleared = executor.subject.getTaskKey("CreateLinkClearedOutfieldsTask"); taskDefault = executor.subject.getDefaultTaskKey(); if (domain == "fault") { var faultFields = linkFailureInput.get("event").get("faultFields"); var alarmCondition var alarmCondition = faultFields.get("alarmCondition"); var eventSeverity = faultFields.get("eventSeverity"); if (alarmCondition == "28" && eventSeverity != "NORMAL") { taskFailure.copyTo(executor.selectedTask); } else if (alarmCondition == "28" && eventSeverity == "NORMAL") { taskCleared.copyTo(executor.selectedTask); } else { taskDefault.copyTo(executor.selectedTask); } } else { taskDefault.copyTo(executor.selectedTask); } true; stateFinalizerLogicMap: entry: [] defaultTask: name: NoPolicyDefinedTask version: 0.0.1 taskReferences: entry: - key: name: CreateLinkClearedOutfieldsTask version: 0.0.1 value: key: parentKeyName: LinkMonitorPolicy parentKeyVersion: 0.0.1 parentLocalName: LinkFailureOrClearedState localName: CreateLinkClearedOutfieldsTask outputType: DIRECT output: parentKeyName: LinkMonitorPolicy parentKeyVersion: 0.0.1 parentLocalName: LinkFailureOrClearedState localName: CreateLinkClearedOutfieldsLogic_Output_Direct - key: name: CreateLinkFailureOutfieldsTask version: 0.0.1 value: key: parentKeyName: LinkMonitorPolicy parentKeyVersion: 0.0.1 parentLocalName: LinkFailureOrClearedState localName: CreateLinkFailureOutfieldsTask outputType: DIRECT output: parentKeyName: LinkMonitorPolicy parentKeyVersion: 0.0.1 parentLocalName: LinkFailureOrClearedState localName: CreateLinkFailureOutfieldsLogic_Output_Direct - key: name: NoPolicyDefinedTask version: 0.0.1 value: key: parentKeyName: LinkMonitorPolicy parentKeyVersion: 0.0.1 parentLocalName: LinkFailureOrClearedState localName: NoPolicyDefinedTask outputType: DIRECT output: parentKeyName: LinkMonitorPolicy parentKeyVersion: parentKeyVersion: 0.0.1 parentLocalName: LinkFailureOrClearedState localName: NoPolicyDefinedLogic_Output_Direct - key: LinkFailureState value: stateKey: parentKeyName: LinkMonitorPolicy parentKeyVersion: 0.0.1 parentLocalName: 'NULL' localName: LinkFailureState trigger: name: CreateLinkFailureOutfieldsEvent version: 0.0.1 stateOutputs: entry: - key: LinkFailureLogic_Output_Direct value: key: parentKeyName: LinkMonitorPolicy parentKeyVersion: 0.0.1 parentLocalName: LinkFailureState localName: LinkFailureLogic_Output_Direct outgoingEvent: name: LinkFailureOutputEvent 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: LinkFailureTask version: 0.0.1 taskReferences: entry: - key: name: LinkFailureTask version: 0.0.1 value: key: parentKeyName: LinkMonitorPolicy parentKeyVersion: 0.0.1 parentLocalName: LinkFailureState localName: LinkFailureTask outputType: DIRECT output: parentKeyName: LinkMonitorPolicy parentKeyVersion: 0.0.1 parentLocalName: LinkFailureState localName: LinkFailureLogic_Output_Direct firstState: LinkFailureOrClearedState tasks: key: name: LinkMonitorModel_Tasks version: 0.0.1 taskMap: entry: - key: name: CreateLinkClearedOutfieldsTask version: 0.0.1 value: key: name: CreateLinkClearedOutfieldsTask version: 0.0.1 inputFields: entry: - key: LinkFailureInput value: key: LinkFailureInput fieldSchemaKey: name: LinkFailureInputSchema version: 0.0.1 optional: false outputFields: entry: - key: OruId value: key: OruId fieldSchemaKey: name: OruIdSchema version: 0.0.1 optional: false taskParameters: entry: [] contextAlbumReference: [] taskLogic: key: TaskLogic logicFlavour: JAVASCRIPT logic: |- /* * ============LICENSE_START======================================================= * Copyright (C) 2021 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ executor.logger.info("Task Execution: '"+executor.subject.id+"'. Input Fields: '"+executor.inFields+"'"); var linkFailureInput = executor.inFields.get("LinkFailureInput"); var oruId = linkFailureInput.get("event").get("commonEventHeader").get("sourceName"); executor.outFields.put("OruId", oruId); executor.logger.info(executor.outFields); true; - key: name: CreateLinkFailureOutfieldsTask version: 0.0.1 value: key: name: CreateLinkFailureOutfieldsTask version: 0.0.1 inputFields: entry: - key: LinkFailureInput value: key: LinkFailureInput fieldSchemaKey: name: LinkFailureInputSchema version: 0.0.1 optional: false outputFields: entry: - key: OduId value: key: OduId fieldSchemaKey: name: OduIdSchema version: 0.0.1 optional: false - key: OruId value: key: OruId fieldSchemaKey: name: OruIdSchema version: 0.0.1 optional: false taskParameters: entry: [] contextAlbumReference: [] taskLogic: key: TaskLogic logicFlavour: JAVASCRIPT logic: |- /* * ============LICENSE_START======================================================= * Copyright (C) 2021 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ executor.logger.info("Task Execution: '"+executor.subject.id+"'. Input Fields: '"+executor.inFields+"'"); var returnValue = true; var linkFailureInput = executor.inFields.get("LinkFailureInput"); var oruId = linkFailureInput.get("event").get("commonEventHeader").get("sourceName"); var oruOduMap = JSON.parse(executor.parameters.get("ORU-ODU-Map")); if (oruId in oruOduMap) { var oduId = oruOduMap[oruId]; executor.outFields.put("OruId", oruId); executor.outFields.put("OduId", oduId); executor.logger.info(executor.outFields); } else { executor.message = "No O-RU found in the config with this ID: " + oruId; returnValue = false; } returnValue; - key: name: LinkClearedTask version: 0.0.1 value: key: name: LinkClearedTask version: 0.0.1 inputFields: entry: - key: OruId value: key: OruId fieldSchemaKey: name: OruIdSchema version: 0.0.1 optional: false outputFields: entry: - key: message value: key: message fieldSchemaKey: name: MessageSchema version: 0.0.1 optional: false taskParameters: entry: [] contextAlbumReference: [] taskLogic: key: TaskLogic logicFlavour: JAVASCRIPT logic: |- /* * ============LICENSE_START======================================================= * Copyright (C) 2021 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ executor.logger.info("Task Execution: '"+executor.subject.id+"'. Input Fields: '"+executor.inFields+"'"); var oruId = executor.inFields.get("OruId"); executor.outFields.put("message", "CLEARED link failure for O-RU: " + oruId); executor.logger.info(executor.outFields); true; - key: name: LinkFailureTask version: 0.0.1 value: key: name: LinkFailureTask version: 0.0.1 inputFields: entry: - key: OduId value: key: OduId fieldSchemaKey: name: OduIdSchema version: 0.0.1 optional: false - key: OruId value: key: OruId fieldSchemaKey: name: OruIdSchema version: 0.0.1 optional: false outputFields: entry: - key: LinkFailureOutput value: key: LinkFailureOutput fieldSchemaKey: name: LinkFailureOutputSchema version: 0.0.1 optional: false taskParameters: entry: [] contextAlbumReference: [] taskLogic: key: TaskLogic logicFlavour: JAVASCRIPT logic: |- /* * ============LICENSE_START======================================================= * Copyright (C) 2021 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ executor.logger.info("Task Execution: '"+executor.subject.id+"'. Input Fields: '"+executor.inFields+"'"); var linkFailureOutput = executor.subject.getOutFieldSchemaHelper("LinkFailureOutput").createNewInstance(); var oruId = executor.inFields.get("OruId"); var oduId = executor.inFields.get("OduId"); var unlockMessageArray = new java.util.ArrayList(); for (var i = 0; i < 1; i++) { unlockMessageArray.add({ "id":"rrm-pol-1", "radio_DasH_resource_DasH_management_DasH_policy_DasH_max_DasH_ratio":25, "radio_DasH_resource_DasH_management_DasH_policy_DasH_members": [ { "mobile_DasH_country_DasH_code":"310", "mobile_DasH_network_DasH_code":"150", "slice_DasH_differentiator":1, "slice_DasH_service_DasH_type":1 } ], "radio_DasH_resource_DasH_management_DasH_policy_DasH_min_DasH_ratio":15, "user_DasH_label":"rrm-pol-1", "resource_DasH_type":"prb", "radio_DasH_resource_DasH_management_DasH_policy_DasH_dedicated_DasH_ratio":20, "administrative_DasH_state":"unlocked" }); } linkFailureOutput.put("o_DasH_ran_DasH_sc_DasH_du_DasH_hello_DasH_world_ColoN_radio_DasH_resource_DasH_management_DasH_policy_DasH_ratio", unlockMessageArray); executor.outFields.put("LinkFailureOutput", linkFailureOutput.toString()); executor.getExecutionProperties().setProperty("OduId", oduId); executor.getExecutionProperties().setProperty("OruId", oruId); executor.logger.info(executor.outFields); true; - key: name: NoPolicyDefinedTask version: 0.0.1 value: key: name: NoPolicyDefinedTask version: 0.0.1 inputFields: entry: - key: LinkFailureInput value: key: LinkFailureInput fieldSchemaKey: name: LinkFailureInputSchema version: 0.0.1 optional: false outputFields: entry: - key: message value: key: message fieldSchemaKey: name: MessageSchema version: 0.0.1 optional: false taskParameters: entry: [] contextAlbumReference: [] taskLogic: key: TaskLogic logicFlavour: JAVASCRIPT logic: |- /* * ============LICENSE_START======================================================= * Copyright (C) 2021 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ executor.logger.info("Task Execution: '"+executor.subject.id+"'. Input Fields: '"+executor.inFields+"'"); executor.outFields.put("message", "No policy defined for this event"); executor.logger.info(executor.outFields); true; events: key: name: LinkMonitorModel_Events version: 0.0.1 eventMap: entry: - key: name: ApexMessageOutputEvent version: 0.0.1 value: key: name: ApexMessageOutputEvent version: 0.0.1 nameSpace: org.onap.policy.apex.auth.clieditor source: APEX target: APEX parameter: entry: - key: message value: key: message fieldSchemaKey: name: MessageSchema version: 0.0.1 optional: false - key: name: CreateLinkClearedOutfieldsEvent version: 0.0.1 value: key: name: CreateLinkClearedOutfieldsEvent version: 0.0.1 nameSpace: org.onap.policy.apex.auth.clieditor source: APEX target: APEX parameter: entry: - key: OruId value: key: OruId fieldSchemaKey: name: OruIdSchema version: 0.0.1 optional: false - key: name: CreateLinkFailureOutfieldsEvent version: 0.0.1 value: key: name: CreateLinkFailureOutfieldsEvent version: 0.0.1 nameSpace: org.onap.policy.apex.auth.clieditor source: APEX target: APEX parameter: entry: - key: OduId value: key: OduId fieldSchemaKey: name: OduIdSchema version: 0.0.1 optional: false - key: OruId value: key: OruId fieldSchemaKey: name: OruIdSchema version: 0.0.1 optional: false - key: name: LinkFailureInputEvent version: 0.0.1 value: key: name: LinkFailureInputEvent version: 0.0.1 nameSpace: org.onap.policy.apex.auth.clieditor source: DMAAP target: APEX parameter: entry: - key: LinkFailureInput value: key: LinkFailureInput fieldSchemaKey: name: LinkFailureInputSchema version: 0.0.1 optional: false - key: name: LinkFailureOutputEvent version: 0.0.1 value: key: name: LinkFailureOutputEvent version: 0.0.1 nameSpace: org.onap.policy.apex.auth.clieditor source: APEX target: OAM parameter: entry: - key: LinkFailureOutput value: key: LinkFailureOutput fieldSchemaKey: name: LinkFailureOutputSchema version: 0.0.1 optional: false schemas: key: name: LinkMonitorModel_Schemas version: 0.0.1 schemas: entry: - key: name: LinkFailureInputSchema version: 0.0.1 value: key: name: LinkFailureInputSchema version: 0.0.1 schemaFlavour: Avro schemaDefinition: |- { "type": "record", "name": "Link_Failure_Input", "fields": [ { "name": "event", "type": { "type": "record", "name": "Event_Type", "fields": [ { "name": "commonEventHeader", "type": { "type": "record", "name": "Common_Event_Header_Type", "fields": [ { "name": "domain", "type": "string" }, { "name": "eventId", "type": "string" }, { "name": "eventName", "type": "string" }, { "name": "eventType", "type": "string" }, { "name": "sequence", "type": "int" }, { "name": "priority", "type": "string" }, { "name": "reportingEntityId", "type": "string" }, { "name": "reportingEntityName", "type": "string" }, { "name": "sourceId", "type": "string" }, { "name": "sourceName", "type": "string" }, { "name": "startEpochMicrosec", "type": "string" }, { "name": "lastEpochMicrosec", "type": "string" }, { "name": "nfNamingCode", "type": "string" }, { "name": "nfVendorName", "type": "string" }, { "name": "timeZoneOffset", "type": "string" }, { "name": "version", "type": "string" }, { "name": "vesEventListenerVersion", "type": "string" } ] } }, { "name": "faultFields", "type": { "type": "record", "name": "Fault_Fields_Type", "fields": [ { "name": "faultFieldsVersion", "type": "string" }, { "name": "alarmCondition", "type": "string" }, { "name": "alarmInterfaceA", "type": "string" }, { "name": "eventSourceType", "type": "string" }, { "name": "specificProblem", "type": "string" }, { "name": "eventSeverity", "type": "string" }, { "name": "vfStatus", "type": "string" }, { "name": "alarmAdditionalInformation", "type": { "type": "record", "name": "Alarm_Additional_Information_Type", "fields": [ { "name": "eventTime", "type": "string" }, { "name": "equipType", "type": "string" }, { "name": "vendor", "type": "string" }, { "name": "model", "type": "string" } ] } } ] } } ] } } ] } - key: name: LinkFailureOutputSchema version: 0.0.1 value: key: name: LinkFailureOutputSchema version: 0.0.1 schemaFlavour: Avro schemaDefinition: "{\n \"name\": \"Link_Failure_Output\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"o_DasH_ran_DasH_sc_DasH_du_DasH_hello_DasH_world_ColoN_radio_DasH_resource_DasH_management_DasH_policy_DasH_ratio\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"o_DasH_ran_DasH_sc_DasH_du_DasH_hello_DasH_world_ColoN_radio_DasH_resource_DasH_management_DasH_policy_DasH_ratio_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"id\",\n \"type\": \"string\"\n },\n {\n \"name\": \"radio_DasH_resource_DasH_management_DasH_policy_DasH_max_DasH_ratio\",\n \"type\": \"int\"\n },\n {\n \"name\": \"radio_DasH_resource_DasH_management_DasH_policy_DasH_members\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"radio_DasH_resource_DasH_management_DasH_policy_DasH_members_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"mobile_DasH_country_DasH_code\",\n \"type\": \"string\"\n },\n {\n \"name\": \"mobile_DasH_network_DasH_code\",\n \"type\": \"string\"\n },\n {\n \"name\": \"slice_DasH_differentiator\",\n \"type\": \"int\"\n },\n {\n \"name\": \"slice_DasH_service_DasH_type\",\n \"type\": \"int\"\n }\n ]\n }\n }\n },\n {\n \"name\": \"radio_DasH_resource_DasH_management_DasH_policy_DasH_min_DasH_ratio\",\n \"type\": \"int\"\n },\n {\n \"name\": \"user_DasH_label\",\n \"type\": \"string\"\n },\n {\n \"name\": \"resource_DasH_type\",\n \"type\": \"string\"\n },\n {\n \"name\": \"radio_DasH_resource_DasH_management_DasH_policy_DasH_dedicated_DasH_ratio\",\n \"type\": \"int\"\n },\n {\n \"name\": \"administrative_DasH_state\",\n \"type\": \"string\"\n }\n ]\n }\n }\n }\n ]\n}" - key: name: MessageSchema version: 0.0.1 value: key: name: MessageSchema version: 0.0.1 schemaFlavour: Java schemaDefinition: java.lang.String - key: name: OduIdSchema version: 0.0.1 value: key: name: OduIdSchema version: 0.0.1 schemaFlavour: Java schemaDefinition: java.lang.String - key: name: OruIdSchema version: 0.0.1 value: key: name: OruIdSchema version: 0.0.1 schemaFlavour: Java schemaDefinition: java.lang.String eventOutputParameters: RestProducer: carrierTechnologyParameters: carrierTechnology: RESTCLIENT parameterClassName: org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters parameters: url: http://sdnr-simulator.nonrtric:9990/rests/data/network-topology:network-topology/topology=topology-netconf/node={OduId}/yang-ext:mount/o-ran-sc-du-hello-world:network-function/distributed-unit-functions={OduIdOruId}/radio-resource-management-policy-ratio=rrm-pol-1 httpMethod: PUT httpHeaders: - - Authorization - Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ== eventProtocolParameters: eventProtocol: JSON parameters: pojoField: LinkFailureOutput eventNameFilter: LinkFailureOutputEvent StdOutProducer: carrierTechnologyParameters: carrierTechnology: FILE parameters: standardIo: true eventProtocolParameters: eventProtocol: JSON parameters: pojoField: message eventNameFilter: ApexMessageOutputEvent eventInputParameters: DMaaPConsumer: carrierTechnologyParameters: carrierTechnology: RESTCLIENT parameterClassName: org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters parameters: url: http://message-router:3904/events/unauthenticated.SEC_FAULT_OUTPUT/users/link-monitor-nonrtric?timeout=15000&limit=100 eventProtocolParameters: eventProtocol: JSON parameters: versionAlias: version pojoField: LinkFailureInput eventName: LinkFailureInputEvent |
...
Code Block | ||
---|---|---|
| ||
git clone "https://gerrit.o-ran-sc.org/r/nonrtric/rapp/orufhrecovery" git checkout f-release --track origin/f-release cd orucfronthaulrecovery/scriptversion/helm/sdnr-simulator/ helm package . helm install sdnr-simulator sdnr-simulator-0.1.0.tgz --set image.repository=registry.nordix.org/onap/sdnr-simulator --set image.tag=1.01.0 --set messagerouter.host="http://message-router.onap" --set messagerouter.port="3904" --namespace nonrtric --create-namespace --wait |
...
The logs of the sdnr-simulator should show that a PUT request has been successfully received.
"PUT /rests/data/network-topology:network-topology/topology=topology-netconf/node=HCL-O-DU-1123/yang-ext:mount/o-ran-sc-du-hello-world:network-function/dudistributed-tounit-ru-connectionfunctions=ERICSSON-O-RU-11225/radio-resource-management-policy-ratio=rrm-pol-1 HTTP/1.1" 200200
b) Control loop for script version
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
tosca_definitions_version: tosca_simple_yaml_1_1_03 data_types: onap.datatypes.ToscaConceptIdentifier: derived_from: tosca.datatypes.Root properties: name: type: string required: true version: type: string required: true node_types: org.onap.policy.clamp.controlloopacm.Participant: version: 1.0.1 derived_from: tosca.nodetypes.Root properties: provider: type: string requred: false org.onap.policy.clamp.controlloopacm.ControlLoopAutomationCompositionElement: version: 1.0.1 derived_from: tosca.nodetypes.Root properties: provider: type: string requredrequired: false elementsmetadata: typecommon: listtrue required: true description: Specifies the organization that provides the automation composition element entryparticipant_schemaid: type: onap.datatypes.ToscaConceptIdentifier org.onap.policy.clamp.controlloop.ControlLoopElement: version: 1.0.1 derived_from: tosca.nodetypes.Root requred: true properties: providermetadata: type: string requred common: falsetrue participant_idparticipantType: type: onap.datatypes.ToscaConceptIdentifier requredrequired: true org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement: version: 1.0.1 derived_from: org.onap.policy.clamp.controlloop.ControlLoopElementmetadata: properties: chartcommon: true typedescription: string The identity of the participant type that hosts this type of Automation required:Composition trueElement configsstartPhase: type: listinteger required: false requirementsconstraints: - typegreater_or_equal: string0 requredmetadata: false templatescommon: true typedescription: list A value indicating the start phase in which required:this false automation composition element will be started, the entry_schema: values: first start phase is zero. Automation type:Composition string Elements are started in their start_phase order and requred: true topology_template: node_templates: stopped org.onap.domain.linkmonitor.LinkMonitorControlLoopDefinition1: in reverse start version:phase 1.2.3 type: org.onap.policy.clamp.controlloop.ControlLoop order. Automation Composition Elements with the same start phase are started and type_version: 1.0.1 stopped simultaneously description: Control loop foruninitializedToPassiveTimeout: Link Monitor propertiestype: integer providerrequired: Ericssonfalse elementsconstraints: - namegreater_or_equal: org.onap.domain.linkmonitor.OruAppK8SMicroserviceControlLoopElement0 versiondefault: 1.2.360 - name: org.onap.domain.linkmonitor.MessageGeneratorK8SMicroserviceControlLoopElementmetadata: versioncommon: 1.2.3true - namedescription: org.onap.domain.linkmonitor.SdnrSimulatorK8SMicroserviceControlLoopElement version: 1.2.3 org.onap.k8s.controlloop.K8SControlLoopParticipant:The maximum time in seconds to wait for a state chage from uninitialized to passive versionpassiveToRunningTimeout: 2.3.4 type: org.onap.policy.clamp.controlloop.Participant integer type_versionrequired: 1.0.1 false descriptionconstraints: Participant for k8s - properties:greater_or_equal: 0 providerdefault: ONAP60 org.onap.domain.linkmonitor.OruAppK8SMicroserviceControlLoopElement: metadata: version: 1.2.3 typecommon: org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement true type_version: 1.0.1 description: Control loop element for oru-appdescription: The maximum time in seconds to wait for a state chage from passive to running propertiesrunningToPassiveTimeout: providertype: ONAPinteger participant_idrequired: false nameconstraints: K8sParticipant0 - versiongreater_or_equal: 1.0.0 participantTypedefault: 60 name: org.onap.k8s.controlloop.K8SControlLoopParticipantmetadata: versioncommon: 2.3.4true chartdescription: The maximum time in seconds to wait for a chartId: state chage from running to passive name: oru-apppassiveToUninitializedTimeout: type: integer version: 0.1.0 required: false releaseName: oru-app constraints: repository: - greater_or_equal: 0 repoNamedefault: chartmuseum60 namespacemetadata: nonrtric overrideParamscommon: true description: The maximum time image.repository: nexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-o-ru-closed-loop-recovery image.tagin seconds to wait for a state chage from passive to uninitialized org.onap.policy.clamp.acm.AutomationComposition: version: 1.0.1 derived_from: tosca.nodetypes.Root properties: messagerouter.host: http://message-router.onapprovider: type: string messagerouter.port: 3904 required: false sdnr.host: httpmetadata://sdnr-simulator common: true sdnr.port: 9990 org.onap.domain.linkmonitor.MessageGeneratorK8SMicroserviceControlLoopElement: version: 1.2.3description: Specifies the organization that provides the automation composition element typeelements: org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement type_version: 1.0.1list description: Control looprequired: elementtrue for message-generator propertiesmetadata: providercommon: ONAPtrue participantentry_idschema: nametype: K8sParticipant0onap.datatypes.ToscaConceptIdentifier versiondescription: 1.0.0 participantType: name:Specifies a list of automation composition element definitions that make up this automation composition definition org.onap.policy.k8sclamp.controlloopacm.K8SControlLoopParticipantK8SMicroserviceAutomationCompositionElement: version: 1.0.1 versionderived_from: 2.3.4 org.onap.policy.clamp.acm.AutomationCompositionElement properties: chart: type: chartId:string required: true name: message-generator configs: versiontype: 0.1.0list releaseNamerequired: message-generatorfalse requirements: repository: type: string repoNamerequred: chartmuseumfalse namespace: nonrtrictemplates: type: overrideParams:list required: false image.repository: registry.nordix.org/onap/message-generator entry_schema: image.tag: 1.0.0values: messagerouter.host: http://message-router.onaptype: string requred: true topology_template: messagerouter.port: 3904node_templates: org.onap.policy.domainclamp.linkmonitoracm.SdnrSimulatorK8SMicroserviceControlLoopElementKubernetesParticipant: version: 1.2.3.4 type: org.onap.policy.clamp.controlloopacm.K8SMicroserviceControlLoopElementParticipant type_version: 1.0.1 description: Participant for K8S properties: provider: Ericsson org.onap.domain.linkmonitor.OruAppK8SMicroserviceAutomationCompositionElement: # Chart from new repository version: 1.2.3 type: org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement type_version: 1.0.0 description: ControlAutomation loopcomposition element for the K8S microservice for sdnr-simulatorPMSH properties: provider: ONAP participant_id: name: K8sParticipant0 version: 1.0.0 participantType: name: org.onap.policy.k8sclamp.controlloopacm.K8SControlLoopParticipantKubernetesParticipant version: 2.3.4 chart: chartId: name: sdnroru-simulatorapp version: 0.1.0 releaseName: sdnroru-simulatorapp repository: repoName: nginx-proxy repoName: chartmuseumaddress: https://nginx-proxy:443 namespace: nonrtric overrideParams: image.repository: registry.nordixnexus3.o-ran-sc.org/onap/sdnr-simulator:10004/o-ran-sc/nonrtric-rapp-orufhrecovery image.tag: 1.01.0 messagerouter.host: http://message-router.onap messagerouter.port: 3904 sdnr.host: http://sdnr-simulator sdnr.port: 9990 org.onap.domain.linkmonitor.MessageGeneratorK8SMicroserviceAutomationCompositionElement: # Chart from new repository version: 1.2.3 type: org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement type_version: 1.0.0 description: Automation composition element for the K8S microservice for PMSH properties: provider: ONAP participant_id: name: K8sParticipant0 version: 1.0.0 participantType: name: org.onap.policy.clamp.acm.KubernetesParticipant version: 2.3.4 chart: chartId: name: message-generator version: 0.1.0 releaseName: message-generator repository: repoName: nginx-proxy address: https://nginx-proxy:443 namespace: nonrtric overrideParams: image.repository: registry.nordix.org/onap/message-generator image.tag: 1.0.0 messagerouter.host: http://message-router.onap messagerouter.port: 3904 org.onap.domain.linkmonitor.SdnrSimulatorK8SK8SMicroserviceAutomationCompositionElement: # Chart from new repository version: 1.2.3 type: org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement type_version: 1.0.0 description: Automation composition element for the K8S microservice for PMSH properties: provider: ONAP participant_id: name: K8sParticipant0 version: 1.0.0 participantType: name: org.onap.policy.clamp.acm.KubernetesParticipant version: 2.3.4 chart: chartId: name: sdnr-simulator version: 0.1.0 releaseName: sdnr-simulator repository: repoName: nginx-proxy address: https://nginx-proxy:443 namespace: nonrtric overrideParams: image.repository: registry.nordix.org/onap/sdnr-simulator image.tag: 1.1.0 messagerouter.host: http://message-router.onap messagerouter.port: 3904 org.onap.domain.sample.GenericK8s_AutomationCompositionDefinition: version: 1.2.3 type: org.onap.policy.clamp.acm.AutomationComposition type_version: 1.0.1 description: Automation composition for Hello World properties: provider: ONAP elements: - name: org.onap.domain.linkmonitor.OruAppK8SMicroserviceAutomationCompositionElement version: 1.2.3 - name: org.onap.domain.linkmonitor.MessageGeneratorK8SMicroserviceAutomationCompositionElement version: 1.2.3 - name: org.onap.domain.linkmonitor.SdnrSimulatorK8SK8SMicroserviceAutomationCompositionElement version: 1.2.3 |
This control loop will bring up three micro-services in the nonrtric namespace: oru-app (running the This control loop will bring up three micro-services in the nonrtric namespace: oru-app (running the actual logic of the usecase), message-generator (sending the LinkFailure messages at random intervals), and sdnr-simulator (for receiving the REST calls made by oru-app). Make sure that the sdnr-simulator is not already running in the nonrtric namespace, otherwise the control loop instantiation might fail.
...
Before commissioning this tosca template, some preparations need to be done in the kubernetes-participant component of the clamp.
- First step is to copy the kube config file of the cluster inside the kubernetes-participant. Find the pod-name of this component using:
Code Block | ||
---|---|---|
| ||
kubectl -n onap get pod | grep k8s-ppnt |
Copy the config file using this command:
Code Block | ||
---|---|---|
| ||
kubectl cp ~/.kube/config onap/<POD-NAME-k8s-ppnt>:/home/policy/.kube/config |
In order to make sure that the kubernetes-participant is properly configured, get into the pod using "kubectl -n onap exec -it <POD-NAME-k8s-ppnt> sh" and run the following command:
Code Block | ||
---|---|---|
| ||
kubectl get ns |
This should show all the namespaces in the cluster where ONAP is deployed.
of the clamp.
- First Next step is to copy the helm charts of all three components into the kuberneteskube config file of the cluster inside the kubernetes-participant. The helm charts are located in the nonrtric repo of OSC.Find the pod-name of this component using:
Code Block | ||
---|---|---|
| ||
cd orufhrecovery/scriptversion/helm/sdnr-simulator/ helm package . kubectl cp ./sdnr-simulator-0.1.0.tgz onap/<POD-NAME-k8s-ppnt>:/home/policy/local-charts/sdnr-simulator-0.1.0.tgz cd orufhrecovery/scriptversion/helm/message-generator/ helm package . kubectl cp ./message-generator-0.1.0.tgz onap/<POD-NAME-k8s-ppnt>:/home/policy/local-charts/message-generator-0.1.0.tgz cd orufhrecovery/scriptversion/helm/oru-app/ helm package . kubectl cp ./oru-app-0.1.0.tgz-n onap get pod | grep k8s-ppnt |
Log into the k8s-ppnt pod and create the following directories
Code Block | ||
---|---|---|
| ||
mkdir -p ~/.kube
mkdir ~/ssl |
Copy the config file using this command:
Code Block | ||
---|---|---|
| ||
kubectl cp ~/.kube/config onap/<POD-NAME-k8s-ppnt>:/home/policy/local-charts/oru-app-0.1.0.tgz |
...
/.kube/config |
In order to make sure that the kubernetes-participant is properly configured, get into the pod using "kubectl -n onap exec -it <POD-NAME-k8s-ppnt> sh" and run the following
...
command:
Code Block | ||
---|---|---|
| ||
mkdirkubectl get ns |
This should show all the namespaces in the cluster where ONAP is deployed.
Next step is setup a https proxy from chartmuseum and push the charts
- Create tls certs using onap cet manager kubectl apply -f certificate.yaml (Replace NodeIP with your control plane IP)
- Install the nginx proxy to run in front of ONAP chartmuseum: kubectl apply -f nginx.yaml
- Retrieve chartmuseum username and password using kubectl get secret onap-chartmuseum-registrycred -o=go-template='{{$login := .data.login| base64decode}}{{$pw := .data.password| base64decode}}{{printf "%s:%s" $login $pw }}'
Create the helm charts for all 3 components and push them to chartmuseum
Code Block | ||||
---|---|---|---|---|
| ||||
cd orufhrecovery/scriptversion/helm/sdnr-simulator/ helm package . curl -u <username>:<password>-p ~/helm3-storage curl -LO https://s3.amazonaws.com/chartmuseum/release/latest/bin/linux/amd64/chartmuseum chmod +x ./chartmuseum ./chartmuseum --storage local --storage-local-rootdir /home/policy/helm3-storage -port 8080 & curl --data-binary "@local-charts/sdnr@sdnr-simulator-0.1.0.tgz" http://localhost<NodeIP>:808030088/api/charts cd orufhrecovery/scriptversion/helm/message-generator/ helm package . curl -u <username>:<password> --data-binary "@local-charts/message@message-generator-0.1.0.tgz" http://localhost<NodeIP>:808030088/api/charts cd orufhrecovery/scriptversion/helm/oru-app/ helm package . curl -u <username>:<password> --data-binary "@local-charts/oru@oru-app-0.1.0.tgz" http://localhost<NodeIP>:808030088/api/charts |
Retrieve the ca.crt from the secret and copy it to the k8s-ppnt pod :
Code Block | ||
---|---|---|
| ||
kubectl get secret nginx-tls -o jsonpath="{.data.ca\.crt}" | base64 -d > ca.crt cp ~/certs/ca.crt onap/<POD-NAME-k8s-ppnt>:/home/policy/ssl |
Log into the k8s-ppnt pod using "kubectl -n onap exec -it <POD-NAME-k8s-ppnt> sh" and run the following commands:
Code Block | ||
---|---|---|
| ||
helm repo add chartmuseumnginx-proxy httphttps://localhost:8080nginx-proxy:443 --ca-file /home/policy/ssl/ca.crt helm repo update |
Once the kubernetes-participant is set up, the tosca template can be commissioned. After that, the control loop can be instantiated using the steps described in the sub-section Commission/Instantiate control loop via GUI. Once the control loop is in RUNNING PASSIVE state, check that all three micro-services have been created in the nonrtric namespace.
...