From 19093bbdec52fbe97fa404670aba4af12dc750e0 Mon Sep 17 00:00:00 2001 From: Pamela Dragosh Date: Tue, 5 Nov 2019 09:35:30 -0500 Subject: [PATCH] Add new Operational Policy Type New operational policy type for Frankfurt. Updating examples. added sample CLAMP metadata. Issue-ID: POLICY-2217 Change-Id: I941c3a4187a4d164bf793ef2d82c34fccc1a2c35 Signed-off-by: Pamela Dragosh --- .../vCPE.policy.operational.input.tosca.yaml | 59 ++++--- .../vDNS.policy.operational.input.tosca.yaml | 70 +++++---- .../vFirewall.policy.operational.input.tosca.yaml | 63 ++++---- ...FirewallCDS.policy.operational.input.tosca.yaml | 37 +++++ ...ap.policies.controlloop.operational.Common.yaml | 169 +++++++++++++++++++++ .../provider/impl/PolicyPersistenceTest.java | 9 ++ .../provider/impl/PolicyToscaPersistenceTest.java | 8 + .../concepts/ToscaPolicyFilterTest.java | 14 +- 8 files changed, 327 insertions(+), 102 deletions(-) create mode 100644 models-examples/src/main/resources/policies/vFirewallCDS.policy.operational.input.tosca.yaml create mode 100644 models-examples/src/main/resources/policytypes/onap.policies.controlloop.operational.Common.yaml diff --git a/models-examples/src/main/resources/policies/vCPE.policy.operational.input.tosca.yaml b/models-examples/src/main/resources/policies/vCPE.policy.operational.input.tosca.yaml index dda0169f1..e013abd1c 100644 --- a/models-examples/src/main/resources/policies/vCPE.policy.operational.input.tosca.yaml +++ b/models-examples/src/main/resources/policies/vCPE.policy.operational.input.tosca.yaml @@ -1,33 +1,30 @@ tosca_definitions_version: tosca_simple_yaml_1_0_0 topology_template: - policies: - - - operational.restart: - type: onap.policies.controlloop.Operational - version: 1.0.0 - metadata: - policy-id: operational.restart - properties: - controlLoop: - version: 2.0.0 - controlLoopName: ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e - trigger_policy: unique-policy-id-1-restart - timeout: 3600 - abatement: true - - policies: - - id: unique-policy-id-1-restart - name: Restart the VM - description: - actor: APPC - recipe: Restart - target: - type: VM - retry: 3 - timeout: 1200 - success: final_success - failure: final_failure - failure_timeout: final_failure_timeout - failure_retries: final_failure_retries - failure_exception: final_failure_exception - failure_guard: final_failure_guard \ No newline at end of file + policies: + - operational.restart: + type: onap.policies.controlloop.operational.common.Drools + type_version: 1.0.0 + metadata: + policy-id: operational.restart + properties: + id: ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e + timeout: 3600 + abatement: true + trigger: unique-policy-id-1-restart + operations: + - id: unique-policy-id-1-restart + description: Restart the VM + operation: + actor: APPC + recipe: Restart + target: + type: VNF + timeout: 1200 + retries: 3 + success: final_success + failure: final_failure + failure_timeout: final_failure_timeout + failure_retries: final_failure_retries + failure_exception: final_failure_exception + failure_guard: final_failure_guard + controllerName: usecases diff --git a/models-examples/src/main/resources/policies/vDNS.policy.operational.input.tosca.yaml b/models-examples/src/main/resources/policies/vDNS.policy.operational.input.tosca.yaml index 0f5498804..d7e9b7b22 100644 --- a/models-examples/src/main/resources/policies/vDNS.policy.operational.input.tosca.yaml +++ b/models-examples/src/main/resources/policies/vDNS.policy.operational.input.tosca.yaml @@ -1,35 +1,39 @@ tosca_definitions_version: tosca_simple_yaml_1_0_0 topology_template: - policies: - - - operational.scaleout: - type: onap.policies.controlloop.Operational - version: 1.0.0 - metadata: - policy-id: operational.scaleout - properties: - controlLoop: - version: 2.0.0 - controlLoopName: ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3 - trigger_policy: unique-policy-id-1-scale-up - timeout: 1200 - abatement: false - policies: - - id: unique-policy-id-1-scale-up - name: Create a new VF Module - description: - actor: SO - recipe: VF Module Create - target: - type: VNF - payload: - requestParameters: '{"usePreload":true,"userParams":[]}' - configurationParameters: '[{"ip-addr":"$.vf-module-topology.vf-module-parameters.param[9]","oam-ip-addr":"$.vf-module-topology.vf-module-parameters.param[16]","enabled":"$.vf-module-topology.vf-module-parameters.param[23]"}]' - retry: 0 - timeout: 1200 - success: final_success - failure: final_failure - failure_timeout: final_failure_timeout - failure_retries: final_failure_retries - failure_exception: final_failure_exception - failure_guard: final_failure_guard \ No newline at end of file + policies: + - operational.scaleout: + type: onap.policies.controlloop.operational.common.Drools + type_version: 1.0.0 + metadata: + policy-id: operational.scaleout + properties: + id: ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3 + timeout: 1200 + abatement: false + trigger: unique-policy-id-1-scale-up + operations: + - id: unique-policy-id-1-scale-up + description: Create a new VF Module + operation: + actor: SO + operation: VF Module Create + target: + type: VFMODULE + entityIds: + modelInvariantId: e6130d03-56f1-4b0a-9a1d-e1b2ebc30e0e + modelVersionId: 94b18b1d-cc91-4f43-911a-e6348665f292 + modelName: VfwclVfwsnkBbefb8ce2bde..base_vfw..module-0 + modelVersion: 1 + modelCustomizationId: 47958575-138f-452a-8c8d-d89b595f8164 + payload: + requestParameters: '{"usePreload":true,"userParams":[]}' + configurationParameters: '[{"ip-addr":"$.vf-module-topology.vf-module-parameters.param[9]","oam-ip-addr":"$.vf-module-topology.vf-module-parameters.param[16]","enabled":"$.vf-module-topology.vf-module-parameters.param[23]"}]' + timeout: 1200 + retries: 0 + success: final_success + failure: final_failure + failure_timeout: final_failure_timeout + failure_retries: final_failure_retries + failure_exception: final_failure_exception + failure_guard: final_failure_guard + controllerName: usecases diff --git a/models-examples/src/main/resources/policies/vFirewall.policy.operational.input.tosca.yaml b/models-examples/src/main/resources/policies/vFirewall.policy.operational.input.tosca.yaml index ca36d5309..e3166f7ab 100644 --- a/models-examples/src/main/resources/policies/vFirewall.policy.operational.input.tosca.yaml +++ b/models-examples/src/main/resources/policies/vFirewall.policy.operational.input.tosca.yaml @@ -1,35 +1,32 @@ tosca_definitions_version: tosca_simple_yaml_1_0_0 topology_template: - policies: - - - operational.modifyconfig: - type: onap.policies.controlloop.Operational - version: 1.0.0 - metadata: - policy-id: operational.modifyconfig - properties: - controlLoop: - version: 2.0.0 - controlLoopName: ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a - trigger_policy: unique-policy-id-1-modifyConfig - timeout: 1200 - abatement: false - - policies: - - id: unique-policy-id-1-modifyConfig - name: modify packet gen config - description: - actor: APPC - recipe: ModifyConfig - target: - # TBD - Cannot be known until instantiation is done - resourceID: Eace933104d443b496b8.nodes.heat.vpg - type: VNF - retry: 0 - timeout: 300 - success: final_success - failure: final_failure - failure_timeout: final_failure_timeout - failure_retries: final_failure_retries - failure_exception: final_failure_exception - failure_guard: final_failure_guard \ No newline at end of file + policies: + - operational.modifyconfig: + type: onap.policies.controlloop.operational.common.Drools + type_version: 1.0.0 + metadata: + policy-id: operational.modifyconfig + properties: + id: ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a + timeout: 1200 + abatement: false + trigger: unique-policy-id-1-modifyConfig + operations: + - id: unique-policy-id-1-modifyConfig + description: Modify the packet generator + operation: + actor: APPC + operation: ModifyConfig + target: + targetType: VNF + entityId: + resourceID: bbb3cefd-01c8-413c-9bdd-2b92f9ca3d38 + timeout: 300 + retries: 0 + success: final_success + failure: final_failure + failure_timeout: final_failure_timeout + failure_retries: final_failure_retries + failure_exception: final_failure_exception + failure_guard: final_failure_guard + controllerName: usecases \ No newline at end of file diff --git a/models-examples/src/main/resources/policies/vFirewallCDS.policy.operational.input.tosca.yaml b/models-examples/src/main/resources/policies/vFirewallCDS.policy.operational.input.tosca.yaml new file mode 100644 index 000000000..01da34093 --- /dev/null +++ b/models-examples/src/main/resources/policies/vFirewallCDS.policy.operational.input.tosca.yaml @@ -0,0 +1,37 @@ +tosca_definitions_version: tosca_simple_yaml_1_0_0 +topology_template: + policies: + - operational.modifyconfig.cds: + type: onap.policies.controlloop.operational.common.Drools + type_version: 1.0.0 + metadata: + policy-id: operational.modifyconfig.cds + properties: + id: ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a + timeout: 1200 + abatement: false + trigger: unique-policy-id-1-modifyConfig + operations: + - id: unique-policy-id-1-modifyConfig + description: Modify the packet generator + operation: + actor: CDS + operation: ModifyConfig + target: + targetType: VNF + entityId: + resourceID: bbb3cefd-01c8-413c-9bdd-2b92f9ca3d38 + payload: + artifact_name: vfw-cds + artifact_version: 1.0.0 + mode: async + data: '{"mapInfo":{"key":"val"},"arrayInfo":["one","two"],"paramInfo":"val"}' + timeout: 300 + retries: 0 + success: final_success + failure: final_failure + failure_timeout: final_failure_timeout + failure_retries: final_failure_retries + failure_exception: final_failure_exception + failure_guard: final_failure_guard + controllerName: usecases \ No newline at end of file diff --git a/models-examples/src/main/resources/policytypes/onap.policies.controlloop.operational.Common.yaml b/models-examples/src/main/resources/policytypes/onap.policies.controlloop.operational.Common.yaml new file mode 100644 index 000000000..dfc96bad2 --- /dev/null +++ b/models-examples/src/main/resources/policytypes/onap.policies.controlloop.operational.Common.yaml @@ -0,0 +1,169 @@ +tosca_definitions_version: tosca_simple_yaml_1_0_0 +policy_types: + onap.policies.controlloop.operational.Common: + derived_from: tosca.policies.Root + version: 1.0.0 + description: Operational Policy for Control Loop execution + properties: + id: + type: String + description: The unique control loop id. + required: true + timeout: + type: Integer + description: | + Overall timeout for executing all the operations. This timeout should equal or exceed the total + timeout for each operation listed. + required: true + abatement: + type: Boolean + description: Whether an abatement event message will be expected for the control loop from DCAE. + required: true + default: false + trigger: + type: String + description: Initial operation to execute upon receiving an Onset event message for the Control Loop. + required: true + operations: + type: List + description: List of operations to be performed when Control Loop is triggered. + required: true + entry_schema: + type: onap.datatype.controlloop.Operation + + onap.policies.controlloop.operational.common.Apex: + derived_from: onap.policies.controlloop.operational.Common + type_version: 1.0.0 + version: 1.0.0 + description: Operational policies for Apex PDP + properties: + + onap.policies.controlloop.operational.common.Drools: + derived_from: onap.policies.controlloop.operational.Common + type_version: 1.0.0 + version: 1.0.0 + description: Operational policies for Drools PDP + properties: + controllerName: + type: String + description: Drools controller properties + required: false + +data_types: + # TBD if this is needed + onap.datatype.controlloop.operation.Failure: + derived_from: tosca.datatypes.Root + description: Captures information of an operational failure performed for control loop + properties: + messages: + type: String + description: error message + required: true + category: + type: String + description: | + The category the error occurred in. Whether this is a general error from the actor, or the operation + timed out, retries were exhausted in trying to execute the operation, a guard policy prevented the + operation from occuring, or an exception in the system caused the failure. + constraints: + - valid_values: [error, timeout, retries, guard, exception] + + onap.datatype.controlloop.Target: + derived_from: tosca.datatypes.Root + description: Definition for a entity in A&AI to perform a control loop operation on + properties: + targetType: + type: String + description: Category for the target type + required: true + constraints: + - valid_values: [VNF, VM, VFMODULE, PNF] + entityIds: + type: Map + description: | + Map of values that identify the resource. If none are provided, it is assumed that the + entity that generated the ONSET event will be the target. + required: false + + onap.datatype.controlloop.Actor: + derived_from: tosca.datatypes.Root + description: An actor/operation/target definition + properties: + actor: + type: String + description: The actor performing the operation. + required: true + operation: + type: String + description: The operation the actor is performing. + required: true + target: + type: String + description: The resource the operation should be performed on. + required: true + metadata: + clamp_possible_values: + payload: + type: Map + description: Name/value pairs of payload information passed by Policy to the actor + required: false + entry_schema: + type: String + + onap.datatype.controlloop.Operation: + derived_from: tosca.datatypes.Root + description: An operation supported by an actor + properties: + id: + type: String + description: Unique identifier for the operation + required: true + description: + type: String + description: A user-friendly description of the intent for the operation + required: false + operation: + type: onap.datatype.controlloop.Actor + description: The definition of the operation to be performed. + required: true + metadata: + clamp_possible_values: + timeout: + type: Integer + description: The amount of time for the actor to perform the operation. + required: true + retries: + type: Integer + description: The number of retries the actor should attempt to perform the operation. + required: true + default: 0 + success: + type: String + description: Points to the operation to invoke on success. A value of "final_success" indicates and end to the operation. + required: false + default: final_success + failure: + type: String + description: Points to the operation to invoke on Actor operation failure. + required: false + default: final_failure + failure_timeout: + type: String + description: Points to the operation to invoke when the time out for the operation occurs. + required: false + default: final_failure_timeout + failure_retries: + type: String + description: Points to the operation to invoke when the current operation has exceeded its max retries. + required: false + default: final_failure_retries + failure_exception: + type: String + description: Points to the operation to invoke when the current operation causes an exception. + required: false + default: final_failure_exception + failure_guard: + type: String + description: Points to the operation to invoke when the current operation is blocked due to guard policy enforcement. + required: false + default: final_failure_guard diff --git a/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyPersistenceTest.java b/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyPersistenceTest.java index 1f577ae21..8e0dcb31c 100644 --- a/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyPersistenceTest.java +++ b/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyPersistenceTest.java @@ -208,6 +208,15 @@ public class PolicyPersistenceTest { assertNotNull(toscaServiceTemplatePolicyType); databaseProvider.createPolicyTypes(toscaServiceTemplatePolicyType); + yamlObject = new Yaml().load( + ResourceUtils.getResourceAsString("policytypes/onap.policies.controlloop.operational.Common.yaml")); + yamlAsJsonString = new StandardCoder().encode(yamlObject); + + toscaServiceTemplatePolicyType = standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class); + + assertNotNull(toscaServiceTemplatePolicyType); + databaseProvider.createPolicyTypes(toscaServiceTemplatePolicyType); + yamlObject = new Yaml().load( ResourceUtils.getResourceAsString("policytypes/onap.policies.controlloop.guard.FrequencyLimiter.yaml")); yamlAsJsonString = new StandardCoder().encode(yamlObject); diff --git a/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyToscaPersistenceTest.java b/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyToscaPersistenceTest.java index 9012d84b1..1aedcaf83 100644 --- a/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyToscaPersistenceTest.java +++ b/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyToscaPersistenceTest.java @@ -176,6 +176,14 @@ public class PolicyToscaPersistenceTest { assertNotNull(toscaServiceTemplatePolicyType); databaseProvider.createPolicyTypes(toscaServiceTemplatePolicyType); + yamlObject = new Yaml().load( + ResourceUtils.getResourceAsString("policytypes/onap.policies.controlloop.operational.Common.yaml")); + yamlAsJsonString = new StandardCoder().encode(yamlObject); + + toscaServiceTemplatePolicyType = standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class); + + assertNotNull(toscaServiceTemplatePolicyType); + databaseProvider.createPolicyTypes(toscaServiceTemplatePolicyType); yamlObject = new Yaml().load( ResourceUtils.getResourceAsString("policytypes/onap.policies.controlloop.guard.FrequencyLimiter.yaml")); yamlAsJsonString = new StandardCoder().encode(yamlObject); diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyFilterTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyFilterTest.java index bf9f92e28..2c62e7fc0 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyFilterTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyFilterTest.java @@ -182,7 +182,7 @@ public class ToscaPolicyFilterTest { filter = ToscaPolicyFilter.builder().version(VERSION_100).build(); filteredList = filter.filter(policyList); - assertEquals(17, filteredList.size()); + assertEquals(15, filteredList.size()); filter = ToscaPolicyFilter.builder().name("OSDF_CASABLANCA.SubscriberPolicy_v1").version(VERSION_100).build(); filteredList = filter.filter(policyList); @@ -202,7 +202,7 @@ public class ToscaPolicyFilterTest { filter = ToscaPolicyFilter.builder().versionPrefix("1.").build(); filteredList = filter.filter(policyList); - assertEquals(17, filteredList.size()); + assertEquals(14, filteredList.size()); filter = ToscaPolicyFilter.builder().versionPrefix("100.").build(); filteredList = filter.filter(policyList); @@ -213,7 +213,11 @@ public class ToscaPolicyFilterTest { public void testFilterTypeVersion() { ToscaPolicyFilter filter = ToscaPolicyFilter.builder().type("onap.policies.controlloop.Operational").build(); List filteredList = filter.filter(policyList); - assertEquals(4, filteredList.size()); + assertEquals(1, filteredList.size()); + + filter = ToscaPolicyFilter.builder().type("onap.policies.controlloop.operational.common.Drools").build(); + filteredList = filter.filter(policyList); + assertEquals(3, filteredList.size()); filter = ToscaPolicyFilter.builder().type("onap.policies.monitoring.cdap.tca.hi.lo.app").build(); filteredList = filter.filter(policyList); @@ -225,7 +229,7 @@ public class ToscaPolicyFilterTest { filter = ToscaPolicyFilter.builder().typeVersion(VERSION_000).build(); filteredList = filter.filter(policyList); - assertEquals(17, filteredList.size()); + assertEquals(14, filteredList.size()); filter = ToscaPolicyFilter.builder().type("onap.policies.optimization.HpaPolicy").typeVersion(VERSION_000) .build(); @@ -235,6 +239,6 @@ public class ToscaPolicyFilterTest { filter = ToscaPolicyFilter.builder().type("onap.policies.controlloop.Operational").typeVersion(VERSION_000) .build(); filteredList = filter.filter(policyList); - assertEquals(4, filteredList.size()); + assertEquals(1, filteredList.size()); } } -- 2.16.6