aboutsummaryrefslogtreecommitdiffstats
path: root/participant/participant-impl/participant-impl-dcae/src
diff options
context:
space:
mode:
authorSirisha_Manchikanti <sirisha.manchikanti@est.tech>2021-08-10 21:51:48 +0100
committerSirisha_Manchikanti <sirisha.manchikanti@est.tech>2021-08-18 14:58:42 +0100
commitd0a1bcee60c43a736a0526d49c07c564632c4f02 (patch)
tree32d46f33307a9bb65215a1f52eb626ae7db3d1ee /participant/participant-impl/participant-impl-dcae/src
parenta37bd982693785af5fc791df0baaa49dda039846 (diff)
Updated ControlLoop component messages
Updated controlloop messages (ParticipantUpdate, ControlLoopUpdate, ParticipantStatus) according to the following Wiki and added implementation for the corresponding updates in runtime-controlloop and participant components https://wiki.onap.org/display/DW/The+CLAMP+Control+Loop+Participant+Protocol Issue-ID: POLICY-3417 Signed-off-by: Sirisha_Manchikanti <sirisha.manchikanti@est.tech> Change-Id: I80d96a7553a89ca47de2aa35e09df5a5c792acfa
Diffstat (limited to 'participant/participant-impl/participant-impl-dcae/src')
-rw-r--r--participant/participant-impl/participant-impl-dcae/src/main/java/org/onap/policy/clamp/controlloop/participant/dcae/main/handler/ControlLoopElementHandler.java6
-rw-r--r--participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/endtoend/ParticipantDcaeTest.java15
-rw-r--r--participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/main/handler/ControlLoopElementHandlerTest.java34
-rw-r--r--participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/main/rest/TestListenerUtils.java168
-rw-r--r--participant/participant-impl/participant-impl-dcae/src/test/resources/parameters/TestCLParams.json2
-rw-r--r--participant/participant-impl/participant-impl-dcae/src/test/resources/rest/servicetemplates/pm_control_loop_tosca.yaml545
6 files changed, 312 insertions, 458 deletions
diff --git a/participant/participant-impl/participant-impl-dcae/src/main/java/org/onap/policy/clamp/controlloop/participant/dcae/main/handler/ControlLoopElementHandler.java b/participant/participant-impl/participant-impl-dcae/src/main/java/org/onap/policy/clamp/controlloop/participant/dcae/main/handler/ControlLoopElementHandler.java
index 5a0ddabfd..08ebd194a 100644
--- a/participant/participant-impl/participant-impl-dcae/src/main/java/org/onap/policy/clamp/controlloop/participant/dcae/main/handler/ControlLoopElementHandler.java
+++ b/participant/participant-impl/participant-impl-dcae/src/main/java/org/onap/policy/clamp/controlloop/participant/dcae/main/handler/ControlLoopElementHandler.java
@@ -36,7 +36,7 @@ import org.onap.policy.clamp.controlloop.participant.intermediary.api.ControlLoo
import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryApi;
import org.onap.policy.common.utils.resources.ResourceUtils;
import org.onap.policy.models.base.PfModelException;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@@ -136,11 +136,11 @@ public class ControlLoopElementHandler implements ControlLoopElementListener {
* Callback method to handle an update on a control loop element.
*
* @param element the information on the control loop element
- * @param controlLoopDefinition toscaServiceTemplate
+ * @param nodeTemplate toscaNodeTemplate
* @throws PfModelException in case of an exception
*/
@Override
- public void controlLoopElementUpdate(ControlLoopElement element, ToscaServiceTemplate controlLoopDefinition)
+ public void controlLoopElementUpdate(ControlLoopElement element, ToscaNodeTemplate nodeTemplate)
throws PfModelException {
try {
Loop loop = getStatus();
diff --git a/participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/endtoend/ParticipantDcaeTest.java b/participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/endtoend/ParticipantDcaeTest.java
index a3fcfdd9e..6e7f28735 100644
--- a/participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/endtoend/ParticipantDcaeTest.java
+++ b/participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/endtoend/ParticipantDcaeTest.java
@@ -34,10 +34,12 @@ import org.mockserver.integration.ClientAndServer;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopStateChange;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopUpdate;
+import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdate;
import org.onap.policy.clamp.controlloop.participant.dcae.main.parameters.CommonTestData;
import org.onap.policy.clamp.controlloop.participant.dcae.main.rest.TestListenerUtils;
import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ControlLoopStateChangeListener;
import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ControlLoopUpdateListener;
+import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ParticipantUpdateListener;
import org.onap.policy.clamp.controlloop.participant.intermediary.handler.ParticipantHandler;
import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
import org.onap.policy.common.utils.coder.CoderException;
@@ -54,6 +56,7 @@ class ParticipantDcaeTest {
private static final CommInfrastructure INFRA = CommInfrastructure.NOOP;
private static final String TOPIC = "my-topic";
+ private static final Object lockit = new Object();
private static final String LOOP = "pmsh_loop";
private static final String BLUEPRINT_DEPLOYED = "BLUEPRINT_DEPLOYED";
@@ -68,7 +71,7 @@ class ParticipantDcaeTest {
* start Servers.
*/
@BeforeAll
- public static void startServers() {
+ public void startServers() {
// Clamp
mockClampServer = ClientAndServer.startClientAndServer(8443);
@@ -88,6 +91,12 @@ class ParticipantDcaeTest {
mockConsulServer.when(request().withMethod("PUT").withPath("/v1/kv/dcae-pmsh:policy"))
.respond(response().withStatusCode(200));
+ ParticipantUpdate participantUpdateMsg = TestListenerUtils.createParticipantUpdateMsg();
+
+ synchronized (lockit) {
+ ParticipantUpdateListener participantUpdateListener = new ParticipantUpdateListener(participantHandler);
+ participantUpdateListener.onTopicEvent(INFRA, TOPIC, null, participantUpdateMsg);
+ }
}
/**
@@ -126,7 +135,6 @@ class ParticipantDcaeTest {
void testControlLoopUpdateListener_ParticipantIdNoMatch() throws CoderException {
ControlLoopUpdate controlLoopUpdateMsg = TestListenerUtils.createControlLoopUpdateMsg();
controlLoopUpdateMsg.getParticipantId().setName("DummyName");
- controlLoopUpdateMsg.getControlLoop().setOrderedState(ControlLoopOrderedState.PASSIVE);
ControlLoopUpdateListener clUpdateListener = new ControlLoopUpdateListener(participantHandler);
clUpdateListener.onTopicEvent(INFRA, TOPIC, null, controlLoopUpdateMsg);
@@ -139,7 +147,6 @@ class ParticipantDcaeTest {
@Test
void testControlLoopUpdateListenerPassive() throws CoderException {
ControlLoopUpdate controlLoopUpdateMsg = TestListenerUtils.createControlLoopUpdateMsg();
- controlLoopUpdateMsg.getControlLoop().setOrderedState(ControlLoopOrderedState.PASSIVE);
ControlLoopUpdateListener clUpdateListener = new ControlLoopUpdateListener(participantHandler);
clUpdateListener.onTopicEvent(INFRA, TOPIC, null, controlLoopUpdateMsg);
@@ -152,7 +159,6 @@ class ParticipantDcaeTest {
@Test
void testControlLoopUpdateListenerUninitialised() throws CoderException {
ControlLoopUpdate controlLoopUpdateMsg = TestListenerUtils.createControlLoopUpdateMsg();
- controlLoopUpdateMsg.getControlLoop().setOrderedState(ControlLoopOrderedState.UNINITIALISED);
ControlLoopUpdateListener clUpdateListener = new ControlLoopUpdateListener(participantHandler);
clUpdateListener.onTopicEvent(INFRA, TOPIC, null, controlLoopUpdateMsg);
@@ -165,7 +171,6 @@ class ParticipantDcaeTest {
@Test
void testControlLoopUpdateListenerString() throws CoderException {
ControlLoopUpdate controlLoopUpdateMsg = TestListenerUtils.createControlLoopUpdateMsg();
- controlLoopUpdateMsg.getControlLoop().setOrderedState(ControlLoopOrderedState.UNINITIALISED);
assertThat(controlLoopUpdateMsg.toString()).contains("state=UNINITIALISED");
ControlLoopUpdate copyControlLoopUpdateMsg =
diff --git a/participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/main/handler/ControlLoopElementHandlerTest.java b/participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/main/handler/ControlLoopElementHandlerTest.java
index 40f2f5f7b..8a7f403f4 100644
--- a/participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/main/handler/ControlLoopElementHandlerTest.java
+++ b/participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/main/handler/ControlLoopElementHandlerTest.java
@@ -31,21 +31,28 @@ import static org.mockito.Mockito.when;
import java.util.UUID;
import org.json.JSONException;
+import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
+import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdate;
import org.onap.policy.clamp.controlloop.participant.dcae.httpclient.ClampHttpClient;
import org.onap.policy.clamp.controlloop.participant.dcae.httpclient.ConsulDcaeHttpClient;
import org.onap.policy.clamp.controlloop.participant.dcae.main.parameters.CommonTestData;
+import org.onap.policy.clamp.controlloop.participant.dcae.main.rest.TestListenerUtils;
import org.onap.policy.clamp.controlloop.participant.dcae.model.Loop;
import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryApi;
+import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ParticipantUpdateListener;
+import org.onap.policy.clamp.controlloop.participant.intermediary.handler.ParticipantHandler;
+import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
import org.onap.policy.common.utils.coder.Coder;
import org.onap.policy.common.utils.coder.CoderException;
import org.onap.policy.common.utils.coder.StandardCoder;
import org.onap.policy.models.base.PfModelException;
import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.junit.jupiter.SpringExtension;
/**
@@ -61,8 +68,27 @@ class ControlLoopElementHandlerTest {
private static final String MICROSERVICE_INSTALLED_SUCCESSFULLY = "MICROSERVICE_INSTALLED_SUCCESSFULLY";
public static final Coder CODER = new StandardCoder();
+ private static final Object lockit = new Object();
+ private static final CommInfrastructure INFRA = CommInfrastructure.NOOP;
+ private static final String TOPIC = "my-topic";
private CommonTestData commonTestData = new CommonTestData();
+ @Autowired
+ private ParticipantHandler participantHandler;
+
+ /**
+ * Initial ParticipantUpdate message.
+ */
+ @BeforeAll
+ public void sendParticipantUpdate() {
+ ParticipantUpdate participantUpdateMsg = TestListenerUtils.createParticipantUpdateMsg();
+
+ synchronized (lockit) {
+ ParticipantUpdateListener participantUpdateListener = new ParticipantUpdateListener(participantHandler);
+ participantUpdateListener.onTopicEvent(INFRA, TOPIC, null, participantUpdateMsg);
+ }
+ }
+
@Test
void test_ControlLoopElementStateChange() {
ClampHttpClient clampClient = spy(mock(ClampHttpClient.class));
@@ -109,7 +135,9 @@ class ControlLoopElementHandlerTest {
element.setOrderedState(ControlLoopOrderedState.PASSIVE);
final ToscaServiceTemplate controlLoopDefinition = new ToscaServiceTemplate();
- controlLoopElementHandler.controlLoopElementUpdate(element, controlLoopDefinition);
+ controlLoopElementHandler.controlLoopElementUpdate(element,
+ controlLoopDefinition.getToscaTopologyTemplate().getNodeTemplates()
+ .get("org.onap.domain.pmsh.PMSH_DCAEMicroservice"));
verify(clampClient).create(eq(LOOP), eq(TEMPLATE));
verify(consulClient).deploy(any(String.class), any(String.class));
@@ -139,7 +167,9 @@ class ControlLoopElementHandlerTest {
element.setOrderedState(ControlLoopOrderedState.PASSIVE);
ToscaServiceTemplate controlLoopDefinition = new ToscaServiceTemplate();
- controlLoopElementHandler.controlLoopElementUpdate(element, controlLoopDefinition);
+ controlLoopElementHandler.controlLoopElementUpdate(element,
+ controlLoopDefinition.getToscaTopologyTemplate().getNodeTemplates()
+ .get("org.onap.domain.pmsh.PMSH_DCAEMicroservice"));
verify(clampClient, times(0)).create(eq(LOOP), eq(TEMPLATE));
verify(consulClient).deploy(any(String.class), any(String.class));
diff --git a/participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/main/rest/TestListenerUtils.java b/participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/main/rest/TestListenerUtils.java
index 136d0e500..c6dd927da 100644
--- a/participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/main/rest/TestListenerUtils.java
+++ b/participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/main/rest/TestListenerUtils.java
@@ -22,16 +22,21 @@ package org.onap.policy.clamp.controlloop.participant.dcae.main.rest;
import java.io.File;
import java.time.Instant;
+import java.util.ArrayList;
import java.util.LinkedHashMap;
+import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
+import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElementDefinition;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantState;
+import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantDefinition;
+import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantUpdates;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopStateChange;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopUpdate;
+import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdate;
import org.onap.policy.common.utils.coder.Coder;
import org.onap.policy.common.utils.coder.CoderException;
import org.onap.policy.common.utils.coder.StandardCoder;
@@ -46,6 +51,7 @@ public class TestListenerUtils {
private static final YamlJsonTranslator yamlTranslator = new YamlJsonTranslator();
private static final Coder CODER = new StandardCoder();
private static final String TOSCA_TEMPLATE_YAML = "examples/controlloop/PMSubscriptionHandling.yaml";
+ private static final String CONTROL_LOOP_ELEMENT = "ControlLoopElement";
/**
* Method to create a controlLoop from a yaml file.
@@ -119,46 +125,158 @@ public class TestListenerUtils {
*/
public static ControlLoopUpdate createControlLoopUpdateMsg() {
final ControlLoopUpdate clUpdateMsg = new ControlLoopUpdate();
- ToscaConceptIdentifier controlLoopId = new ToscaConceptIdentifier();
- controlLoopId.setName("PMSHInstance0");
- controlLoopId.setVersion("1.0.0");
-
- ToscaConceptIdentifier participantId = new ToscaConceptIdentifier();
- participantId.setName("DCAEParticipant0");
- participantId.setVersion("1.0.0");
+ ToscaConceptIdentifier controlLoopId =
+ new ToscaConceptIdentifier("PMSHInstance0", "1.0.0");
+ ToscaConceptIdentifier participantId =
+ new ToscaConceptIdentifier("org.onap.PM_Policy", "0.0.0");
clUpdateMsg.setControlLoopId(controlLoopId);
clUpdateMsg.setParticipantId(participantId);
+ clUpdateMsg.setMessageId(UUID.randomUUID());
+ clUpdateMsg.setTimestamp(Instant.now());
- ControlLoop controlLoop = new ControlLoop();
Map<UUID, ControlLoopElement> elements = new LinkedHashMap<>();
ToscaServiceTemplate toscaServiceTemplate = testControlLoopRead();
Map<String, ToscaNodeTemplate> nodeTemplatesMap =
toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates();
for (Map.Entry<String, ToscaNodeTemplate> toscaInputEntry : nodeTemplatesMap.entrySet()) {
- ControlLoopElement clElement = new ControlLoopElement();
- clElement.setId(UUID.randomUUID());
+ if (toscaInputEntry.getValue().getType().contains(CONTROL_LOOP_ELEMENT)) {
+ ControlLoopElement clElement = new ControlLoopElement();
+ clElement.setId(UUID.randomUUID());
+ ToscaConceptIdentifier clParticipantId;
+ try {
+ clParticipantId = CODER.decode(
+ toscaInputEntry.getValue().getProperties().get("participant_id").toString(),
+ ToscaConceptIdentifier.class);
+ } catch (CoderException e) {
+ throw new RuntimeException("cannot get ParticipantId from toscaNodeTemplate", e);
+ }
- ToscaConceptIdentifier clElementParticipantId = new ToscaConceptIdentifier();
- clElementParticipantId.setName(toscaInputEntry.getKey());
- clElementParticipantId.setVersion(toscaInputEntry.getValue().getVersion());
- clElement.setParticipantId(clElementParticipantId);
+ clElement.setParticipantId(clParticipantId);
+ clElement.setParticipantType(clParticipantId);
- clElement.setDefinition(clElementParticipantId);
- clElement.setState(ControlLoopState.UNINITIALISED);
- clElement.setDescription(toscaInputEntry.getValue().getDescription());
- clElement.setOrderedState(ControlLoopOrderedState.UNINITIALISED);
- elements.put(clElement.getId(), clElement);
+ clElement.setDefinition(new ToscaConceptIdentifier(toscaInputEntry.getKey(),
+ toscaInputEntry.getValue().getVersion()));
+ clElement.setState(ControlLoopState.UNINITIALISED);
+ clElement.setDescription(toscaInputEntry.getValue().getDescription());
+ clElement.setOrderedState(ControlLoopOrderedState.PASSIVE);
+ elements.put(clElement.getId(), clElement);
+ }
}
- controlLoop.setElements(elements);
- controlLoop.setName("PMSHInstance0");
- controlLoop.setVersion("1.0.0");
- controlLoop.setDefinition(controlLoopId);
- clUpdateMsg.setControlLoop(controlLoop);
+ List<ParticipantUpdates> participantUpdates = new ArrayList<>();
+ for (ControlLoopElement element : elements.values()) {
+ prepareParticipantUpdateForControlLoop(element, participantUpdates);
+ }
+ clUpdateMsg.setParticipantUpdatesList(participantUpdates);
return clUpdateMsg;
}
+ private static void prepareParticipantUpdateForControlLoop(ControlLoopElement clElement,
+ List<ParticipantUpdates> participantUpdates) {
+ if (participantUpdates.isEmpty()) {
+ participantUpdates.add(getControlLoopElementList(clElement));
+ } else {
+ boolean participantExists = false;
+ for (ParticipantUpdates participantUpdate : participantUpdates) {
+ if (participantUpdate.getParticipantId().equals(clElement.getParticipantId())) {
+ participantUpdate.getControlLoopElementList().add(clElement);
+ participantExists = true;
+ }
+ }
+ if (!participantExists) {
+ participantUpdates.add(getControlLoopElementList(clElement));
+ }
+ }
+ }
+
+ private static ParticipantUpdates getControlLoopElementList(ControlLoopElement clElement) {
+ ParticipantUpdates participantUpdate = new ParticipantUpdates();
+ List<ControlLoopElement> controlLoopElementList = new ArrayList<>();
+ participantUpdate.setParticipantId(clElement.getParticipantId());
+ controlLoopElementList.add(clElement);
+ participantUpdate.setControlLoopElementList(controlLoopElementList);
+ return participantUpdate;
+ }
+
+ /**
+ * Method to create participantUpdateMsg.
+ *
+ * @return ParticipantUpdate message
+ */
+ public static ParticipantUpdate createParticipantUpdateMsg() {
+ final ParticipantUpdate participantUpdateMsg = new ParticipantUpdate();
+ ToscaConceptIdentifier participantId = new ToscaConceptIdentifier("org.onap.PM_Policy", "1.0.0");
+ ToscaConceptIdentifier participantType = new ToscaConceptIdentifier(
+ "org.onap.policy.controlloop.PolicyControlLoopParticipant", "2.3.1");
+
+ participantUpdateMsg.setParticipantId(participantId);
+ participantUpdateMsg.setTimestamp(Instant.now());
+ participantUpdateMsg.setParticipantType(participantType);
+ participantUpdateMsg.setTimestamp(Instant.ofEpochMilli(3000));
+ participantUpdateMsg.setMessageId(UUID.randomUUID());
+
+ ToscaServiceTemplate toscaServiceTemplate = testControlLoopRead();
+
+ List<ParticipantDefinition> participantDefinitionUpdates = new ArrayList<>();
+ for (Map.Entry<String, ToscaNodeTemplate> toscaInputEntry :
+ toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates().entrySet()) {
+ if (toscaInputEntry.getValue().getType().contains(CONTROL_LOOP_ELEMENT)) {
+ ToscaConceptIdentifier clParticipantId;
+ try {
+ clParticipantId = CODER.decode(
+ toscaInputEntry.getValue().getProperties().get("participant_id").toString(),
+ ToscaConceptIdentifier.class);
+ } catch (CoderException e) {
+ throw new RuntimeException("cannot get ParticipantId from toscaNodeTemplate", e);
+ }
+ prepareParticipantDefinitionUpdate(clParticipantId, toscaInputEntry.getKey(),
+ toscaInputEntry.getValue(), participantDefinitionUpdates);
+ }
+ }
+
+ participantUpdateMsg.setParticipantDefinitionUpdates(participantDefinitionUpdates);
+ participantUpdateMsg.setToscaServiceTemplate(toscaServiceTemplate);
+ return participantUpdateMsg;
+ }
+
+ private static void prepareParticipantDefinitionUpdate(ToscaConceptIdentifier clParticipantId, String entryKey,
+ ToscaNodeTemplate entryValue, List<ParticipantDefinition> participantDefinitionUpdates) {
+
+ var clDefinition = new ControlLoopElementDefinition();
+ clDefinition.setClElementDefinitionId(new ToscaConceptIdentifier(
+ entryKey, entryValue.getVersion()));
+ clDefinition.setControlLoopElementToscaNodeTemplate(entryValue);
+ List<ControlLoopElementDefinition> controlLoopElementDefinitionList = new ArrayList<>();
+
+ if (participantDefinitionUpdates.isEmpty()) {
+ participantDefinitionUpdates.add(getParticipantDefinition(clDefinition, clParticipantId,
+ controlLoopElementDefinitionList));
+ } else {
+ boolean participantExists = false;
+ for (ParticipantDefinition participantDefinitionUpdate : participantDefinitionUpdates) {
+ if (participantDefinitionUpdate.getParticipantId().equals(clParticipantId)) {
+ participantDefinitionUpdate.getControlLoopElementDefinitionList().add(clDefinition);
+ participantExists = true;
+ }
+ }
+ if (!participantExists) {
+ participantDefinitionUpdates.add(getParticipantDefinition(clDefinition, clParticipantId,
+ controlLoopElementDefinitionList));
+ }
+ }
+ }
+
+ private static ParticipantDefinition getParticipantDefinition(ControlLoopElementDefinition clDefinition,
+ ToscaConceptIdentifier clParticipantId,
+ List<ControlLoopElementDefinition> controlLoopElementDefinitionList) {
+ ParticipantDefinition participantDefinition = new ParticipantDefinition();
+ participantDefinition.setParticipantId(clParticipantId);
+ controlLoopElementDefinitionList.add(clDefinition);
+ participantDefinition.setControlLoopElementDefinitionList(controlLoopElementDefinitionList);
+ return participantDefinition;
+ }
+
/**
* Method to create a deep copy of ControlLoopUpdateMsg.
*
diff --git a/participant/participant-impl/participant-impl-dcae/src/test/resources/parameters/TestCLParams.json b/participant/participant-impl/participant-impl-dcae/src/test/resources/parameters/TestCLParams.json
index a4258622d..5785360c8 100644
--- a/participant/participant-impl/participant-impl-dcae/src/test/resources/parameters/TestCLParams.json
+++ b/participant/participant-impl/participant-impl-dcae/src/test/resources/parameters/TestCLParams.json
@@ -136,7 +136,7 @@ topology_template:
description: Control loop element for CDS for Performance Management Subscription Handling
properties:
provider: Ericsson
- participant_Id:
+ participant_id:
name: org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant
version: 3.2.1
cds_blueprint_id:
diff --git a/participant/participant-impl/participant-impl-dcae/src/test/resources/rest/servicetemplates/pm_control_loop_tosca.yaml b/participant/participant-impl/participant-impl-dcae/src/test/resources/rest/servicetemplates/pm_control_loop_tosca.yaml
index 01f825fc9..8615bdbaa 100644
--- a/participant/participant-impl/participant-impl-dcae/src/test/resources/rest/servicetemplates/pm_control_loop_tosca.yaml
+++ b/participant/participant-impl/participant-impl-dcae/src/test/resources/rest/servicetemplates/pm_control_loop_tosca.yaml
@@ -1,452 +1,153 @@
tosca_definitions_version: tosca_simple_yaml_1_3
-capability_types:
- org.onap.EventProducer:
+data_types:
+ onap.datatypes.ToscaConceptIdentifier:
+ derived_from: tosca.datatypes.Root
properties:
- carrier_protocol_type:
+ name:
type: string
required: true
- constraints:
- - valid_values:
- - DMAAP_message_router
- - SOMETHING_ELSE
- - REST
- data_format:
+ version:
type: string
required: true
- constraints:
- - valid_values:
- - JSON
- - YAML
- - JMS
- event_format:
- type: string
- required: true
- event_format_version:
- type: string
- required: false
- config_keys:
- type: list
- required: false
- entry_schema:
- type: string
- constraints:
- - valid_values:
- - all valid values should be added here
- - if not specified, events of any config key may be generated
- - 'examples for config_key: ves-measurement, ves-syslog, tca_handle_out,
- etc.'
- version: 0.0.1
- derived_from: tosca.capabilities.Root
- org.onap.EventConsumer:
- properties:
- responding_capability:
- type: string
- required: false
- carrier_protocol_type:
- type: string
- required: true
- constraints:
- - valid_values:
- - DMAAP_message_router
- - SOMETHING_ELSE
- - REST
- data_format:
- type: string
- required: true
- constraints:
- - valid_values:
- - JSON
- - YAML
- - JMS
- - all valid values should be added here
- event_format:
- type: string
- description: 'examples for event_format: Ves_specification, LinkUp, VnfConfigured,
- etc.'
- required: true
- event_format_version:
- type: string
- description: 'examples for event_format_version: 5.28.4, 7.30.1, etc.'
- required: false
- config_keys:
- type: list
- required: false
- entry_schema:
- type: string
- constraints:
- - valid_values:
- - all valid values should be added here
- - if not specified, events of any config key may be generated
- - 'examples for config_key: ves-measurement, ves-syslog, tca_handle_out,
- etc.'
- version: 0.0.1
- derived_from: tosca.capabilities.Root
node_types:
- org.onap.DynamicConfig:
+ org.onap.policy.clamp.controlloop.Participant:
+ version: 1.0.1
+ derived_from: tosca.nodetypes.Root
properties:
- application_name:
- type: string
- description: Value used to tie the config to an application ? should we be
- using a relationship here instead?
- required: true
- application_version:
- type: string
- required: true
- application_provider:
+ provider:
type: string
- required: false
- data_types:
- type: object
- required: false
- schema:
- type: object
- required: false
- version: 0.0.1
- derived_from: tosca.nodes.Root
- org.onap.APP:
+ requred: false
+ org.onap.policy.clamp.controlloop.ControlLoopElement:
+ version: 1.0.1
+ derived_from: tosca.nodetypes.Root
properties:
- application_name:
- type: string
- description: Human readable name for the application Product
- required: false
provider:
type: string
- description: Provider of the application and of the descriptor
- required: true
- application_version:
- type: string
- description: Software version of the application
- required: true
- blueprint_id:
- type: string
- description: A reference to the app blueprint
- required: false
- monitoring_policy:
- type: string
- description: A reference to the monitoring policy
- required: false
- requirements:
- - receive:
- capability: org.onap.EventProducer
- relationship: org.onap.PropagateEvent
- occurrences:
- - 0.0
- - UNBOUNDED
- version: 0.0.0
- - send:
- capability: org.onap.EventConsumer
- relationship: org.onap.PropagateEvent
- occurrences:
- - 0.0
- - UNBOUNDED
- version: 0.0.0
- version: 0.0.1
- derived_from: tosca.nodes.Root
- org.onap.EventRelay:
+ 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:
- event_format:
- type: string
- description: 'examples for event_format: Ves_specification, etc.'
- required: true
- event_format_version:
+ provider:
type: string
- description: 'examples for event_format_version: 5.28.4, 7.30.1, etc.'
- required: true
- config_keys:
+ requred: false
+ elements:
type: list
- required: false
- entry_schema:
- type: string
- constraints:
- - valid_values:
- - all valid values should be added here
- - if not specified, events of any config key is relayed
- - 'examples for config_key: ves-measurement, ves-syslog, tca_handle_out,
- etc.'
- supported_carrier_protocols:
- type: map
- description: 'A map describing supported carrier protocols and translations.
- The tuples define what protocol combinations are supported on the producer
- and consumer side: e.g. { REST: REST, DMAAP: REST, DMAAP: DMAAP}'
- required: true
- key_schema:
- type: string
- constraints:
- - valid_values:
- - DMAAP_message_router
- - SOMETHING_ELSE
- - REST
- - all valid values should be added here
- entry_schema:
- type: string
- constraints:
- - valid_values:
- - DMAAP_message_router
- - SOMETHING_ELSE
- - REST
- - all valid values should be added here
- supported_data_formats:
- type: map
- description: 'Is a map describing supported data formats and translation.
- The tuples define what protocol combinations are supported on the producer
- and consumer side: e.g. { JSON: JSON, JMS: JSON, YAML:YAML }'
required: true
- key_schema:
- type: string
- constraints:
- - valid_values:
- - JSON
- - JMS
- - YAML
- - etc
- - all valid values should be added here
entry_schema:
- type: string
- constraints:
- - valid_values:
- - JSON
- - JMS
- - YAML
- - etc
- - all valid values should be added here
- requirements:
- - receive:
- capability: org.onap.EventProducer
- relationship: org.onap.PropagateEvent
- occurrences:
- - 0.0
- - UNBOUNDED
- version: 0.0.0
- - send:
- capability: org.onap.EventConsumer
- relationship: org.onap.PropagateEvent
- occurrences:
- - 0.0
- - UNBOUNDED
- version: 0.0.0
- version: 0.0.1
- derived_from: tosca.nodes.Root
-relationship_types:
- org.onap.PropagateEvent:
+ type: onap.datatypes.ToscaConceptIdentifier
+ org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement:
+ version: 1.0.1
+ derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
properties:
- config_keys:
- type: list
- description: The relationship type used on requirements to org.onap.EventProducer
- and org.onap.EventConsumer capabilities. Filters events by specific config_keys
- to be transferred by this relationship. That is, any event with a specific
- config_key found in the list is transferred. If list is not defined or is
- empty, events with all config_keys are transferred.
- required: false
- entry_schema:
- type: string
- version: 0.0.1
- derived_from: tosca.relationships.Root
+ dcae_blueprint_id:
+ type: onap.datatypes.ToscaConceptIdentifier
+ requred: true
+ org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement:
+ version: 1.0.1
+ derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+ properties:
+ policy_type_id:
+ type: onap.datatypes.ToscaConceptIdentifier
+ requred: true
+ 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:
- pm_subscription_topic:
- type: string
- pm_subscription_response_topic:
- type: string
- pm_subscription_handler_blueprint_id:
- type: string
- pm_subscription_operational_policy_id:
- type: string
- pm_subscription_cds_blueprint_id:
- type: string
- enable_tls:
- type: string
node_templates:
- org.onap.PM_Subscription_Handler:
- type: org.onap.APP
+ 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.ccsdk.cds.controlloop.CdsControlLoopParticipant:
+ version: 2.2.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:
- application_name: PM Subscription Handler
provider: Ericsson
- application_version: 1.0.0
- artifact_id:
- get_input: pm_subscription_handler_blueprint_id
- description: Is this a reference to the DCAE Cloudify Blueprint that is
- already stored(or will be stored before CL configuration & instatiation)
- in DCAE Inventory?
- artifact_config:
- enable_tls:
- get_input: enable_tls
- pmsh_publish_topic_name:
- get_input: pm_subscription_topic
- capabilities:
- pm-subscription-event-publisher:
- properties:
- carrier_protocol_type: DMAAP_message_router
- data_format: JSON
- event_format: pm-subscription-event-format
- event_format_version: 1.0.0
- attributes:
- type: org.onap.EventProducer
- occurrences:
- - 0.0
- - UNBOUNDED
- version: 0.0.0
- pm-subscription-event-receiver:
- properties:
- carrier_protocol_type: DMAAP_message_router
- data_format: JSON
- event_format: pm-subscription-event-response-format
- event_format_version: 1.0.0
- relationships:
- - type: tosca.relationships.DependsOn
- - description: any ideas on a better realtionship ? or is it better to
- just use the root realtionship ?
- - target: org.onap.PM_Monitoring_Policy
- attributes:
- type: org.onap.EventConsumer
- occurrences:
- - 0.0
- - UNBOUNDED
- version: 0.0.0
- version: 0.0.0
- org.onap.PM_Monitoring_Policy:
- type: org.onap.DynamicConfig
+ participant_id:
+ name: org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant
+ version: 2.3.4
+ dcae_blueprint_id:
+ name: org.onap.dcae.blueprints.PMSHBlueprint
+ version: 1.0.0
+ org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement:
+ version: 1.2.3
+ type: org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement
+ type_version: 1.0.0
+ description: Control loop element for the monitoring policy for Performance Management Subscription Handling
properties:
- application_name: PM Subscription Handler
- application_version: 1.0.0
provider: Ericsson
- data_types:
- measurementType:
- type: string
- DN:
- type: string
- nfFilter:
- properties:
- nfNames:
- type: list
- entry_schema: string
- modelInvariantIDs:
- type: list
- entry_schema:
- type: string
- modelVersionIDs:
- type: list
- entry_schema:
- type: string
- measurementGroup:
- properties:
- masurementTypes:
- type: list
- entry_schema:
- type: measurementType
- managedObjectDNsBasic:
- type: list
- entry_schema:
- type: DN
- schema:
- subscription:
- subscriptionName:
- type: string
- required: true
- administrativeState:
- type: string
- required: true
- filebasedGP:
- type: integer
- required: true
- fileLocation:
- type: string
- required: true
- nfFilter:
- type: nfFilter
- measurementGroups:
- type: list
- entry_schema:
- type: measurementGroup
- version: 0.0.0
- description: Should I be showing a dependency between PM Subscription Handler
- and the PM Monitoring Policy
- org.onap.PM_Policy:
- type: org.onap.APP
+ 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
+ org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement:
+ version: 1.2.3
+ type: org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement
+ type_version: 1.0.0
+ description: Control loop element for the operational policy for Performance Management Subscription Handling
properties:
- application_name: PM Subscription Operational Policy
provider: Ericsson
- application_version: 1.0.0
- artifact_id:
- get_input: pm_subscription_operational_policy_id
- artifact_config: NOT_DEFINED
- requirements:
- - receive_0:
- capability: pm-subscription-event-publisher
- node: org.onap.PM_Subscription_Handler
- relationship: NOT_DEFINED
- properties:
- config_keys:
- - topic_name:
- get_input: pm_subscription_topic
- version: 0.0.0
- - send_0:
- capability: cds-rest-receive
- node: org.onap.CDS
- version: 0.0.0
- - receive_1:
- capability: cds-rest-response
- node: org.onap.CDS
- version: 0.0.0
- - send_1:
- capability: pm-subscription-event-receiver
- node: org.onap.PM_Subscription_Handler
- relationship: NOT_DEFINED
- properties:
- config_keys:
- - topic_name:
- get_input: pm_subscription_response_topic
- version: 0.0.0
- capabilities:
- pm-subscription-response-event-publisher:
- properties:
- type: org.onap.EventProducer
- carrier_protocol_type: DMAAP_message_router
- data_format: JSON
- event_format: pm-subscription-event-response-format
- event_format_version: 1.0.0
- occurrences:
- - 0.0
- - UNBOUNDED
- version: 0.0.0
- version: 0.0.0
- org.onap.PM_CDS_Blueprint:
- type: org.onap.APP
+ 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
+ org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement:
+ version: 1.2.3
+ type: org.onap.policy.clamp.controlloop.ControlLoopElement
+ type_version: 1.0.0
+ description: Control loop element for CDS for Performance Management Subscription Handling
properties:
- application_name: PM Subscription CDS Blueprint
provider: Ericsson
- application_version: 1.0.0
- artifact_id:
- get_input: pm_subscription_cds_blueprint_id
- capabilities:
- cds-rest-receive:
- properties:
- type: org.onap.EventConsumer
- protocol_type: REST
- data_format: JSON
- event_format: cds_action_format
- event_format_version: 1.0.0
- responding_capability: cds-rest-response
- occurrences:
- - 0.0
- - UNBOUNDED
- version: 0.0.0
- cds-rest-response:
- properties:
- type: org.onap.EventProducer
- protocol_type: REST
- data_format: JSON
- event_format: cds_action_response_format
- event_format_version: 1.0.0
- occurrences:
- - 0.0
- version: 0.0.0
- version: 0.0.0
- org.onap.controlloop0:
- type: org.onap.APP
+ participant_id:
+ name: org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant
+ version: 3.2.1
+ cds_blueprint_id:
+ name: org.onap.ccsdk.cds.PMSHCdsBlueprint
+ version: 1.0.0
+ 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:
- application_name: Test Control Loop
provider: Ericsson
- application_version: 1.0.0
- status: NOT_DEPLOYED
- version: 0.0.0
-version: 0.0.0
+ 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
+ - name: org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement
+ version: 1.2.3