Update undeploy-loop flow 54/100854/2
authorxuegao <xg353y@intl.att.com>
Mon, 27 Jan 2020 14:21:59 +0000 (15:21 +0100)
committerSébastien Determe <sebastien.determe@intl.att.com>
Thu, 30 Jan 2020 11:51:18 +0000 (11:51 +0000)
Update the undploy-loop flow to support the multiple blueprint
deployment

Issue-ID: CLAMP-627
Change-Id: Ic4187179e2ef2f574f8cc836eebc3608b8aee899
Signed-off-by: xuegao <xg353y@intl.att.com>
src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java
src/main/resources/clds/camel/routes/dcae-flows.xml
src/main/resources/clds/camel/routes/policy-flows.xml
src/test/java/org/onap/clamp/loop/DeployFlowTestItCase.java
src/test/resources/clds/camel/routes/dcae-flows.xml

index e22b425..acb7190 100644 (file)
@@ -165,6 +165,18 @@ public class DcaeComponent extends ExternalComponent {
         return rootObject.toString();
     }
 
+    /**
+     * Return the uninstallation payload for DCAE.
+     *
+     * @param microServicePolicy The microServicePolicy object
+     * @return The payload in string (json)
+     */
+    public static String getUndeployPayload(MicroServicePolicy policy) {
+        JsonObject rootObject = new JsonObject();
+        rootObject.addProperty(DCAE_SERVICETYPE_ID, policy.getDcaeBlueprintId());
+        return rootObject.toString();
+    }
+
     @Override
     public ExternalComponentState computeState(Exchange camelExchange) {
 
index a9d0352..7137bab 100644 (file)
                                        </setProperty>
                                        <to
                                                uri="bean:org.onap.clamp.policy.microservice.MicroServicePolicyService?method=updateDcaeDeploymentFields(${exchangeProperty[microServicePolicy]},${exchangeProperty[dcaeDeploymentId]},${exchangeProperty[dcaeStatusUrl]})" />
+                                       <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" />
                        </split>
                        <doCatch>
-                               <exception>java.lang.Exception</exception>
-                               <handled>
-                                       <constant>false</constant>
-                               </handled>
                                <setProperty propertyName="logMessage">
-                                       <simple>DEPLOY loop status
-                                               (Dep-id:${exchangeProperty[dcaeDeploymentId]},
+                                       <simple>DEPLOY micro service failed 
+                                               (MicroService name:${exchangeProperty[microServicePolicy].getName()}),
+                                               Dep-id:${exchangeProperty[dcaeDeploymentId]},
                                                StatusUrl:${exchangeProperty[dcaeStatusUrl]})
                                        </simple>
                                </setProperty>
        </route>
        <route id="undeploy-loop">
                <from uri="direct:undeploy-loop" />
+               <choice>
+                       <when>
+                               <simple>${exchangeProperty['loopObject'].getLoopTemplate().getBlueprint()} != null
+                               </simple>
+                               <to uri="direct:undeploy-loop-single-blueprint" />
+                       </when>
+                       <when>
+                               <simple>${exchangeProperty['loopObject'].getLoopTemplate().getBlueprint()} == null
+                               </simple>
+                               <to uri="direct:undeploy-loop-multi-blueprint" />
+                       </when>
+               </choice>
+       </route>
+       <route id="undeploy-loop-multi-blueprint">
+               <from uri="direct:undeploy-loop-multi-blueprint" />
+               <doTry>
+                       <log loggingLevel="INFO"
+                               message="Undeploying the blueprints for loop: ${exchangeProperty[loopObject].getName()}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Undeploying 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()}" />
+                               <choice>
+                                       <when>
+                                               <simple>${exchangeProperty[microServicePolicy].getDcaeDeploymentId()} != null
+                                               </simple>
+                                               <setBody>
+                                                       <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                                                               method="getUndeployPayload(${exchangeProperty[microServicePolicy]})" />
+                                               </setBody>
+                                               <setHeader headerName="CamelHttpMethod">
+                                                       <constant>DELETE</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 undeploy loop: {{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[microServicePolicy].getDcaeDeploymentId()}"></log>
+                                               <toD
+                                                       uri="{{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[microServicePolicy].getDcaeDeploymentId()}?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[microServicePolicy].getDcaeDeploymentId()},${exchangeProperty[dcaeStatusUrl]})" />
+                                               <setProperty propertyName="logMessage">
+                                                       <simple>UNDEPLOY micro service successful
+                                                               (MicroService name:${exchangeProperty[microServicePolicy].getName()})
+                                                       </simple>
+                                               </setProperty>
+                                               <setProperty propertyName="logComponent">
+                                                       <simple>DCAE</simple>
+                                               </setProperty>
+                                               <to uri="direct:dump-loop-log-http-response" />
+                                       </when>
+                                       <otherwise>
+                                               <log loggingLevel="WARNING"
+                                                       message="Cannot Undeploy for the micro service: ${exchangeProperty[microServicePolicy].getName()}, the Deployment ID does not exist !" />
+                                               <to
+                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Cannot Undeploy for the micro service: ${exchangeProperty[microServicePolicy].getName()}, the Deployment ID does not exist !','WARNING',${exchangeProperty[loopObject]})" />
+                                       </otherwise>
+                               </choice>
+                       </split>
+                       <doCatch>
+                               <setProperty propertyName="logMessage">
+                                       <simple>UNDEPLOY micro service failed
+                                               (MicroService name:${exchangeProperty[microServicePolicy].getName()})
+                                       </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="undeploy-loop-single-blueprint">
+               <from uri="direct:undeploy-loop-single-blueprint" />
                <log loggingLevel="INFO"
                        message="Undeploying the loop: ${exchangeProperty[loopObject].getName()} : ${exchangeProperty[loopObject].getDcaeDeploymentId()}" />
                <to
                                        message="Cannot Undeploy for the loop: ${exchangeProperty[loopObject].getName()}, the Deployment ID does not exist !" />
                                <to
                                        uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Cannot Undeploy for the loop: ${exchangeProperty[loopObject].getName()}, the Deployment ID does not exist !','WARNING',${exchangeProperty[loopObject]})" />
-
                        </otherwise>
                </choice>
        </route>
index 223498e..97416a6 100644 (file)
@@ -99,7 +99,7 @@
                        <log loggingLevel="INFO"
                                message="Endpoint to get policy deployment status: {{clamp.config.policy.pap.url}}/policy/pap/v1/policies/deployed/${exchangeProperty[policyName]}/1.0.0"></log>
                        <toD
-                               uri="{{clamp.config.policy.pap.url}}/policy/pap/v1/policies/${exchangeProperty[policyName]}/1.0.0?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                               uri="{{clamp.config.policy.pap.url}}/policy/pap/v1/policies/deployed/${exchangeProperty[policyName]}/1.0.0?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
                        <doFinally>
                                <to uri="direct:reset-raise-http-exception-flag" />
                                <to
index 3499bab..d7c2eda 100644 (file)
@@ -119,6 +119,66 @@ public class DeployFlowTestItCase {
         assertThat(loopAfterTest.getDcaeDeploymentId()).isNull();
     }
 
+    @Test
+    @Transactional
+    public void undeployWithSingleBlueprintTest() 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);
+        loopTest.setDcaeDeploymentId("testDeploymentId");
+        loopTest.setDcaeDeploymentStatusUrl("testUrl");
+        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:undeploy-loop", myCamelExchange);
+
+        Loop loopAfterTest = loopService.getLoop("ControlLoopTest");
+        assertThat(loopAfterTest.getDcaeDeploymentStatusUrl().contains("/uninstall")).isTrue();
+    }
+
+    @Test
+    @Transactional
+    public void undeployWithMultipleBlueprintTest() 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, "testDeploymentId1", "testDeploymentStatusUrl1");
+        MicroServicePolicy microServicePolicy2 = getMicroServicePolicy("microService2", "",
+                "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0",
+                "{\"param1\":\"value1\"}", true, "testDeploymentId2", "testDeploymentStatusUrl2");
+        loopTest2.addMicroServicePolicy(microServicePolicy1);
+        loopTest2.addMicroServicePolicy(microServicePolicy2);
+        loopService.saveOrUpdateLoop(loopTest2);
+        Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext)
+            .withProperty("loopObject", loopTest2).build();
+
+        camelContext.createProducerTemplate()
+            .send("direct:undeploy-loop", myCamelExchange);
+
+        Loop loopAfterTest = loopService.getLoop("ControlLoopTest2");
+        Set<MicroServicePolicy> policyList = loopAfterTest.getMicroServicePolicies();
+        for (MicroServicePolicy policy : policyList) {
+            assertThat(policy.getDcaeDeploymentStatusUrl().contains("/uninstall")).isTrue();
+        }
+        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);
@@ -135,4 +195,14 @@ public class DeployFlowTestItCase {
         microService.setConfigurationsJson(new Gson().fromJson(jsonProperties, JsonObject.class));
         return microService;
     }
