Merge "add Enrich&Deploy function in designer"
diff --git a/components/model-catalog/definition-type/starter-type/node_type/component-remote-ansible-executor.json b/components/model-catalog/definition-type/starter-type/node_type/component-remote-ansible-executor.json
index b14d5b2..125d1ea 100644
--- a/components/model-catalog/definition-type/starter-type/node_type/component-remote-ansible-executor.json
+++ b/components/model-catalog/definition-type/starter-type/node_type/component-remote-ansible-executor.json
@@ -30,6 +30,11 @@
               "required": false,
               "type": "string"
             },
+            "ansible-fire-failure": {
+              "description": "ansible fire failue status ",
+              "required": false,
+              "type": "boolean"
+            },
             "workflow-job-template-id": {
               "description": "Primary key (name not supported) of the workflow job template to launch new job.",
               "required": false,
@@ -71,4 +76,4 @@
     }
   },
   "derived_from": "tosca.nodes.Component"
-}
\ No newline at end of file
+}
diff --git a/ms/blueprintsprocessor/functions/ansible-awx-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/ansible/executor/ComponentRemoteAnsibleExecutor.kt b/ms/blueprintsprocessor/functions/ansible-awx-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/ansible/executor/ComponentRemoteAnsibleExecutor.kt
index 5047571..dccbe2e 100644
--- a/ms/blueprintsprocessor/functions/ansible-awx-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/ansible/executor/ComponentRemoteAnsibleExecutor.kt
+++ b/ms/blueprintsprocessor/functions/ansible-awx-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/ansible/executor/ComponentRemoteAnsibleExecutor.kt
@@ -75,6 +75,8 @@
         // input fields names accepted by this executor
         const val INPUT_ENDPOINT_SELECTOR = "endpoint-selector"
         const val INPUT_JOB_TEMPLATE_NAME = "job-template-name"
+        const val ANSIBLE_FIRE_FAILURE = "ansible-fire-failure"
+        const val ANSIBLE_FAILED_STATUS = "failed"
         const val INPUT_WORKFLOW_JOB_TEMPLATE_NAME = "workflow-job-template-id"
         const val INPUT_LIMIT_TO_HOST = "limit"
         const val INPUT_INVENTORY = "inventory"
@@ -102,10 +104,14 @@
                 jobTemplateName = getOperationInput(INPUT_WORKFLOW_JOB_TEMPLATE_NAME).asText()
                 workflowURIPrefix = "workflow_"
             }
+            var isAnsibleFireFailure = false
+            if (getOptionalOperationInput(ANSIBLE_FIRE_FAILURE) != null) {
+                isAnsibleFireFailure = getOperationInput(ANSIBLE_FIRE_FAILURE).asBoolean()
+            }
 
             val jtId = lookupJobTemplateIDByName(restClientService, jobTemplateName, workflowURIPrefix)
             if (jtId.isNotEmpty()) {
-                runJobTemplateOnAWX(restClientService, jobTemplateName, jtId, workflowURIPrefix)
+                runJobTemplateOnAWX(restClientService, jobTemplateName, jtId, workflowURIPrefix, isAnsibleFireFailure)
             } else {
                 val message = "Workflow/Job template $jobTemplateName does not exists"
                 log.error(message)
@@ -178,7 +184,8 @@
         awxClient: BlueprintWebClientService,
         job_template_name: String?,
         jtId: String,
-        workflowPrefix: String
+        workflowPrefix: String,
+        isAnsibleFireFailure: Boolean
     ) {
         setNodeOutputProperties("preparing".asJsonPrimitive(), "".asJsonPrimitive(), "".asJsonPrimitive())
 
@@ -217,7 +224,13 @@
 
             log.info("Execution of job template $job_template_name in job #$jobId finished with status ($jobStatus) for requestId $processId")
 
-            populateJobRunResponse(awxClient, jobId, workflowPrefix, jobStatus)
+            if (isAnsibleFireFailure && jobStatus == ANSIBLE_FAILED_STATUS) {
+                val message = "Execution of job template $job_template_name failed for requestId $processId." + " (Response: ${response.body}) "
+                log.error(message)
+                setNodeOutputErrors(ATTRIBUTE_EXEC_CMD_STATUS_ERROR, message)
+            } else {
+                populateJobRunResponse(awxClient, jobId, workflowPrefix, jobStatus)
+            }
         } else {
             // The job template requirements were not fulfilled with the values passed in. The message below will
             // provide more information via the response, like the ignored_fields, or variables_needed_to_start,