diff options
author | Marcus G K Williams <marcus.williams@intel.com> | 2018-11-09 15:56:17 -0800 |
---|---|---|
committer | Marcus G K Williams <marcus.williams@intel.com> | 2018-11-12 18:26:57 -0800 |
commit | 0f76551ead270d92d9933eab58d088e49b1e766c (patch) | |
tree | 159816c59ce619f6ced5a36bc67c530c60bc6d42 /bpmn/MSOCommonBPMN/src | |
parent | a21c5617e3b278a1bd179708b0345381632cef2b (diff) |
Fix OOF Directives processing
- Various fixes to process OOF directives
correctly
- Add orchestrator userParam Processing to ala carte
and vCPE path to ensure multicloud adapter can be
called when homing
- Fix JsonUtils to accept json object as well as
strings
- Adds JsonUtils unit tests to ensure json object
code works correctly and didn't break previous func.
- Fix OOF Homing codes processing of OOF response to
match Casablanca response from OOF (including OOF
directives)
- Add CloudIdentity get and put to catalogDBClient,
along with junit tests - to enable creation of cloudSites
- Fix serviceResourceId check
Issue-ID: SO-1203
Change-Id: Ice9a9d1da2ce0cd4bd11029e3669b30d658fe359
Signed-off-by: Marcus G K Williams <marcus.williams@intel.com>
Diffstat (limited to 'bpmn/MSOCommonBPMN/src')
-rw-r--r-- | bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofHoming.groovy | 71 | ||||
-rw-r--r-- | bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofUtils.groovy | 46 |
2 files changed, 68 insertions, 49 deletions
diff --git a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofHoming.groovy b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofHoming.groovy index 806a144a48..c50ef3530e 100644 --- a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofHoming.groovy +++ b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofHoming.groovy @@ -30,8 +30,10 @@ import org.onap.so.bpmn.core.domain.ServiceDecomposition 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.db.catalog.beans.AuthenticationType import org.onap.so.db.catalog.beans.CloudIdentity import org.onap.so.db.catalog.beans.CloudSite +import org.onap.so.db.catalog.beans.ServerType import org.onap.so.rest.APIResponse import org.onap.so.rest.RESTClient import org.onap.so.rest.RESTConfig @@ -211,17 +213,12 @@ class OofHoming extends AbstractServiceTaskProcessor { for (int j = 0; j < arrSol.length(); j++) { JSONObject placement = arrSol.getJSONObject(j) utils.log("DEBUG", "****** Placement Solution is: " + placement + " *****", "true") - String jsonServiceResourceId = placement.getString("serviceResourceId") - String jsonResourceModuleName = placement.getString("resourceModuleName") + String jsonServiceResourceId = jsonUtil.getJsonValue( placement.toString(), "serviceResourceId") + utils.log("DEBUG", "****** homing serviceResourceId is: " + jsonServiceResourceId + " *****", "true") for (Resource resource : resourceList) { String serviceResourceId = resource.getResourceId() - String resourceModuleName = "" - if (resource.getResourceType() == ResourceType.ALLOTTED_RESOURCE || - resource.getResourceType() == ResourceType.VNF) { - resourceModuleName = resource.getNfFunction() - } - if (serviceResourceId.equalsIgnoreCase(jsonServiceResourceId) || - resourceModuleName.equalsIgnoreCase(jsonResourceModuleName)) { + utils.log("DEBUG", "****** decomp serviceResourceId is: " + serviceResourceId + " *****", "true") + if (serviceResourceId.equalsIgnoreCase(jsonServiceResourceId)) { JSONObject solution = placement.getJSONObject("solution") String solutionType = solution.getString("identifierType") String inventoryType = "" @@ -230,20 +227,26 @@ class OofHoming extends AbstractServiceTaskProcessor { } else { inventoryType = "cloud" } + utils.log("DEBUG", "****** homing inventoryType is: " + inventoryType + " *****", "true") resource.getHomingSolution().setInventoryType(InventoryType.valueOf(inventoryType)) JSONArray assignmentArr = placement.getJSONArray("assignmentInfo") + utils.log("DEBUG", "****** assignmentInfo is: " + assignmentArr.toString() + " *****", "true") + + Map<String, String> assignmentMap = jsonUtil.entryArrayToMap(execution, + assignmentArr.toString(), "key", "value") String oofDirectives = null - assignmentArr.each { element -> - JSONObject jsonObject = new JSONObject(element.toString()) - if (jsonUtil.getJsonRawValue(jsonObject.toString(), "key") == "oof_directives") { - oofDirectives = jsonUtil.getJsonRawValue(jsonObject.toString(), "value") + assignmentMap.each { key, value -> + utils.log("DEBUG", "****** element: " + key + " *****", "true") + if (key == "oof_directives") { + oofDirectives = value + utils.log("DEBUG", "****** homing oofDirectives: " + oofDirectives + " *****", "true") } } - Map<String, String> assignmentMap = jsonUtil.entryArrayToMap(execution, - assignmentArr.toString(), "key", "value") String cloudOwner = assignmentMap.get("cloudOwner") + utils.log("DEBUG", "****** homing cloudOwner: " + cloudOwner + " *****", "true") String cloudRegionId = assignmentMap.get("locationId") + utils.log("DEBUG", "****** homing cloudRegionId: " + cloudRegionId + " *****", "true") resource.getHomingSolution().setCloudOwner(cloudOwner) resource.getHomingSolution().setCloudRegionId(cloudRegionId) @@ -251,12 +254,26 @@ class OofHoming extends AbstractServiceTaskProcessor { cloudSite.setId(cloudRegionId) cloudSite.setRegionId(cloudRegionId) String orchestrator = execution.getVariable("orchestrator") - if ((orchestrator != null) || (orchestrator != "")) { + if ((orchestrator != null) && (orchestrator != "")) { cloudSite.setOrchestrator(orchestrator) + utils.log("DEBUG", "****** orchestrator: " + orchestrator + " *****", "true") + } else { + cloudSite.setOrchestrator("multicloud") } CloudIdentity cloudIdentity = new CloudIdentity() cloudIdentity.setId(cloudRegionId) + cloudIdentity.setIdentityServerType(ServerType."KEYSTONE") + cloudIdentity.setAdminTenant("service") + cloudIdentity.setIdentityAuthenticationType(AuthenticationType.USERNAME_PASSWORD) + String msoMulticloudUserName = UrnPropertiesReader + .getVariable("mso.multicloud.api.password", execution, + "apih") + String msoMulticloudPassword = UrnPropertiesReader + .getVariable("mso.multicloud.api.password", execution, + "abc123") + cloudIdentity.setMsoId(msoMulticloudUserName) + cloudIdentity.setMsoPass(msoMulticloudPassword) // Get MSB Url String msbHost = oofUtils.getMsbHost(execution) String multicloudApiEndpoint = UrnPropertiesReader @@ -265,16 +282,24 @@ class OofHoming extends AbstractServiceTaskProcessor { cloudIdentity.setIdentityUrl(msbHost + multicloudApiEndpoint + "/" + cloudOwner + "/" + cloudRegionId + "/infra_workload") - + utils.log("DEBUG", "****** Cloud IdentityUrl: " + msbHost + multicloudApiEndpoint + + "/" + cloudOwner + "/" + + cloudRegionId + "/infra_workload" + + " *****", "true") + utils.log("DEBUG", "****** CloudIdentity: " + cloudIdentity.toString() + + " *****", "true") cloudSite.setIdentityService(cloudIdentity) + utils.log("DEBUG", "****** CloudSite: " + cloudSite.toString() + + " *****", "true") // Set cloudsite in catalog DB here - oofUtils.createCloudSiteCatalogDb(cloudSite) + // TODO Get cloudsite and compare, set if not present + oofUtils.createCloudSiteCatalogDb(cloudSite, execution) if (oofDirectives != null && oofDirectives != "") { resource.getHomingSolution().setOofDirectives(oofDirectives) execution.setVariable("oofDirectives", oofDirectives) - utils.log("DEBUG", "***** OofDirectives is: " + oofDirectives + + utils.log("DEBUG", "***** OofDirectives set to: " + oofDirectives + " *****", "true") } @@ -285,6 +310,12 @@ class OofHoming extends AbstractServiceTaskProcessor { resource.getHomingSolution().setVnf(vnf) resource.getHomingSolution().setServiceInstanceId(solution.getJSONArray("identifiers")[0].toString()) } + } else { + utils.log("DEBUG", "ProcessHomingSolution Exception: no matching serviceResourceIds returned in " + + "homing solution", isDebugEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - " + + "Occurred in Homing ProcessHomingSolution: no matching serviceResourceIds returned") + } } } @@ -314,8 +345,10 @@ class OofHoming extends AbstractServiceTaskProcessor { utils.log("DEBUG", "*** Completed Homing Process Homing Solution ***", isDebugEnabled) } catch (BpmnError b) { + utils.log("DEBUG", "ProcessHomingSolution Error: " + b, isDebugEnabled) throw b } catch (Exception e) { + utils.log("DEBUG", "ProcessHomingSolution Exception: " + e, isDebugEnabled) msoLogger.error(e); exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occurred in Homing ProcessHomingSolution") } diff --git a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofUtils.groovy b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofUtils.groovy index 909683adea..19d19b8cea 100644 --- a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofUtils.groovy +++ b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofUtils.groovy @@ -33,22 +33,18 @@ 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.db.catalog.beans.CloudIdentity import org.onap.so.db.catalog.beans.CloudSite +import org.onap.so.db.catalog.client.CatalogDbClient import org.onap.so.rest.APIResponse import org.onap.so.rest.RESTClient import org.onap.so.rest.RESTConfig import org.springframework.http.HttpEntity import org.springframework.http.HttpHeaders -import org.springframework.http.HttpMethod -import org.springframework.http.ResponseEntity -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 javax.ws.rs.core.MediaType -import javax.ws.rs.core.Response -import javax.xml.ws.http.HTTPException +import javax.ws.rs.core.UriBuilder import static org.onap.so.bpmn.common.scripts.GenericUtils.* @@ -503,36 +499,26 @@ class OofUtils { * @return void */ Void createCloudSiteCatalogDb(CloudSite cloudSite, DelegateExecution execution) { - + def isDebugEnabled = execution.getVariable("isDebugLogEnabled") String endpoint = UrnPropertiesReader.getVariable("mso.catalog.db.spring.endpoint", execution) 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) + CloudSite getCloudsite = null - 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()) - - int responseCode = response.getStatusCode() - logDebug("CatalogDB response code is: " + responseCode, isDebugEnabled) - String syncResponse = response.getResponseBodyAsString() - logDebug("CatalogDB response is: " + syncResponse, isDebugEnabled) - - if(responseCode != 202){ - exceptionUtil.buildAndThrowWorkflowException(execution, responseCode, "Received a Bad Sync Response from CatalogDB.") + CatalogDbClient catalogDbClient = new CatalogDbClient(endpoint, auth) + try { + getCloudsite = catalogDbClient.getCloudSite(cloudSite.getId().toString()) + } catch (Exception e) { + e = null + utils.log("DEBUG", "Could not find cloudsite : " + cloudSite.getId(), isDebugEnabled) + utils.log("DEBUG", "Creating cloudSite: " + cloudSite.toString(), isDebugEnabled) + } + if (getCloudsite?.getId() != cloudSite.getId()) { + catalogDbClient.postCloudSite(cloudSite) } } String getMsbHost(DelegateExecution execution) { - msbHost = UrnPropertiesReader.getVariable("mso.msb.host", execution, "msb-iag.onap") + String msbHost = UrnPropertiesReader.getVariable("mso.msb.host", execution, "msb-iag.onap") Integer msbPort = UrnPropertiesReader.getVariable("mso.msb.port", execution, "80").toInteger() |