+
+    private MicroServicePolicy getMicroServicePolicy(String name, String modelType, String jsonRepresentation,
+            String policyTosca, String jsonProperties, boolean shared, String deploymengId, String deploymentStatusUrl) {
+        MicroServicePolicy microService = getMicroServicePolicy(name, modelType, jsonRepresentation,
+                policyTosca, jsonProperties, shared);
+
+        microService.setDcaeDeploymentId(deploymengId);
+        microService.setDcaeDeploymentStatusUrl(deploymentStatusUrl);
+        return microService;
+    }
 }
index 552f021..48cda7a 100644 (file)
@@ -81,8 +81,9 @@
                                        <constant>false</constant>
                                </handled>
                                <setProperty propertyName="logMessage">
-                                       <simple>DEPLOY loop status
-                                               (Dep-id:${exchangeProperty[dcaeDeploymentId]},
+                                       <simple>DEPLOY micro service failed 
+                                               (MicroService name:${exchangeProperty[microServicePolicy].getName()}),
+                                               Dep-id:${exchangeProperty[dcaeDeploymentId]},
                                                StatusUrl:${exchangeProperty[dcaeStatusUrl]})
                                        </simple>
                                </setProperty>
                        </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>
        </route>
        <route id="undeploy-loop">
                <from uri="direct:undeploy-loop" />
