From 3f563fe552e35b3bc3d95c47a3cabdfe7645ad07 Mon Sep 17 00:00:00 2001 From: jhh Date: Thu, 5 Mar 2020 22:32:58 -0600 Subject: policy routing and reorg into policy-domains - Native Drools Controller Policy support. - Move domain policies into the policy-domains project. - Route legacy/compliant operational policies to one or all controller supporting the policy's policy type. - Enhancements to scripts to invoke commands external to the container. Issue-ID: POLICY-2388 Signed-off-by: jhh Change-Id: Id41f04d10a28d2ea86bdd41334e499c28d0438ae Signed-off-by: jhh --- ...icies.controlloop.Operational-1.0.0.schema.json | 100 +++++++ ...oop.operational.common.Drools-1.0.0.schema.json | 330 +++++++++++++++++++++ ...licies.native.drools.Artifact-1.0.0.schema.json | 141 +++++++++ ...cies.native.drools.Controller-1.0.0.schema.json | 274 +++++++++++++++++ 4 files changed, 845 insertions(+) create mode 100644 policy-domains/src/main/resources/schemas/onap.policies.controlloop.Operational-1.0.0.schema.json create mode 100644 policy-domains/src/main/resources/schemas/onap.policies.controlloop.operational.common.Drools-1.0.0.schema.json create mode 100644 policy-domains/src/main/resources/schemas/onap.policies.native.drools.Artifact-1.0.0.schema.json create mode 100644 policy-domains/src/main/resources/schemas/onap.policies.native.drools.Controller-1.0.0.schema.json (limited to 'policy-domains/src/main/resources/schemas') diff --git a/policy-domains/src/main/resources/schemas/onap.policies.controlloop.Operational-1.0.0.schema.json b/policy-domains/src/main/resources/schemas/onap.policies.controlloop.Operational-1.0.0.schema.json new file mode 100644 index 00000000..820bdd70 --- /dev/null +++ b/policy-domains/src/main/resources/schemas/onap.policies.controlloop.Operational-1.0.0.schema.json @@ -0,0 +1,100 @@ +{ + "definitions": {}, + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "http://www.onap.org/policy/models/schemas/onap.policies.controlloop.Operational.schema.json", + "type": "object", + "title": "Root Schema for legacy onap.policies.controlloop.Operational policy type domain policies", + "required": [ + "type", + "type_version", + "name", + "version", + "properties" + ], + "properties": { + "type": { + "$id": "#/properties/type", + "type": "string", + "title": "Policy Type", + "default": "onap.policies.controlloop.Operational", + "examples": [ + "onap.policies.controlloop.Operational" + ], + "pattern": "^(.+)$" + }, + "type_version": { + "$id": "#/properties/type_version", + "type": "string", + "title": "Policy Type Version", + "examples": [ + "1.0.0" + ], + "pattern": "^(.+)$" + }, + "version": { + "$id": "#/properties/version", + "type": "string", + "title": "Version", + "examples": [ + "1.0.0" + ], + "pattern": "^(.+)$" + }, + "name": { + "$id": "#/properties/name", + "type": "string", + "title": "Name", + "examples": [ + "example" + ], + "pattern": "^(.+)$" + }, + "metadata": { + "$id": "#/properties/metadata", + "type": "object", + "title": "Metadata", + "required": [ + "policy-id" + ], + "properties": { + "policy-id": { + "$id": "#/properties/metadata/properties/policy-id", + "type": "string", + "title": "Policy Name", + "examples": [ + "example" + ], + "pattern": "^(.+)$" + } + } + }, + "properties": { + "$id": "#/properties/properties", + "type": "object", + "title": "Properties", + "required": [ + "content" + ], + "properties": { + "content": { + "$id": "#/properties/properties/properties/content", + "type": "string", + "title": "Legacy policy in yaml format", + "examples": [ + "controlLoop%3A%0A%20%20version%3A%202.0.0%0A%20%20controlLoopName%3A%20ControlLoop-vCPEv2-48f0c2c3-a172-4192-9ae3-052274181b6e%0A%20%20trigger_policy%3A%20unique-policy-id-1-restart%0A%20%20timeout%3A%203600%0A%20%20abatement%3A%20true%0A%20%0Apolicies%3A%0A%20%20-%20id%3A%20unique-policy-id-1-restart%0A%20%20%20%20name%3A%20Restart%20the%20VM%0A%20%20%20%20description%3A%0A%20%20%20%20actor%3A%20APPC%0A%20%20%20%20recipe%3A%20Restart%0A%20%20%20%20target%3A%0A%20%20%20%20%20%20type%3A%20VM%0A%20%20%20%20retry%3A%203%0A%20%20%20%20timeout%3A%201200%0A%20%20%20%20success%3A%20final_success%0A%20%20%20%20failure%3A%20final_failure%0A%20%20%20%20failure_timeout%3A%20final_failure_timeout%0A%20%20%20%20failure_retries%3A%20final_failure_retries%0A%20%20%20%20failure_exception%3A%20final_failure_exception%0A%20%20%20%20failure_guard%3A%20final_failure_guard" + ], + "pattern": "^(.+)$" + }, + "controllerName": { + "$id": "#/properties/properties/properties/controllerName", + "type": "string", + "title": "Controller Name", + "examples": [ + "usecases" + ], + "pattern": "^(.+)$" + } + } + } + } +} diff --git a/policy-domains/src/main/resources/schemas/onap.policies.controlloop.operational.common.Drools-1.0.0.schema.json b/policy-domains/src/main/resources/schemas/onap.policies.controlloop.operational.common.Drools-1.0.0.schema.json new file mode 100644 index 00000000..a7dbf8b0 --- /dev/null +++ b/policy-domains/src/main/resources/schemas/onap.policies.controlloop.operational.common.Drools-1.0.0.schema.json @@ -0,0 +1,330 @@ +{ + "definitions": {}, + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "http://www.onap.org/policy/models/schemas/onap.policies.controlloop.operational.common.Drools.schema.json", + "type": "object", + "title": "The Root Schema", + "required": [ + "type", + "type_version", + "version", + "metadata", + "properties" + ], + "properties": { + "type": { + "$id": "#/properties/type", + "type": "string", + "title": "Policy Type", + "default": "onap.policies.controlloop.operational.common.Drools", + "examples": [ + "onap.policies.controlloop.operational.common.Drools" + ], + "pattern": "^(.+)$" + }, + "type_version": { + "$id": "#/properties/type_version", + "type": "string", + "title": "Policy Type Version", + "default": "1.0.0", + "examples": [ + "1.0.0" + ], + "pattern": "^(.+)$" + }, + "name": { + "$id": "#/properties/name", + "type": "string", + "title": "Policy Name", + "default": "", + "examples": [ + "example" + ], + "pattern": "^(.*)$" + }, + "version": { + "$id": "#/properties/version", + "type": "string", + "title": "Policy Version", + "default": "1.0.0", + "examples": [ + "1.0.0" + ], + "pattern": "^(.+)$" + }, + "metadata": { + "$id": "#/properties/metadata", + "type": "object", + "title": "Metadata", + "required": [ + "policy-id" + ], + "properties": { + "policy-id": { + "$id": "#/properties/metadata/properties/policy-id", + "type": "string", + "title": "Policy ID", + "examples": [ + "operational.restart" + ], + "pattern": "^(.+)$" + } + } + }, + "properties": { + "$id": "#/properties/properties", + "type": "object", + "title": "Properties", + "required": [ + "id", + "timeout", + "abatement", + "trigger", + "operations" + ], + "properties": { + "id": { + "$id": "#/properties/properties/properties/id", + "type": "string", + "title": "Control Loop Name", + "examples": [ + "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e" + ], + "pattern": "^(.+)$" + }, + "timeout": { + "$id": "#/properties/properties/properties/timeout", + "type": "integer", + "title": "Timeout in seconds", + "minimum": 1, + "default": 30, + "examples": [ + 3600 + ] + }, + "abatement": { + "$id": "#/properties/properties/properties/abatement", + "type": "boolean", + "title": "Abatement", + "default": false, + "examples": [ + true + ] + }, + "trigger": { + "$id": "#/properties/properties/properties/trigger", + "type": "string", + "title": "Trigger Operation", + "examples": [ + "unique-policy-id-1-restart" + ], + "pattern": "^(.+)$" + }, + "operations": { + "$id": "#/properties/properties/properties/operations", + "type": "array", + "title": "Operations", + "items": { + "$id": "#/properties/properties/properties/operations/items", + "type": "object", + "title": "Items", + "uniqueItems": true, + "required": [ + "id", + "operation", + "timeout", + "retries", + "success", + "failure" + ], + "properties": { + "id": { + "$id": "#/properties/properties/properties/operations/items/properties/id", + "type": "string", + "title": "Operation Identifier", + "examples": [ + "unique-policy-id-1-restart" + ], + "pattern": "^(.+)$" + }, + "description": { + "$id": "#/properties/properties/properties/operations/items/properties/description", + "type": "string", + "title": "Description", + "examples": [ + "Restart the VM" + ], + "pattern": "^(.+)$" + }, + "operation": { + "$id": "#/properties/properties/properties/operations/items/properties/operation", + "type": "object", + "title": "Operation", + "required": [ + "actor", + "operation", + "target" + ], + "properties": { + "actor": { + "$id": "#/properties/properties/properties/operations/items/properties/operation/properties/actor", + "type": "string", + "title": "Actor", + "examples": [ + "APPC" + ], + "pattern": "^(.+)$" + }, + "operation": { + "$id": "#/properties/properties/properties/operations/items/properties/operation/properties/operation", + "type": "string", + "title": "Operation Name", + "examples": [ + "Restart" + ], + "pattern": "^(.+)$" + }, + "target": { + "$id": "#/properties/properties/properties/operations/items/properties/operation/properties/target", + "type": "object", + "title": "Target", + "required": [ + "targetType" + ], + "properties": { + "targetType": { + "$id": "#/properties/properties/properties/operations/items/properties/operation/properties/target/properties/targetType", + "type": "string", + "title": "Target Type", + "examples": [ + "VNF" + ], + "pattern": "^(.+)$" + }, + "entityIds": { + "$id": "#/properties/properties/properties/operations/items/properties/operation/properties/target/properties/entityIds", + "type": "object", + "title": "Arbitrary Resource Identities", + "examples": [ + "Eace933104d443b496b8.nodes.heat.vpg" + ], + "additionalProperties": { + "type": "string", + "pattern": "^(.+)$" + } + } + } + }, + "payload": { + "$id": "#/properties/properties/properties/operations/items/properties/operation/properties/payload", + "type": "object", + "title": "Payload", + "additionalProperties": { + "type": "string", + "pattern": "^(.+)$" + } + } + } + }, + "timeout": { + "$id": "#/properties/properties/properties/operations/items/properties/timeout", + "type": "integer", + "title": "Operation Timeout in seconds", + "default": 10, + "minimum": 1, + "examples": [ + 1200 + ] + }, + "retries": { + "$id": "#/properties/properties/properties/operations/items/properties/retries", + "type": "integer", + "title": "Number of Retries", + "default": 0, + "examples": [ + 3 + ] + }, + "success": { + "$id": "#/properties/properties/properties/operations/items/properties/success", + "type": "string", + "title": "Success Treatment", + "default": "final_success", + "examples": [ + "final_success", + "unique-policy-id-2" + ], + "pattern": "^(.+)$" + }, + "failure": { + "$id": "#/properties/properties/properties/operations/items/properties/failure", + "type": "string", + "title": "Failure Treatment", + "default": "final_failure", + "examples": [ + "final_failure", + "unique-policy-id-2" + ], + "pattern": "^(.+)$" + }, + "failure_timeout": { + "$id": "#/properties/properties/properties/operations/items/properties/failure_timeout", + "type": "string", + "title": "Failure Timeout Treatment", + "default": "final_failure_timeout", + "examples": [ + "final_failure_timeout", + "unique-policy-id-2" + ], + "pattern": "^(.+)$" + }, + "failure_retries": { + "$id": "#/properties/properties/properties/operations/items/properties/failure_retries", + "type": "string", + "title": "Failure Retry Treatment", + "default": "final_failure_retries", + "examples": [ + "final_failure_retries", + "unique-policy-id-2" + ], + "pattern": "^(.+)$" + }, + "failure_exception": { + "$id": "#/properties/properties/properties/operations/items/properties/failure_exception", + "type": "string", + "title": "Failure Exception Treatment", + "default": "", + "examples": [ + "final_failure_exception", + "unique-policy-id-2" + ], + "pattern": "^(.+)$" + }, + "failure_guard": { + "$id": "#/properties/properties/properties/operations/items/properties/failure_guard", + "type": "string", + "title": "Failure Guard Treatment", + "default": "final_failure_guard", + "examples": [ + "final_failure_guard", + "unique-policy-id-2" + ], + "pattern": "^(.+)$" + } + } + } + }, + "controllerName": { + "$id": "#/properties/properties/properties/controllerName", + "type": "string", + "title": "Controller Name", + "default": "", + "examples": [ + "usecases" + ], + "pattern": "^(.+)$" + } + } + } + } +} \ No newline at end of file diff --git a/policy-domains/src/main/resources/schemas/onap.policies.native.drools.Artifact-1.0.0.schema.json b/policy-domains/src/main/resources/schemas/onap.policies.native.drools.Artifact-1.0.0.schema.json new file mode 100644 index 00000000..add06c07 --- /dev/null +++ b/policy-domains/src/main/resources/schemas/onap.policies.native.drools.Artifact-1.0.0.schema.json @@ -0,0 +1,141 @@ +{ + "definitions": {}, + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "http://www.onap.org/policy/models/schemas/onap.policies.native.drools.Artifact.schema.json", + "type": "object", + "title": "Domain onap.policies.native.drools.Artifact Policy root schema", + "required": [ + "type", + "type_version", + "version", + "metadata", + "properties" + ], + "properties": { + "type": { + "$id": "#/properties/type", + "type": "string", + "title": "Policy Type", + "default": "onap.policies.native.drools.Artifact", + "examples": [ + "onap.policies.native.drools.Artifact" + ], + "pattern": "^(.+)$" + }, + "type_version": { + "$id": "#/properties/type_version", + "type": "string", + "title": "Policy Type Version", + "examples": [ + "1.0.0" + ], + "pattern": "^(.+)$" + }, + "version": { + "$id": "#/properties/version", + "type": "string", + "title": "Version", + "examples": [ + "1.0.0" + ], + "pattern": "^(.+)$" + }, + "name": { + "$id": "#/properties/name", + "type": "string", + "title": "Name", + "examples": [ + "example" + ], + "pattern": "^(.+)$" + }, + "metadata": { + "$id": "#/properties/metadata", + "type": "object", + "title": "Metadata", + "required": [ + "policy-id" + ], + "properties": { + "policy-id": { + "$id": "#/properties/metadata/properties/policy-id", + "type": "string", + "title": "Policy Name", + "examples": [ + "example" + ], + "pattern": "^(.+)$" + } + } + }, + "properties": { + "$id": "#/properties/properties", + "type": "object", + "title": "Properties", + "required": [ + "rulesArtifact", + "controller" + ], + "properties": { + "rulesArtifact": { + "$id": "#/properties/properties/properties/rulesArtifact", + "type": "object", + "title": "Rules Artifact", + "required": [ + "groupId", + "artifactId", + "version" + ], + "properties": { + "groupId": { + "$id": "#/properties/properties/properties/rulesArtifact/properties/groupId", + "type": "string", + "title": "Group Id", + "examples": [ + "org.onap.policy.controlloop" + ], + "pattern": "^(.+)$" + }, + "artifactId": { + "$id": "#/properties/properties/properties/rulesArtifact/properties/artifactId", + "type": "string", + "title": "Artifact ID", + "examples": [ + "example" + ], + "pattern": "^(.+)$" + }, + "version": { + "$id": "#/properties/properties/properties/rulesArtifact/properties/version", + "type": "string", + "title": "Version", + "examples": [ + "1.0.0" + ], + "pattern": "^(.+)$" + } + } + }, + "controller": { + "$id": "#/properties/properties/properties/controller", + "type": "object", + "title": "Controller", + "required": [ + "name" + ], + "properties": { + "name": { + "$id": "#/properties/properties/properties/controller/properties/name", + "type": "string", + "title": "Name", + "examples": [ + "example" + ], + "pattern": "^(.+)$" + } + } + } + } + } + } +} diff --git a/policy-domains/src/main/resources/schemas/onap.policies.native.drools.Controller-1.0.0.schema.json b/policy-domains/src/main/resources/schemas/onap.policies.native.drools.Controller-1.0.0.schema.json new file mode 100644 index 00000000..41fbf4e9 --- /dev/null +++ b/policy-domains/src/main/resources/schemas/onap.policies.native.drools.Controller-1.0.0.schema.json @@ -0,0 +1,274 @@ +{ + "definitions": {}, + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "http://www.onap.org/policy/models/schemas/onap.policies.native.drools.Controller.schema.json", + "type": "object", + "title": "Domain onap.policies.native.drools.Controller Policy root schema", + "required": [ + "type", + "type_version", + "version", + "metadata", + "properties" + ], + "properties": { + "type": { + "$id": "#/properties/type", + "type": "string", + "title": "Policy Type", + "default": "onap.policies.native.drools.Controller", + "examples": [ + "onap.policies.native.drools.Controller" + ], + "pattern": "^(.+)$" + }, + "type_version": { + "$id": "#/properties/type_version", + "type": "string", + "title": "Policy Type Version", + "examples": [ + "1.0.0" + ], + "pattern": "^(.+)$" + }, + "version": { + "$id": "#/properties/version", + "type": "string", + "title": "Version", + "examples": [ + "1.0.0" + ], + "pattern": "^(.+)$" + }, + "name": { + "$id": "#/properties/name", + "type": "string", + "title": "Name", + "examples": [ + "example" + ], + "pattern": "^(.+)$" + }, + "metadata": { + "$id": "#/properties/metadata", + "type": "object", + "title": "Metadata", + "required": [ + "policy-id" + ], + "properties": { + "policy-id": { + "$id": "#/properties/metadata/properties/policy-id", + "type": "string", + "title": "The policy-id Schema", + "examples": [ + "example" + ], + "pattern": "^(.+)$" + } + } + }, + "properties": { + "$id": "#/properties/properties", + "type": "object", + "title": "Policy Domain Properties", + "required": [ + "controllerName" + ], + "properties": { + "controllerName": { + "$id": "#/properties/properties/properties/controllerName", + "type": "string", + "title": "Controller Name", + "examples": [ + "example" + ], + "pattern": "^(.+)$" + }, + "sourceTopics": { + "$id": "#/properties/properties/properties/sourceTopics", + "type": "array", + "title": "Source Topics", + "items": { + "$id": "#/properties/properties/properties/sourceTopics/items", + "type": "object", + "title": "Topic Sources", + "required": [ + "topicName", + "events" + ], + "properties": { + "topicName": { + "$id": "#/properties/properties/properties/sourceTopics/items/properties/topicName", + "type": "string", + "title": "Topic Name", + "examples": [ + "DCAE_TOPIC" + ], + "pattern": "^(.+)$" + }, + "events": { + "$id": "#/properties/properties/properties/sourceTopics/items/properties/events", + "type": "array", + "title": "Source Events", + "items": { + "$id": "#/properties/properties/properties/sourceTopics/items/properties/events/items", + "type": "object", + "title": "Event Information", + "required": [ + "eventClass" + ], + "properties": { + "eventClass": { + "$id": "#/properties/properties/properties/sourceTopics/items/properties/events/items/properties/eventClass", + "type": "string", + "title": "Event Class", + "examples": [ + "org.onap.policy.controlloop.CanonicalOnset" + ], + "pattern": "^(.+)$" + }, + "eventFilter": { + "$id": "#/properties/properties/properties/sourceTopics/items/properties/events/items/properties/eventFilter", + "type": "string", + "title": "Event Filter", + "examples": [ + "[?($.closedLoopEventStatus == 'ONSET')]" + ], + "pattern": "^(.+)$" + }, + "customSerialization": { + "$id": "#/properties/properties/properties/sourceTopics/items/properties/events/items/properties/customSerialization", + "type": "object", + "title": "Custom Serialization", + "required": [ + "customSerializerClass", + "jsonParser" + ], + "properties": { + "customSerializerClass": { + "$id": "#/properties/properties/properties/sourceTopics/items/properties/events/items/properties/customSerialization/properties/customSerializerClass", + "type": "string", + "title": "Custom Serializer Class for customized JSON parsing", + "examples": [ + "org.onap.policy.controlloop.util.Serialization" + ], + "pattern": "^(.+)$" + }, + "jsonParser": { + "$id": "#/properties/properties/properties/sourceTopics/items/properties/events/items/properties/customSerialization/properties/jsonParser", + "type": "string", + "title": "JSON Parser Static Field (currently only GSON is supported)", + "examples": [ + "gson" + ], + "pattern": "^(.+)$" + } + } + } + } + } + } + } + } + }, + "sinkTopics": { + "$id": "#/properties/properties/properties/sinkTopics", + "type": "array", + "title": "Sink Topics", + "items": { + "$id": "#/properties/properties/properties/sinkTopics/items", + "type": "object", + "title": "Sink Topic Data", + "required": [ + "topicName", + "events" + ], + "properties": { + "topicName": { + "$id": "#/properties/properties/properties/sinkTopics/items/properties/topicName", + "type": "string", + "title": "Topic Name", + "default": "", + "examples": [ + "APPC-CL" + ], + "pattern": "^(.+)$" + }, + "events": { + "$id": "#/properties/properties/properties/sinkTopics/items/properties/events", + "type": "array", + "title": "Source Events", + "items": { + "$id": "#/properties/properties/properties/sinkTopics/items/properties/events/items", + "type": "object", + "title": "Event Information", + "required": [ + "eventClass" + ], + "properties": { + "eventClass": { + "$id": "#/properties/properties/properties/sinkTopics/items/properties/events/items/properties/eventClass", + "type": "string", + "title": "Event Class", + "examples": [ + "org.onap.policy.appc.Response" + ], + "pattern": "^(.+)$" + }, + "eventFilter": { + "$id": "#/properties/properties/properties/sinkTopics/items/properties/events/items/properties/eventFilter", + "type": "string", + "title": "Event Filter", + "examples": [ + "[?($.CommonHeader && $.Status)]" + ], + "pattern": "^(.+)$" + }, + "customSerialization": { + "$id": "#/properties/properties/properties/sinkTopics/items/properties/events/items/properties/customSerialization", + "type": "object", + "title": "Custom Serialization", + "required": [ + "customSerializerClass", + "jsonParser" + ], + "properties": { + "customSerializerClass": { + "$id": "#/properties/properties/properties/sinkTopics/items/properties/events/items/properties/customSerialization/properties/customSerializerClass", + "type": "string", + "title": "Custom Serializer Class for customized JSON parsing", + "examples": [ + "org.onap.policy.controlloop.util.Serialization" + ], + "pattern": "^(.+)$" + }, + "jsonParser": { + "$id": "#/properties/properties/properties/sinkTopics/items/properties/events/items/properties/customSerialization/properties/jsonParser", + "type": "string", + "title": "JSON Parser Static Field (currently only GSON is supported)", + "examples": [ + "gson" + ], + "pattern": "^(.+)$" + } + } + } + } + } + } + } + } + }, + "customConfig": { + "$id": "#/properties/properties/properties/customConfig", + "type": "object", + "title": "other Configuration", + "additionalProperties": { + "type": "string" + } + } + } + } + } +} -- cgit 1.2.3-korg