Fix model_type missing 23/87223/3
authorsebdet <sebastien.determe@intl.att.com>
Wed, 8 May 2019 09:33:43 +0000 (11:33 +0200)
committersebdet <sebastien.determe@intl.att.com>
Wed, 8 May 2019 10:15:39 +0000 (12:15 +0200)
Fix model missing in some cases (new DCAE Blueprint), also removed
useless fields in MicroService Object

Issue-ID: CLAMP-370
Change-Id: Ia246b5d58309aceb3168107a4bf76b92b23add7a
Signed-off-by: sebdet <sebastien.determe@intl.att.com>
12 files changed:
src/main/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintParser.java
src/main/java/org/onap/clamp/clds/sdc/controller/installer/MicroService.java
src/main/resources/clds/camel/routes/flexible-flow.xml
src/test/java/org/onap/clamp/clds/it/sdc/controller/installer/CsarInstallerItCase.java
src/test/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintParserTest.java
src/test/java/org/onap/clamp/clds/sdc/controller/installer/ChainGeneratorTest.java
src/test/java/org/onap/clamp/clds/util/drawing/ClampGraphBuilderTest.java
src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java
src/test/resources/example/sdc/blueprint-dcae/prop-text-for-tca-2.json
src/test/resources/example/sdc/blueprint-dcae/prop-text-for-tca-3.json [new file with mode: 0644]
src/test/resources/example/sdc/blueprint-dcae/tca_2.yaml
src/test/resources/example/sdc/blueprint-dcae/tca_3.yaml

index 809904f..aca2ed0 100644 (file)
@@ -29,6 +29,7 @@ import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
 
