X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Fclamp%2Fclds%2Fsdc%2Fcontroller%2Finstaller%2FCsarInstallerImpl.java;h=d24b6dba996019562eeff5d58a8f623c0cabaaee;hb=f92b38ddcb8b5eb80db55fa1ca6ebdb5af40d115;hp=e28e8ab7058c384af41a716924b5e528ce3f0d3a;hpb=142153e137df36bc470032e26b66313f7afe5df6;p=clamp.git diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstallerImpl.java b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstallerImpl.java index e28e8ab7..d24b6dba 100644 --- a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstallerImpl.java +++ b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstallerImpl.java @@ -26,6 +26,7 @@ package org.onap.clamp.clds.sdc.controller.installer; import com.att.aft.dme2.internal.apache.commons.io.IOUtils; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.databind.node.ObjectNode; import java.io.IOException; import java.util.ArrayList; @@ -39,17 +40,18 @@ import javax.xml.transform.TransformerException; import org.json.simple.parser.ParseException; import org.onap.clamp.clds.client.DcaeInventoryServices; -import org.onap.clamp.clds.config.ClampProperties; import org.onap.clamp.clds.config.sdc.BlueprintParserFilesConfiguration; import org.onap.clamp.clds.config.sdc.BlueprintParserMappingConfiguration; import org.onap.clamp.clds.dao.CldsDao; import org.onap.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException; import org.onap.clamp.clds.model.CldsModel; import org.onap.clamp.clds.model.CldsTemplate; +import org.onap.clamp.clds.model.dcae.DcaeInventoryResponse; import org.onap.clamp.clds.model.properties.ModelProperties; import org.onap.clamp.clds.service.CldsService; import org.onap.clamp.clds.service.CldsTemplateService; import org.onap.clamp.clds.transform.XslTransformer; +import org.onap.clamp.clds.util.JacksonUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; @@ -65,7 +67,7 @@ public class CsarInstallerImpl implements CsarInstaller { private static final EELFLogger logger = EELFManager.getInstance().getLogger(CsarInstallerImpl.class); private Map bpmnMapping = new HashMap<>(); - public static final String TEMPLATE_NAME_PREFIX = "DCAE-Designer-ClosedLoopTemplate-"; + public static final String TEMPLATE_NAME_PREFIX = "DCAE-Designer-Template-"; public static final String CONTROL_NAME_PREFIX = "ClosedLoop-"; public static final String GET_INPUT_BLUEPRINT_PARAM = "get_input"; // This will be used later as the policy scope @@ -87,8 +89,6 @@ public class CsarInstallerImpl implements CsarInstaller { DcaeInventoryServices dcaeInventoryService; @Autowired private XslTransformer cldsBpmnTransformer; - @Autowired - private ClampProperties refProp; @PostConstruct public void loadConfiguration() throws IOException { @@ -99,12 +99,29 @@ public class CsarInstallerImpl implements CsarInstaller { @Override public boolean isCsarAlreadyDeployed(CsarHandler csar) throws SdcArtifactInstallerException { - return (CldsModel.retrieve(cldsDao, buildModelName(csar), true).getId() != null) ? true : false; + boolean alreadyInstalled = true; + for (Entry blueprint : csar.getMapOfBlueprints().entrySet()) { + alreadyInstalled = alreadyInstalled + && (CldsModel.retrieve(cldsDao, buildModelName(csar, blueprint.getKey()), true).getId() != null) + ? true + : false; + } + return alreadyInstalled; } - public static String buildModelName(CsarHandler csar) { - return MODEL_NAME_PREFIX + csar.getSdcCsarHelper().getServiceMetadata().getValue("name") + "_v" - + csar.getSdcNotification().getServiceVersion().replace('.', '_'); + public static String buildModelName(CsarHandler csar, String resourceInstanceName) + throws SdcArtifactInstallerException { + String policyScopePrefix = searchForPolicyScopePrefix(csar.getMapOfBlueprints().get(resourceInstanceName)); + if (policyScopePrefix.contains("*")) { + // This is policy_filter type + policyScopePrefix = policyScopePrefix.replaceAll("\\*", ""); + } else { + // This is normally the get_input case + policyScopePrefix = MODEL_NAME_PREFIX; + } + return policyScopePrefix + csar.getSdcCsarHelper().getServiceMetadata().getValue("name") + "_v" + + csar.getSdcNotification().getServiceVersion().replace('.', '_') + "_" + + resourceInstanceName.replaceAll(" ", ""); } @Override @@ -114,9 +131,10 @@ public class CsarInstallerImpl implements CsarInstaller { logger.info("Installing the CSAR " + csar.getFilePath()); for (Entry blueprint : csar.getMapOfBlueprints().entrySet()) { logger.info("Processing blueprint " + blueprint.getValue().getBlueprintArtifactName()); - String serviceTypeId = queryDcaeToGetServiceTypeId(blueprint.getValue()); - createFakeCldsModel(csar, blueprint.getValue(), createFakeCldsTemplate(csar, blueprint.getValue(), - this.searchForRightMapping(blueprint.getValue())), serviceTypeId); + createFakeCldsModel(csar, blueprint.getValue(), + createFakeCldsTemplate(csar, blueprint.getValue(), + this.searchForRightMapping(blueprint.getValue())), + queryDcaeToGetServiceTypeId(blueprint.getValue())); } logger.info("Successfully installed the CSAR " + csar.getFilePath()); } catch (IOException e) { @@ -148,7 +166,27 @@ public class CsarInstallerImpl implements CsarInstaller { return listConfig.get(0); } - private String searchForPolicyName(BlueprintArtifact blueprintArtifact) throws SdcArtifactInstallerException { + private static String getAllBlueprintParametersInJson(BlueprintArtifact blueprintArtifact) { + ObjectNode node = JacksonUtils.getObjectMapperInstance().createObjectNode(); + Yaml yaml = new Yaml(); + Map inputsNodes = ((Map) ((Map) yaml + .load(blueprintArtifact.getDcaeBlueprint())).get("inputs")); + inputsNodes.entrySet().stream().filter(e -> !e.getKey().contains("policy_id")).forEach(elem -> { + Object defaultNode = ((Map) elem.getValue()).get("default"); + if (defaultNode != null && defaultNode instanceof String) { + node.put(elem.getKey(), (String) defaultNode); + } else if (defaultNode != null) { + node.putPOJO(elem.getKey(), defaultNode); + } else { + node.put(elem.getKey(), ""); + } + }); + node.put("policy_id", "AUTO_GENERATED_POLICY_ID_AT_SUBMIT"); + return node.toString(); + } + + private static String searchForPolicyScopePrefix(BlueprintArtifact blueprintArtifact) + throws SdcArtifactInstallerException { String policyName = null; Yaml yaml = new Yaml(); List policyNameList = new ArrayList<>(); @@ -179,15 +217,26 @@ public class CsarInstallerImpl implements CsarInstaller { return policyNameList.get(0); } - private String queryDcaeToGetServiceTypeId(BlueprintArtifact blueprintArtifact) + /** + * This call must be done when deploying the SDC notification as this call + * get the latest version of the artifact (version can be specified to DCAE + * call) + * + * @param blueprintArtifact + * @return The DcaeInventoryResponse object containing the dcae values + * @throws IOException + * @throws ParseException + * @throws InterruptedException + */ + private DcaeInventoryResponse queryDcaeToGetServiceTypeId(BlueprintArtifact blueprintArtifact) throws IOException, ParseException, InterruptedException { return dcaeInventoryService.getDcaeInformation(blueprintArtifact.getBlueprintArtifactName(), blueprintArtifact.getBlueprintInvariantServiceUuid(), - blueprintArtifact.getResourceAttached().getResourceInvariantUUID()).getTypeId(); + blueprintArtifact.getResourceAttached().getResourceInvariantUUID()); } private CldsTemplate createFakeCldsTemplate(CsarHandler csar, BlueprintArtifact blueprintArtifact, - BlueprintParserFilesConfiguration configFiles) throws IOException { + BlueprintParserFilesConfiguration configFiles) throws IOException, SdcArtifactInstallerException { CldsTemplate template = new CldsTemplate(); template.setBpmnId("Sdc-Generated"); template.setBpmnText( @@ -196,7 +245,8 @@ public class CsarInstallerImpl implements CsarInstaller { "{\"global\":[{\"name\":\"service\",\"value\":[\"" + blueprintArtifact.getDcaeBlueprint() + "\"]}]}"); template.setImageText( IOUtils.toString(appContext.getResource(configFiles.getSvgXmlFilePath()).getInputStream())); - template.setName(TEMPLATE_NAME_PREFIX + buildModelName(csar)); + template.setName(TEMPLATE_NAME_PREFIX + + buildModelName(csar, blueprintArtifact.getResourceAttached().getResourceInstanceName())); template.save(cldsDao, null); logger.info("Fake Clds Template created for blueprint " + blueprintArtifact.getBlueprintArtifactName() + " with name " + template.getName()); @@ -204,33 +254,25 @@ public class CsarInstallerImpl implements CsarInstaller { } private CldsModel createFakeCldsModel(CsarHandler csar, BlueprintArtifact blueprintArtifact, - CldsTemplate cldsTemplate, String serviceTypeId) throws SdcArtifactInstallerException { + CldsTemplate cldsTemplate, DcaeInventoryResponse dcaeInventoryResponse) + throws SdcArtifactInstallerException { try { CldsModel cldsModel = new CldsModel(); - cldsModel.setName(buildModelName(csar)); + cldsModel.setName(buildModelName(csar, blueprintArtifact.getResourceAttached().getResourceInstanceName())); cldsModel.setBlueprintText(blueprintArtifact.getDcaeBlueprint()); cldsModel.setTemplateName(cldsTemplate.getName()); cldsModel.setTemplateId(cldsTemplate.getId()); cldsModel.setBpmnText(cldsTemplate.getBpmnText()); - cldsModel.setTypeId(serviceTypeId); - ModelProperties modelProp = new ModelProperties(cldsModel.getName(), "test", "PUT", false, - cldsBpmnTransformer.doXslTransformToString(cldsTemplate.getBpmnText()), "{}"); - String policyName = searchForPolicyName(blueprintArtifact); - String inputParams = ""; - if (policyName.contains("*")) { - // It's a filter must add a specific prefix - cldsModel.setControlNamePrefix(policyName); - } else { - cldsModel.setControlNamePrefix(CONTROL_NAME_PREFIX); - inputParams = "{\"name\":\"deployParameters\",\"value\":{\n" + "\"policy_id\": \"" - + modelProp.getPolicyNameForDcaeDeploy(refProp) + "\"" + "}}"; - } - cldsModel.setPropText("{\"global\":[{\"name\":\"service\",\"value\":[\"" - + blueprintArtifact.getBlueprintInvariantServiceUuid() + "\"]},{\"name\":\"vf\",\"value\":[\"" - + blueprintArtifact.getResourceAttached().getResourceInvariantUUID() - + "\"]},{\"name\":\"actionSet\",\"value\":[\"vnfRecipe\"]},{\"name\":\"location\",\"value\":[\"DC1\"]}," - + inputParams + "]}"); + cldsModel.setTypeId(dcaeInventoryResponse.getTypeId()); + cldsModel.setTypeName(dcaeInventoryResponse.getTypeName()); + cldsModel.setControlNamePrefix(CONTROL_NAME_PREFIX); + // We must save it otherwise object won't be created in db + // and proptext will always be null + cldsModel.setPropText("{\"global\":[]}"); + // Must save first to have the generated id available to generate + // the policyId cldsModel = cldsModel.save(cldsDao, null); + cldsModel = setModelPropText(cldsModel, blueprintArtifact, cldsTemplate); logger.info("Fake Clds Model created for blueprint " + blueprintArtifact.getBlueprintArtifactName() + " with name " + cldsModel.getName()); return cldsModel; @@ -238,4 +280,19 @@ public class CsarInstallerImpl implements CsarInstaller { throw new SdcArtifactInstallerException("TransformerException when decoding the BpmnText", e); } } + + private CldsModel setModelPropText(CldsModel cldsModel, BlueprintArtifact blueprintArtifact, + CldsTemplate cldsTemplate) throws TransformerException { + // Do a test to validate the BPMN + new ModelProperties(cldsModel.getName(), cldsModel.getControlName(), "PUT", false, + cldsBpmnTransformer.doXslTransformToString(cldsTemplate.getBpmnText()), "{}"); + String inputParams = "{\"name\":\"deployParameters\",\"value\":" + + getAllBlueprintParametersInJson(blueprintArtifact) + "}"; + cldsModel.setPropText("{\"global\":[{\"name\":\"service\",\"value\":[\"" + + blueprintArtifact.getBlueprintInvariantServiceUuid() + "\"]},{\"name\":\"vf\",\"value\":[\"" + + blueprintArtifact.getResourceAttached().getResourceInvariantUUID() + + "\"]},{\"name\":\"actionSet\",\"value\":[\"vnfRecipe\"]},{\"name\":\"location\",\"value\":[\"DC1\"]}," + + inputParams + "]}"); + return cldsModel.save(cldsDao, null); + } }