summaryrefslogtreecommitdiffstats
path: root/controlloop/common/eventmanager
diff options
context:
space:
mode:
authorjhh <jorge.hernandez-herrero@att.com>2020-02-20 18:19:36 -0600
committerjhh <jorge.hernandez-herrero@att.com>2020-02-21 12:01:01 -0600
commit43c1e8c7c820bc8004725355a4a5eb0ad519e680 (patch)
tree01efdd23c6fa7395c07e6786c103d41c83cf2ac5 /controlloop/common/eventmanager
parent5cdc0da265e1488321f88c38d9e0fb9d3626f54d (diff)
Tosca compliant vFirewall
Issue-ID: POLICY-2376 Signed-off-by: jhh <jorge.hernandez-herrero@att.com> Change-Id: I362ebbd941c400a6ffc3e952e66ca2d624afbfdd Signed-off-by: jhh <jorge.hernandez-herrero@att.com>
Diffstat (limited to 'controlloop/common/eventmanager')
-rw-r--r--controlloop/common/eventmanager/pom.xml5
-rw-r--r--controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/processor/ControlLoopProcessor.java38
-rw-r--r--controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/processor/ControlLoopProcessorTest.java14
-rw-r--r--controlloop/common/eventmanager/src/test/resources/tosca-policy-compliant-vcpe.json2
-rw-r--r--controlloop/common/eventmanager/src/test/resources/tosca-policy-compliant-vfw.json40
5 files changed, 83 insertions, 16 deletions
diff --git a/controlloop/common/eventmanager/pom.xml b/controlloop/common/eventmanager/pom.xml
index 23ac4a227..4f9bfb789 100644
--- a/controlloop/common/eventmanager/pom.xml
+++ b/controlloop/common/eventmanager/pom.xml
@@ -45,6 +45,11 @@
<scope>provided</scope>
</dependency>
<dependency>
+ <!-- less than 1.9.4 has security vulnerabilities -->
+ <groupId>commons-beanutils</groupId>
+ <artifactId>commons-beanutils</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.onap.policy.models.policy-models-interactions.model-actors</groupId>
<artifactId>actorServiceProvider</artifactId>
<version>${policy.models.version}</version>
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/processor/ControlLoopProcessor.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/processor/ControlLoopProcessor.java
index 4cff616a0..0015e4dd7 100644
--- a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/processor/ControlLoopProcessor.java
+++ b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/processor/ControlLoopProcessor.java
@@ -22,9 +22,11 @@ package org.onap.policy.controlloop.processor;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
+import java.lang.reflect.InvocationTargetException;
import java.net.URLDecoder;
import java.util.stream.Collectors;
import lombok.Getter;
+import org.apache.commons.beanutils.BeanUtils;
import org.onap.policy.common.utils.coder.CoderException;
import org.onap.policy.controlloop.ControlLoopException;
import org.onap.policy.controlloop.drl.legacy.ControlLoopParams;
@@ -39,13 +41,17 @@ import org.onap.policy.controlloop.policy.TargetType;
import org.onap.policy.drools.domain.models.DroolsPolicy;
import org.onap.policy.drools.models.domain.legacy.LegacyPolicy;
import org.onap.policy.drools.models.domain.operational.OperationalPolicy;
+import org.onap.policy.drools.models.domain.operational.OperationalTarget;
import org.onap.policy.drools.system.PolicyEngineConstants;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.CustomClassLoaderConstructor;
public class ControlLoopProcessor implements Serializable {
private static final long serialVersionUID = 1L;
+ private static final Logger logger = LoggerFactory.getLogger(ControlLoopProcessor.class);
private final ControlLoopPolicy policy;
private String currentNestedPolicyId = null;
@@ -107,6 +113,16 @@ public class ControlLoopProcessor implements Serializable {
ControlLoopPolicy.class, ControlLoopPolicy.class.getClassLoader())).load(decodedPolicy);
}
+ private Target toStandardTarget(OperationalTarget opTarget) {
+ Target target = new Target(TargetType.valueOf(opTarget.getTargetType()));
+ try {
+ BeanUtils.populate(target, opTarget.getEntityIds());
+ } catch (IllegalAccessException | InvocationTargetException e) {
+ logger.warn("target entityIds cannot be mapped (unexpected): {}", opTarget, e);
+ }
+ return target;
+ }
+
protected ControlLoopPolicy buildPolicyFromToscaCompliant(ToscaPolicy policy) throws CoderException {
OperationalPolicy domainPolicy =
PolicyEngineConstants.getManager().getDomainMaker().convertTo(policy, OperationalPolicy.class);
@@ -116,17 +132,17 @@ public class ControlLoopProcessor implements Serializable {
// @formatter:off
backwardsCompatiblePolicy.setPolicies(
domainPolicy.getProperties().getOperations().stream().map(operation -> new Policy(
- PolicyParam.builder()
- .id(operation.getId())
- .name(operation.getActorOperation().getOperation())
- .description(operation.getDescription())
- .actor(operation.getActorOperation().getActor())
- .payload(operation.getActorOperation().getPayload())
- .recipe(operation.getActorOperation().getOperation())
- .retries(operation.getRetries())
- .timeout(operation.getTimeout())
- .target(new Target(TargetType.valueOf(operation.getActorOperation().getTarget().getType()),
- operation.getActorOperation().getTarget().getResourceId())).build()))
+ PolicyParam.builder()
+ .id(operation.getId())
+ .name(operation.getActorOperation().getOperation())
+ .description(operation.getDescription())
+ .actor(operation.getActorOperation().getActor())
+ .payload(operation.getActorOperation().getPayload())
+ .recipe(operation.getActorOperation().getOperation())
+ .retries(operation.getRetries())
+ .timeout(operation.getTimeout())
+ .target(toStandardTarget(operation.getActorOperation().getTarget()))
+ .build()))
.collect(Collectors.toList()));
// @formatter:on
diff --git a/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/processor/ControlLoopProcessorTest.java b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/processor/ControlLoopProcessorTest.java
index f76c0060c..a30914781 100644
--- a/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/processor/ControlLoopProcessorTest.java
+++ b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/processor/ControlLoopProcessorTest.java
@@ -45,6 +45,7 @@ import org.slf4j.LoggerFactory;
public class ControlLoopProcessorTest {
private static final Logger logger = LoggerFactory.getLogger(ControlLoopProcessorTest.class);
+ private static final StandardCoder coder = new StandardCoder();
@Test
public void testControlLoopProcessor() throws IOException, ControlLoopException {
@@ -59,22 +60,27 @@ public class ControlLoopProcessorTest {
String policy =
new String(Files.readAllBytes(Paths.get("src/test/resources/tosca-policy-legacy-vcpe.json")));
assertNotNull(
- new ControlLoopProcessor(new StandardCoder().decode(policy, ToscaPolicy.class)).getCurrentPolicy());
+ new ControlLoopProcessor(coder.decode(policy, ToscaPolicy.class)).getCurrentPolicy());
}
@Test
public void testControlLoopFromToscaCompliant() throws IOException, CoderException, ControlLoopException {
String policy =
- new String(Files.readAllBytes(Paths.get("src/test/resources/tosca-policy-compliant-vcpe.json")));
+ new String(Files.readAllBytes(Paths.get("src/test/resources/tosca-policy-compliant-vcpe.json")));
+ assertNotNull(
+ new ControlLoopProcessor(coder.decode(policy, ToscaPolicy.class)).getCurrentPolicy());
+
+ policy =
+ new String(Files.readAllBytes(Paths.get("src/test/resources/tosca-policy-compliant-vfw.json")));
assertNotNull(
- new ControlLoopProcessor(new StandardCoder().decode(policy, ToscaPolicy.class)).getCurrentPolicy());
+ new ControlLoopProcessor(coder.decode(policy, ToscaPolicy.class)).getCurrentPolicy());
}
@Test
public void testControlLoopFromToscaCompliantBad() throws IOException, CoderException, ControlLoopException {
String policy =
new String(Files.readAllBytes(Paths.get("src/test/resources/tosca-policy-compliant-vcpe.json")));
- ToscaPolicy toscaPolicy = new StandardCoder().decode(policy, ToscaPolicy.class);
+ ToscaPolicy toscaPolicy = coder.decode(policy, ToscaPolicy.class);
toscaPolicy.setType("onap.policies.controlloop.Operational");
assertThatThrownBy(() -> new ControlLoopProcessor(toscaPolicy)).hasCauseInstanceOf(CoderException.class);
}
diff --git a/controlloop/common/eventmanager/src/test/resources/tosca-policy-compliant-vcpe.json b/controlloop/common/eventmanager/src/test/resources/tosca-policy-compliant-vcpe.json
index c01f6898c..61fb8a648 100644
--- a/controlloop/common/eventmanager/src/test/resources/tosca-policy-compliant-vcpe.json
+++ b/controlloop/common/eventmanager/src/test/resources/tosca-policy-compliant-vcpe.json
@@ -19,7 +19,7 @@
"actor": "APPC",
"operation": "Restart",
"target": {
- "type": "VM"
+ "targetType": "VM"
}
},
"timeout": 1200,
diff --git a/controlloop/common/eventmanager/src/test/resources/tosca-policy-compliant-vfw.json b/controlloop/common/eventmanager/src/test/resources/tosca-policy-compliant-vfw.json
new file mode 100644
index 000000000..c96b49c7e
--- /dev/null
+++ b/controlloop/common/eventmanager/src/test/resources/tosca-policy-compliant-vfw.json
@@ -0,0 +1,40 @@
+{
+ "type": "onap.policies.controlloop.operational.common.Drools",
+ "type_version": "1.0.0",
+ "name": "operational.modifyconfig",
+ "version": "1.0.0",
+ "metadata": {
+ "policy-id": "operational.modifyconfig"
+ },
+ "properties": {
+ "id": "ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a",
+ "timeout": 60,
+ "abatement": false,
+ "trigger": "unique-policy-id-1-modifyConfig",
+ "operations": [
+ {
+ "id": "unique-policy-id-1-modifyConfig",
+ "description": "Modify the packet generator",
+ "operation": {
+ "actor": "APPC",
+ "operation": "ModifyConfig",
+ "target": {
+ "targetType": "VNF",
+ "entityIds": {
+ "resourceID": "bbb3cefd-01c8-413c-9bdd-2b92f9ca3d38"
+ }
+ }
+ },
+ "timeout": 300,
+ "retries": 0,
+ "success": "final_success",
+ "failure": "final_failure",
+ "failure_timeout": "final_failure_timeout",
+ "failure_retries": "final_failure_retries",
+ "failure_exception": "final_failure_exception",
+ "failure_guard": "final_failure_guard"
+ }
+ ],
+ "controllerName": "usecases"
+ }
+}