aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorxuegao <xg353y@intl.att.com>2020-01-27 12:10:32 +0100
committersebdet <sebastien.determe@intl.att.com>2020-01-30 11:38:52 +0100
commit9e01ce3b97e602fa7236bd9bc8a484807382f83b (patch)
tree472e202175f5de03c7b46b82f7a288ee3961085b
parentf332e2e4ce3d8de200fd90076f6d4da8bdade2d6 (diff)
Update deploy-loop route
Update deploy-loop to support multiple blueprint deployments Issue-ID: CLAMP-571 Change-Id: If98e9305c36a01f86a522db002174f92f6ff5996 Signed-off-by: xuegao <xg353y@intl.att.com>
-rw-r--r--extra/sql/bulkload/create-tables.sql3
-rw-r--r--src/main/java/org/onap/clamp/loop/LoopController.java8
-rw-r--r--src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java23
-rw-r--r--src/main/java/org/onap/clamp/loop/template/LoopElementModel.java8
-rw-r--r--src/main/java/org/onap/clamp/loop/template/LoopTemplate.java2
-rw-r--r--src/main/java/org/onap/clamp/loop/template/PolicyModel.java6
-rw-r--r--src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java22
-rw-r--r--src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java33
-rw-r--r--src/main/resources/clds/camel/routes/dcae-flows.xml102
-rw-r--r--src/test/java/org/onap/clamp/loop/DcaeComponentTest.java3
-rw-r--r--src/test/java/org/onap/clamp/loop/DeployFlowTestItCase.java138
-rw-r--r--src/test/resources/clds/camel/routes/dcae-flows.xml184
12 files changed, 508 insertions, 24 deletions
diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql
index 2e626b6a..352b6617 100644
--- a/extra/sql/bulkload/create-tables.sql
+++ b/extra/sql/bulkload/create-tables.sql
@@ -57,7 +57,7 @@
created_timestamp datetime(6) not null,
updated_by varchar(255),
updated_timestamp datetime(6) not null,
- blueprint_yaml MEDIUMTEXT not null,
+ blueprint_yaml MEDIUMTEXT,
maximum_instances_allowed integer,
svg_representation MEDIUMTEXT,
service_uuid varchar(255),
@@ -112,6 +112,7 @@
json_representation json not null,
pdp_group varchar(255),
context varchar(255),
+ dcae_blueprint_id varchar(255),
dcae_deployment_id varchar(255),
dcae_deployment_status_url varchar(255),
device_type_scope varchar(255),
diff --git a/src/main/java/org/onap/clamp/loop/LoopController.java b/src/main/java/org/onap/clamp/loop/LoopController.java
index 64874a32..c161c550 100644
--- a/src/main/java/org/onap/clamp/loop/LoopController.java
+++ b/src/main/java/org/onap/clamp/loop/LoopController.java
@@ -40,10 +40,10 @@ import org.springframework.stereotype.Controller;
public class LoopController {
private final LoopService loopService;
- private static final Type OPERATIONAL_POLICY_TYPE = new TypeToken<List<OperationalPolicy>>() {
- }.getType();
- private static final Type MICROSERVICE_POLICY_TYPE = new TypeToken<List<MicroServicePolicy>>() {
- }.getType();
+ private static final Type OPERATIONAL_POLICY_TYPE = new TypeToken<List<OperationalPolicy>>() {}
+ .getType();
+ private static final Type MICROSERVICE_POLICY_TYPE = new TypeToken<List<MicroServicePolicy>>() {}
+ .getType();
@Autowired
public LoopController(LoopService loopService) {
diff --git a/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java b/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java
index 9b131299..5d62e715 100644
--- a/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java
+++ b/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java
@@ -31,6 +31,7 @@ import org.apache.camel.Exchange;
import org.onap.clamp.clds.model.dcae.DcaeOperationStatusResponse;
import org.onap.clamp.clds.util.JsonUtils;
import org.onap.clamp.loop.Loop;
+import org.onap.clamp.policy.microservice.MicroServicePolicy;
public class DcaeComponent extends ExternalComponent {
@@ -84,7 +85,6 @@ public class DcaeComponent extends ExternalComponent {
return null;
}
}
-
/**
* Generate the deployment id, it's random.
*
@@ -126,6 +126,27 @@ public class DcaeComponent extends ExternalComponent {
}
/**
+ * Return the deploy payload for DCAE.
+ *
+ * @param loop The loop object
+ * @param microServiceName The micro service name
+ * @return The payload used to send deploy closed loop request
+ */
+ public static String getDeployPayload(Loop loop, String microServiceName) {
+ JsonObject globalProp = loop.getGlobalPropertiesJson();
+ JsonObject deploymentProp = globalProp.getAsJsonObject(DEPLOYMENT_PARAMETER).getAsJsonObject(microServiceName);
+
+ String serviceTypeId = loop.getDcaeBlueprintId();
+
+ JsonObject rootObject = new JsonObject();
+ rootObject.addProperty(DCAE_SERVICETYPE_ID, serviceTypeId);
+ if (deploymentProp != null) {
+ rootObject.add(DCAE_INPUTS, deploymentProp);
+ }
+ return rootObject.toString();
+ }
+
+ /**
* Return the uninstallation payload for DCAE.
*
* @param loop The loop object
diff --git a/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java b/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java
index c22ca1a6..7f00c42e 100644
--- a/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java
+++ b/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java
@@ -70,7 +70,7 @@ public class LoopElementModel extends AuditEntity implements Serializable {
private String blueprint;
/**
- * The type of element
+ * The type of element.
*/
@Column(nullable = false, name = "loop_element_type")
private String loopElementType;
@@ -103,7 +103,7 @@ public class LoopElementModel extends AuditEntity implements Serializable {
/**
* Method to add a new policyModel to the list.
*
- * @param policyModel
+ * @param policyModel The policy model
*/
public void addPolicyModel(PolicyModel policyModel) {
policyModels.add(policyModel);
@@ -147,6 +147,8 @@ public class LoopElementModel extends AuditEntity implements Serializable {
}
/**
+ * loopElementType getter.
+ *
* @return the loopElementType
*/
public String getLoopElementType() {
@@ -154,6 +156,8 @@ public class LoopElementModel extends AuditEntity implements Serializable {
}
/**
+ * loopElementType setter.
+ *
* @param loopElementType the loopElementType to set
*/
public void setLoopElementType(String loopElementType) {
diff --git a/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java b/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java
index 20574ff6..7c059e19 100644
--- a/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java
+++ b/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java
@@ -62,7 +62,7 @@ public class LoopTemplate extends AuditEntity implements Serializable {
* other option would be to have independent blueprint for each microservices.
* In that case they are stored in each MicroServiceModel
*/
- @Column(columnDefinition = "MEDIUMTEXT", nullable = false, name = "blueprint_yaml")
+ @Column(columnDefinition = "MEDIUMTEXT", name = "blueprint_yaml")
private String blueprint;
@Expose
diff --git a/src/main/java/org/onap/clamp/loop/template/PolicyModel.java b/src/main/java/org/onap/clamp/loop/template/PolicyModel.java
index 00d58a82..886e8c80 100644
--- a/src/main/java/org/onap/clamp/loop/template/PolicyModel.java
+++ b/src/main/java/org/onap/clamp/loop/template/PolicyModel.java
@@ -82,6 +82,8 @@ public class PolicyModel extends AuditEntity implements Serializable, Comparable
private Set<LoopElementModel> usedByElementModels = new HashSet<>();
/**
+ * usedByElementModels getter.
+ *
* @return the usedByElementModels
*/
public Set<LoopElementModel> getUsedByElementModels() {
@@ -170,10 +172,10 @@ public class PolicyModel extends AuditEntity implements Serializable, Comparable
/**
* Constructor.
*
- * @param policyType The policyType (referenced in the blueprint)
+ * @param policyType The policyType (referenced in the blueprint
* @param policyModelTosca The policy tosca model in yaml
* @param version the version like 1.0.0
- * @param policyVariant Subtype for policy if it exists (could be used by UI)
+ * @param policyAcronym Subtype for policy if it exists (could be used by UI)
*/
public PolicyModel(String policyType, String policyModelTosca, String version, String policyAcronym) {
this.policyModelType = policyType;
diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java
index 445c1d5d..43c8d6e0 100644
--- a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java
+++ b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java
@@ -101,6 +101,10 @@ public class MicroServicePolicy extends Policy implements Serializable {
@Column(name = "dcae_deployment_status_url")
private String dcaeDeploymentStatusUrl;
+ @Expose
+ @Column(name = "dcae_blueprint_id")
+ private String dcaeBlueprintId;
+
public MicroServicePolicy() {
// serialization
}
@@ -253,6 +257,24 @@ public class MicroServicePolicy extends Policy implements Serializable {
this.dcaeDeploymentStatusUrl = dcaeDeploymentStatusUrl;
}
+ /**
+ * dcaeBlueprintId getter.
+ *
+ * @return the dcaeBlueprintId
+ */
+ public String getDcaeBlueprintId() {
+ return dcaeBlueprintId;
+ }
+
+ /**
+ * dcaeBlueprintId setter.
+ *
+ * @param dcaeBlueprintId the dcaeBlueprintId to set
+ */
+ void setDcaeBlueprintId(String dcaeBlueprintId) {
+ this.dcaeBlueprintId = dcaeBlueprintId;
+ }
+
@Override
public int hashCode() {
final int prime = 31;
diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java
index c431767f..29a4e56d 100644
--- a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java
+++ b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java
@@ -47,7 +47,7 @@ public class MicroServicePolicyService implements PolicyService<MicroServicePoli
@Override
public Set<MicroServicePolicy> updatePolicies(Loop loop, List<MicroServicePolicy> newMicroservicePolicies) {
return newMicroservicePolicies.stream().map(policy -> getAndUpdateMicroServicePolicy(loop, policy))
- .collect(Collectors.toSet());
+ .collect(Collectors.toSet());
}
@Override
@@ -58,25 +58,38 @@ public class MicroServicePolicyService implements PolicyService<MicroServicePoli
/**
* Get and update the MicroService policy properties.
*
- * @param loop
- * The loop
- * @param policy
- * The new MicroService policy
+ * @param loop The loop
+ * @param policy The new MicroService policy
* @return The updated MicroService policy
*/
public MicroServicePolicy getAndUpdateMicroServicePolicy(Loop loop, MicroServicePolicy policy) {
- return repository
- .save(repository.findById(policy.getName()).map(p -> updateMicroservicePolicyProperties(p, policy, loop))
- .orElse(new MicroServicePolicy(policy.getName(), policy.getModelType(), policy.getPolicyTosca(),
- policy.getShared(), policy.getJsonRepresentation(), Sets.newHashSet(loop))));
+ return repository.save(
+ repository.findById(policy.getName()).map(p -> updateMicroservicePolicyProperties(p, policy, loop))
+ .orElse(new MicroServicePolicy(policy.getName(), policy.getModelType(), policy.getPolicyTosca(),
+ policy.getShared(), policy.getJsonRepresentation(), Sets.newHashSet(loop))));
}
private MicroServicePolicy updateMicroservicePolicyProperties(MicroServicePolicy oldPolicy,
- MicroServicePolicy newPolicy, Loop loop) {
+ MicroServicePolicy newPolicy, Loop loop) {
oldPolicy.setConfigurationsJson(newPolicy.getConfigurationsJson());
if (!oldPolicy.getUsedByLoops().contains(loop)) {
oldPolicy.getUsedByLoops().add(loop);
}
return oldPolicy;
}
+
+ /**
+ * Update the MicroService policy deployment related parameters.
+ *
+ * @param microServicePolicy The micro service policy
+ * @param deploymentId The deployment ID as returned by DCAE
+ * @param deploymentUrl The Deployment URL as returned by DCAE
+ * @throws MicroServicePolicy doesn't exist in DB
+ */
+ public void updateDcaeDeploymentFields(MicroServicePolicy microServicePolicy, String deploymentId,
+ String deploymentUrl) {
+ microServicePolicy.setDcaeDeploymentId(deploymentId);
+ microServicePolicy.setDcaeDeploymentStatusUrl(deploymentUrl);
+ repository.save(microServicePolicy);
+ }
}
diff --git a/src/main/resources/clds/camel/routes/dcae-flows.xml b/src/main/resources/clds/camel/routes/dcae-flows.xml
index fb3bc90e..acaf897f 100644
--- a/src/main/resources/clds/camel/routes/dcae-flows.xml
+++ b/src/main/resources/clds/camel/routes/dcae-flows.xml
@@ -1,6 +1,105 @@
<routes xmlns="http://camel.apache.org/schema/spring">
<route id="deploy-loop">
<from uri="direct:deploy-loop" />
+ <choice>
+ <when>
+ <simple>${exchangeProperty['loopObject'].getLoopTemplate().getBlueprint()} != null
+ </simple>
+ <to uri="direct:deploy-loop-single-blueprint" />
+ </when>
+ <when>
+ <simple>${exchangeProperty['loopObject'].getLoopTemplate().getBlueprint()} == null
+ </simple>
+ <to uri="direct:deploy-loop-multi-blueprint" />
+ </when>
+ </choice>
+ </route>
+ <route id="deploy-loop-multi-blueprint">
+ <from uri="direct:deploy-loop-multi-blueprint" />
+ <doTry>
+ <log loggingLevel="INFO"
+ message="Deploying the blueprints for loop: ${exchangeProperty[loopObject].getName()}" />
+ <to
+ uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Deploying the loop with multiple blueprints')" />
+ <split>
+ <simple>${exchangeProperty[loopObject].getMicroServicePolicies()}
+ </simple>
+ <setProperty propertyName="microServicePolicy">
+ <simple>${body}</simple>
+ </setProperty>
+ <log
+ loggingLevel="INFO"
+ message="Processing Micro Service Policy: ${exchangeProperty[microServicePolicy].getName()}" />
+ <setProperty propertyName="raiseHttpExceptionFlag">
+ <simple resultType="java.lang.Boolean">false</simple>
+ </setProperty>
+ <setBody>
+ <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
+ method="getDeployPayload(${exchangeProperty[loopObject]},${exchangeProperty[microServicePolicy].getName()})" />
+ </setBody>
+ <setProperty propertyName="dcaeDeploymentId">
+ <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
+ method="generateDeploymentId()" />
+ </setProperty>
+ <setHeader headerName="CamelHttpMethod">
+ <constant>PUT</constant>
+ </setHeader>
+ <setHeader headerName="Content-Type">
+ <constant>application/json</constant>
+ </setHeader>
+ <setHeader headerName="X-ONAP-RequestID">
+ <simple>${exchangeProperty[X-ONAP-RequestID]}
+ </simple>
+ </setHeader>
+ <setHeader headerName="X-ONAP-InvocationID">
+ <simple>${exchangeProperty[X-ONAP-InvocationID]}
+ </simple>
+ </setHeader>
+ <setHeader headerName="X-ONAP-PartnerName">
+ <simple>${exchangeProperty[X-ONAP-PartnerName]}
+ </simple>
+ </setHeader>
+ <log loggingLevel="INFO"
+ message="Endpoint to deploy loop: {{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[dcaeDeploymentId]}"></log>
+ <toD
+ uri="{{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[dcaeDeploymentId]}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=300000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+ <convertBodyTo type="java.lang.String" />
+ <setProperty propertyName="dcaeResponse">
+ <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
+ method="convertDcaeResponse(${body})" />
+ </setProperty>
+ <setProperty propertyName="dcaeStatusUrl">
+ <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
+ method="getStatusUrl(${exchangeProperty[dcaeResponse]})" />
+ </setProperty>
+ <to
+ uri="bean:org.onap.clamp.policy.microservice.MicroServicePolicyService?method=updateDcaeDeploymentFields(${exchangeProperty[microServicePolicy]},${exchangeProperty[dcaeDeploymentId]},${exchangeProperty[dcaeStatusUrl]})" />
+ </split>
+ <doCatch>
+ <exception>java.lang.Exception</exception>
+ <handled>
+ <constant>false</constant>
+ </handled>
+ <setProperty propertyName="logMessage">
+ <simple>DEPLOY loop status
+ (Dep-id:${exchangeProperty[dcaeDeploymentId]},
+ StatusUrl:${exchangeProperty[dcaeStatusUrl]})
+ </simple>
+ </setProperty>
+ <setProperty propertyName="logComponent">
+ <simple>DCAE</simple>
+ </setProperty>
+ <to uri="direct:dump-loop-log-http-response" />
+ </doCatch>
+ <doFinally>
+ <to uri="direct:reset-raise-http-exception-flag" />
+ <to
+ uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+ </doFinally>
+ </doTry>
+ </route>
+ <route id="deploy-loop-single-blueprint">
+ <from uri="direct:deploy-loop-single-blueprint" />
<doTry>
<log loggingLevel="INFO"
message="Deploying the loop: ${exchangeProperty[loopObject].getName()}" />
@@ -41,6 +140,8 @@
<method ref="org.onap.clamp.loop.components.external.DcaeComponent"
method="convertDcaeResponse(${body})" />
</setProperty>
+
+
<setProperty propertyName="dcaeStatusUrl">
<method ref="org.onap.clamp.loop.components.external.DcaeComponent"
method="getStatusUrl(${exchangeProperty[dcaeResponse]})" />
@@ -64,7 +165,6 @@
</doFinally>
</doTry>
</route>
-
<route id="undeploy-loop">
<from uri="direct:undeploy-loop" />
<log loggingLevel="INFO"
diff --git a/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java b/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java
index 96921514..68682b25 100644
--- a/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java
+++ b/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java
@@ -65,7 +65,8 @@ public class DcaeComponentTest {
@Test
public void convertDcaeResponseTest() throws IOException {
- String dcaeFakeResponse = "{'requestId':'testId','operationType':'install','status':'state','error':'errorMessage', 'links':{'self':'selfUrl','uninstall':'uninstallUrl'}}";
+ String dcaeFakeResponse = "{'requestId':'testId','operationType':'install','status':'state','error':'errorMessage', "
+ + "'links':{'self':'selfUrl','uninstall':'uninstallUrl'}}";
DcaeOperationStatusResponse responseObject = DcaeComponent.convertDcaeResponse(dcaeFakeResponse);
assertThat(responseObject.getRequestId()).isEqualTo("testId");
assertThat(responseObject.getOperationType()).isEqualTo("install");
diff --git a/src/test/java/org/onap/clamp/loop/DeployFlowTestItCase.java b/src/test/java/org/onap/clamp/loop/DeployFlowTestItCase.java
new file mode 100644
index 00000000..3499babd
--- /dev/null
+++ b/src/test/java/org/onap/clamp/loop/DeployFlowTestItCase.java
@@ -0,0 +1,138 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2020 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============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.loop;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonSyntaxException;
+
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.transaction.Transactional;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.ExchangeBuilder;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.onap.clamp.clds.Application;
+import org.onap.clamp.loop.template.LoopTemplate;
+import org.onap.clamp.policy.microservice.MicroServicePolicy;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = Application.class)
+public class DeployFlowTestItCase {
+ private Gson gson = new Gson();
+
+ @Autowired
+ CamelContext camelContext;
+
+ @Autowired
+ LoopService loopService;
+
+ @Test
+ @Transactional
+ public void deployWithSingleBlueprintTest() throws JsonSyntaxException, IOException {
+ Loop loopTest = createLoop("ControlLoopTest", "<xml></xml>", "yamlcontent", "{\"testname\":\"testvalue\"}",
+ "UUID-blueprint");
+ LoopTemplate template = new LoopTemplate();
+ template.setName("templateName");
+ template.setBlueprint("yamlcontent");
+ loopTest.setLoopTemplate(template);
+ MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "",
+ "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0",
+ "{\"param1\":\"value1\"}", true);
+ loopTest.addMicroServicePolicy(microServicePolicy);
+ loopService.saveOrUpdateLoop(loopTest);
+ Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext)
+ .withProperty("loopObject", loopTest).build();
+
+ camelContext.createProducerTemplate()
+ .send("direct:deploy-loop", myCamelExchange);
+
+ Loop loopAfterTest = loopService.getLoop("ControlLoopTest");
+ assertThat(loopAfterTest.getDcaeDeploymentStatusUrl()).isNotNull();
+ assertThat(loopAfterTest.getDcaeDeploymentId()).isNotNull();
+ }
+
+ @Test
+ @Transactional
+ public void deployWithMultipleBlueprintTest() throws JsonSyntaxException, IOException {
+ Loop loopTest2 = createLoop("ControlLoopTest2", "<xml></xml>", "yamlcontent", "{\"dcaeDeployParameters\": {"
+ + "\"microService1\": {\"location_id\": \"\", \"policy_id\": \"TCA_h2NMX_v1_0_ResourceInstanceName1_tca\"},"
+ + "\"microService2\": {\"location_id\": \"\", \"policy_id\": \"TCA_h2NMX_v1_0_ResourceInstanceName2_tca\"}"
+ + "}}", "UUID-blueprint");
+ LoopTemplate template = new LoopTemplate();
+ template.setName("templateName");
+ loopTest2.setLoopTemplate(template);
+ MicroServicePolicy microServicePolicy1 = getMicroServicePolicy("microService1", "",
+ "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0",
+ "{\"param1\":\"value1\"}", true);
+ MicroServicePolicy microServicePolicy2 = getMicroServicePolicy("microService2", "",
+ "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0",
+ "{\"param1\":\"value1\"}", true);
+ loopTest2.addMicroServicePolicy(microServicePolicy1);
+ loopTest2.addMicroServicePolicy(microServicePolicy2);
+ loopService.saveOrUpdateLoop(loopTest2);
+ Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext)
+ .withProperty("loopObject", loopTest2).build();
+
+ camelContext.createProducerTemplate()
+ .send("direct:deploy-loop", myCamelExchange);
+
+ Loop loopAfterTest = loopService.getLoop("ControlLoopTest2");
+ Set<MicroServicePolicy> policyList = loopAfterTest.getMicroServicePolicies();
+ for (MicroServicePolicy policy : policyList) {
+ assertThat(policy.getDcaeDeploymentStatusUrl()).isNotNull();
+ assertThat(policy.getDcaeDeploymentId()).isNotNull();
+ }
+ assertThat(loopAfterTest.getDcaeDeploymentStatusUrl()).isNull();
+ assertThat(loopAfterTest.getDcaeDeploymentId()).isNull();
+ }
+
+ private Loop createLoop(String name, String svgRepresentation, String blueprint, String globalPropertiesJson,
+ String dcaeBlueprintId) throws JsonSyntaxException, IOException {
+ Loop loop = new Loop(name, blueprint, svgRepresentation);
+ loop.setGlobalPropertiesJson(new Gson().fromJson(globalPropertiesJson, JsonObject.class));
+ loop.setLastComputedState(LoopState.DESIGN);
+ loop.setDcaeBlueprintId(dcaeBlueprintId);
+ return loop;
+ }
+
+ private MicroServicePolicy getMicroServicePolicy(String name, String modelType, String jsonRepresentation,
+ String policyTosca, String jsonProperties, boolean shared) {
+ MicroServicePolicy microService = new MicroServicePolicy(name, modelType, policyTosca, shared,
+ gson.fromJson(jsonRepresentation, JsonObject.class), new HashSet<>());
+ microService.setConfigurationsJson(new Gson().fromJson(jsonProperties, JsonObject.class));
+ return microService;
+ }
+}
diff --git a/src/test/resources/clds/camel/routes/dcae-flows.xml b/src/test/resources/clds/camel/routes/dcae-flows.xml
index fb3bc90e..7a85871f 100644
--- a/src/test/resources/clds/camel/routes/dcae-flows.xml
+++ b/src/test/resources/clds/camel/routes/dcae-flows.xml
@@ -1,6 +1,187 @@
<routes xmlns="http://camel.apache.org/schema/spring">
<route id="deploy-loop">
<from uri="direct:deploy-loop" />
+ <choice>
+ <when>
+ <simple>${exchangeProperty['loopObject'].getLoopTemplate().getBlueprint()} != null
+ </simple>
+ <to uri="direct:deploy-loop-single-blueprint" />
+ </when>
+ <when>
+ <simple>${exchangeProperty['loopObject'].getLoopTemplate().getBlueprint()} == null
+ </simple>
+ <to uri="direct:deploy-loop-multi-blueprint" />
+ </when>
+ </choice>
+ </route>
+ <route id="deploy-loop-multi-blueprint">
+ <from uri="direct:deploy-loop-multi-blueprint" />
+ <doTry>
+ <log loggingLevel="INFO"
+ message="Deploying the blueprints for loop: ${exchangeProperty[loopObject].getName()}" />
+ <to
+ uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Deploying the loop with multiple blueprints')" />
+ <split>
+ <simple>${exchangeProperty[loopObject].getMicroServicePolicies()}
+ </simple>
+ <setProperty propertyName="microServicePolicy">
+ <simple>${body}</simple>
+ </setProperty>
+ <log
+ loggingLevel="INFO"
+ message="Processing Micro Service Policy: ${exchangeProperty[microServicePolicy].getName()}" />
+ <setProperty propertyName="raiseHttpExceptionFlag">
+ <simple resultType="java.lang.Boolean">false</simple>
+ </setProperty>
+ <setBody>
+ <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
+ method="getDeployPayload(${exchangeProperty[loopObject]},${exchangeProperty[microServicePolicy].getName()})" />
+ </setBody>
+ <setProperty propertyName="dcaeDeploymentId">
+ <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
+ method="generateDeploymentId()" />
+ </setProperty>
+ <setHeader headerName="CamelHttpMethod">
+ <constant>PUT</constant>
+ </setHeader>
+ <setHeader headerName="Content-Type">
+ <constant>application/json</constant>
+ </setHeader>
+ <setHeader headerName="X-ONAP-RequestID">
+ <simple>${exchangeProperty[X-ONAP-RequestID]}
+ </simple>
+ </setHeader>
+ <setHeader headerName="X-ONAP-InvocationID">
+ <simple>${exchangeProperty[X-ONAP-InvocationID]}
+ </simple>
+ </setHeader>
+ <setHeader headerName="X-ONAP-PartnerName">
+ <simple>${exchangeProperty[X-ONAP-PartnerName]}
+ </simple>
+ </setHeader>
+ <log loggingLevel="INFO"
+ message="Endpoint to deploy loop: {{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[dcaeDeploymentId]}"></log>
+ <toD
+ uri="{{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[dcaeDeploymentId]}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=300000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+ <convertBodyTo type="java.lang.String" />
+ <setProperty propertyName="dcaeResponse">
+ <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
+ method="convertDcaeResponse(${body})" />
+ </setProperty>
+ <setProperty propertyName="dcaeStatusUrl">
+ <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
+ method="getStatusUrl(${exchangeProperty[dcaeResponse]})" />
+ </setProperty>
+ <to
+ uri="bean:org.onap.clamp.policy.microservice.MicroServicePolicyService?method=updateDcaeDeploymentFields(${exchangeProperty[microServicePolicy]},${exchangeProperty[dcaeDeploymentId]},${exchangeProperty[dcaeStatusUrl]})" />
+ </split>
+ <doCatch>
+ <exception>java.lang.Exception</exception>
+ <handled>
+ <constant>false</constant>
+ </handled>
+ <setProperty propertyName="logMessage">
+ <simple>DEPLOY loop status
+ (Dep-id:${exchangeProperty[dcaeDeploymentId]},
+ StatusUrl:${exchangeProperty[dcaeStatusUrl]})
+ </simple>
+ </setProperty>
+ <setProperty propertyName="logComponent">
+ <simple>DCAE</simple>
+ </setProperty>
+ <to uri="direct:dump-loop-log-http-response" />
+ </doCatch>
+ <doFinally>
+ <to uri="direct:reset-raise-http-exception-flag" />
+ <to
+ uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+ </doFinally>
+ </doTry>
+ </route>
+ <!--<route id="deploy-loop-multi-blueprint">
+ <from uri="direct:deploy-loop-multi-blueprint" />
+
+
+ <doTry>
+ <split>
+ <doTry>
+ <simple>${exchangeProperty[loopObject].getMicroServicePolicies()}
+ </simple>
+ <setProperty propertyName="microServicePolicy">
+ <simple>${body}</simple>
+ </setProperty>
+ <log
+ loggingLevel="INFO"
+ message="Processing Micro Service Policy: ${exchangeProperty[microServicePolicy].getName()}" />
+ <setProperty propertyName="raiseHttpExceptionFlag">
+ <simple resultType="java.lang.Boolean">false</simple>
+ </setProperty>
+ <setBody>
+ <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
+ method="getDeployPayload(${exchangeProperty[loopObject]},${exchangeProperty[microServicePolicy].getName())" />
+ </setBody>
+ <setProperty propertyName="dcaeDeploymentId">
+ <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
+ method="generateDeploymentId()" />
+ </setProperty>
+ <setHeader headerName="CamelHttpMethod">
+ <constant>PUT</constant>
+ </setHeader>
+ <setHeader headerName="Content-Type">
+ <constant>application/json</constant>
+ </setHeader>
+ <setHeader headerName="X-ONAP-RequestID">
+ <simple>${exchangeProperty[X-ONAP-RequestID]}
+ </simple>
+ </setHeader>
+ <setHeader headerName="X-ONAP-InvocationID">
+ <simple>${exchangeProperty[X-ONAP-InvocationID]}
+ </simple>
+ </setHeader>
+ <setHeader headerName="X-ONAP-PartnerName">
+ <simple>${exchangeProperty[X-ONAP-PartnerName]}
+ </simple>
+ </setHeader>
+ <log loggingLevel="INFO"
+ message="Endpoint to deploy loop: {{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[dcaeDeploymentId]}"></log>
+ <toD
+ uri="{{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[dcaeDeploymentId]}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=300000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+ <convertBodyTo type="java.lang.String" />
+ <setProperty propertyName="dcaeResponse">
+ <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
+ method="convertDcaeResponse(${body})" />
+ </setProperty>
+ <setProperty propertyName="dcaeStatusUrl">
+ <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
+ method="getStatusUrl(${exchangeProperty[dcaeResponse]})" />
+ </setProperty>
+ <to
+ uri="bean:org.onap.clamp.loop.LoopService?method=updateDcaeDeploymentFields(${exchangeProperty[loopObject]},${exchangeProperty[microServicePolicy].getName(),${exchangeProperty[dcaeDeploymentId]},${exchangeProperty[dcaeStatusUrl]})" />
+ <doFinally>
+ <to uri="direct:reset-raise-http-exception-flag" />
+ <setProperty propertyName="logMessage">
+ <simple>DEPLOY loop status
+ (Dep-id:${exchangeProperty[dcaeDeploymentId]},
+ StatusUrl:${exchangeProperty[dcaeStatusUrl]})
+ </simple>
+ </setProperty>
+ <setProperty propertyName="logComponent">
+ <simple>DCAE</simple>
+ </setProperty>
+ <to uri="direct:dump-loop-log-http-response" />
+ </doFinally>
+ </doTry>
+
+ </split>
+ <doFinally>
+ <to uri="direct:reset-raise-http-exception-flag" />
+ <to
+ uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+ </doFinally>
+ </doTry>
+ </route>-->
+ <route id="deploy-loop-single-blueprint">
+ <from uri="direct:deploy-loop-single-blueprint" />
<doTry>
<log loggingLevel="INFO"
message="Deploying the loop: ${exchangeProperty[loopObject].getName()}" />
@@ -41,6 +222,8 @@
<method ref="org.onap.clamp.loop.components.external.DcaeComponent"
method="convertDcaeResponse(${body})" />
</setProperty>
+
+
<setProperty propertyName="dcaeStatusUrl">
<method ref="org.onap.clamp.loop.components.external.DcaeComponent"
method="getStatusUrl(${exchangeProperty[dcaeResponse]})" />
@@ -64,7 +247,6 @@
</doFinally>
</doTry>
</route>
-
<route id="undeploy-loop">
<from uri="direct:undeploy-loop" />
<log loggingLevel="INFO"