Calls to/from VNFM fail
[so.git] / bpmn / MSOCommonBPMN / src / main / groovy / org / onap / so / bpmn / common / scripts / OofUtils.groovy
index 197589e..2f46630 100644 (file)
@@ -4,6 +4,8 @@
  * ================================================================================
  * Copyright (C) 2018 Intel Corp. All rights reserved.
  * ================================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
  * 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
@@ -33,10 +35,11 @@ import org.onap.so.bpmn.core.domain.ServiceInstance
 import org.onap.so.bpmn.core.domain.Subscriber
 import org.onap.so.bpmn.core.domain.VnfResource
 import org.onap.so.bpmn.core.json.JsonUtils
+import org.onap.so.client.HttpClient
+import org.onap.so.client.HttpClientFactory
 import org.onap.so.db.catalog.beans.CloudSite
-import org.onap.so.rest.APIResponse
-import org.onap.so.rest.RESTClient
-import org.onap.so.rest.RESTConfig
+import org.onap.so.db.catalog.beans.HomingInstance
+import org.onap.so.utils.TargetEntity
 import org.springframework.http.HttpEntity
 import org.springframework.http.HttpHeaders
 import org.springframework.http.HttpMethod
@@ -45,6 +48,8 @@ import org.springframework.http.client.BufferingClientHttpRequestFactory
 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory
 import org.springframework.web.client.RestTemplate
 import org.springframework.web.util.UriComponentsBuilder
+import org.slf4j.Logger
+import org.slf4j.LoggerFactory
 
 import javax.ws.rs.core.MediaType
 import javax.ws.rs.core.Response
