import com.att.eelf.configuration.EELFLogger;
import com.att.eelf.configuration.EELFManager;
-import com.google.gson.JsonObject;
-
import java.io.IOException;
-import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Map.Entry;
-
import org.json.simple.parser.ParseException;
import org.onap.clamp.clds.client.DcaeInventoryServices;
+import org.onap.clamp.clds.client.PolicyEngineServices;
+import org.onap.clamp.clds.exception.sdc.controller.BlueprintParserException;
import org.onap.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException;
import org.onap.clamp.clds.model.dcae.DcaeInventoryResponse;
import org.onap.clamp.clds.sdc.controller.installer.BlueprintArtifact;
+import org.onap.clamp.clds.sdc.controller.installer.BlueprintMicroService;
import org.onap.clamp.clds.sdc.controller.installer.BlueprintParser;
import org.onap.clamp.clds.sdc.controller.installer.ChainGenerator;
import org.onap.clamp.clds.sdc.controller.installer.CsarHandler;
-import org.onap.clamp.clds.sdc.controller.installer.MicroService;
-import org.onap.clamp.clds.util.JsonUtils;
-import org.onap.clamp.clds.util.drawing.SvgFacade;
-import org.onap.clamp.loop.deploy.DcaeDeployParameters;
+import org.onap.clamp.loop.cds.CdsDataInstaller;
+import org.onap.clamp.loop.service.CsarServiceInstaller;
import org.onap.clamp.loop.service.Service;
-import org.onap.clamp.loop.service.ServiceRepository;
-import org.onap.clamp.policy.Policy;
-import org.onap.clamp.policy.microservice.MicroServicePolicy;
-import org.onap.clamp.policy.operational.OperationalPolicy;
-import org.onap.sdc.tosca.parser.api.IEntityDetails;
-import org.onap.sdc.tosca.parser.elements.queries.EntityQuery;
-import org.onap.sdc.tosca.parser.elements.queries.TopologyTemplateQuery;
-import org.onap.sdc.tosca.parser.enums.EntityTemplateType;
-import org.onap.sdc.tosca.parser.enums.SdcTypes;
-import org.onap.sdc.toscaparser.api.NodeTemplate;
-import org.onap.sdc.toscaparser.api.Property;
+import org.onap.clamp.loop.template.LoopElementModel;
+import org.onap.clamp.loop.template.LoopTemplate;
+import org.onap.clamp.loop.template.LoopTemplatesRepository;
+import org.onap.clamp.loop.template.PolicyModel;
+import org.onap.clamp.loop.template.PolicyModelId;
+import org.onap.clamp.loop.template.PolicyModelsRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-import org.yaml.snakeyaml.Yaml;
/**
* This class will be instantiated by spring config, and used by Sdc Controller.
public class CsarInstaller {
private static final EELFLogger logger = EELFManager.getInstance().getLogger(CsarInstaller.class);
- 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
- public static final String MODEL_NAME_PREFIX = "Loop_";
@Autowired
- LoopsRepository loopRepository;
+ private PolicyModelsRepository policyModelsRepository;
@Autowired
- ServiceRepository serviceRepository;
+ private LoopTemplatesRepository loopTemplatesRepository;
@Autowired
- BlueprintParser blueprintParser;
+ private ChainGenerator chainGenerator;
@Autowired
- ChainGenerator chainGenerator;
+ private DcaeInventoryServices dcaeInventoryService;
@Autowired
- DcaeInventoryServices dcaeInventoryService;
+ private CsarServiceInstaller csarServiceInstaller;
@Autowired
- private SvgFacade svgFacade;
+ private CdsDataInstaller cdsDataInstaller;
+
+ @Autowired
+ private PolicyEngineServices policyEngineServices;
/**
- * Verify whether Csar is deployed.
- *
- * @param csar The Csar Handler
- * @return The flag indicating whether Csar is deployed
- * @throws SdcArtifactInstallerException The SdcArtifactInstallerException
- */
+ * Verify whether Csar is deployed.
+ *
+ * @param csar The Csar Handler
+ * @return The flag indicating whether Csar is deployed
+ * @throws SdcArtifactInstallerException The SdcArtifactInstallerException
+ */
public boolean isCsarAlreadyDeployed(CsarHandler csar) throws SdcArtifactInstallerException {
- boolean alreadyInstalled = true;
- JsonObject serviceDetails = JsonUtils.GSON.fromJson(
- JsonUtils.GSON.toJson(csar.getSdcCsarHelper().getServiceMetadataAllProperties()), JsonObject.class);
- alreadyInstalled = alreadyInstalled
- && serviceRepository.existsById(serviceDetails.get("UUID").getAsString());
+ boolean alreadyInstalled = csarServiceInstaller.isServiceAlreadyDeployed(csar);
for (Entry<String, BlueprintArtifact> blueprint : csar.getMapOfBlueprints().entrySet()) {
alreadyInstalled = alreadyInstalled
- && loopRepository.existsById(Loop.generateLoopName(csar.getSdcNotification().getServiceName(),
- csar.getSdcNotification().getServiceVersion(),
- blueprint.getValue().getResourceAttached().getResourceInstanceName(),
- blueprint.getValue().getBlueprintArtifactName()));
+ && loopTemplatesRepository.existsById(LoopTemplate.generateLoopTemplateName(
+ csar.getSdcNotification().getServiceName(), csar.getSdcNotification().getServiceVersion(),
+ blueprint.getValue().getResourceAttached().getResourceInstanceName(),
+ blueprint.getValue().getBlueprintArtifactName()));
}
-
return alreadyInstalled;
}
/**
- * Install the service and loops from the csar.
- *
+ * Install the service and loop templates from the csar.
+ *
* @param csar The Csar Handler
* @throws SdcArtifactInstallerException The SdcArtifactInstallerException
- * @throws InterruptedException The InterruptedException
+ * @throws InterruptedException The InterruptedException
+ * @throws BlueprintParserException In case of issues with the blueprint
+ * parsing
*/
- public void installTheCsar(CsarHandler csar) throws SdcArtifactInstallerException, InterruptedException {
+ public void installTheCsar(CsarHandler csar)
+ throws SdcArtifactInstallerException, InterruptedException, BlueprintParserException {
logger.info("Installing the CSAR " + csar.getFilePath());
- installTheLoop(csar, installTheService(csar));
+ Service associatedService = csarServiceInstaller.installTheService(csar);
+ cdsDataInstaller.installCdsServiceProperties(csar, associatedService);
+
+ installTheLoopTemplates(csar, associatedService);
logger.info("Successfully installed the CSAR " + csar.getFilePath());
}
/**
- * Install the Loop from the csar.
- *
- * @param csar The Csar Handler
+ * Install the loop templates from the csar.
+ *
+ * @param csar The Csar Handler
* @param service The service object that is related to the loop
* @throws SdcArtifactInstallerException The SdcArtifactInstallerException
- * @throws InterruptedException The InterruptedException
+ * @throws InterruptedException The InterruptedException
+ * @throws BlueprintParserException In case of issues with the blueprint
+ * parsing
*/
- @Transactional(propagation = Propagation.REQUIRED)
- public void installTheLoop(CsarHandler csar, Service service)
- throws SdcArtifactInstallerException, InterruptedException {
+ public void installTheLoopTemplates(CsarHandler csar, Service service)
+ throws SdcArtifactInstallerException, InterruptedException, BlueprintParserException {
try {
logger.info("Installing the Loops");
for (Entry<String, BlueprintArtifact> blueprint : csar.getMapOfBlueprints().entrySet()) {
logger.info("Processing blueprint " + blueprint.getValue().getBlueprintArtifactName());
- loopRepository.save(createLoopFromBlueprint(csar, blueprint.getValue(), service));
+ loopTemplatesRepository.save(createLoopTemplateFromBlueprint(csar, blueprint.getValue(), service));
}
logger.info("Successfully installed the Loops ");
} catch (IOException e) {
}
}
- /**
- * Install the Service from the csar.
- *
- * @param csar The Csar Handler
- * @return The service object
- */
- @Transactional
- public Service installTheService(CsarHandler csar) {
- logger.info("Start to install the Service from csar");
- JsonObject serviceDetails = JsonUtils.GSON.fromJson(
- JsonUtils.GSON.toJson(csar.getSdcCsarHelper().getServiceMetadataAllProperties()), JsonObject.class);
-
- // Add properties details for each type, VfModule, VF, VFC, ....
- JsonObject resourcesProp = createServicePropertiesByType(csar);
- resourcesProp.add("VFModule", createVfModuleProperties(csar));
-
- Service modelService = new Service(serviceDetails, resourcesProp,
- csar.getSdcNotification().getServiceVersion());
-
- serviceRepository.save(modelService);
- logger.info("Successfully installed the Service");
- return modelService;
- }
-
- private Loop createLoopFromBlueprint(CsarHandler csar, BlueprintArtifact blueprintArtifact, Service service)
- throws IOException, ParseException, InterruptedException {
- Loop newLoop = new Loop();
- newLoop.setBlueprint(blueprintArtifact.getDcaeBlueprint());
- newLoop.setName(Loop.generateLoopName(csar.getSdcNotification().getServiceName(),
+ private LoopTemplate createLoopTemplateFromBlueprint(CsarHandler csar, BlueprintArtifact blueprintArtifact,
+ Service service)
+ throws IOException, ParseException, InterruptedException, BlueprintParserException,
+ SdcArtifactInstallerException {
+ LoopTemplate newLoopTemplate = new LoopTemplate();
+ newLoopTemplate.setBlueprint(blueprintArtifact.getDcaeBlueprint());
+ newLoopTemplate.setName(LoopTemplate.generateLoopTemplateName(csar.getSdcNotification().getServiceName(),
csar.getSdcNotification().getServiceVersion(),
blueprintArtifact.getResourceAttached().getResourceInstanceName(),
blueprintArtifact.getBlueprintArtifactName()));
- newLoop.setLastComputedState(LoopState.DESIGN);
-
- List<MicroService> microServicesChain = chainGenerator
- .getChainOfMicroServices(blueprintParser.getMicroServices(blueprintArtifact.getDcaeBlueprint()));
+ List<BlueprintMicroService> microServicesChain = chainGenerator
+ .getChainOfMicroServices(BlueprintParser.getMicroServices(blueprintArtifact.getDcaeBlueprint()));
if (microServicesChain.isEmpty()) {
- microServicesChain = blueprintParser.fallbackToOneMicroService(blueprintArtifact.getDcaeBlueprint());
+ microServicesChain = BlueprintParser.fallbackToOneMicroService();
}
- newLoop.setModelService(service);
- newLoop.setMicroServicePolicies(
- createMicroServicePolicies(microServicesChain, csar, blueprintArtifact, newLoop));
- newLoop.setOperationalPolicies(createOperationalPolicies(csar, blueprintArtifact, newLoop));
-
- newLoop.setSvgRepresentation(svgFacade.getSvgImage(microServicesChain));
- newLoop.setGlobalPropertiesJson(createGlobalPropertiesJson(blueprintArtifact, newLoop));
-
+ newLoopTemplate.setModelService(service);
+ newLoopTemplate.addLoopElementModels(createMicroServiceModels(blueprintArtifact, microServicesChain));
+ newLoopTemplate.setMaximumInstancesAllowed(0);
DcaeInventoryResponse dcaeResponse = queryDcaeToGetServiceTypeId(blueprintArtifact);
- newLoop.setDcaeBlueprintId(dcaeResponse.getTypeId());
- return newLoop;
- }
-
- private HashSet<OperationalPolicy> createOperationalPolicies(CsarHandler csar, BlueprintArtifact blueprintArtifact,
- Loop newLoop) {
- return new HashSet<>(Arrays.asList(new OperationalPolicy(Policy.generatePolicyName("OPERATIONAL",
- csar.getSdcNotification().getServiceName(), csar.getSdcNotification().getServiceVersion(),
- blueprintArtifact.getResourceAttached().getResourceInstanceName(),
- blueprintArtifact.getBlueprintArtifactName()), newLoop, new JsonObject())));
- }
-
- private HashSet<MicroServicePolicy> createMicroServicePolicies(List<MicroService> microServicesChain,
- CsarHandler csar, BlueprintArtifact blueprintArtifact, Loop newLoop) throws IOException {
- HashSet<MicroServicePolicy> newSet = new HashSet<>();
-
- for (MicroService microService : microServicesChain) {
- MicroServicePolicy microServicePolicy = new MicroServicePolicy(
- Policy.generatePolicyName(microService.getName(), csar.getSdcNotification().getServiceName(),
- csar.getSdcNotification().getServiceVersion(),
- blueprintArtifact.getResourceAttached().getResourceInstanceName(),
- blueprintArtifact.getBlueprintArtifactName()),
- microService.getModelType(), csar.getPolicyModelYaml().orElse(""), false,
- new HashSet<>(Arrays.asList(newLoop)));
-
- newSet.add(microServicePolicy);
- microService.setMappedNameJpa(microServicePolicy.getName());
- }
- return newSet;
- }
-
- private JsonObject createGlobalPropertiesJson(BlueprintArtifact blueprintArtifact, Loop newLoop) {
- return DcaeDeployParameters.getDcaeDeploymentParametersInJson(blueprintArtifact, newLoop);
+ newLoopTemplate.setDcaeBlueprintId(dcaeResponse.getTypeId());
+ return newLoopTemplate;
}
- private static JsonObject createVfModuleProperties(CsarHandler csar) {
- JsonObject vfModuleProps = new JsonObject();
- // Loop on all Groups defined in the service (VFModule entries type:
- // org.openecomp.groups.VfModule)
- for (IEntityDetails entity : csar.getSdcCsarHelper().getEntity(
- EntityQuery.newBuilder(EntityTemplateType.GROUP).build(),
- TopologyTemplateQuery.newBuilder(SdcTypes.SERVICE).build(), false)) {
- // Get all metadata info
- JsonObject allVfProps = (JsonObject) JsonUtils.GSON.toJsonTree(entity.getMetadata().getAllProperties());
- vfModuleProps.add(entity.getMetadata().getAllProperties().get("vfModuleModelName"), allVfProps);
- // now append the properties section so that we can also have isBase,
- // volume_group, etc ... fields under the VFmodule name
- for (Entry<String, Property> additionalProp : entity.getProperties().entrySet()) {
- allVfProps.add(additionalProp.getValue().getName(),
- JsonUtils.GSON.toJsonTree(additionalProp.getValue().getValue()));
+ private HashSet<LoopElementModel> createMicroServiceModels(BlueprintArtifact blueprintArtifact,
+ List<BlueprintMicroService> microServicesChain)
+ throws SdcArtifactInstallerException {
+ HashSet<LoopElementModel> newSet = new HashSet<>();
+ for (BlueprintMicroService microService : microServicesChain) {
+ LoopElementModel loopElementModel =
+ new LoopElementModel(microService.getModelType(), LoopElementModel.MICRO_SERVICE_TYPE,
+ null);
+ newSet.add(loopElementModel);
+ PolicyModel newPolicyModel = policyEngineServices.createPolicyModelFromPolicyEngine(microService);
+ if (newPolicyModel != null) {
+ loopElementModel.addPolicyModel(newPolicyModel);
+ } else {
+ throw new SdcArtifactInstallerException(
+ "Unable to find the policy specified in the blueprint " +
+ blueprintArtifact.getBlueprintArtifactName() + ") on the Policy Engine:" +
+ microService.getModelType() + "/" + microService.getModelVersion());
}
}
- return vfModuleProps;
- }
-
- private static JsonObject createServicePropertiesByType(CsarHandler csar) {
- JsonObject resourcesProp = new JsonObject();
- // Iterate on all types defined in the tosca lib
- for (SdcTypes type : SdcTypes.values()) {
- JsonObject resourcesPropByType = new JsonObject();
- // For each type, get the metadata of each nodetemplate
- for (NodeTemplate nodeTemplate : csar.getSdcCsarHelper().getServiceNodeTemplateBySdcType(type)) {
- resourcesPropByType.add(nodeTemplate.getName(),
- JsonUtils.GSON.toJsonTree(nodeTemplate.getMetaData().getAllProperties()));
- }
- resourcesProp.add(type.getValue(), resourcesPropByType);
- }
- return resourcesProp;
+ return newSet;
}
/**
- * ll get the latest version of the artifact (version can be specified to DCAE
- * call).
+ * Get the service blueprint Id in the Dcae inventory using the SDC UUID.
*
* @return The DcaeInventoryResponse object containing the dcae values
*/