+
+ /**
+ * Create a temp Tosca model file and perform import model to Policy Engine.
+ *
+ * @param cldsToscaModel
+ * Policy model details
+ * @return The response message from policy
+ */
+ public String importToscaModel(CldsToscaModel cldsToscaModel) {
+ String filePath = "";
+ try {
+ String clampToscaPath = refProp.getStringValue(TOSCA_FILE_TEMP_PATH);
+ filePath = buildFilePathForToscaFile(clampToscaPath, cldsToscaModel.getToscaModelName());
+ logger.info("Writing Tosca model : " + filePath);
+ Path path = Paths.get(filePath);
+ Files.createDirectories(path.getParent());
+ // Create or Ovewrite an existing the file
+ try (OutputStream out = Files.newOutputStream(path)) {
+ out.write(cldsToscaModel.getToscaModelYaml().getBytes(), 0,
+ cldsToscaModel.getToscaModelYaml().getBytes().length);
+ }
+ } catch (IOException e) {
+ logger.error("Exception caught when attempting to write Tosca files to disk", e);
+ throw new PolicyClientException("Exception caught when attempting to write Tosca files to disk", e);
+ }
+
+ ImportParameters importParameters = new ImportParameters();
+ importParameters.setImportParameters(cldsToscaModel.getToscaModelName(), cldsToscaModel.getToscaModelName(),
+ null, filePath, IMPORT_TYPE.MICROSERVICE, String.valueOf(cldsToscaModel.getVersion()));
+ return importModel(importParameters);
+ }
+
+ /**
+ * Import the model.
+ * @param importParameters
+ * The ImportParameters
+ * @return The response message from policy
+ */
+ private String importModel(ImportParameters importParameters) {
+ PolicyChangeResponse response = null;
+ String responseMessage = "";
+
+ try {
+ logger.info("Attempting to import tosca policy model for action=" + importParameters.getFilePath());
+ response = getPolicyEngine().policyEngineImport(importParameters);
+ if (response != null) {
+ responseMessage = response.getResponseMessage();
+ }
+ } catch (Exception e) {
+ LoggingUtils.setResponseContext("900", "Policy Model import failed", this.getClass().getName());
+ LoggingUtils.setErrorContext("900", "Policy Model import error");
+ logger.error("Exception occurred during policy communication", e);
+ throw new PolicyClientException("Exception while communicating with Policy", e);
+ }
+ logger.info(LOG_POLICY_PREFIX + responseMessage);
+ if (response != null && (response.getResponseCode() == 200 || response.getResponseCode() == 204)) {
+ LoggingUtils.setResponseContext("0", "Policy Model import success", this.getClass().getName());
+ logger.info("Policy import model successful");
+ metricsLogger.info("Policy import model success");
+ } else {
+ LoggingUtils.setResponseContext("900", "Policy import model failed", this.getClass().getName());
+ logger.warn("Policy import model failed: " + responseMessage);
+ metricsLogger.info("Policy import model failure");
+ throw new BadRequestException("Policy import model failed: " + responseMessage);
+ }
+ return responseMessage;
+ }
+
+ /**
+ * Build file path for tosca file.
+ * @param clampToscaPath
+ * Temp directory path for writing tosca files
+ * @param toscaModelName
+ * Tosca Model Name
+ * @return File Path on the system
+ */
+ private String buildFilePathForToscaFile(String clampToscaPath, String toscaModelName) {
+ return clampToscaPath + "/" + toscaModelName + ".yml";
+ }