@@ -53,6 +58,8 @@ import javax.xml.ws.http.HTTPException
 import static org.onap.so.bpmn.common.scripts.GenericUtils.*
 
 class OofUtils {
+    private static final Logger logger = LoggerFactory.getLogger( OofUtils.class);
+
     ExceptionUtil exceptionUtil = new ExceptionUtil()
     JsonUtils jsonUtil = new JsonUtils()
 
@@ -85,40 +92,39 @@ class OofUtils {
                         ArrayList existingCandidates = null,
                         ArrayList excludedCandidates = null,
                         ArrayList requiredCandidates = null) {
-        def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
-        utils.log("DEBUG", "Started Building OOF Request", isDebugEnabled)
+        logger.debug( "Started Building OOF Request")
         String callbackEndpoint = UrnPropertiesReader.getVariable("mso.oof.callbackEndpoint", execution)
-        utils.log("DEBUG", "mso.oof.callbackEndpoint is: " + callbackEndpoint, isDebugEnabled)
+        logger.debug( "mso.oof.callbackEndpoint is: " + callbackEndpoint)
         try {
             def callbackUrl = utils.createHomingCallbackURL(callbackEndpoint, "oofResponse", requestId)
-            utils.log("DEBUG", "callbackUrl is: " + callbackUrl, isDebugEnabled)
+            logger.debug( "callbackUrl is: " + callbackUrl)
 
 
             def transactionId = requestId
-            utils.log("DEBUG", "transactionId is: " + transactionId, isDebugEnabled)
+            logger.debug( "transactionId is: " + transactionId)
             //ServiceInstance Info
             ServiceInstance serviceInstance = decomposition.getServiceInstance()
             def serviceInstanceId = ""
             def serviceName = ""
 
             serviceInstanceId = execution.getVariable("serviceInstanceId")
-            utils.log("DEBUG", "serviceInstanceId is: " + serviceInstanceId, isDebugEnabled)
+            logger.debug( "serviceInstanceId is: " + serviceInstanceId)
             serviceName = execution.getVariable("subscriptionServiceType")
-            utils.log("DEBUG", "serviceName is: " + serviceName, isDebugEnabled)
+            logger.debug( "serviceName is: " + serviceName)
 
             if (serviceInstanceId == null || serviceInstanceId == "null") {
-                utils.log("DEBUG", "Unable to obtain Service Instance Id", isDebugEnabled)
+                logger.debug( "Unable to obtain Service Instance Id")
                 exceptionUtil.buildAndThrowWorkflowException(execution, 400, "Internal Error - Unable to " +
                         "obtain Service Instance Id, execution.getVariable(\"serviceInstanceId\") is null")
             }
             if (serviceName == null || serviceName == "null") {
-                utils.log("DEBUG", "Unable to obtain Service Name", isDebugEnabled)
+                logger.debug( "Unable to obtain Service Name")
                 exceptionUtil.buildAndThrowWorkflowException(execution, 400, "Internal Error - Unable to " +
                         "obtain Service Name, execution.getVariable(\"subscriptionServiceType\") is null")
             }
             //Model Info
             ModelInfo model = decomposition.getModelInfo()
-            utils.log("DEBUG", "ModelInfo: " + model.toString(), isDebugEnabled)
+            logger.debug( "ModelInfo: " + model.toString())
             String modelType = model.getModelType()
             String modelInvariantId = model.getModelInvariantUuid()
             String modelVersionId = model.getModelUuid()
@@ -152,13 +158,13 @@ class OofUtils {
             List<VnfResource> vnfResourceList = decomposition.getVnfResources()
 
             if (allottedResourceList == null || allottedResourceList.isEmpty()) {
-                utils.log("DEBUG", "Allotted Resources List is empty - will try to get service VNFs instead.",
-                        isDebugEnabled)
+                logger.debug( "Allotted Resources List is empty - will try to get service VNFs instead.")
             } else {
                 for (AllottedResource resource : allottedResourceList) {
-                    utils.log("DEBUG", "Allotted Resource: " + resource.toString(),
-                            isDebugEnabled)
+                    logger.debug( "Allotted Resource: " + resource.toString())
                     def serviceResourceId = resource.getResourceId()
+                    def toscaNodeType = resource.getToscaNodeType()
+                    def resourceModuleName = toscaNodeType.substring(toscaNodeType.lastIndexOf(".") + 1)
                     def resourceModelInvariantId = resource.getModelInfo().getModelInvariantUuid()
                     def resourceModelVersionId = resource.getModelInfo().getModelUuid()
                     def resourceModelName = resource.getModelInfo().getModelName()
@@ -174,7 +180,7 @@ class OofUtils {
 
                     String demand =
                             "      {\n" +
-                                    "      \"resourceModuleName\": \"${resourceModelName}\",\n" +
+                                    "      \"resourceModuleName\": \"${resourceModuleName}\",\n" +
                                     "      \"serviceResourceId\": \"${serviceResourceId}\",\n" +
                                     "      \"tenantId\": \"${tenantId}\",\n" +
                                     "      \"resourceModelInfo\": {\n" +
@@ -192,14 +198,14 @@ class OofUtils {
             }
 
             if (vnfResourceList == null || vnfResourceList.isEmpty()) {
-                utils.log("DEBUG", "VNF Resources List is empty",
-                        isDebugEnabled)
+                logger.debug( "VNF Resources List is empty")
             } else {
 
                 for (VnfResource vnfResource : vnfResourceList) {
-                    utils.log("DEBUG", "VNF Resource: " + vnfResource.toString(),
-                            isDebugEnabled)
+                    logger.debug( "VNF Resource: " + vnfResource.toString())
                     ModelInfo vnfResourceModelInfo = vnfResource.getModelInfo()
+                    def toscaNodeType = vnfResource.getToscaNodeType()
+                    def resourceModuleName = toscaNodeType.substring(toscaNodeType.lastIndexOf(".") + 1)
                     def serviceResourceId = vnfResource.getResourceId()
                     def resourceModelInvariantId = vnfResourceModelInfo.getModelInvariantUuid()
                     def resourceModelName = vnfResourceModelInfo.getModelName()
@@ -212,7 +218,7 @@ class OofUtils {
 
                     String placementDemand =
                             "      {\n" +
-                                    "      \"resourceModuleName\": \"${resourceModelName}\",\n" +
+                                    "      \"resourceModuleName\": \"${resourceModuleName}\",\n" +
                                     "      \"serviceResourceId\": \"${serviceResourceId}\",\n" +
                                     "      \"tenantId\": \"${tenantId}\",\n" +
                                     "      \"resourceModelInfo\": {\n" +
@@ -234,7 +240,7 @@ class OofUtils {
         String licenseDemands = ""
         sb = new StringBuilder()
         if (vnfResourceList.isEmpty() || vnfResourceList == null) {
-            utils.log("DEBUG", "Vnf Resources List is Empty", isDebugEnabled)
+            logger.debug( "Vnf Resources List is Empty")
         } else {
             for (VnfResource vnfResource : vnfResourceList) {
                 ModelInfo vnfResourceModelInfo = vnfResource.getModelInfo()
@@ -317,10 +323,10 @@ class OofUtils {
                             "}"
 
 
-            utils.log("DEBUG", "Completed Building OOF Request", isDebugEnabled)
+            logger.debug( "Completed Building OOF Request")
             return request
         } catch (Exception ex) {
-             utils.log("DEBUG", "buildRequest Exception: " + ex, isDebugEnabled)
+             logger.debug( "buildRequest Exception: " + ex)
         }
     }
 
@@ -334,7 +340,6 @@ class OofUtils {
      * @param response - the async callback response from oof
      */
     Void validateCallbackResponse(DelegateExecution execution, String response) {
-        def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
         String placements = ""
         if (isBlank(response)) {
             exceptionUtil.buildAndThrowWorkflowException(execution, 5000, "OOF Async Callback Response is Empty")
@@ -344,12 +349,12 @@ class OofUtils {
                 if (isBlank(placements) || placements.equalsIgnoreCase("[]")) {
                     String statusMessage = jsonUtil.getJsonValue(response, "statusMessage")
                     if (isBlank(statusMessage)) {
-                        utils.log("DEBUG", "Error Occurred in Homing: OOF Async Callback Response does " +
-                                "not contain placement solution.", isDebugEnabled)
+                        logger.debug( "Error Occurred in Homing: OOF Async Callback Response does " +
+                                "not contain placement solution.")
                         exceptionUtil.buildAndThrowWorkflowException(execution, 400,
                                 "OOF Async Callback Response does not contain placement solution.")
                     } else {
-                        utils.log("DEBUG", "Error Occurred in Homing: " + statusMessage, isDebugEnabled)
+                        logger.debug( "Error Occurred in Homing: " + statusMessage)
                         exceptionUtil.buildAndThrowWorkflowException(execution, 400, statusMessage)
                     }
                 } else {
@@ -369,11 +374,11 @@ class OofUtils {
                 } else {
                     errorMessage = "OOF Async Callback Response contains a Request Error. Unable to determine the Request Error Exception."
                 }
-                utils.log("DEBUG", "Error Occurred in Homing: " + errorMessage, isDebugEnabled)
+                logger.debug( "Error Occurred in Homing: " + errorMessage)
                 exceptionUtil.buildAndThrowWorkflowException(execution, 400, errorMessage)
 
             } else {
-                utils.log("DEBUG", "Error Occurred in Homing: Received an Unknown Async Callback Response from OOF.", isDebugEnabled)
+                logger.debug( "Error Occurred in Homing: Received an Unknown Async Callback Response from OOF.")
                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Received an Unknown Async Callback Response from OOF.")
             }
         }
@@ -491,6 +496,7 @@ class OofUtils {
         if (candidatesJson != "") {candidatesJson = candidatesJson.substring(0, candidatesJson.length() - 1)}
         return candidatesJson
     }
+
     /**
      * This method creates a cloudsite in catalog database.
      *
@@ -504,26 +510,38 @@ class OofUtils {
         String auth = UrnPropertiesReader.getVariable("mso.db.auth", execution)
         String uri = "/cloudSite"
 
-        HttpHeaders headers = new HttpHeaders()
-
-        headers.set(HttpHeaders.AUTHORIZATION, auth)
-        headers.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON)
-        headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
+           URL url = new URL(endpoint + uri)
+        HttpClient client = new HttpClientFactory().newJsonClient(url, TargetEntity.EXTERNAL)
+        client.addAdditionalHeader(HttpHeaders.AUTHORIZATION, auth)
+           client.addAdditionalHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON)
 
-        UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(endpoint + uri)
-        HttpEntity<CloudSite> request = new HttpEntity<CloudSite>(cloudSite, headers)
-        RESTConfig config = new RESTConfig(endpoint + uri)
-        RESTClient client = new RESTClient(config).addAuthorizationHeader(auth).
-                addHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON).addHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
-        APIResponse response = client.httpPost(request.getBody().toString())
+        Response response = client.post(request.getBody().toString())
 
-        int responseCode = response.getStatusCode()
-        logDebug("CatalogDB response code is: " + responseCode, isDebugEnabled)
-        String syncResponse = response.getResponseBodyAsString()
-        logDebug("CatalogDB response is: " + syncResponse, isDebugEnabled)
+        int responseCode = response.getStatus()
+        logger.debug("CatalogDB response code is: " + responseCode)
+        String syncResponse = response.readEntity(String.class)
+        logger.debug("CatalogDB response is: " + syncResponse)
 
         if(responseCode != 202){
             exceptionUtil.buildAndThrowWorkflowException(execution, responseCode, "Received a Bad Sync Response from CatalogDB.")
         }
     }
+
+    /**
+     * This method creates a HomingInstance in catalog database.
+     *
+     * @param HomingInstance homingInstance
+     *
+     * @return void
+     */
+    Void createHomingInstance(HomingInstance homingInstance, DelegateExecution execution) {
+        oofInfraUtils.createHomingInstance(homingInstance, execution)
+    }
+     String getMsbHost(DelegateExecution execution) {
+         String msbHost = UrnPropertiesReader.getVariable("mso.msb.host", execution, "msb-iag.onap")
+
+         Integer msbPort = UrnPropertiesReader.getVariable("mso.msb.port", execution, "80").toInteger()
+
+         return UriBuilder.fromPath("").host(msbHost).port(msbPort).scheme("http").build().toString()
+    }
 }