diff options
18 files changed, 1443 insertions, 4 deletions
diff --git a/main/src/main/java/org/onap/policy/api/main/exception/PolicyApiException.java b/main/src/main/java/org/onap/policy/api/main/exception/PolicyApiException.java index 1fccb06d..580ba33d 100644 --- a/main/src/main/java/org/onap/policy/api/main/exception/PolicyApiException.java +++ b/main/src/main/java/org/onap/policy/api/main/exception/PolicyApiException.java @@ -36,6 +36,15 @@ public class PolicyApiException extends Exception { } /** + * Instantiates a new policy api exception with a caused by exception. + * + * @param exp the exception that caused this exception to be thrown + */ + public PolicyApiException(final Exception exp) { + super(exp); + } + + /** * Instantiates a new policy api exception with a message and a caused by exception. * * @param message the message diff --git a/main/src/main/java/org/onap/policy/api/main/startstop/ApiDatabaseInitializer.java b/main/src/main/java/org/onap/policy/api/main/startstop/ApiDatabaseInitializer.java new file mode 100644 index 00000000..3973e626 --- /dev/null +++ b/main/src/main/java/org/onap/policy/api/main/startstop/ApiDatabaseInitializer.java @@ -0,0 +1,113 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP Policy API + * ================================================================================ + * Copyright (C) 2019 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.api.main.startstop; + +import java.util.ArrayList; +import java.util.Map; +import org.onap.policy.api.main.exception.PolicyApiException; +import org.onap.policy.common.utils.coder.CoderException; +import org.onap.policy.common.utils.coder.StandardCoder; +import org.onap.policy.common.utils.resources.ResourceUtils; +import org.onap.policy.models.base.PfModelException; +import org.onap.policy.models.provider.PolicyModelsProvider; +import org.onap.policy.models.provider.PolicyModelsProviderFactory; +import org.onap.policy.models.provider.PolicyModelsProviderParameters; +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType; +import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * This class creates initial policy types in the database. + * + * @author Chenfei Gao (cgao@research.att.com) + */ +public class ApiDatabaseInitializer { + + private static final Logger LOGGER = LoggerFactory.getLogger(ApiDatabaseInitializer.class); + + private StandardCoder standardCoder; + private PolicyModelsProviderFactory factory; + + private static final String[] PRELOAD_POLICYTYPES = { + "preloadedPolicyTypes/onap.policies.monitoring.cdap.tca.hi.lo.app.json", + "preloadedPolicyTypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.json", + "preloadedPolicyTypes/onap.policies.optimization.AffinityPolicy.json", + "preloadedPolicyTypes/onap.policies.optimization.DistancePolicy.json", + "preloadedPolicyTypes/onap.policies.optimization.HpaPolicy.json", + "preloadedPolicyTypes/onap.policies.optimization.OptimizationPolicy.json", + "preloadedPolicyTypes/onap.policies.optimization.PciPolicy.json", + "preloadedPolicyTypes/onap.policies.optimization.QueryPolicy.json", + "preloadedPolicyTypes/onap.policies.optimization.SubscriberPolicy.json", + "preloadedPolicyTypes/onap.policies.optimization.Vim_fit.json", + "preloadedPolicyTypes/onap.policies.optimization.VnfPolicy.json" + }; + + /** + * Constructs the object. + */ + public ApiDatabaseInitializer() { + factory = new PolicyModelsProviderFactory(); + standardCoder = new StandardCoder(); + } + + /** + * Initializes database by preloading policy types. + * + * @param policyModelsProviderParameters the database parameters + * @throws PolicyApiException in case of errors. + */ + public void initializeApiDatabase(final PolicyModelsProviderParameters policyModelsProviderParameters) + throws PolicyApiException { + + try (PolicyModelsProvider databaseProvider = + factory.createPolicyModelsProvider(policyModelsProviderParameters)) { + ToscaServiceTemplate policyTypes = new ToscaServiceTemplate(); + policyTypes.setPolicyTypes(new ArrayList<Map<String,ToscaPolicyType>>()); + policyTypes.setToscaDefinitionsVersion("tosca_simple_yaml_1_0_0"); + for (String pt : PRELOAD_POLICYTYPES) { + String policyTypeAsString = ResourceUtils.getResourceAsString(pt); + if (policyTypeAsString == null) { + throw new PolicyApiException("Preloading policy type cannot be found: " + pt); + } + ToscaServiceTemplate singlePolicyType = standardCoder.decode(policyTypeAsString, + ToscaServiceTemplate.class); + if (singlePolicyType == null) { + throw new PolicyApiException("Error deserializing policy type from file: " + pt); + } + // Consolidate policy types + for (Map<String, ToscaPolicyType> eachPolicyType : singlePolicyType.getPolicyTypes()) { + policyTypes.getPolicyTypes().add(eachPolicyType); + } + } + ToscaServiceTemplate createdPolicyTypes = databaseProvider.createPolicyTypes(policyTypes); + if (createdPolicyTypes == null) { + throw new PolicyApiException("Error preloading policy types: " + policyTypes); + } else { + LOGGER.debug("Created initial policy types in DB - {}", createdPolicyTypes); + } + } catch (final PfModelException | CoderException exp) { + throw new PolicyApiException(exp); + } + } +} diff --git a/main/src/main/java/org/onap/policy/api/main/startstop/Main.java b/main/src/main/java/org/onap/policy/api/main/startstop/Main.java index 97d53ade..4a0fead1 100644 --- a/main/src/main/java/org/onap/policy/api/main/startstop/Main.java +++ b/main/src/main/java/org/onap/policy/api/main/startstop/Main.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= - * ONAP Policy API - * ================================================================================ + * ONAP Policy API + * ================================================================================ * Copyright (C) 2018 Samsung Electronics Co., Ltd. All rights reserved. * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ @@ -35,7 +35,7 @@ import org.slf4j.LoggerFactory; * */ public class Main { - + private static final Logger LOGGER = LoggerFactory.getLogger(Main.class); // The policy api Activator that activates the policy api service @@ -78,6 +78,14 @@ public class Main { return; } + // Initialize database + try { + new ApiDatabaseInitializer().initializeApiDatabase(parameterGroup.getDatabaseProviderParameters()); + } catch (final PolicyApiException e) { + LOGGER.error("Preloading policy types into DB failed", e); + return; + } + // Now, create the activator for the policy api service activator = new ApiActivator(parameterGroup); diff --git a/main/src/main/resources/preloadedPolicyTypes/onap.policies.monitoring.cdap.tca.hi.lo.app.json b/main/src/main/resources/preloadedPolicyTypes/onap.policies.monitoring.cdap.tca.hi.lo.app.json new file mode 100644 index 00000000..1d1a4d64 --- /dev/null +++ b/main/src/main/resources/preloadedPolicyTypes/onap.policies.monitoring.cdap.tca.hi.lo.app.json @@ -0,0 +1,223 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_0_0", + "policy_types": [ + { + "onap.policies.Monitoring": { + "derived_from": "tosca.policies.Root", + "description": "a base policy type for all policies that governs monitoring provisioning" + } + }, + { + "onap.policies.monitoring.cdap.tca.hi.lo.app": { + "derived_from": "onap.policies.Monitoring", + "version": "1.0.0", + "properties": { + "tca_policy": { + "type": "map", + "description": "TCA Policy JSON", + "entry_schema": { + "type": "onap.datatypes.monitoring.tca_policy" + } + } + } + } + } + ], + "data_types": [ + { + "onap.datatypes.monitoring.metricsPerEventName": { + "derived_from": "tosca.datatypes.Root", + "properties": { + "controlLoopSchemaType": { + "type": "string", + "required": true, + "description": "Specifies Control Loop Schema Type for the event Name e.g. VNF, VM", + "constraints": [ + { + "valid_values": [ + "VM", + "VNF" + ] + } + ] + }, + "eventName": { + "type": "string", + "required": true, + "description": "Event name to which thresholds need to be applied" + }, + "policyName": { + "type": "string", + "required": true, + "description": "TCA Policy Scope Name" + }, + "policyScope": { + "type": "string", + "required": true, + "description": "TCA Policy Scope" + }, + "policyVersion": { + "type": "string", + "required": true, + "description": "TCA Policy Scope Version" + }, + "thresholds": { + "type": "list", + "required": true, + "description": "Thresholds associated with eventName", + "entry_schema": { + "type": "onap.datatypes.monitoring.thresholds" + } + } + } + } + }, + { + "onap.datatypes.monitoring.tca_policy": { + "derived_from": "tosca.datatypes.Root", + "properties": { + "domain": { + "type": "string", + "required": true, + "description": "Domain name to which TCA needs to be applied", + "default": "measurementsForVfScaling", + "constraints": [ + { + "equal": "measurementsForVfScaling" + } + ] + }, + "metricsPerEventName": { + "type": "list", + "required": true, + "description": "Contains eventName and threshold details that need to be applied to given eventName", + "entry_schema": { + "type": "onap.datatypes.monitoring.metricsPerEventName" + } + } + } + } + }, + { + "onap.datatypes.monitoring.thresholds": { + "derived_from": "tosca.datatypes.Root", + "properties": { + "closedLoopControlName": { + "type": "string", + "required": true, + "description": "Closed Loop Control Name associated with the threshold" + }, + "closedLoopEventStatus": { + "type": "string", + "required": true, + "description": "Closed Loop Event Status of the threshold", + "constraints": [ + { + "valid_values": [ + "ONSET", + "ABATED" + ] + } + ] + }, + "direction": { + "type": "string", + "required": true, + "description": "Direction of the threshold", + "constraints": [ + { + "valid_values": [ + "LESS", + "LESS_OR_EQUAL", + "GREATER", + "GREATER_OR_EQUAL", + "EQUAL" + ] + } + ] + }, + "fieldPath": { + "type": "string", + "required": true, + "description": "Json field Path as per CEF message which needs to be analyzed for TCA", + "constraints": [ + { + "valid_values": [ + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated", + "$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle", + "$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt", + "$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice", + "$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq", + "$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal", + "$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem", + "$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait", + "$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage", + "$.event.measurementsForVfScalingFields.meanRequestLatency", + "$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered", + "$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached", + "$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured", + "$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree", + "$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed", + "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value" + ] + } + ] + }, + "severity": { + "type": "string", + "required": true, + "description": "Threshold Event Severity", + "constraints": [ + { + "valid_values": [ + "CRITICAL", + "MAJOR", + "MINOR", + "WARNING", + "NORMAL" + ] + } + ] + }, + "thresholdValue": { + "type": "integer", + "required": true, + "description": "Threshold value for the field Path inside CEF message" + }, + "version": { + "type": "string", + "required": true, + "description": "Version number associated with the threshold" + } + } + } + } + ] +}
\ No newline at end of file diff --git a/main/src/main/resources/preloadedPolicyTypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.json b/main/src/main/resources/preloadedPolicyTypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.json new file mode 100644 index 00000000..26f4c021 --- /dev/null +++ b/main/src/main/resources/preloadedPolicyTypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.json @@ -0,0 +1,28 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_0_0", + "policy_types": [ + { + "onap.policies.Monitoring": { + "derived_from": "tosca.policies.Root", + "description": "a base policy type for all policies that govern monitoring provision", + "version": "1.0.0" + } + }, + { + "onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server": { + "derived_from": "policy.nodes.Root", + "version": "1.0.0", + "properties": { + "buscontroller_feed_publishing_endpoint": { + "type": "string", + "description": "DMAAP Bus Controller feed endpoint" + }, + "datafile.policy": { + "type": "string", + "description": "datafile Policy JSON as string" + } + } + } + } + ] +}
\ No newline at end of file diff --git a/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.AffinityPolicy.json b/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.AffinityPolicy.json new file mode 100644 index 00000000..ad4f4a9c --- /dev/null +++ b/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.AffinityPolicy.json @@ -0,0 +1,102 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_0_0", + "policy_types": [ + { + "onap.policies.Optimization": { + "derived_from": "tosca.policies.Root", + "version": "1.0.0", + "description": "a base policy type for all policies that govern optimization" + } + }, + { + "onap.policies.optimization.AffinityPolicy": { + "derived_from": "onap.policies.Optimization", + "properties": { + "policyScope": { + "type": "list", + "description": "scope where the policy is applicable", + "required": true, + "matchable": true, + "entry_schema": { + "type": "string" + } + }, + "policyType": { + "type": "list", + "description": "type of a policy", + "required": true, + "matchable": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "zone" + ] + } + ] + } + }, + "identity": { + "type": "string", + "required": true + }, + "applicableResources": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "any", + "all" + ] + } + ] + } + }, + "affinityProperties": { + "type": "policy.data.affinityProperties_properties", + "required": true + }, + "resources": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string" + } + } + } + } + } + ], + "data_types": [ + { + "policy.data.affinityProperties_properties": { + "derived_from": "tosca.nodes.Root", + "properties": { + "qualifier": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "same", + "different" + ] + } + ] + } + }, + "category": { + "type": "string", + "required": true + } + } + } + } + ] +}
\ No newline at end of file diff --git a/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.DistancePolicy.json b/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.DistancePolicy.json new file mode 100644 index 00000000..12918171 --- /dev/null +++ b/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.DistancePolicy.json @@ -0,0 +1,132 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_0_0", + "policy_types": [ + { + "onap.policies.Optimization": { + "derived_from": "tosca.policies.Root", + "version": "1.0.0", + "description": "a base policy type for all policies that govern optimization" + } + }, + { + "onap.policies.optimization.DistancePolicy": { + "derived_from": "onap.policies.Optimization", + "properties": { + "policyScope": { + "type": "list", + "description": "scope where the policy is applicable", + "required": true, + "matchable": true, + "entry_schema": { + "type": "string" + } + }, + "policyType": { + "type": "list", + "description": "type of a policy", + "required": true, + "matchable": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "distance_to_location" + ] + } + ] + } + }, + "identity": { + "type": "string", + "required": true + }, + "resources": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string" + } + }, + "applicableResources": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "any", + "all" + ] + } + ] + } + }, + "distanceProperties": { + "type": "policy.data.distanceProperties_properties", + "required": true + } + } + } + } + ], + "data_types": [ + { + "policy.data.distanceProperties_properties": { + "derived_from": "tosca.nodes.Root", + "properties": { + "locationInfo": { + "type": "string", + "required": true + }, + "distance": { + "type": "policy.data.distance_properties", + "required": true + } + } + }, + "policy.data.distance_properties": { + "derived_from": "tosca.nodes.Root", + "properties": { + "value": { + "type": "string", + "required": true + }, + "operator": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "<", + "<=", + ">", + ">=", + "=" + ] + } + ] + } + }, + "unit": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "km" + ] + } + ] + } + } + } + } + } + ] +}
\ No newline at end of file diff --git a/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.HpaPolicy.json b/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.HpaPolicy.json new file mode 100644 index 00000000..3f428736 --- /dev/null +++ b/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.HpaPolicy.json @@ -0,0 +1,204 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_0_0", + "policy_types": [ + { + "onap.policies.Optimization": { + "derived_from": "tosca.policies.Root", + "version": "1.0.0", + "description": "a base policy type for all policies that govern optimization" + } + }, + { + "onap.policies.optimization.HpaPolicy": { + "derived_from": "onap.policies.Optimization", + "properties": { + "policyScope": { + "type": "list", + "description": "scope where the policy is applicable", + "required": true, + "matchable": true, + "entry_schema": { + "type": "string" + } + }, + "policyType": { + "type": "list", + "description": "type of a policy", + "required": true, + "matchable": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "hpa" + ] + } + ] + } + }, + "resources": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string" + } + }, + "identity": { + "type": "string", + "required": true + }, + "flavorFeatures": { + "type": "list", + "required": true, + "entry_schema": { + "type": "policy.data.flavorFeatures_properties" + } + } + } + } + } + ], + "data_types": [ + { + "policy.data.flavorFeatures_properties": { + "derived_from": "tosca.nodes.Root", + "properties": { + "id": { + "type": "string", + "required": true + }, + "type": { + "type": "string", + "required": true + }, + "directives": { + "type": "list", + "required": true, + "entry_schema": { + "type": "policy.data.directives_properties" + } + }, + "flavorProperties": { + "type": "list", + "required": true, + "entry_schema": { + "type": "policy.data.flavorProperties_properties" + } + } + } + } + }, + { + "policy.data.directives_properties": { + "derived_from": "tosca.nodes.Root", + "properties": { + "type": { + "type": "string" + }, + "attributes": { + "type": "list", + "entry_schema": { + "type": "policy.data.directives_attributes_properties" + } + } + } + } + }, + { + "policy.data.directives_attributes_properties": { + "derived_from": "tosca.nodes.Root", + "properties": { + "attribute_name": { + "type": "string" + }, + "attribute_value": { + "type": "string" + } + } + } + }, + { + "policy.data.flavorProperties_properties": { + "derived_from": "tosca.nodes.Root", + "properties": { + "hpa-feature": { + "type": "string", + "required": true + }, + "mandatory": { + "type": "string", + "required": true + }, + "score": { + "type": "string", + "required": false + }, + "architecture": { + "type": "string", + "required": true + }, + "hpa-version": { + "type": "string", + "required": true + }, + "directives": { + "type": "list", + "required": true, + "entry_schema": { + "type": "policy.data.directives_properties" + } + }, + "hpa-feature-attributes": { + "type": "list", + "required": true, + "entry_schema": { + "type": "policy.data.hpa-feature-attributes_properties" + } + } + } + } + }, + { + "policy.data.hpa-feature-attributes_properties": { + "derived_from": "tosca.nodes.Root", + "properties": { + "hpa-attribute-key": { + "type": "string", + "required": true + }, + "hpa-attribute-value": { + "type": "string", + "required": true + }, + "operator": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "<", + "<=", + ">", + ">=", + "=", + "!=", + "any", + "all", + "subset" + ] + } + ] + } + }, + "unit": { + "type": "string", + "required": false + } + } + } + } + ] +}
\ No newline at end of file diff --git a/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.OptimizationPolicy.json b/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.OptimizationPolicy.json new file mode 100644 index 00000000..9807d9b7 --- /dev/null +++ b/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.OptimizationPolicy.json @@ -0,0 +1,140 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_0_0", + "policy_types": [ + { + "onap.policies.Optimization": { + "derived_from": "tosca.policies.Root", + "version": "1.0.0", + "description": "a base policy type for all policies that govern optimization" + } + }, + { + "onap.policies.optimization.OptimizationPolicy": { + "derived_from": "onap.policies.Optimization", + "properties": { + "policyScope": { + "type": "list", + "description": "scope where the policy is applicable", + "required": true, + "matchable": true, + "entry_schema": { + "type": "string" + } + }, + "policyType": { + "type": "list", + "description": "type of a policy", + "required": true, + "matchable": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "placement_optimization" + ] + } + ] + } + }, + "identity": { + "type": "string", + "required": true + }, + "objective": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "minimize", + "maximize" + ] + } + ] + } + }, + "objectiveParameter": { + "type": "policy.data.objectiveParameter_properties", + "required": true + } + } + } + } + ], + "data_types": [ + { + "policy.data.objectiveParameter_properties": { + "derived_from": "tosca.nodes.Root", + "properties": { + "parameterAttributes": { + "type": "list", + "required": true, + "entry_schema": { + "type": "policy.data.parameterAttributes_properties" + } + }, + "operator": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "*", + "+", + "-", + "/", + "%" + ] + } + ] + } + } + } + }, + "policy.data.parameterAttributes_properties": { + "derived_from": "tosca.nodes.Root", + "properties": { + "resources": { + "type": "string", + "required": true + }, + "customerLocationInfo": { + "type": "string", + "required": true + }, + "parameter": { + "type": "string", + "required": true + }, + "weight": { + "type": "string", + "required": true + }, + "operator": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "*", + "+", + "-", + "/", + "%" + ] + } + ] + } + } + } + } + } + ] +}
\ No newline at end of file diff --git a/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.PciPolicy.json b/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.PciPolicy.json new file mode 100644 index 00000000..d775f220 --- /dev/null +++ b/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.PciPolicy.json @@ -0,0 +1,91 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_0_0", + "policy_types": [ + { + "onap.policies.Optimization": { + "derived_from": "tosca.policies.Root", + "version": "1.0.0", + "description": "a base policy type for all policies that govern optimization" + } + }, + { + "onap.policies.optimization.PciPolicy": { + "derived_from": "onap.policies.Optimization", + "properties": { + "policyScope": { + "type": "list", + "description": "scope where the policy is applicable", + "required": true, + "matchable": true, + "entry_schema": { + "type": "string" + } + }, + "policyType": { + "type": "list", + "description": "type of a policy", + "required": true, + "matchable": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "pciPolicy" + ] + } + ] + } + }, + "identity": { + "type": "string", + "required": true + }, + "resources": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string" + } + }, + "pciProperties": { + "type": "list", + "required": false, + "entry_schema": { + "type": "policy.data.pciProperties_properties" + } + } + } + } + } + ], + "data_types": [ + { + "policy.data.pciProperties_properties": { + "derived_from": "tosca.nodes.Root", + "properties": { + "algoCategory": { + "type": "string", + "required": false + }, + "pciOptmizationAlgoName": { + "type": "string", + "required": false + }, + "pciOptimizationNwConstraint": { + "type": "string", + "required": false + }, + "pciOptimizationPriority": { + "type": "string", + "required": false + }, + "pciOptimizationTimeConstraint": { + "type": "string", + "required": false + } + } + } + } + ] +}
\ No newline at end of file diff --git a/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.QueryPolicy.json b/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.QueryPolicy.json new file mode 100644 index 00000000..d7842680 --- /dev/null +++ b/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.QueryPolicy.json @@ -0,0 +1,76 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_0_0", + "policy_types": [ + { + "onap.policies.Optimization": { + "derived_from": "tosca.policies.Root", + "version": "1.0.0", + "description": "a base policy type for all policies that govern optimization" + } + }, + { + "onap.policies.optimization.QueryPolicy": { + "derived_from": "onap.policies.Optimization", + "properties": { + "policyScope": { + "type": "list", + "description": "scope where the policy is applicable", + "required": true, + "matchable": true, + "entry_schema": { + "type": "string" + } + }, + "policyType": { + "type": "list", + "description": "type of a policy", + "required": true, + "matchable": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "request_param_query" + ] + } + ] + } + }, + "identity": { + "type": "string", + "required": true + }, + "queryProperties": { + "type": "list", + "required": true, + "entry_schema": { + "type": "policy.data.queryProperties_properties" + } + } + } + } + } + ], + "data_types": [ + { + "policy.data.queryProperties_properties": { + "derived_from": "tosca.nodes.Root", + "properties": { + "attribute": { + "type": "string", + "required": true + }, + "value": { + "type": "string", + "required": true + }, + "attribute_location": { + "type": "string", + "required": true + } + } + } + } + ] +}
\ No newline at end of file diff --git a/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.SubscriberPolicy.json b/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.SubscriberPolicy.json new file mode 100644 index 00000000..fbc6cdb7 --- /dev/null +++ b/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.SubscriberPolicy.json @@ -0,0 +1,82 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_0_0", + "policy_types": [ + { + "onap.policies.Optimization": { + "derived_from": "tosca.policies.Root", + "version": "1.0.0", + "description": "a base policy type for all policies that govern optimization" + } + }, + { + "onap.policies.optimization.SubscriberPolicy": { + "derived_from": "onap.policies.Optimization", + "properties": { + "policyScope": { + "type": "list", + "description": "scope where the policy is applicable", + "required": true, + "matchable": true, + "entry_schema": { + "type": "string" + } + }, + "policyType": { + "type": "list", + "description": "type of a policy", + "required": true, + "matchable": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "subscriberPolicy" + ] + } + ] + } + }, + "identity": { + "type": "string", + "required": true + }, + "properties": { + "type": "policy.data.properties_properties", + "required": true + } + } + } + } + ], + "data_types": [ + { + "policy.data.properties_properties": { + "derived_from": "tosca.nodes.Root", + "properties": { + "subscriberName": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string" + } + }, + "subscriberRole": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string" + } + }, + "provStatus": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string" + } + } + } + } + } + ] +}
\ No newline at end of file diff --git a/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.Vim_fit.json b/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.Vim_fit.json new file mode 100644 index 00000000..6ef619af --- /dev/null +++ b/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.Vim_fit.json @@ -0,0 +1,91 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_0_0", + "policy_types": [ + { + "onap.policies.Optimization": { + "derived_from": "tosca.policies.Root", + "version": "1.0.0", + "description": "a base policy type for all policies that govern optimization" + } + }, + { + "onap.policies.optimization.Vim_fit": { + "derived_from": "onap.policies.Optimization", + "properties": { + "policyScope": { + "type": "list", + "description": "scope where the policy is applicable", + "required": true, + "matchable": true, + "entry_schema": { + "type": "string" + } + }, + "policyType": { + "type": "list", + "description": "type of a policy", + "required": true, + "matchable": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "vim_fit" + ] + } + ] + } + }, + "identity": { + "type": "string", + "required": true + }, + "applicableResources": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "any", + "all" + ] + } + ] + } + }, + "resources": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string" + } + }, + "capacityProperties": { + "type": "policy.data.capacityProperties_properties", + "required": true + } + } + } + } + ], + "data_types": [ + { + "policy.data.capacityProperties_properties": { + "derived_from": "tosca.nodes.Root", + "properties": { + "controller": { + "type": "string", + "required": true + }, + "request": { + "type": "string", + "required": true + } + } + } + } + ] +}
\ No newline at end of file diff --git a/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.VnfPolicy.json b/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.VnfPolicy.json new file mode 100644 index 00000000..6e46573c --- /dev/null +++ b/main/src/main/resources/preloadedPolicyTypes/onap.policies.optimization.VnfPolicy.json @@ -0,0 +1,115 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_0_0", + "policy_types": [ + { + "onap.policies.Optimization": { + "derived_from": "tosca.policies.Root", + "version": "1.0.0", + "description": "a base policy type for all policies that govern optimization" + } + }, + { + "onap.policies.optimization.VnfPolicy": { + "derived_from": "onap.policies.Optimization", + "properties": { + "policyScope": { + "type": "list", + "description": "scope where the policy is applicable", + "required": true, + "matchable": true, + "entry_schema": { + "type": "string" + } + }, + "policyType": { + "type": "list", + "description": "type of a policy", + "required": true, + "matchable": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "vnfPolicy" + ] + } + ] + } + }, + "identity": { + "type": "string", + "required": true + }, + "resources": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string" + } + }, + "applicableResources": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "any", + "all" + ] + } + ] + } + }, + "vnfProperties": { + "type": "list", + "required": true, + "entry_schema": { + "type": "policy.data.vnfProperties_properties" + } + } + } + } + } + ], + "data_types": [ + { + "policy.data.vnfProperties_properties": { + "derived_from": "tosca.nodes.Root", + "properties": { + "inventoryProvider": { + "type": "string", + "required": true + }, + "serviceType": { + "type": "string", + "required": true + }, + "inventoryType": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "serviceInstanceId", + "vnfName", + "cloudRegionId", + "vimId" + ] + } + ] + } + }, + "customerId": { + "type": "string", + "required": true + } + } + } + } + ] +}
\ No newline at end of file diff --git a/main/src/test/java/org/onap/policy/api/main/rest/provider/TestPolicyProvider.java b/main/src/test/java/org/onap/policy/api/main/rest/provider/TestPolicyProvider.java index 653f467e..0ae718d1 100644 --- a/main/src/test/java/org/onap/policy/api/main/rest/provider/TestPolicyProvider.java +++ b/main/src/test/java/org/onap/policy/api/main/rest/provider/TestPolicyProvider.java @@ -171,6 +171,22 @@ public class TestPolicyProvider { }).hasMessage("policy with ID dummy:dummy and type dummy:dummy does not exist"); assertThatCode(() -> { + String policyTypeString = ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE); + ToscaServiceTemplate policyTypeServiceTemplate = + standardCoder.decode(policyTypeString, ToscaServiceTemplate.class); + policyTypeProvider.createPolicyType(policyTypeServiceTemplate); + }).doesNotThrowAnyException(); + + assertThatCode(() -> { + String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE); + ToscaServiceTemplate policyServiceTemplate = + standardCoder.decode(policyString, ToscaServiceTemplate.class); + ToscaServiceTemplate serviceTemplate = policyProvider + .createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate); + assertFalse(serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).isEmpty()); + }).doesNotThrowAnyException(); + + assertThatCode(() -> { ToscaServiceTemplate serviceTemplate = policyProvider.deletePolicy( "onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", "onap.restart.tca", "1.0.0"); assertFalse(serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).isEmpty()); diff --git a/main/src/test/java/org/onap/policy/api/main/rest/provider/TestPolicyTypeProvider.java b/main/src/test/java/org/onap/policy/api/main/rest/provider/TestPolicyTypeProvider.java index 9dc77267..03d49332 100644 --- a/main/src/test/java/org/onap/policy/api/main/rest/provider/TestPolicyTypeProvider.java +++ b/main/src/test/java/org/onap/policy/api/main/rest/provider/TestPolicyTypeProvider.java @@ -129,6 +129,14 @@ public class TestPolicyTypeProvider { public void testDeletePolicyType() { assertThatCode(() -> { + String policyTypeString = ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE); + ToscaServiceTemplate policyTypeServiceTemplate = + standardCoder.decode(policyTypeString, ToscaServiceTemplate.class); + ToscaServiceTemplate serviceTemplate = policyTypeProvider.createPolicyType(policyTypeServiceTemplate); + assertFalse(serviceTemplate.getPolicyTypes().get(0).isEmpty()); + }).doesNotThrowAnyException(); + + assertThatCode(() -> { String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE); ToscaServiceTemplate policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class); diff --git a/main/src/test/resources/policies/vCPE.policy.bad.policytypeversion.json b/main/src/test/resources/policies/vCPE.policy.bad.policytypeversion.json index 638a4e1d..23195a97 100644 --- a/main/src/test/resources/policies/vCPE.policy.bad.policytypeversion.json +++ b/main/src/test/resources/policies/vCPE.policy.bad.policytypeversion.json @@ -6,7 +6,7 @@ "onap.restart.tca": { "type": "onap.policies.monitoring.cdap.tca.hi.lo.app", "version": "1.0.0", - "typeVersion": "2.0.0", + "type_version": "2.0.0", "metadata": { "policy-id": "onap.restart.tca" }, diff --git a/main/src/test/resources/policies/vCPE.policy.monitoring.input.tosca.json b/main/src/test/resources/policies/vCPE.policy.monitoring.input.tosca.json index 0eabb573..7a63f658 100644 --- a/main/src/test/resources/policies/vCPE.policy.monitoring.input.tosca.json +++ b/main/src/test/resources/policies/vCPE.policy.monitoring.input.tosca.json @@ -6,6 +6,7 @@ "onap.restart.tca": { "type": "onap.policies.monitoring.cdap.tca.hi.lo.app", "version": "1.0.0", + "type_version": "1.0.0", "metadata": { "policy-id": "onap.restart.tca" }, |