From f01d3e8377fa4e5a9c1b129fe446575d132f91c2 Mon Sep 17 00:00:00 2001 From: sebdet Date: Mon, 28 Sep 2020 15:26:42 +0200 Subject: Remove legacy operational Policy As it has been removed from policy engine, legacy operational policy code must be removed as well Issue-ID: CLAMP-948 Signed-off-by: sebdet Change-Id: I0767d3da6d227d788e957a0fd50c4548b7c6290c --- .../config/LegacyOperationalPolicyController.java | 48 ---- src/main/java/org/onap/clamp/policy/Policy.java | 2 - .../policy/microservice/MicroServicePolicy.java | 5 - .../operational/LegacyOperationalPolicy.java | 252 --------------------- .../policy/operational/OperationalPolicy.java | 104 ++------- 5 files changed, 13 insertions(+), 398 deletions(-) delete mode 100644 src/main/java/org/onap/clamp/clds/config/LegacyOperationalPolicyController.java delete mode 100644 src/main/java/org/onap/clamp/policy/operational/LegacyOperationalPolicy.java (limited to 'src/main/java') diff --git a/src/main/java/org/onap/clamp/clds/config/LegacyOperationalPolicyController.java b/src/main/java/org/onap/clamp/clds/config/LegacyOperationalPolicyController.java deleted file mode 100644 index 69e94a35a..000000000 --- a/src/main/java/org/onap/clamp/clds/config/LegacyOperationalPolicyController.java +++ /dev/null @@ -1,48 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.clamp.clds.config; - -import javax.annotation.PostConstruct; -import org.onap.clamp.loop.template.PolicyModel; -import org.onap.clamp.loop.template.PolicyModelsService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; - -@Configuration -@Profile("legacy-operational-policy") -public class LegacyOperationalPolicyController { - - @Autowired - PolicyModelsService policyModelService; - - public static final String OPERATIONAL_POLICY_LEGACY = "onap.policies.controlloop.Operational"; - - @PostConstruct - public void init() { - policyModelService.saveOrUpdatePolicyModel(new PolicyModel(OPERATIONAL_POLICY_LEGACY, "", "1.0.0", - "OperationalPolicyLegacy")); - } -} - diff --git a/src/main/java/org/onap/clamp/policy/Policy.java b/src/main/java/org/onap/clamp/policy/Policy.java index 65e88d182..d84f2c8a0 100644 --- a/src/main/java/org/onap/clamp/policy/Policy.java +++ b/src/main/java/org/onap/clamp/policy/Policy.java @@ -284,6 +284,4 @@ public abstract class Policy extends AuditEntity { .append(blueprintFilename.replaceAll(".yaml", "")); return buffer.toString().replace('.', '_').replaceAll(" ", ""); } - - public abstract Boolean isLegacy(); } diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java index 127f495cc..77627a31a 100644 --- a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java +++ b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java @@ -157,11 +157,6 @@ public class MicroServicePolicy extends Policy implements Serializable { this.getPolicyModel().getPolicyModelType(), serviceModel)); } - @Override - public Boolean isLegacy() { - return false; - } - public Boolean getShared() { return shared; } diff --git a/src/main/java/org/onap/clamp/policy/operational/LegacyOperationalPolicy.java b/src/main/java/org/onap/clamp/policy/operational/LegacyOperationalPolicy.java deleted file mode 100644 index a7a344df2..000000000 --- a/src/main/java/org/onap/clamp/policy/operational/LegacyOperationalPolicy.java +++ /dev/null @@ -1,252 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights - * reserved. - * Modifications Copyright (C) 2020 Huawei Technologies Co., Ltd. - * ================================================================================ - * 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.clamp.policy.operational; - -import com.google.gson.GsonBuilder; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.TreeMap; - -import org.apache.commons.lang3.math.NumberUtils; -import org.onap.clamp.loop.Loop; -import org.yaml.snakeyaml.DumperOptions; -import org.yaml.snakeyaml.DumperOptions.ScalarStyle; -import org.yaml.snakeyaml.Yaml; - -/** - * This class contains the code required to support the sending of Legacy - * operational payload to policy engine. This will probably disappear in El - * Alto. - */ -public class LegacyOperationalPolicy { - - private static final String ACTOR = "actor"; - private static final String RECIPE = "recipe"; - private static final String POLICIES = "policies"; - private static final String PAYLOAD = "payload"; - - private LegacyOperationalPolicy() { - - } - - private static void translateStringValues(String jsonKey, String stringValue, JsonElement parentJsonElement) { - if (stringValue.equalsIgnoreCase("true") || stringValue.equalsIgnoreCase("false")) { - parentJsonElement.getAsJsonObject().addProperty(jsonKey, Boolean.valueOf(stringValue)); - - } else if (NumberUtils.isParsable(stringValue)) { - parentJsonElement.getAsJsonObject().addProperty(jsonKey, Long.parseLong(stringValue)); - } - } - - private static JsonElement removeAllQuotes(JsonElement jsonElement) { - if (jsonElement.isJsonArray()) { - for (JsonElement element : jsonElement.getAsJsonArray()) { - removeAllQuotes(element); - } - } else if (jsonElement.isJsonObject()) { - for (Entry entry : jsonElement.getAsJsonObject().entrySet()) { - if (entry.getValue().isJsonPrimitive() && entry.getValue().getAsJsonPrimitive().isString()) { - translateStringValues(entry.getKey(), entry.getValue().getAsString(), jsonElement); - } else { - removeAllQuotes(entry.getValue()); - } - } - } - return jsonElement; - } - - /** - * This method rework the payload attribute (yaml) that is normally wrapped in a - * string when coming from the UI. - * - * @param policyJson The operational policy json config - * @return The same object reference but modified - */ - public static JsonElement reworkPayloadAttributes(JsonElement policyJson) { - for (JsonElement policy : policyJson.getAsJsonObject().get("policies").getAsJsonArray()) { - JsonElement payloadElem = policy.getAsJsonObject().get("payload"); - String payloadString = payloadElem != null ? payloadElem.getAsString() : ""; - if (!payloadString.isEmpty()) { - Map testMap = new Yaml().load(payloadString); - String json = new GsonBuilder().create().toJson(testMap); - policy.getAsJsonObject().add("payload", new GsonBuilder().create().fromJson(json, JsonElement.class)); - } - } - return policyJson; - } - - private static void replacePropertiesIfEmpty(JsonElement policy, String key, String valueIfEmpty) { - JsonElement payloadElem = policy.getAsJsonObject().get(key); - String payloadString = payloadElem != null ? payloadElem.getAsString() : ""; - if (payloadString.isEmpty()) { - policy.getAsJsonObject().addProperty(key, valueIfEmpty); - } - } - - private static JsonElement fulfillPoliciesTreeField(JsonElement policyJson) { - for (JsonElement policy : policyJson.getAsJsonObject().get("policies").getAsJsonArray()) { - replacePropertiesIfEmpty(policy, "success", "final_success"); - replacePropertiesIfEmpty(policy, "failure", "final_failure"); - replacePropertiesIfEmpty(policy, "failure_timeout", "final_failure_timeout"); - replacePropertiesIfEmpty(policy, "failure_retries", "final_failure_retries"); - replacePropertiesIfEmpty(policy, "failure_exception", "final_failure_exception"); - replacePropertiesIfEmpty(policy, "failure_guard", "final_failure_guard"); - // Again special case for payload, should remove it if it's there but empty - // otherwise policy crashes - JsonElement payloadElem = policy.getAsJsonObject().get("payload"); - if (payloadElem != null && payloadElem.isJsonPrimitive() && payloadElem.getAsString().isEmpty()) { - policy.getAsJsonObject().remove("payload"); - } - } - return policyJson; - } - - private static Map createMap(JsonElement jsonElement) { - Map mapResult = new TreeMap<>(); - - if (jsonElement.isJsonObject()) { - for (Entry entry : jsonElement.getAsJsonObject().entrySet()) { - if (entry.getValue().isJsonPrimitive() && entry.getValue().getAsJsonPrimitive().isString()) { - mapResult.put(entry.getKey(), entry.getValue().getAsString()); - } else if (entry.getValue().isJsonPrimitive() && entry.getValue().getAsJsonPrimitive().isBoolean()) { - mapResult.put(entry.getKey(), entry.getValue().getAsBoolean()); - } else if (entry.getValue().isJsonPrimitive() && entry.getValue().getAsJsonPrimitive().isNumber()) { - // Only int ro long normally, we don't need float here - mapResult.put(entry.getKey(), entry.getValue().getAsLong()); - } else if (entry.getValue().isJsonArray()) { - List> newArray = new ArrayList<>(); - mapResult.put(entry.getKey(), newArray); - for (JsonElement element : entry.getValue().getAsJsonArray()) { - newArray.add(createMap(element)); - } - } else if (entry.getValue().isJsonObject()) { - mapResult.put(entry.getKey(), createMap(entry.getValue())); - } - } - } - return mapResult; - } - - /** - * This method transforms the configuration json to a Yaml format. - * - * @param operationalPolicyJsonElement The operational policy json config - * @return The Yaml as string - */ - public static String createPolicyPayloadYamlLegacy(JsonElement operationalPolicyJsonElement) { - DumperOptions options = new DumperOptions(); - options.setDefaultScalarStyle(ScalarStyle.PLAIN); - options.setIndent(2); - options.setPrettyFlow(true); - // Policy can't support { } in the yaml - options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); - return (new Yaml(options)).dump(createMap(fulfillPoliciesTreeField( - removeAllQuotes(reworkActorAttributes(operationalPolicyJsonElement.getAsJsonObject().deepCopy()))))); - } - - /** - * This method load mandatory field in the operational policy configuration - * JSON. - * - * @param configurationsJson The operational policy JSON - * @param loop The parent loop object - */ - public static void preloadConfiguration(JsonObject configurationsJson, Loop loop) { - if (configurationsJson != null && configurationsJson.entrySet().isEmpty()) { - JsonObject controlLoopName = new JsonObject(); - controlLoopName.addProperty("controlLoopName", - loop != null ? loop.getName() : "Empty (NO loop loaded yet)"); - JsonObject controlLoop = new JsonObject(); - controlLoop.add("controlLoop", controlLoopName); - configurationsJson.add("operational_policy", controlLoop); - } - } - - /** - * This method rework on the actor/recipe and payload attribute. - * - * @param policyJson The operational policy json config - * @return The same object reference but modified - */ - public static JsonElement reworkActorAttributes(JsonElement policyJson) { - for (JsonElement policy : policyJson.getAsJsonObject().get(POLICIES).getAsJsonArray()) { - JsonObject actor = policy.getAsJsonObject().get(ACTOR).getAsJsonObject(); - policy.getAsJsonObject().remove(ACTOR); - String actorStr = actor.getAsJsonObject().get(ACTOR).getAsString(); - policy.getAsJsonObject().addProperty(ACTOR, actorStr); - - if ("CDS".equalsIgnoreCase(actorStr)) { - policy.getAsJsonObject().addProperty(RECIPE, getRecipe(actor)); - addCdsPayloadAttributes(actor.getAsJsonObject(RECIPE), policy); - } else { - policy.getAsJsonObject().addProperty(RECIPE, - actor.getAsJsonObject().get(RECIPE).getAsString()); - addPayloadAttributes(actor, policy); - } - } - return policyJson; - } - - private static void addPayloadAttributes(JsonObject jsonObject, - JsonElement policy) { - JsonElement payloadElem = jsonObject.getAsJsonObject().get(PAYLOAD); - String payloadString = payloadElem != null ? payloadElem.getAsString() : ""; - if (!payloadString.isEmpty()) { - Map testMap = new Yaml().load(payloadString); - String json = new GsonBuilder().create().toJson(testMap); - policy.getAsJsonObject().add(PAYLOAD, - new GsonBuilder().create().fromJson(json, JsonElement.class)); - } else { - policy.getAsJsonObject().addProperty(PAYLOAD, ""); - } - } - - private static void addCdsPayloadAttributes(JsonObject jsonObject, - JsonElement policy) { - JsonElement payloadElem = jsonObject.getAsJsonObject().get(PAYLOAD); - JsonObject payloadObject = payloadElem != null ? - payloadElem.getAsJsonObject() : null; - if (payloadObject != null) { - /* Since policy expects payload to be map of string, - converting data object to string. */ - JsonObject dataObject = payloadObject.get("data").getAsJsonObject(); - payloadObject.remove("data"); - payloadObject.addProperty("data", dataObject.toString()); - policy.getAsJsonObject().add(PAYLOAD, - payloadObject); - } else { - policy.getAsJsonObject().addProperty(PAYLOAD, ""); - } - } - - private static String getRecipe(JsonObject actor) { - return actor.getAsJsonObject().get("recipe").getAsJsonObject().get("recipe").getAsString(); - } -} diff --git a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java index b4020c18e..4b052427f 100644 --- a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java +++ b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java @@ -26,19 +26,10 @@ package org.onap.clamp.policy.operational; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.annotations.Expose; -import java.io.IOException; import java.io.Serializable; import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; -import java.util.HashMap; -import java.util.Map; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; @@ -50,7 +41,6 @@ import javax.persistence.Transient; import org.apache.commons.lang3.RandomStringUtils; import org.hibernate.annotations.TypeDef; import org.hibernate.annotations.TypeDefs; -import org.onap.clamp.clds.config.LegacyOperationalPolicyController; import org.onap.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport; import org.onap.clamp.dao.model.jsontype.StringJsonUserType; import org.onap.clamp.loop.Loop; @@ -58,8 +48,6 @@ import org.onap.clamp.loop.service.Service; import org.onap.clamp.loop.template.LoopElementModel; import org.onap.clamp.loop.template.PolicyModel; import org.onap.clamp.policy.Policy; -import org.yaml.snakeyaml.DumperOptions; -import org.yaml.snakeyaml.Yaml; @Entity @Table(name = "operational_policies") @@ -139,10 +127,9 @@ public class OperationalPolicy extends Policy implements Serializable { * @param service The loop service * @param policyModel The policy model * @param toscaConverter The tosca converter that must be used to create the Json representation - * @throws IOException In case of issues with the legacy files (generated from resource files */ public OperationalPolicy(Loop loop, Service service, PolicyModel policyModel, - ToscaConverterWithDictionarySupport toscaConverter) throws IOException { + ToscaConverterWithDictionarySupport toscaConverter) { this(Policy.generatePolicyName("OPERATIONAL", service.getName(), service.getVersion(), policyModel.getPolicyAcronym() + '_' + policyModel.getVersion(), RandomStringUtils.randomAlphanumeric(3)), @@ -182,18 +169,12 @@ public class OperationalPolicy extends Policy implements Serializable { if (this.getPolicyModel() == null) { return; } - if (this.isLegacy()) { - // Op policy Legacy case - LegacyOperationalPolicy.preloadConfiguration(this.getConfigurationsJson(), this.loop); - this.setJsonRepresentation(OperationalPolicyRepresentationBuilder - .generateOperationalPolicySchema(this.loop.getModelService())); - } - else { - // Generic Case - this.setJsonRepresentation(toscaConverter.convertToscaToJsonSchemaObject( - this.getPolicyModel().getPolicyModelTosca(), - this.getPolicyModel().getPolicyModelType(), serviceModel)); - } + + // Generic Case + this.setJsonRepresentation(toscaConverter.convertToscaToJsonSchemaObject( + this.getPolicyModel().getPolicyModelTosca(), + this.getPolicyModel().getPolicyModelType(), serviceModel)); + } } @@ -221,76 +202,17 @@ public class OperationalPolicy extends Policy implements Serializable { if (other.name != null) { return false; } - } - else if (!name.equals(other.name)) { - return false; + } else { + if (!name.equals(other.name)) { + return false; + } } return true; } - public Boolean isLegacy() { - return (this.getPolicyModel() != null) && this.getPolicyModel().getPolicyModelType().contains( - LegacyOperationalPolicyController.OPERATIONAL_POLICY_LEGACY); - } - - /** - * Create policy Yaml from json defined here. - * - * @return A string containing Yaml - */ - public String createPolicyPayloadYaml() { - JsonObject policyPayloadResult = new JsonObject(); - - policyPayloadResult.addProperty("tosca_definitions_version", "tosca_simple_yaml_1_0_0"); - - JsonObject topologyTemplateNode = new JsonObject(); - policyPayloadResult.add("topology_template", topologyTemplateNode); - - JsonArray policiesArray = new JsonArray(); - topologyTemplateNode.add("policies", policiesArray); - - JsonObject operationalPolicy = new JsonObject(); - policiesArray.add(operationalPolicy); - - JsonObject operationalPolicyDetails = new JsonObject(); - operationalPolicy.add(this.name, operationalPolicyDetails); - operationalPolicyDetails.addProperty("type", "onap.policies.controlloop.Operational"); - operationalPolicyDetails.addProperty("version", "1.0.0"); - - JsonObject metadata = new JsonObject(); - operationalPolicyDetails.add("metadata", metadata); - metadata.addProperty("policy-id", this.name); - - operationalPolicyDetails.add("properties", LegacyOperationalPolicy - .reworkActorAttributes(this.getConfigurationsJson().get("operational_policy").deepCopy())); - - DumperOptions options = new DumperOptions(); - options.setIndent(2); - options.setPrettyFlow(true); - options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); - Gson gson = new GsonBuilder().create(); - - return (new Yaml(options)).dump(gson.fromJson(gson.toJson(policyPayloadResult), Map.class)); - } - @Override public String createPolicyPayload() throws UnsupportedEncodingException { - if (isLegacy()) { - // Now using the legacy payload fo Dublin - JsonObject payload = new JsonObject(); - payload.addProperty("policy-id", this.getName()); - payload.addProperty("content", - URLEncoder.encode( - LegacyOperationalPolicy - .createPolicyPayloadYamlLegacy( - this.getConfigurationsJson().get("operational_policy")), - StandardCharsets.UTF_8.toString())); - String opPayload = new GsonBuilder().setPrettyPrinting().create().toJson(payload); - logger.info("Operational policy payload: " + opPayload); - return opPayload; - } - else { - return super.createPolicyPayload(); - } + return super.createPolicyPayload(); + } } -- cgit 1.2.3-korg