+               <choice>
+                       <when>
+                               <simple>${exchangeProperty['loopObject'].getLoopTemplate().getBlueprint()} != null
+                               </simple>
+                               <to uri="direct:undeploy-loop-single-blueprint" />
+                       </when>
+                       <when>
+                               <simple>${exchangeProperty['loopObject'].getLoopTemplate().getBlueprint()} == null
+                               </simple>
+                               <to uri="direct:undeploy-loop-multi-blueprint" />
+                       </when>
+               </choice>
+       </route>
+       <route id="undeploy-loop-multi-blueprint">
+               <from uri="direct:undeploy-loop-multi-blueprint" />
+               <doTry>
+                       <log loggingLevel="INFO"
+                               message="Undeploying the blueprints for loop: ${exchangeProperty[loopObject].getName()}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Undeploying 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()}" />
+                               <choice>
+                                       <when>
+                                               <simple>${exchangeProperty[microServicePolicy].getDcaeDeploymentId()} != null
+                                               </simple>
+                                               <setBody>
+                                                       <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                                                               method="getUndeployPayload(${exchangeProperty[microServicePolicy]})" />
+                                               </setBody>
+                                               <setHeader headerName="CamelHttpMethod">
+                                                       <constant>DELETE</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 undeploy loop: {{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[microServicePolicy].getDcaeDeploymentId()}"></log>
+                                               <toD
+                                                       uri="{{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[microServicePolicy].getDcaeDeploymentId()}?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[microServicePolicy].getDcaeDeploymentId()},${exchangeProperty[dcaeStatusUrl]})" />
+                                       </when>
+                                       <otherwise>
+                                               <log loggingLevel="WARNING"
+                                                       message="Cannot Undeploy for the micro service: ${exchangeProperty[microServicePolicy].getName()}, the Deployment ID does not exist !" />
+                                               <to
+                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Cannot Undeploy for the micro service: ${exchangeProperty[microServicePolicy].getName()}, the Deployment ID does not exist !','WARNING',${exchangeProperty[loopObject]})" />
+                                       </otherwise>
+                               </choice>
+                       </split>
+                       <doCatch>
+                               <exception>java.lang.Exception</exception>
+                               <handled>
+                                       <constant>false</constant>
+                               </handled>
+                               <setProperty propertyName="logMessage">
+                                       <simple>UNDEPLOY micro service failed
+                                               (MicroService name:${exchangeProperty[microServicePolicy].getName()})
+                                       </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="undeploy-loop-single-blueprint">
+               <from uri="direct:undeploy-loop-single-blueprint" />
                <log loggingLevel="INFO"
                        message="Undeploying the loop: ${exchangeProperty[loopObject].getName()} : ${exchangeProperty[loopObject].getDcaeDeploymentId()}" />
                <to
                                        message="Cannot Undeploy for the loop: ${exchangeProperty[loopObject].getName()}, the Deployment ID does not exist !" />
                                <to
                                        uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Cannot Undeploy for the loop: ${exchangeProperty[loopObject].getName()}, the Deployment ID does not exist !','WARNING',${exchangeProperty[loopObject]})" />
-
                        </otherwise>
                </choice>
        </route>