+import java.util.AbstractMap;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
@@ -61,12 +62,12 @@ public class BlueprintParser {
     public Set<MicroService> getMicroServices(String blueprintString) {
         Set<MicroService> microServices = new HashSet<>();
         JsonObject jsonObject = BlueprintParser.convertToJson(blueprintString);
-        JsonObject results = jsonObject.get(NODE_TEMPLATES).getAsJsonObject();
+        JsonObject nodeTemplateList = jsonObject.get(NODE_TEMPLATES).getAsJsonObject();
 
-        for (Entry<String, JsonElement> entry : results.entrySet()) {
+        for (Entry<String, JsonElement> entry : nodeTemplateList.entrySet()) {
             JsonObject nodeTemplate = entry.getValue().getAsJsonObject();
             if (nodeTemplate.get(TYPE).getAsString().contains(DCAE_NODES)) {
-                MicroService microService = getNodeRepresentation(entry);
+                MicroService microService = getNodeRepresentation(entry, nodeTemplateList);
                 microServices.add(microService);
             }
         }
@@ -89,7 +90,7 @@ public class BlueprintParser {
         }
         String msName = theBiggestMicroServiceKey.toLowerCase().contains(HOLMES_PREFIX) ? HOLMES : TCA;
         return Collections
-            .singletonList(new MicroService(msName, "onap.policies.monitoring.cdap.tca.hi.lo.app", "", "", ""));
+            .singletonList(new MicroService(msName, "onap.policies.monitoring.cdap.tca.hi.lo.app", "", ""));
     }
 
     String getName(Entry<String, JsonElement> entry) {
@@ -118,8 +119,22 @@ public class BlueprintParser {
         return "";
     }
 
-    String getModelType(Entry<String, JsonElement> entry) {
+    String findModelTypeInTargetArray(JsonArray jsonArray, JsonObject nodeTemplateList) {
+        for (JsonElement elem : jsonArray) {
+            String modelType = getModelType(
+                new AbstractMap.SimpleEntry<String, JsonElement>(elem.getAsJsonObject().get(TARGET).getAsString(),
+                    nodeTemplateList.get(elem.getAsJsonObject().get(TARGET).getAsString()).getAsJsonObject()),
+                nodeTemplateList);
+            if (!modelType.isEmpty()) {
+                return modelType;
+            }
+        }
+        return "";
+    }
+
+    String getModelType(Entry<String, JsonElement> entry, JsonObject nodeTemplateList) {
         JsonObject ob = entry.getValue().getAsJsonObject();
+        // Search first in this node template
         if (ob.has(PROPERTIES)) {
             JsonObject properties = ob.get(PROPERTIES).getAsJsonObject();
             if (properties.has(POLICYID)) {
@@ -129,19 +144,18 @@ public class BlueprintParser {
                 }
             }
         }
+        // Then it's may be a relationship
+        if (ob.has(RELATIONSHIPS)) {
+            return findModelTypeInTargetArray(ob.get(RELATIONSHIPS).getAsJsonArray(), nodeTemplateList);
+        }
         return "";
     }
 
-    String getBlueprintName(Entry<String, JsonElement> entry) {
-        return entry.getKey();
-    }
-
-    MicroService getNodeRepresentation(Entry<String, JsonElement> entry) {
+    MicroService getNodeRepresentation(Entry<String, JsonElement> entry, JsonObject nodeTemplateList) {
         String name = getName(entry);
         String getInputFrom = getInput(entry);
-        String modelType = getModelType(entry);
-        String blueprintName = getBlueprintName(entry);
-        return new MicroService(name, modelType, getInputFrom, "", blueprintName);
+        String modelType = getModelType(entry, nodeTemplateList);
+        return new MicroService(name, modelType, getInputFrom, "");
     }
 
     private String getTarget(JsonObject elementObject) {
index ac4daef..9bc7a02 100644 (file)
@@ -29,16 +29,14 @@ import java.util.Objects;
 public class MicroService {
     private final String name;
     private final String modelType;
-    private final String blueprintName;
     private final String inputFrom;
     private String mappedNameJpa;
 
-    public MicroService(String name, String modelType, String inputFrom, String mappedNameJpa, String blueprintName) {
+    public MicroService(String name, String modelType, String inputFrom, String mappedNameJpa) {
         this.name = name;
         this.inputFrom = inputFrom;
         this.mappedNameJpa = mappedNameJpa;
-        this.modelType =  modelType;
-        this.blueprintName = blueprintName;
+        this.modelType = modelType;
     }
 
     public String getName() {
@@ -53,15 +51,10 @@ public class MicroService {
         return inputFrom;
     }
 
-    public String getBlueprintName() {
-        return blueprintName;
-    }
-
     @Override
     public String toString() {
         return "MicroService{" + "name='" + name + '\'' + ", modelType='" + modelType + '\'' + ", inputFrom='"
-                + inputFrom + '\'' + ", mappedNameJpa='" + mappedNameJpa + '\'' + ", blueprintName='"
-                + blueprintName + '\'' + '}';
+            + inputFrom + '\'' + ", mappedNameJpa='" + mappedNameJpa + '\'' + '}';
     }
 
     public String getMappedNameJpa() {
@@ -81,11 +74,12 @@ public class MicroService {
             return false;
         }
         MicroService that = (MicroService) o;
-        return name.equals(that.name) && modelType.equals(that.modelType) && inputFrom.equals(that.inputFrom) && mappedNameJpa.equals(that.mappedNameJpa) && blueprintName.equals(that.blueprintName);
+        return name.equals(that.name) && modelType.equals(that.modelType) && inputFrom.equals(that.inputFrom)
+            && mappedNameJpa.equals(that.mappedNameJpa);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(name, modelType, inputFrom, mappedNameJpa, blueprintName);
+        return Objects.hash(name, modelType, inputFrom, mappedNameJpa);
     }
 }
index b24525f..5f85777 100644 (file)
                <doTry>
                        <log
                                loggingLevel="INFO"
-                               message="Query Closed Loop status from policy DPD: ${exchangeProperty[loopObject].getName()}" />
+                               message="Query Closed Loop status from policy PDP: ${exchangeProperty[loopObject].getName()}" />
                        <to
                                uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Query operational policies to PDP group')" />
                        <setProperty propertyName="operationalPolicyName">
                        </setHeader>
                        <log
                                loggingLevel="INFO"
-                               message="Endpoint to query from Policy DPD: {{clamp.config.policy.pap.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/${exchangeProperty[operationalPolicyName]}/versions/deployed"></log>
+                               message="Endpoint to query from Policy PDP: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/${exchangeProperty[operationalPolicyName]}/versions/deployed"></log>
                        <toD
-                               uri="{{clamp.config.policy.pap.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/${exchangeProperty[operationalPolicyName]}/versions/deployed?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;httpClient.connectTimeout=10000&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.pap.userName}}&amp;authPassword={{clamp.config.policy.pap.password}}" />
+                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/${exchangeProperty[operationalPolicyName]}/versions/deployed?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;httpClient.connectTimeout=10000&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.pap.userName}}&amp;authPassword={{clamp.config.policy.pap.password}}" />
                        <doFinally>
                                <to uri="direct:reset-raise-http-exception-flag" />
                                <to
index 36d4eb8..e1b963c 100644 (file)
@@ -179,10 +179,9 @@ public class CsarInstallerItCase {
             ResourceFileUtil.getResourceAsStream("example/sdc/blueprint-dcae/prop-text-for-tca-2.json"),
             StandardCharsets.UTF_8), cldsModel2.getPropText(), true);
         CldsModel cldsModel3 = verifyClosedLoopModelLoadedInDb(csar, "tca_3.yaml");
-        JSONAssert.assertEquals(
-            IOUtils.toString(ResourceFileUtil.getResourceAsStream("example/sdc/blueprint-dcae/prop-text-for-tca.json"),
-                StandardCharsets.UTF_8),
-            cldsModel3.getPropText(), true);
+        JSONAssert.assertEquals(IOUtils.toString(
+            ResourceFileUtil.getResourceAsStream("example/sdc/blueprint-dcae/prop-text-for-tca-3.json"),
+            StandardCharsets.UTF_8), cldsModel3.getPropText(), true);
     }
 
     private CldsModel verifyClosedLoopModelLoadedInDb(CsarHandler csar, String artifactName)
index 211bb39..7a1f9f0 100644 (file)
@@ -142,18 +142,18 @@ public class BlueprintParserTest {
     public void getNodeRepresentationFromCompleteYaml() {
         final JsonObject jsonObject = jsonObjectBlueprintValid;
 
-        MicroService expected = new MicroService(SECOND_APPP, MODEL_TYPE1, FIRST_APPP, "", SECOND_APPP);
+        MicroService expected = new MicroService(SECOND_APPP, MODEL_TYPE1, FIRST_APPP, "");
         Entry<String, JsonElement> entry = jsonObject.entrySet().iterator().next();
-        MicroService actual = new BlueprintParser().getNodeRepresentation(entry);
+        MicroService actual = new BlueprintParser().getNodeRepresentation(entry, jsonObject);
 
         Assert.assertEquals(expected, actual);
     }
 
     @Test
     public void getMicroServicesFromBlueprintTest() {
-        MicroService thirdApp = new MicroService(THIRD_APPP, MODEL_TYPE3, "", "", THIRD_APPP);
-        MicroService firstApp = new MicroService(FIRST_APPP, MODEL_TYPE1, THIRD_APPP, "", FIRST_APPP);
-        MicroService secondApp = new MicroService(SECOND_APPP, MODEL_TYPE2, FIRST_APPP, "", SECOND_APPP);
+        MicroService thirdApp = new MicroService(THIRD_APPP, MODEL_TYPE3, "", "");
+        MicroService firstApp = new MicroService(FIRST_APPP, MODEL_TYPE1, THIRD_APPP, "");
+        MicroService secondApp = new MicroService(SECOND_APPP, MODEL_TYPE2, FIRST_APPP, "");
 
         Set<MicroService> expected = new HashSet<>(Arrays.asList(firstApp, secondApp, thirdApp));
         Set<MicroService> actual = new BlueprintParser().getMicroServices(microServiceTheWholeBlueprintValid);
@@ -164,7 +164,7 @@ public class BlueprintParserTest {
     @Test
     public void fallBackToOneMicroServiceTCATest() {
         MicroService tcaMS = new MicroService(BlueprintParser.TCA, "onap.policies.monitoring.cdap.tca.hi.lo.app", "",
-            "", "");
+            "");
 
         List<MicroService> expected = Collections.singletonList(tcaMS);
         List<MicroService> actual = new BlueprintParser().fallbackToOneMicroService(microServiceBlueprintOldStyleTCA);
@@ -175,7 +175,7 @@ public class BlueprintParserTest {
     @Test
     public void fallBackToOneMicroServiceHolmesTest() {
         MicroService holmesMS = new MicroService(BlueprintParser.HOLMES, "onap.policies.monitoring.cdap.tca.hi.lo.app",
-            "", "", "");
+            "", "");
 
         List<MicroService> expected = Collections.singletonList(holmesMS);
         List<MicroService> actual = new BlueprintParser()
index 1eb66ea..4b41ee8 100644 (file)
@@ -38,10 +38,10 @@ public class ChainGeneratorTest {
 
     @Test
     public void getChainOfMicroServicesTest() {
-        MicroService ms1 = new MicroService(FIRST_APPP, "", "", "", "");
-        MicroService ms2 = new MicroService(SECOND_APPP, "", FIRST_APPP, "", "");
-        MicroService ms3 = new MicroService(THIRD_APPP, "", SECOND_APPP, "", "");
-        MicroService ms4 = new MicroService(FOURTH_APPP, "", THIRD_APPP, "", "");
+        MicroService ms1 = new MicroService(FIRST_APPP, "", "", "");
+        MicroService ms2 = new MicroService(SECOND_APPP, "", FIRST_APPP, "");
+        MicroService ms3 = new MicroService(THIRD_APPP, "", SECOND_APPP, "");
+        MicroService ms4 = new MicroService(FOURTH_APPP, "", THIRD_APPP, "");
 
         List<MicroService> expectedList = Arrays.asList(ms1, ms2, ms3, ms4);
         Set<MicroService> inputSet = new HashSet<>(expectedList);
@@ -52,10 +52,10 @@ public class ChainGeneratorTest {
 
     @Test
     public void getChainOfMicroServicesTwiceNoInputTest() {
-        MicroService ms1 = new MicroService(FIRST_APPP, "", "", "", "");
-        MicroService ms2 = new MicroService(SECOND_APPP, "", "", "", "");
-        MicroService ms3 = new MicroService(THIRD_APPP, "", SECOND_APPP, "", "");
-        MicroService ms4 = new MicroService(FOURTH_APPP, "", FIRST_APPP, "", "");
+        MicroService ms1 = new MicroService(FIRST_APPP, "", "", "");
+        MicroService ms2 = new MicroService(SECOND_APPP, "", "", "");
+        MicroService ms3 = new MicroService(THIRD_APPP, "", SECOND_APPP, "");
+        MicroService ms4 = new MicroService(FOURTH_APPP, "", FIRST_APPP, "");
 
         Set<MicroService> inputSet = new HashSet<>(Arrays.asList(ms1, ms2, ms3, ms4));
         List<MicroService> actualList = new ChainGenerator().getChainOfMicroServices(inputSet);
@@ -64,10 +64,10 @@ public class ChainGeneratorTest {
 
     @Test
     public void getChainOfMicroServicesBranchingTest() {
-        MicroService ms1 = new MicroService(FIRST_APPP, "", "", "", "");
-        MicroService ms2 = new MicroService(SECOND_APPP, "", FIRST_APPP, "", "");
-        MicroService ms3 = new MicroService(THIRD_APPP, "", FIRST_APPP, "", "");
-        MicroService ms4 = new MicroService(FOURTH_APPP, "", FIRST_APPP, "", "");
+        MicroService ms1 = new MicroService(FIRST_APPP, "", "", "");
+        MicroService ms2 = new MicroService(SECOND_APPP, "", FIRST_APPP, "");
+        MicroService ms3 = new MicroService(THIRD_APPP, "", FIRST_APPP, "");
+        MicroService ms4 = new MicroService(FOURTH_APPP, "", FIRST_APPP, "");
 
         Set<MicroService> inputSet = new HashSet<>(Arrays.asList(ms1, ms2, ms3, ms4));
         List<MicroService> actualList = new ChainGenerator().getChainOfMicroServices(inputSet);
index 5eb664f..ff6e1b5 100644 (file)
@@ -56,8 +56,8 @@ public class ClampGraphBuilderTest {
     @Test
     public void clampGraphBuilderCompleteChainTest() {
         String collector = "VES";
-        MicroService ms1 = new MicroService("ms1", "", "", "ms1_jpa_id", "");
-        MicroService ms2 = new MicroService("ms2", "", "", "ms2_jpa_id", "");
+        MicroService ms1 = new MicroService("ms1", "", "", "ms1_jpa_id");
+        MicroService ms2 = new MicroService("ms2", "", "", "ms2_jpa_id");
 
         String policy = "OperationalPolicy";
         List<MicroService> microServices = Arrays.asList(ms1, ms2);
@@ -76,8 +76,8 @@ public class ClampGraphBuilderTest {
     @Test(expected = InvalidStateException.class)
     public void clampGraphBuilderNoPolicyGivenTest() {
         String collector = "VES";
-        MicroService ms1 = new MicroService("ms1", "", "", "ms1_jpa_id", "");
-        MicroService ms2 = new MicroService("ms2", "", "", "ms2_jpa_id", "");
+        MicroService ms1 = new MicroService("ms1", "", "", "ms1_jpa_id");
+        MicroService ms2 = new MicroService("ms2", "", "", "ms2_jpa_id");
 
         ClampGraphBuilder clampGraphBuilder = new ClampGraphBuilder(mockPainter);
         clampGraphBuilder.collector(collector).addMicroService(ms1).addMicroService(ms2).build();
index 3bf8500..cd6db68 100644 (file)
@@ -51,6 +51,7 @@ import org.onap.clamp.clds.sdc.controller.installer.CsarHandler;
 import org.onap.clamp.clds.sdc.controller.installer.CsarInstaller;
 import org.onap.clamp.clds.util.JsonUtils;
 import org.onap.clamp.clds.util.ResourceFileUtil;
+import org.onap.clamp.policy.microservice.MicroServicePolicy;
 import org.onap.sdc.api.notification.IArtifactInfo;
 import org.onap.sdc.api.notification.INotificationData;
 import org.onap.sdc.api.notification.IResourceInstance;
@@ -206,6 +207,17 @@ public class CsarInstallerItCase {
         assertThat(loop.getModelPropertiesJson().get("resourceDetails")).isNotNull();
         JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/model-properties.json"),
             JsonUtils.GSON.toJson(loop.getModelPropertiesJson()), true);
+        assertThat(((MicroServicePolicy) (loop.getMicroServicePolicies().toArray()[0])).getModelType()).isNotEmpty();
+
+        loop = loopsRepo
+            .findById(Loop.generateLoopName(generatedName, "1.0", RESOURCE_INSTANCE_NAME_RESOURCE1, "tca_3.yaml"))
+            .get();
+        assertThat(((MicroServicePolicy) (loop.getMicroServicePolicies().toArray()[0])).getModelType()).isNotEmpty();
+
+        loop = loopsRepo
+            .findById(Loop.generateLoopName(generatedName, "1.0", RESOURCE_INSTANCE_NAME_RESOURCE2, "tca_2.yaml"))
+            .get();
+        assertThat(((MicroServicePolicy) (loop.getMicroServicePolicies().toArray()[0])).getModelType()).isNotEmpty();
     }
 
 }
index 41ca2de..d7a5416 100644 (file)
                {
                        "name": "deployParameters",
                        "value": {
-                               "dh_override": "component_dockerhost",
-                               "dh_location_id": "zone1",
-                               "aaiEnrichmentHost": "none",
-                               "aaiEnrichmentPort": 8443,
-                               "enableAAIEnrichment": false,
-                               "dmaap_host": "dmaap.onap-message-router",
-                               "dmaap_port": 3904,
+                               "aaiEnrichmentHost": "aai.onap.svc.cluster.local",
+                               "aaiEnrichmentPort": "8443",
+                               "enableAAIEnrichment": true,
+                               "dmaap_host": "message-router.onap",
+                               "dmaap_port": "3904",
                                "enableRedisCaching": false,
-                               "redisHosts": "",
-                               "tag_version": "nexus3.onap.org:10001/onap//onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.0.0",
-                               "consul_host": "consul-server.onap-consul",
+                               "redisHosts": "dcae-redis.onap.svc.cluster.local:6379",
+                               "tag_version": "nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1",
+                               "consul_host": "consul-server.onap",
                                "consul_port": "8500",
-                               "cbs_host": "config-binding-service.dcae",
+                               "cbs_host": "config-binding-servicel",
                                "cbs_port": "10000",
-                               "external_port": "32010",
+                               "external_port": "32012",
+                               "policy_model_id": "onap.policies.monitoring.cdap.tca.hi.lo.app",
                                "policy_id": "AUTO_GENERATED_POLICY_ID_AT_SUBMIT"
                        }
                }
        ]
-}
+}
\ No newline at end of file
diff --git a/src/test/resources/example/sdc/blueprint-dcae/prop-text-for-tca-3.json b/src/test/resources/example/sdc/blueprint-dcae/prop-text-for-tca-3.json
new file mode 100644 (file)
index 0000000..f8f5316
--- /dev/null
@@ -0,0 +1,47 @@
+{
+       "global": [
+               {
+                       "name": "service",
+                       "value": [
+                               "4cc5b45a-1f63-4194-8100-cd8e14248c92"
+                       ]
+               },
+               {
+                       "name": "vf",
+                       "value": [
+                               "07e266fc-49ab-4cd7-8378-ca4676f1b9ec"
+                       ]
+               },
+               {
+                       "name": "actionSet",
+                       "value": [
+                               "vnfRecipe"
+                       ]
+               },
+               {
+                       "name": "location",
+                       "value": [
+                               "DC1"
+                       ]
+               },
+               {
+                       "name": "deployParameters",
+                       "value": {
+                               "aaiEnrichmentHost": "aai.onap.svc.cluster.local",
+                               "aaiEnrichmentPort": "8443",
+                               "enableAAIEnrichment": true,
+                               "dmaap_host": "message-router.onap.svc.cluster.local",
+                               "dmaap_port": "3904",
+                               "enableRedisCaching": false,
+                               "redisHosts": "dcae-redis.onap.svc.cluster.local:6379",
+                               "tag_version": "nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest",
+                               "consul_host": "consul-server.onap.svc.cluster.local",
+                               "consul_port": "8500",
+                               "cbs_host": "config-binding-service.dcae.svc.cluster.local",
+                               "cbs_port": "10000",
+                               "external_port": "32012",
+                               "policy_id": "AUTO_GENERATED_POLICY_ID_AT_SUBMIT"
+                       }
+               }
+       ]
+}
\ No newline at end of file
index c834b1b..56ae32a 100644 (file)
@@ -1,76 +1,92 @@
+#
+# ============LICENSE_START====================================================
+# =============================================================================
+# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.
+# =============================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END======================================================
+
 tosca_definitions_version: cloudify_dsl_1_3
-imports:
-  - "http://www.getcloudify.org/spec/cloudify/3.4/types.yaml"
-  - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R2/dockerplugin/3.2.0/dockerplugin_types.yaml
-  - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R2/relationshipplugin/1.0.0/relationshipplugin_types.yaml
-  - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R2/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml
 
+description: >
+  This blueprint deploys/manages the TCA module as a Docker container
+
+imports:
+  - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml
+  - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml
+#  - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml
+  - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/clamppolicyplugin/1.0.0/clamppolicyplugin_types.yaml
 inputs:
-  dh_override:
-    type: string
-    default: "component_dockerhost"
-  dh_location_id:
-    type: string
-    default: "zone1"
   aaiEnrichmentHost:
     type: string
-    default: "none"
+    default: "aai.onap.svc.cluster.local"
   aaiEnrichmentPort:
-    type: string    
-    default: 8443
+    type: string
+    default: "8443"
   enableAAIEnrichment:
     type: string
-    default: false
+    default: true
   dmaap_host:
     type: string
-    default: dmaap.onap-message-router   
+    default: message-router.onap
   dmaap_port:
     type: string
-    default: 3904    
+    default: "3904"
   enableRedisCaching:
     type: string
-    default: false    
+    default: false
   redisHosts:
-    type: string      
+    type: string
+    default: dcae-redis.onap.svc.cluster.local:6379
   tag_version:
     type: string
-    default: "nexus3.onap.org:10001/onap//onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.0.0"
+    default: "nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1"
   consul_host:
     type: string
-    default: consul-server.onap-consul
+    default: consul-server.onap
   consul_port:
     type: string
     default: "8500"
   cbs_host:
     type: string
-    default: "config-binding-service.dcae"
+    default: "config-binding-servicel"
   cbs_port:
     type: string
     default: "10000"
   policy_id:
     type: string
-    default: "none"
+    default: "onap.restart.tca"
   external_port:
     type: string
-    description: "Port for CDAPgui to be exposed"
-    default: "32010"
-
+    description: Kubernetes node port on which CDAPgui is exposed
+    default: "32012"
+  policy_model_id:
+    type: string
+    default: "onap.policies.monitoring.cdap.tca.hi.lo.app"
 node_templates:
-  docker_service_host:
-    properties:
-      docker_host_override:
-        get_input: dh_override
-      location_id:
-        get_input: dh_location_id
-    type: dcae.nodes.SelectedDockerHost
-  tca_docker:
+  tca_k8s:
+    type: dcae.nodes.ContainerizedServiceComponent
     relationships:
-       - type: dcae.relationships.component_contained_in
-         target: docker_service_host
-       - target: tca_policy
-         type: cloudify.relationships.depends_on        
-    type: dcae.nodes.DockerContainerForComponentsUsingDmaap
+      - target: tca_policy
+        type: cloudify.relationships.depends_on
     properties:
+        service_component_type: 'dcaegen2-analytics-tca'
+        application_config: {}
+        docker_config: {}
+        image:
+          get_input: tag_version
+        log_info:
+          log_directory: "/opt/app/TCAnalytics/logs"
         application_config:
             app_config:
                 appDescription: DCAE Analytics Threshold Crossing Alert Application
@@ -84,87 +100,75 @@ node_templates:
                 tcaVESMessageStatusTableTTLSeconds: '86400'
                 thresholdCalculatorFlowletInstances: '2'
             app_preferences:
-                aaiEnrichmentHost: 
+                aaiEnrichmentHost:
                     get_input: aaiEnrichmentHost
                 aaiEnrichmentIgnoreSSLCertificateErrors: 'true'
                 aaiEnrichmentPortNumber: '8443'
                 aaiEnrichmentProtocol: https
-                aaiEnrichmentUserName: DCAE
-                aaiEnrichmentUserPassword: DCAE
+                aaiEnrichmentUserName: dcae@dcae.onap.org
+                aaiEnrichmentUserPassword: demo123456!
                 aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query
                 aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf
-                enableAAIEnrichment: 
+                enableAAIEnrichment:
                     get_input: enableAAIEnrichment
-                enableRedisCaching: 
+                enableRedisCaching:
                     get_input: enableRedisCaching
-                redisHosts: 
+                redisHosts:
                     get_input: redisHosts
                 enableAlertCEFFormat: 'false'
                 publisherContentType: application/json
-                publisherHostName: 
+                publisherHostName:
                     get_input: dmaap_host
-                publisherHostPort: 
-                    get_input: dmaap_port                  
+                publisherHostPort:
+                    get_input: dmaap_port
                 publisherMaxBatchSize: '1'
                 publisherMaxRecoveryQueueSize: '100000'
                 publisherPollingInterval: '20000'
                 publisherProtocol: http
                 publisherTopicName: unauthenticated.DCAE_CL_OUTPUT
-                subscriberConsumerGroup: OpenDCAE-c12
+                subscriberConsumerGroup: OpenDCAE-clamp
                 subscriberConsumerId: c12
                 subscriberContentType: application/json
-                subscriberHostName: 
+                subscriberHostName:
                     get_input: dmaap_host
                 subscriberHostPort:
-                    get_input: dmaap_port                                  
+                    get_input: dmaap_port
                 subscriberMessageLimit: '-1'
                 subscriberPollingInterval: '30000'
                 subscriberProtocol: http
                 subscriberTimeoutMS: '-1'
-                subscriberTopicName: unauthenticated.SEC_MEASUREMENT_OUTPUT
-                tca_policy_default: '{"domain":"measurementsForVfScaling","metricsPerEventName":[{"eventName":"vFirewallBroadcastPackets","controlLoopSchemaType":"VNF","policyScope":"DCAE","policyName":"DCAE.Config_tca-hi-lo","policyVersion":"v0.0.1","thresholds":[{"closedLoopControlName":"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.vNicUsageArray[*].receivedTotalPacketsDelta","thresholdValue":300,"direction":"LESS_OR_EQUAL","severity":"MAJOR","closedLoopEventStatus":"ONSET"},{"closedLoopControlName":"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.vNicUsageArray[*].receivedTotalPacketsDelta","thresholdValue":700,"direction":"GREATER_OR_EQUAL","severity":"CRITICAL","closedLoopEventStatus":"ONSET"}]},{"eventName":"vLoadBalancer","controlLoopSchemaType":"VM","policyScope":"DCAE","policyName":"DCAE.Config_tca-hi-lo","policyVersion":"v0.0.1","thresholds":[{"closedLoopControlName":"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.vNicUsageArray[*].receivedTotalPacketsDelta","thresholdValue":300,"direction":"GREATER_OR_EQUAL","severity":"CRITICAL","closedLoopEventStatus":"ONSET"}]},{"eventName":"Measurement_vGMUX","controlLoopSchemaType":"VNF","policyScope":"DCAE","policyName":"DCAE.Config_tca-hi-lo","policyVersion":"v0.0.1","thresholds":[{"closedLoopControlName":"ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value","thresholdValue":0,"direction":"EQUAL","severity":"MAJOR","closedLoopEventStatus":"ABATED"},{"closedLoopControlName":"ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value","thresholdValue":0,"direction":"GREATER","severity":"CRITICAL","closedLoopEventStatus":"ONSET"}]}]}'
-        service_component_type: dcaegen2-analytics_tca    
-        docker_config:
-            healthcheck:
-               endpoint: /healthcheck
-               interval: 15s
-               timeout: 1s
-               type: http
-        image:
-            get_input: tag_version        
+                subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT
+#                tca_policy: '{"domain":"measurementsForVfScaling","metricsPerEventName":[{"eventName":"vFirewallBroadcastPackets","controlLoopSchemaType":"VNF","policyScope":"DCAE","policyName":"DCAE.Config_tca-hi-lo","policyVersion":"v0.0.1","thresholds":[{"closedLoopControlName":"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta","thresholdValue":300,"direction":"LESS_OR_EQUAL","severity":"MAJOR","closedLoopEventStatus":"ONSET"},{"closedLoopControlName":"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta","thresholdValue":700,"direction":"GREATER_OR_EQUAL","severity":"CRITICAL","closedLoopEventStatus":"ONSET"}]},{"eventName":"vLoadBalancer","controlLoopSchemaType":"VM","policyScope":"DCAE","policyName":"DCAE.Config_tca-hi-lo","policyVersion":"v0.0.1","thresholds":[{"closedLoopControlName":"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta","thresholdValue":300,"direction":"GREATER_OR_EQUAL","severity":"CRITICAL","closedLoopEventStatus":"ONSET"}]},{"eventName":"Measurement_vGMUX","controlLoopSchemaType":"VNF","policyScope":"DCAE","policyName":"DCAE.Config_tca-hi-lo","policyVersion":"v0.0.1","thresholds":[{"closedLoopControlName":"ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value","thresholdValue":0,"direction":"EQUAL","severity":"MAJOR","closedLoopEventStatus":"ABATED"},{"closedLoopControlName":"ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value","thresholdValue":0,"direction":"GREATER","severity":"CRITICAL","closedLoopEventStatus":"ONSET"}]}]}'
+        service_component_type: dcaegen2-analytics_tca
     interfaces:
       cloudify.interfaces.lifecycle:
         start:
           inputs:
             envs:
-                DMAAPHOST: 
+                DMAAPHOST:
                     { get_input: dmaap_host }
                 DMAAPPORT:
                     { get_input: dmaap_port }
                 DMAAPPUBTOPIC: "unauthenticated.DCAE_CL_OUTPUT"
-                DMAAPSUBTOPIC: "unauthenticated.SEC_MEASUREMENT_OUTPUT"
-                AAIHOST: 
+                DMAAPSUBTOPIC: "unauthenticated.VES_MEASUREMENT_OUTPUT"
+                AAIHOST:
                     { get_input: aaiEnrichmentHost }
-                AAIPORT: 
+                AAIPORT:
                     { get_input: aaiEnrichmentPort }
-                CONSUL_HOST: 
+                CONSUL_HOST:
                     { get_input: consul_host }
-                CONSUL_PORT: 
+                CONSUL_PORT:
                     { get_input: consul_port }
-                CBS_HOST: 
+                CBS_HOST:
                     { get_input: cbs_host }
-                CBS_PORT: 
+                CBS_PORT:
                     { get_input: cbs_port }
-                CONFIG_BINDING_SERVICE: "config_binding_service"                
+                CONFIG_BINDING_SERVICE: "config_binding_service"
             ports:
-              - concat: ["11011:", { get_input: external_port }]        
-        stop:
-          inputs:
-            cleanup_image: true              
+              - concat: ["11011:", { get_input: external_port }]
   tca_policy:
-    type: dcae.nodes.policy
+    type: clamp.nodes.policy
     properties:
       policy_id:
            get_input: policy_id
            policy_type_id: onap.policies.monitoring.cdap.tca.hi.lo.app
-
index edaa0be..53cfc4f 100644 (file)
 tosca_definitions_version: cloudify_dsl_1_3
+
+description: >
+  This blueprint deploys/manages the TCA module as a Docker container
+
 imports:
-- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml
-- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml
-- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml
-- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml
+  - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml
+  - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml
+  - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml
 inputs:
-  location_id:
+  aaiEnrichmentHost:
     type: string
-  service_id:
+    default: "aai.onap.svc.cluster.local"
+  aaiEnrichmentPort:
     type: string
+    default: "8443"
+  enableAAIEnrichment:
+    type: string
+    default: true
+  dmaap_host:
+    type: string
+    default: message-router.onap.svc.cluster.local
+  dmaap_port:
+    type: string
+    default: "3904"
+  enableRedisCaching:
+    type: string
+    default: false
+  redisHosts:
+    type: string
+    default: dcae-redis.onap.svc.cluster.local:6379
+  tag_version:
+    type: string
+    default: "nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest"
+  consul_host:
+    type: string
+    default: consul-server.onap.svc.cluster.local
+  consul_port:
+    type: string
+    default: "8500"
+  cbs_host:
+    type: string
+    default: "config-binding-service.dcae.svc.cluster.local"
+  cbs_port:
+    type: string
+    default: "10000"
   policy_id:
     type: string
+    default: "none"
+  external_port:
+    type: string
+    description: Kubernetes node port on which CDAPgui is exposed
+    default: "32012"
+
 node_templates:
-  policy_0:
-    type: dcae.nodes.policy
-    properties:
-      policy_id: 
-        get_input: policy_id
-        policy_type_id: onap.policies.monitoring.cdap.tca.hi.lo.app
-  cdap_host_host:
-    type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure
-    properties:
-      location_id:
-        get_input: location_id
-      scn_override: cdap_broker.solutioning-central.dcae.onap.org
-    interfaces:
-      cloudify.interfaces.lifecycle: {
-        }
-  tca_tca:
-    type: dcae.nodes.MicroService.cdap
-    properties:
-      app_config:
-        appDescription: DCAE Analytics Threshold Crossing Alert Application
-        appName: dcae-tca
-        tcaSubscriberOutputStreamName: TCASubscriberOutputStream
-        tcaVESAlertsTableName: TCAVESAlertsTable
-        tcaVESAlertsTableTTLSeconds: '1728000'
-        tcaVESMessageStatusTableName: TCAVESMessageStatusTable
-        tcaVESMessageStatusTableTTLSeconds: '86400'
-        thresholdCalculatorFlowletInstances: '2'
-      app_preferences:
-        publisherContentType: application/json
-        publisherHostName: mrlocal-mtnjftle01.onap.org
-        publisherHostPort: '3905'
-        publisherMaxBatchSize: '10'
-        publisherMaxRecoveryQueueSize: '100000'
-        publisherPollingInterval: '20000'
-        publisherProtocol: https
-        publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub
-        publisherUserName: test@tca.af.dcae.onap.org
-        publisherUserPassword: password
-        subscriberConsumerGroup: OpenDCAE-c12
-        subscriberConsumerId: c12
-        subscriberContentType: application/json
-        subscriberHostName: mrlocal-mtnjftle01.onap.org
-        subscriberHostPort: '3905'
-        subscriberMessageLimit: '-1'
-        subscriberPollingInterval: '20000'
-        subscriberProtocol: https
-        subscriberTimeoutMS: '-1'
-        subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub
-        subscriberUserName: test@tca.af.dcae.onap.org
-        subscriberUserPassword: password
-        tca_policy: null
-      artifact_name: dcae-analytics-tca
-      artifact_version: 1.0.0
-      connections:
-        streams_publishes: [
-          ]
-        streams_subscribes: [
-          ]
-      jar_url: http://somejar
-      location_id:
-        get_input: location_id
-      namespace: cdap_tca_hi_lo
-      programs:
-      - program_id: TCAVESCollectorFlow
-        program_type: flows
-      - program_id: TCADMaaPMRSubscriberWorker
-        program_type: workers
-      - program_id: TCADMaaPMRPublisherWorker
-        program_type: workers
-      service_component_type: cdap_app_tca
-      service_id:
-        get_input: service_id
-      streamname: TCASubscriberOutputStream
+  tca_k8s:
+    type: dcae.nodes.ContainerizedServiceComponent
     relationships:
-    - target: topic0
-      type: dcae.relationships.subscribe_to_events
-    - target: topic1
-      type: dcae.relationships.publish_events
-    - target: cdap_host_host
-      type: dcae.relationships.component_contained_in
-    - target: policy_0
-      type: dcae.relationships.depends_on
-  topic0:
-    type: dcae.nodes.Topic
+      - target: tca_policy
+        type: cloudify.relationships.depends_on
     properties:
-      topic_name: ''
-  topic1:
-    type: dcae.nodes.Topic
+        service_component_type: 'dcaegen2-analytics-tca'
+        application_config: {}
+        docker_config: {}
+        image:
+          get_input: tag_version
+        log_info:
+          log_directory: "/opt/app/TCAnalytics/logs"
+        application_config:
+            app_config:
+                appDescription: DCAE Analytics Threshold Crossing Alert Application
+                appName: dcae-tca
+                tcaAlertsAbatementTableName: TCAAlertsAbatementTable
+                tcaAlertsAbatementTableTTLSeconds: '1728000'
+                tcaSubscriberOutputStreamName: TCASubscriberOutputStream
+                tcaVESAlertsTableName: TCAVESAlertsTable
+                tcaVESAlertsTableTTLSeconds: '1728000'
+                tcaVESMessageStatusTableName: TCAVESMessageStatusTable
+                tcaVESMessageStatusTableTTLSeconds: '86400'
+                thresholdCalculatorFlowletInstances: '2'
+            app_preferences:
+                aaiEnrichmentHost:
+                    get_input: aaiEnrichmentHost
+                aaiEnrichmentIgnoreSSLCertificateErrors: 'true'
+                aaiEnrichmentPortNumber: '8443'
+                aaiEnrichmentProtocol: https
+                aaiEnrichmentUserName: dcae@dcae.onap.org
+                aaiEnrichmentUserPassword: demo123456!
+                aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query
+                aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf
+                enableAAIEnrichment:
+                    get_input: enableAAIEnrichment
+                enableRedisCaching:
+                    get_input: enableRedisCaching
+                redisHosts:
+                    get_input: redisHosts
+                enableAlertCEFFormat: 'false'
+                publisherContentType: application/json
+                publisherHostName:
+                    get_input: dmaap_host
+                publisherHostPort:
+                    get_input: dmaap_port
+                publisherMaxBatchSize: '1'
+                publisherMaxRecoveryQueueSize: '100000'
+                publisherPollingInterval: '20000'
+                publisherProtocol: http
+                publisherTopicName: unauthenticated.DCAE_CL_OUTPUT
+                subscriberConsumerGroup: OpenDCAE-c12
+                subscriberConsumerId: c12
+                subscriberContentType: application/json
+                subscriberHostName:
+                    get_input: dmaap_host
+                subscriberHostPort:
+                    get_input: dmaap_port
+                subscriberMessageLimit: '-1'
+                subscriberPollingInterval: '30000'
+                subscriberProtocol: http
+                subscriberTimeoutMS: '-1'
+                subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT
+                tca_policy: ''
+        service_component_type: dcaegen2-analytics_tca
+    interfaces:
+      cloudify.interfaces.lifecycle:
+        start:
+          inputs:
+            envs:
+                DMAAPHOST:
+                    { get_input: dmaap_host }
+                DMAAPPORT:
+                    { get_input: dmaap_port }
+                DMAAPPUBTOPIC: "unauthenticated.DCAE_CL_OUTPUT"
+                DMAAPSUBTOPIC: "unauthenticated.VES_MEASUREMENT_OUTPUT"
+                AAIHOST:
+                    { get_input: aaiEnrichmentHost }
+                AAIPORT:
+                    { get_input: aaiEnrichmentPort }
+                CONSUL_HOST:
+                    { get_input: consul_host }
+                CONSUL_PORT:
+                    { get_input: consul_port }
+                CBS_HOST:
+                    { get_input: cbs_host }
+                CBS_PORT:
+                    { get_input: cbs_port }
+                CONFIG_BINDING_SERVICE: "config_binding_service"
+            ports:
+              - concat: ["11011:", { get_input: external_port }]
+  tca_policy:
+    type: dcae.nodes.policy
     properties:
-      topic_name: ''
-      
+      policy_id:
+           get_input: policy_id
+           policy_type_id: onap.policies.monitoring.cdap.tca.hi.lo.app